飞飞女神的CV课之打好基础(2)

关于感知机,一个好消息,一个坏消息。
想先听哪一个?
按照我的惯例,先说好消息!那就是——即使对于复杂的函数,感知机也隐含着能够表示它的可能性。但是确定合适的、能符合预期的输入输出的权重,还是由人工进行,这也就四那个坏消息。
呆胶布~兵来将挡水来土掩,更何况CNN已经这么久了–神经网络的出现就是为了解决刚刚的那个坏消息而现世的!
神经网络与上一章介绍的感知机有很多共同点,就让我们从两者的差异入手吧!
在这里插入图片描述
上图就是神经网络的栗子
实际上拥有权重的只有两层(输入层+隐藏层+输出层-1),所以叫“两层神经网络”
下面,激活函数登场!
在这里插入图片描述在这里插入图片描述
这里的h(x)函数会将输入信号的总和转换为输出信号,激活函数的作用在于决定如何来激活输入信号的总和。细分起来就是这两个式子
在这里插入图片描述
计算加权输入信号和偏置的总和,记为a,然后利用h()函数将a转化为输出y。
在这里插入图片描述在这里插入图片描述
左图是一般神经元;右图是神经元内部明确显示激活函数的计算过程的图。
激活函数是连接感知机和神经网络的桥梁

绘制阶跃函数的图形

import numpy as np
import matplotlib.pylab as plt
def step_function(x):
    return np.array(x>0,dtype=np.int)

x = np.arange(-5.0,5.0,0.1)
y = step_function(x)
plt.plot(x,y)
#plt.ylim(-0.1,1.1)
plt.show()

在这里插入图片描述

绘制sigmoid函数图形

import numpy as np
import matplotlib.pylab as plt
def sigmoid(x):
    return 1 / (1 + np.exp(-x))
x = np.arange(-5.0,5.0,0.1)
y = sigmoid(x)
plt.plot(x,y)
#plt.ylim(-0.1,1.1) #指定y轴的范围
plt.show()

在这里插入图片描述

  • 发现了什么?
    sigmoid函数要平滑许多,而我们恰恰是利用它的平滑性做文章,不同于0/1的二元信号(“竹筒敲石”),她是平滑的,是流动的(“水车”)。
  • 如果要把这两者联系起来?
    不管输入多小或者多大,输出都是介于0-1之间;而且输入较小(不重要信息)时输出接近零(较小值),输入较大(重要信息)时输出接近一(较大值)
  • 激活函数必须使用非线性函数?
    是的!因为要发挥叠加层的优势。
  • 为什么非线性有优势而线性没有呢?
    因为线性叠加再多次也是线性的(是没有隐藏层的神经网络)举个栗子,h(x)=cx;那么y(x)=h(h(h(x)))也不过是y(x)=c^3x罢了

ReLU函数

sigmoid不算新潮,很早前就在用;现在主要使用ReLU(Rectified Linear Unit)函数
在这里插入图片描述
在输入大于零的时候输出该值本身;在输入小于等于零的时候,输出0。

猜你喜欢

转载自blog.csdn.net/weixin_43905108/article/details/106693334