11.4 Sigmoid函数背后的设计和实现密码
前面使用感知器网络实现了多个与非门的半加器,但在图片识别的时候,将每张图片的像素转换成一个矩阵,使用感知器网络识别图片,感知器计算的结果要么是0,要么是1,无法进行收敛,这对于感知器是个大问题。因此,需使用Sigmoid、Tanh、ReLU等激活函数,与感知器传统逻辑门截然不同的新方法,将自动调整神经网络的权重和偏差。这里强调两个要点:第一,每次进行一下微调;第二,每次的微调对最终的结果有影响。而感知器无法适应这种需要,感知器的步伐太大了,要么是0要么是1,因为图片的像素有很多,输入数据有几十万、几百万,如果微调不能持续地改变结果,就会导致误差很大。
如图11-8所示,权重或偏爱因子微小的改动会导致结果相应的改变或者改善。
图11-8 每次的微调
那怎么做到让权重或者偏爱因子进行微调,结果也会微调,这时候激活函数就派上用场了。
如图11-9所示,我们的目标是权重或偏爱因子每次进行微调的时候,结果也会微调,一次步伐不要太大,Sigmoid激活函数、Tanh函数、ReLU函数就可以解决这个问题。这里Sigmoid激活函数的自变量是z,z是权重和神经元值乘积的累加,然后再加上偏爱因子。Sigmoid激活函数的结果不同于感知器的计算结果,感知器的步伐太大,每次进行一个判断,值大于0则为1;值小于0则为0,步伐太大。现在如何将步伐变的小一点?
Sigmoid激活函数是,z的值可能大于0,也可能小于0,e-z函数的取值范围为(0,+∞)。
如果z为负值,随着z本身越来越小,e-z会越来越大,1+e-z越来越大,在中分母无限变大,而分子是1,Sigmoid激活函数趋近于0。
图11-9 Sigmoid激活函数
如果z为正值,随着z越来越大,e-z会越来越小,e-z趋近于0,1+e-z趋近于1,Sigmoid激活函数趋近于1。
因此,Sigmoid激活函数的值的取值范围为(0,1),z的取值范围为(-∞,+∞)。z值和Sigmoid激活函数的结果值是一一对应的,每一次z的微调,导致激活函数值在0和1之间有微妙的变化,这是理解神经网络的重点。
在感知器的计算中,要么是0要么是1;而在Sigmoid函数中,z是神经元计算中的输入,用神经元的值乘以权重累加,然后加上偏爱因子。Sigmoid函数虽然不是万能的,在某些场合可能不适用,但这个趋势引导下的激活函数是未来的一个方向,其他激活函数的思路都是这个思路。这样就克服了感知器的不足,只要微调一下权重或者偏爱因子,其结果也是微调的。
如图11-10所示是Sigmoid函数图,y的取值范围为(0,1)。
图11-10 Sigmoid函数(一)
如图11-11所示,将x轴上移到y轴0.5的位置,在图中画两根0、1的水平线,x小于–4时,y值越来越趋近于0;x大于4时,y值越来越趋近于1。
如图11-12所示,从简单的角度,激活函数是一个阶梯函数,0是一个转折点,当x大于或等于0时,y值直接变成了1。这将Sigmoid函数模拟成了感知器的方式。这个模拟是有意义的,对一些条件是合适的,其他的激活函数在改进Sigmoid函数时,会发现这很有用。
图11-11 Sigmoid函数(二)
图11-12 阶梯函数
从单调性的角度讲,Sigmoid函数是单调递增的,在单调函数中不可能一个结果对应2个输入值。
使用Sigmoid函数,使整个神经网络具有了微调的能力,每次循环都微调一下,越来越接近真实的值,例如识别0~9的数字。根据Sigmoid函数的单调性,函数值会使用一定的范围,其在一定的范围内有效,在范围外无效。Sigmoid函数是对权重和偏爱因子进行微调,将微调的结果作用于最后的输出值,Sigmoid函数不是唯一的方式,而且Sigmoid函数有局限性。
如图11-13所示,我们构建了神经网络,神经网络有输入层、输出层,既不是输入层,又不是输出层的就是隐藏层,深度网络学习的精髓就在隐藏层上面,基于隐藏层有很多架构,图11-7展示了25种神经网络架构,每个神经网络架构都有重要的实用价值,将应用于金融领域、医疗等领域。
图11-13 神经网络