前言
感知机可以表示部分复杂函数,但是在设定权重的工作,确定能符合预期的输入与输出权重需要由人工进行,而神经网络可以自动从数据中学习到合适的权重参数
1、从感知机到神经网络
神经网络最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层。中间层有时也称为隐藏层。“隐藏”一词的意思是,隐藏层的神经元(和输入层、输出层不同)肉眼看不见。把输入层到输出层依次称为第0层、第1层、第2层。上图中,第0层对应输入层,第1层对应中间层,第2层对应输出层。
1.1复习感知机
感知机抽象后的数据函数如下:
引用新函数改造感知机函数:
输入信号的总和会被函数h(x)转换,转换后的值就是输出y。
1.2激活函数登场
上面感知机变形调整的函数h(x)会将输入信号的总和转换为输出信号,这种函数称为激活函数(activation function)。激活函数的作用在于决定如何来激活输入信号的总和。
感知机数据公式可以改造由两部分构成:
上图神经元的○中明确显示了激活函数的计算过程,即信号的加权总和为节点a,然后节点a被激活函数h()转换成节点y。
2、激活函数
从上面提到的激活函数可以看出激活函数以阈值为界,一旦输入超过阈值,就切换输出。这样的函数称为“阶跃函数”。
2.1sigmoid函数
函数中的exp(-x)表示e-X的意思。 e是纳皮尔常数2.7182 . . .。sigmoid函数看上去有些复杂,但它也仅仅是个函数而已。而函数就是给定某个输入后,会返回某个输出的转换器。比如,向sigmoid函数输入1.0或2.0后,就会有某个值被输出,类似h(1.0) = 0.731 . . .、 h(2.0) = 0.880 。
sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化,图形如下:
2.2阶跃函数
当输入超过0时,输出1,否则输出0。图像信息如下:
2.3sigmoid函数和阶跃函数
如图所示两个函数的不同点有:
1、sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。
2、相对于阶跃函数只能返回0或1, sigmoid函数可以返回0.731 . . .、 0.880 . . .等实数。
两者共同点:
1、两者的结构均是“输入小时,输出接近0(为0);随着输入增大,输出向1靠近(变成1)”。即当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。
2、不管输入信号有多小,或者有多大,输出信号的值都在0到1之间。
3、两者均为非线性函数。sigmoid函数是一条曲线,阶跃函数是一条像阶梯一样的折线。
2.4ReLU函数
神经网络发展的历史上, sigmoid函数很早就开始被使用了,而最近则主要、使用ReLU(Rectifed Linear Unit)函数。ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0。
2.5神经网络激活函数要求
神经网络的激活函数必须使用非线性函数而不能使用线性函数,因为线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络”。比如:线性函数 h(x) = cx 作为激活函数,把y(x) = h(h(h(x)))的运算对应3层神经网络 A。这个运算会进行y(x) = c × c × c × x的乘法运算,但是同样的处理可以由y(x) = ax(注意,a = c3)这一次乘法运算(即没有隐藏层的神经网络)来表示。使用线性函数时,无法发挥多层网络带来的优势。为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。
神经网络计算:
3、3层神经网络计算
上图的3层神经网络:输入层(第0层)有 2个神经元,第1个隐藏层(第1层)有3个神经元,
第2个隐藏层(第2层)有 2个神经元,输出层(第3层)有 2个神经元
3.1符号说明
3.2各层间信号传递的实现
上图增加了表示偏置的神经元“1”。
通过加权信号和偏置的和按如下方式进行计算下一层节点值:
使用矩阵的乘法运算,则可以将第1层的加权和表示成下面
其中, A(1)、 X、 B (1)、 W (1)如下所示:
神经网络向向前运算过程如下:
A1 = np.dot(X, W1) + B1
Z1 = sigmoid(A1)
隐藏层的加权和(加权信号和偏置的总和)用a表示,被激活函数转换后的信号用z表示。
A2 = np.dot(Z1, W2) + B2
Z2 = sigmoid(A2)
A3 = np.dot(Z2, W3) + B3
输出层使用激活函数得出最终结果。输出层所用的激活函数回归问题可以使用恒等函数,二元分类问题可以使用 sigmoid函数,多元分类问题可以使用 softmax函数。
3.3恒等函数
恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。
3.4softmax函数
softmax函数可以计算得出每个结果所占的比例。exp(x)是表示ex的指数函数(e是纳皮尔常数2.7182 . . .)。假设输出层共有n个神经元,计算第k个神经元的输出yk。softmax函数的分子是输入信号ak的指数函数,分母是所有输入信号的指数函数的和。softmax函数的输出通过箭头与所有的输入信号相连,输出层的各个神经元都受到所有输入信号的影响。
softmax函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大,容易造成溢出。
改进后的softmax函数过程如下:
在分子和分母上都乘上C这个任意的常数(因为同时对分母和分子乘以相同的常数,所以计算结果不变)。然后,把这个C移动到指数函数(exp)中,记为log C。最后,把log C替换为另一个符号C' 。为了防止溢出,一般会把C'使用输入信号中的最大值。
softmax特性:
函数的输出是0.0到1.0之间的实数。并且, softmax函数的输出值的总和是1。输出总和为1是softmax函数的一个重要性质。有了这个性质,才可以把softmax函数的输出解释为“概率”。