机器学习(5)FP,BP神经网络
一般神经网络教程都会用大脑神经网络作类比,但实际上两个根本是不一样的东西,乱用类比学习是一件很危险的事情,知道神经网络是个数学模型就可以了。
一个简单的神经网络如下图所示,每一个圆圈表示一个神经元,每个神经元接收上一层神经元的输出作为其输入,同时其输出信号到下一层,其中每一层的第一个神经元称为bias unit,它是额外加入的其值为1,通常用+1表示,下图用虚线画出。
X为输入层,theta为权重,a为隐藏层。
向前传播(Forward Propagration,FP):
后一层的神经元的值根据前一层神经元的值的改变而改变,以上图为例,第二层的神经元的更新方式为
g(z)为sidmoid函数
用矩阵表示上面的式子:
第一层的值,计算第二层的值;由第二层的值,计算第三层的值,得到预测的输出,计算的方式一层一层往前走的,这也是前向传播的名称由来。
如果把隐藏层去掉,那么神经网络就是一个Logistic 回归:
第一个例子,神经网络处理'并','或','非':
下图要把交叉和圆圈分类,看神经网络怎么处理非线性问题
令四个坐标(0,0),(1,0),(0,1),(1,1),其中交叉是(0,0),(1,1)
1,实现且操作:
2,实现或:
3,非:
4,(非X1)且(非X2):
把上面组合起来:
AND操作(用红色表示)、NAND操作(用青色表示)和OR操作(用橙色表示),从真值表可以看出,该神经网络成功地将(0, 0)(1,1)分为一类,(1,0)(0,1)分为一类,很好解决了线性不可分的问题。
没有正则项的神经网络costFunction公式:
(和逻辑回归差不多)
正则化的costFunction:
BP神经网络:
BP算法实际上用来解决梯度问题。定义一个误差向量,
a为输出层的输出值,y为真实值。a(3)是与a(2),theta2偏导有关,而a(2)又与上一层偏导有关,偏导数可以由当前层神经元向量a(l)与下一层的误差向量
δ(l+1)相乘得到。当前层的误差向量
δ(l)可以由下一层的误差向量
δ(l+1)与权重矩阵
Δl的乘积得到。所以可以从后往前逐层计算误差向量,这就是反向传播。
神经网络demo:
我的公众号: