机器学习算法--方向传播算法(BP法)
2016-08-15 20:42
507 查看
误差表达式:
\( \large E(w) = \frac{1}{2} \sum_{d\in D} \sum_{k\in outputs} (t_{kd} - o_{kd}) ^2 \)
其中,\(outputs\)是网络输出单元的集合,\(D\)还是代表所有训练样本空间,\(t_{kd}\)和\(o_{kd}\)是与训练样例d和第k个输出单元相关的预期值与输出值。
每次只处理一个样本实例,然后更新各个权值,通过大量的样本实例逐渐的调整权值。那么对于每一次的训练样例d来说,它的输出误差为:
\( \large E_{d}(w) = \frac{1}{2} \sum_{k\in outputs} (t_{kd} - o_{kd}) ^2 \)
梯度
\( \large \bigtriangleup w_i = -\eta \frac{\partial E_{d} }{\partial w_i } \)
\( \large \bigtriangleup w_i = -\eta \frac{\partial E_{d} }{\partial net } \frac{\partial net }{\partial w_i } \)
\( \large \bigtriangleup w_i = -\eta \frac{\partial E_{d} }{\partial net } x_i \)
情况1:对于输出单元的权值训练法则:
因为\( \large \frac{\partial E_{d} }{\partial net } = \frac{\partial E_{d} }{\partial o} \frac{\partial o }{\partial net } = -(t-o)o(1-o)\)
所以
\( \large \bigtriangleup w_i = -\eta (t-o)o(o-1) x_i \)
\( \large \bigtriangleup w_i = \eta (t-o)o(1-o)x_i \)
情况2:隐藏单元的权值训练法则
隐藏层中的任意结点上的连结线权值都是通过影响以它的输出作为输入的下一层(downstream)的结点而最终影响误差的,所以隐藏层的推导如下:
因为\( \large \frac{\partial E_{d} }{\partial net_i } = \sum_{k\in ds(i)} \frac{\partial E_{d} } {\partial net_k} \frac {\partial net_k} {\partial o_i } \frac{\partial o_i }{\partial net_i } \)
\(= \sum_{k\in ds(i)} \delta_k w_{ik} o_i(1-o_i) = o_i(1-o_i) \sum_{k\in ds(i)} \delta_k w_{ik} \)
所以
\( \large \bigtriangleup w_i = -\eta \frac{\partial E_{d} }{\partial net_i } x_i \)
reference: 点击打开链接
=====================================================================================================================
定义误差:
\( \large net_j = \sum_i w_{ij} O_i\), \( \large net_k = \sum_j w_{jk} O_j\)
\( \large O_i= 1/ ( 1 + e ^ {- net _i} ) = f(net_i)\)
\( \large O_j = 1/ ( 1 + e ^ {- net _j} ) = f(net_j)\)
\( \large O_k = 1/ ( 1 + e ^ {- net _k} ) = f(net_k)\)
\( \large E = \frac {1}{2} \sum_j (y_j - O_j)^2 \) 其中\(y_j\)是理想输出,\(O_j\)是实际输出,
\( \Large \frac{\partial E} { \partial w_{ij} } = \frac{\partial E} { \partial net_j} \frac { \partial net_j} {\partial w_{ij}} = \delta_j O_i , \ \ \ 其中局部梯度( \delta_j= \frac{\partial E} { \partial net_j} )\)
则修正量定义为:
\( \large \bigtriangleup w_{ij}(t) = - \eta \frac{\partial E} { \partial w_{ij} } = -\eta \delta_j O_i \)
当节点j是输出单元时:
\( \Large \delta_j= \frac{\partial E} { \partial net_j} = \frac{\partial E} { \partial O_j} \frac{\partial O_j} { \partial net_j} = -(y_j - O_j) f'(net_j)\)
当节点j不是输出单元时:
\( \Large \delta_j= \frac{\partial E} { \partial net_j} = \sum_k \frac{\partial E} { \partial net_k} \frac{\partial net_k} { \partial O_j} \frac{\partial O_j} { \partial net_j} = \sum_k \delta_k w_{jk} f'(net_j)\)
当采用sigmod函数\(y = f(x) = 1/ ( 1 + e ^ {- x} ) \)时 \( f'(x) = y(1-y) \)
即:\( \large f'(net_j) = O_j(1-O_j)\)
最终修正量为:
\( \large \bigtriangleup w_{ij}(t) = - \eta \delta_j O_i + \alpha \bigtriangleup w_{ij}(t-1) \)
算法步骤:
1)从前向后各层计算各单元 \( O_j\)
\( \large net_j = \sum_i w_{ij} O_i\)
\( \large O_j = 1/ ( 1 + e ^ {- net _j} ) \)
2) 对输出层计算\( \delta_j \)
\( \large \delta_j = (y-O_j)O_j(1- O_j)\)
3)从后向前计算各隐层
\( \large \delta_j = O_j(1- O_j) \sum_k w_{jk} \delta_k\)
4)计算并保存各权值修正量
\( \large \bigtriangleup w_{ij}(t) = \alpha \bigtriangleup w_{ij}(t-1) + \eta \delta_j O_i\)
5)修正权值
\( \large w_{ij}(t+1) = w_{ij}(t) + \bigtriangleup w_{ij}(t) \)
步长系数\(\eta\) 对收敛性影响很大,通常在0.1~3之间
惯性系数\(\alpha\)影响收敛速度,一般现在0.9~1之间,大于1时不收敛,有些情况可以不使用惯性系数(等于0)
reference:《模式识别》 张学工
相关文章推荐
- 简单粗暴理解方向传播算法
- SIFT算法原理与OpenCV源码分析4:方向赋值
- AI大事件 | Geoffrey Hinton决定抛弃反向传播_预期策略梯度算法
- 神经网络反向传播算法公式推导详解
- 调研方向(算法相关)
- Machine Learning6 BP神经网络(后向传播算法)
- Python 实现神经网络逆向传播算法(含详细注释)
- 运动目标跟踪(四)--搜索算法优化搜索方向之Camshift
- 机器学习算法(分类算法)—Rosenblatt感知机
- 回归、分类与聚类:三大方向剖解机器学习算法的优缺点
- 第九章 后向传播算法(分类)
- <基础原理进阶>机器学习算法python实现【1】--分类简谈&KNN算法
- 卷积神经网络(CNN)前向传播算法
- 数理统计与参数估计-七月算法(julyedu.com)4 月机器学习算法班学习笔记
- 凸优化:ADMM(Alternating Direction Method of Multipliers)交替方向乘子算法系列之十一:Numerical Examples
- 路由算法之——ECMP算法的改进方向
- 矩形旋转碰撞,OBB方向包围盒算法实现
- 卷积神经网络(CNN)前向传播算法
- 算法:按顺时针方向遍历矩阵
- UIPanGestureRecognizer上下左右滑动方向判断算法