这篇文章来详细写一下backpropagation算法
在1970年就被提出,1986年的David Rumehart,Geoffrey Hinton,Ronald Williams提出的论文才得到重视,可以解决神经网络中的学习
Backpropagation核心解决的问题:
先来设计几个标记:
上下的3和2表示第三层第2个神经元,4表示第(3-1)=2层第4个神经元
表示第2层的第3个神经元的bias
表示第三层第一个神经元的activation function的值
两步:(1)wa+b (2)sigmoid函数
对于每一层(l),定义一个weight matrix(权重矩阵):
连接l层和l-1层,矩阵中第j行,第k列的元素就是:
对于每一层(l),定义一个bias vector:
同理,对于a:
Vectorizing a function:
例如:f(x)=x^2
把activation function也用向量和矩阵表示:
用矩阵和向量表示简单很多,对于每一层,只需要乘以权重的矩阵,加上偏向的向量
中间变量:
关于Cost函数的两个假设:
回顾Cost函数:
L:神经网络的层数
求和是对于所有单个的训练实例x加起来,然后求平均Cost
假定1:Cost函数可以写成如下:
平均Cost:
对于单个的Cost:
因为对于backpropagation,
Cost可以被写成神经网络输出的一个函数
我们定义这个二次Cost方程满足这点:
再来看一个算法:The Hadamard product:
Backpropagation四个关键公式:
定义error在第l层j个神经元:
假如有一个小坏蛋试图破坏神经网络的计算,增添了一个变化:
本来输出:
结果输出:
最终造成Cost变化为:
假设这个坏蛋想帮我们,通过找到一个:
来降低Cost
如果:
太大,坏蛋想帮我们降低Cost,通过找到合适的:
如果cost接近0,无法改进太多,接近最优,所以:
可以作为error的一个衡量。
于是,我们定义:
(1)一个对于error在输出层的方程:
等式右边第一项衡量Cost变化对于第j个activation输出,比如,我们理想的情况是C不因为某一个特定的输出神经元而变化太大,所以error就比较小。
等式右边第二部分是衡量activation方程变化对于:
转化为矩阵的表达方式:
其中
是C根据输出层activation的变化率,对于我们的二次Cost方程:
(2)一个因下一层error变化引起的当前层error变化的方程:
下一层error乘以权重矩阵的转置,理解为error往回传递,再求与
的Hadamard product,算出对于l层的error
交替使用:
和
可以通过神经网络逐层计算所有error,(1)用来计算输出层error,(2)用来计算前一层
(3)一个关于cost变化率根据偏向bias的方程:
根据(1)和(2),可以写为:
(4)一个关于cost比变化率根据权重weight的方程:
这个告诉我们如何根据error和a求偏导数,error和a我们都可以求得,
简化为:
当
a
i
n
a_in
ain很小时,偏导数也很小,所以权重较慢学习,结论就是从low activation算出的权重学习比较慢,根据
和sigmoid函数的图像:
可以看出,函数值接近1或0的时候,曲线都很平,说明:
接近0,结论就是当输出层的权重学习较慢,如果输出层的activation很高或很低时,对于bias偏好也一样。
总结出四个方程:
(1)
(2)
(3)
(4)
Backpropagation算法
1.输入x,设置输入层activation a
2.正向更新:对于l=1,2,3…L,计算:
3.计算输出层error:
4.反向更新error(backpropagation error):
5.输出:
总结一下:
1.1 通过迭代性的来处理训练集中的实例
1.2 对比经过神经网络后输入层预测值(predicted value)与真实值(target value)之间
1.3 反方向(从输出层=>隐藏层=>输入层)来以最小化误差(error)来更新每个连接的权重(weight)
1.4 算法详细介绍:
输入:D:数据集;l:学习率(learning rate);一个多层前向神经网络
输出:一个训练好的神经网络(a trained neural network)
1.4.1 初始化权重(weights)和偏向(bias):随机初始化在-1到1之间,或者-0.5到0.5之间,每个单元都有一个偏向
1.4.2 对于每一个训练实例X,执行以下步骤:
1.4.2.1 由输入层向前传送:
I
j
就
是
中
间
变
量
Z
I_j就是中间变量Z
Ij就是中间变量Z
1.4.2.2 根据误差(error)反向传送
对于输出层:
对于隐藏层:
权重更新:
偏向更新:
1.4.3 终止条件
(1)权重的更新低于某个阈值
(2)预测的错误率低于某个阈值
(3)达到预设一定的循环次数
Backpropagation算法举例
可以根据以上公式算出error和weight以及bias
看起来好多公式,但是仔细地看一遍也是能够看懂的