六、更多的神经网络
人的大脑神经元每秒可以运算1000次左右,与电脑元器件每秒10的10次方的速度量级相比运算速度显得慢得多。但是人脑中存在大约几百亿的神经元,每个神经元又与上万个神经元相连。正是这种复杂的组合方式,给与了我们强大的分辨问题的能力,使得我们一眼就能分辨出哪个是苹果,哪个是香蕉。
神经网络就是通过模拟人脑这样一种巨量并行的知识存储、处理和加工方式来解决实际问题。
一、感知机
1.感知机又叫神经元,神经元工作方式为:假设某神经元有n个输入,结合n+1个权重做向量的内积组合起来,经过一个threshold得到输出结果。
整体过程可以形象化为将原数据分类,形成判决平面。
式子中和保证判决平面不总是经过原点,使运算时误差能收敛。在感知机分类时,只要权重设置的好,就能实现逻辑功能。
2.相对于已知特定输出的任务,根据初始权重运算,结果肯定会有误差。如果权重值取得好,误差就小。所以我们需要一种学习的方法,让运算结果沿着误差梯度往下走,最终走到误差最小的点。
已知期望输出时,误差取:
训练集用D表示。其中t为target,表示期望输出,o表示实际输出。属于Batch Learning,是一种批处理的样本学习方法,将误差累加起来,用整体误差来调整权重。
知道误差后对求w偏导:
其中表示学习率,用来控制修改幅度。通常取偏小的学习率,稳健进程。-号代表:如果对w求偏导是正数,说明随着w 增加,误差增加。所以为减少误差,我要减小这个权重w。负数则相反。
运算过程中假设感知机节点的门限是线性的。
求导过程如下:
得到权重的修正幅度:
然后经过反复迭代得到最优权重。
3.下图为利用感知机模拟与非门的例子。
如上图,权重慢慢收敛到收敛到(0.8,-0.2,0.1)。
神经网络通过优化权重的方式解决分类问题。
值得注意的是,在公式推导时我们已经假设感知机是线性的,但上例中的感知机有threshold,看上去不一致,但现实运算中发现一样适用。
二、多层感知机(Multilayer Perceptron)
单个感知机有明显的缺陷,只能解决较为简单的问题,对于线性不可分问题,处理的效果并不好。为了解决线性不可分问题,我们引入多层感知机的概念。
多层感知机其实就是我们常说的人工神经网络。
在输入层、输出层之间设置了隐含层。
解决异或问题。
异或问题是典型的线性不可分问题。异或规定,输入项两类不同输出1,相同输出0。
看上去需要一个外形是椭圆的分类器才可以将0,1分开,线性不可分。
1.手动解决:
我们知道异或的数学性质,可以拆分为:
或门:(p,q)为(0,0)输出0,其它都输出1,我们可以在象限中划一个分界面。
与非门:(p,q)为(1,1)输出0,其它都输出1,我们再划一条分界面。
最后通过一个与门结合在一起,两个门都说是1时,输出才是1。如图:
2.神经网络的隐含层
上述的或门(绿)和与非门(紫)就相当于神经网络的隐含层。
我们发现把原数据映射到隐含层,问题就变成线性可分的。
这就是神经网络解决线性不可分问题的基本思想:把原始问题映射成简单问题,再去解决。
三、激活函数
我们刚才说的“或门”,“与非门”和“与门”就是神经网络中的每个神经元的激活函数。
在实际运算时,我们用Sigmoid函数
来表示节点的threshold。
Sigmoid函数长这样:
Sigmoid函数除了函数值有明确的上下限(0~1)这个优点之外还有一个很好的属性:导数可以直接用自己表示。
四、BP算法
BP算法的基本思想,就是把最外层(输出层)的误差算好,权重算好,再把这些误差逆传播回来。一层一层的修正权重。
1.输出神经元的权重计算
所以对于输出层权重增量为:
和感知机的区别就是多了Sigmoid的导数。输出神经元的权重计算还是相对简单的。
2.隐含层的权重计算
神经网络是一种有监督学习,输出层神经元的误差我们可以得到。但对于隐含层,我们不知道每个节点期望的输出值,隐含层误差怎么算呢。
我们引入一个新的权重参数δk,表示后一层的误差反馈给前一层的比例。如图:
举个例子,老板让张三去办事,张三又派手下李四和王五去办。事情办砸了之后,老板归责张三时,张三就把李四和王五的错误按权重加起来,算作自己的错误。
所以隐含层的权重计算:
取
所以隐含层的权重修改量为:
五、BP算法流程
神经网络很容易陷入局部最优,运算时最好多算几次。或者把算法进行改进。
神经网络对问题的表达能力很强。当增加隐含层或增加节点时,神经网络可以逼近任意复杂的函数。
深度学习就是在多层神经网络的基础上运用更好的运算技巧解决类似训练时误差导数快速逼近于零等问题的一种学习算法。
六、更多的神经网络
1.ElmanNetwork
Elman网络会把t-1时刻网络的神经状态记忆下来,而且t时刻网络的输出取决于当前网路输入(蓝,如下图)与t-1时刻网络的内部状态(绿)。使网络有一定的记忆功能。
2.HopfieldNetwork
Hopfield网络是一种全互连式的网络,在获得n个数据点时,网络会将它们记住,并通过网络训练使网络能量处于最低。再新来数据时,网络会收敛到某一个能量最小值,再把原来存在那里的样本集取出来比一比。在一定程度上实现模拟人脑的一种记忆模式。
本来模糊的脸竟又渐渐清晰: