您的位置:首页 > 其它

反向传播学习算法

2017-08-30 17:43 423 查看
1969年被发明,但直到上世级八十年代才得到重视。

通用的网络训练伪代码:

function neural-network-learning( training-records ) returns network
network <- initialize weights (randomly)
start loop
for each example in training-records do
network-output = neural-network-output( network, example )
actual-output = observed outcome associated with example
update weights in network based on
{ example, network-output, actual-output }
end for
end loop when all examples correctly predicted or hit stopping conditions

return network

注意:

多层神经网络的学习算法即不保证全局最优,也不保证绝对有效。

MSE(mean squared error):平均方差。

定义:

function backpropagation-algorithm

( network, training-records, learning-rate ) returns network

反向学习传播算法带三个参数:

1.network:多层前馈网络。

2.training-records:样本集(特征,标注)

3.learning-rate:超参数。

现在想象:给出一个样本,输入网络,产生输出,与label对比,得到差异Erri。

重点来了:如果根据差异Erri调整权重?

考虑最后两层:倒数第一层是输出层i,倒数第二层是隐藏层j.

权重调整公式(1):Wji <--  Wji + α × aj × Erri × g′ (input_sumi)

关键是咋理解这个公式?

α × aj × Erri × g′ (input_sumi)是调权重的变化值,再分析。

α:学习率,超参数。

aj:神经元j的激活值。aj = g (input_sumj)

input_sumi = Wi · Ai + b

Erri:异差项

我们想得到一个微小的差异项:Δi = Erri × g′(input_sumi)

也就是说,如果我们想把权重朝着正确的方向调整一点点,下面的公式更好表达:

权重调整公式(2):Wji 《-- Wji + α × aj × Δi

这个公式是说:考虑把差异项中的一点变化Δi向稍好的方向修正下,通过上面的公式可以调整一下Wji.

但是,这个第i层的小小差异Δi,在第j层又是什么情况呢?

Δj《-- g′( input_sumj)ΣWjiΔi

小结下:

输出层到隐藏层:

(1):input_sumi = Wi · Ai + b 

(2):aj = g (input_sumj)

(3):Wji <--  Wji + α × aj × Erri × g′ (input_sumi)

(4):Δi = Erri × g′(input_sumi)

隐藏层往前传播:

(5):Wji 《-- Wji + α × aj × Δi, 也就是说,学习率和上层神经元的激活值对差异有线性关系。

(6):Δj《-- g′( input_sumj)ΣWjiΔi

在Mini-Batch的SGD中,算的是平均坡度。

说得比较执行层面,对理解帮助不大。

推荐一篇知乎上的文档:https://www.zhihu.com/question/27239198?rf=24827633
这篇文档关于复合函数的链式法则、BP的巧妙之处以及欠钱的比喻,说得很形象,如果高数过关,不难理解,这里就不转了。

两种视角各有特点吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: