机器学习算法如此有意思,但我们该如何为神经网络量身设计一种学习算法呢?
现在假设有一个由感知机构成的网络,我们想让这个网络学习如何取解决一些问题。举例来说,对于一个以手写数字的扫描图像的原始像素数据作为输入的网络,我们想要这个网络取学习权值(weight)和偏移(biase),以便最终正确地分类这些数字。我们期望的结果是,这些在权值上的小改变,将会成为网络的输出结果带来相应的改变,且这种改变也必须是轻微的。满足这样的性质才能使学习变得可能。
如果满足在权值(或偏移)上的小改变只会引起输出上的小幅变化这一性质,那么以此性质为基础,我们就可以改变权值和偏移来使得网络的表现越来越接近我们的预期。例如,假设原始的网络会将一张写着9的手写数字图片错误分类为8,我们可以尝试找到一个正确轻微改变权值和偏移的方法,来使得我们网络的输出更接近于正确答案,将该图片分类为9.重复这个过程,不断地修改权值和偏移并且产生越来越好的结果。这样我们的网路就开始学习起来了。
但问题在于,事实上,轻微改变网络中任何一个感知机的权值或偏移,有时甚至会导致感知机的输出完全翻转–比如说从0变为1.这个翻转行为可能以某种非常复杂的方式彻底改变网络中其余部分的行为。所以即使现在9被正确分类了,但网络在处理所有其他图片时的行为可能因为一些难以控制的方式被彻底改变了。这导致我们逐步改变权值和偏移来使网络行为更加接近预期的学习方法变得很难实施。
由此我们引入一种被称为S型(simoid)神经元的新型人工神经元来解决这个问题。sigmoid神经元与感知机有些相似,但做了一些修改使得我们在轻微改变其权值和偏移时只会引起小幅度的输出变化。
和感知机一样, sigmoid神经元同样有输入x1,x2...,但不同的是,这些输入值不是只能取0或者1,而是可以取0到1间的任意浮点值。所以举例来说0.638对于sigmod神经元就是一个合法输入。同样,sigmod神经元对每个输入也有相应的权值,w1,w2...,以及一个整体的偏移 b。不过sigmod神经元输出不再是0或1,而是$\sigma(w*x+b)$,其中的$\sigma$被称为sigmoid函数(sigmoid function),该函数定义如下:
$\sigma(z)=\frac1{1+e^{-z}}$
所以,sigmoid神经元的输出是关于输入x1,x2...,权值w1,w2...和偏移b的函数:
$\frac1{1+exp(-\sum_j{w_j}{x_j}-b)}$
我们假设$z=wx+b$是一个很大的正数,这时$e^{-z}\approx0$且$\sigma(z)\approx1$。也就是说,当$z=wx+b$是一个很大的正数时,sigmoid神经元的输出接近于1,与感知机类似。另一方面,当$z=wx+b$是一个绝对值很大的负数时,$e^{-z}\rightarrow\infty$,且$\sigma(z)\approx0$。所以当z=wx+b是一个绝对值很大的负数时,sigmoid神经元的行为与感知机同样很接近。只有w*x+b是一个不太大的数时,其结果与感知机模型有较大的偏差。
$\sigma$有时也被称为logistic function,对应这个新型神经元被称为logistic neurons
2018-04-15 04:56