神经网络前向传播和反向传播算法简介

1. 绪论

神经网络是由感知机中的元件作为基本组成元件构造的多层网络结构,其模型的构建计算过程y=f(x) 我们通常称为前向传播,梯度下降过程中计算导数通常称为反向传播。

统计学习方法:感知机- 桂。 - 博客园

figure 1 感知机模型

卷积神经网络CNN总结- Madcola - 博客园

figure 2 神经网络模型

2. 前向传播

在写明计算公式前先声明一些变量定义。输出求和节点的向量记为z,经过激活函数的记为a,此层的权重记为W,偏差记为b,其有如下关系:
a [ l ] = σ ( z [ l ] ) = σ ( W [ l ] a [ [ l − 1 ] ] + b [ l ] ) a^{[l]} = \sigma(z^{[l]})=\sigma(W^{[l]}a^[[l-1]]+b^{[l]}) a[l]=σ(z[l])=σ(W[l]a[[l1]]+b[l])
其中 a [ l ] a^{[l]} a[l] 向量的维度为 n [ l ] ∗ 1 n^{[l]} * 1 n[l]1 W [ l ] W^{[l]} W[l] 的维度为 n [ l ] ∗ n [ l − 1 ] n^{[l]} * n^{[l-1]} n[l]n[l1] , b [ l ] b^{[l]} b[l] 向量的维度为 n [ l ] ∗ 1 n^{[l]} * 1 n[l]1

假定输入层为第0层,其输出的变量定义为 a [ 0 ] = x a^{[0]} =x a[0]=x

上述这个公式的计算过程其实就是前向传播算法。直到最后一层输出层我们计算出最终的 y = a o u t p u t y=a^{output} y=aoutput

3. 反向传播

模型构建好了,此时我们需要对其构建一个损失函数,然后进行梯度下降,此过程中有大量的参数W, b。那么如何计算呢? 我们利用链式法则!假设损失函数为J,

假设我们已知 ∂ J ∂ a [ l + 1 ] \frac{\partial J}{\partial {a^{[l+1]}}} a[l+1]J , 因为 a [ l + 1 ] = σ ( z [ l + 1 ] ) a^{[l+1]} = \sigma(z^{[l+1]}) a[l+1]=σ(z[l+1]) ,则有:
∂ J ∂ z [ l + 1 ] = ∂ J ∂ a [ l + 1 ] ∗ ∂ a [ l + 1 ] ∂ z [ l + 1 ] = ∂ J ∂ a [ l + 1 ] ∗ σ ′ ( z [ l + 1 ] ) \frac{\partial J}{\partial {z^{[l+1]}}} = \frac{\partial J}{\partial {a^{[l+1]}}} * \frac{\partial {a^{[l+1]}}}{\partial {z^{[l+1]}}} =\frac{\partial J}{\partial {a^{[l+1]}}} * \sigma'(z^{[l+1]}) z[l+1]J=a[l+1]Jz[l+1]a[l+1]=a[l+1]Jσ(z[l+1])

又因为 z [ l + 1 ] = W [ l + 1 ] a [ [ l ] ] + b [ l + 1 ] z^{[l+1]}=W^{[l+1]}a^[[l]]+b^{[l+1]} z[l+1]=W[l+1]a[[l]]+b[l+1]
∂ J ∂ W [ l + 1 ] = ∂ J ∂ z [ l + 1 ] ∗ ∂ z [ l + 1 ] ∂ W [ l + 1 ] = ∂ J ∂ a [ l + 1 ] ∗ σ ′ ( z [ l + 1 ] ) ∗ ( a [ l ] ) T ∂ J ∂ b [ l + 1 ] = ∂ J ∂ z [ l + 1 ] ∗ ∂ z [ l + 1 ] ∂ b [ l + 1 ] = ∂ J ∂ a [ l + 1 ] ∗ σ ′ ( z [ l + 1 ] ) ∂ J ∂ a [ l ] = ∂ J ∂ z [ l + 1 ] ∗ ∂ z [ l + 1 ] ∂ a [ l ] = ( W [ l + 1 ] ) T ∗ ∂ J ∂ a [ l + 1 ] ∗ σ ′ ( z [ l + 1 ] ) \frac{\partial J}{\partial {W^{[l+1]}}} = \frac{\partial J}{\partial {z^{[l+1]}}} * \frac{\partial {z^{[l+1]}}}{\partial {W^{[l+1]}}} = \frac{\partial J}{\partial {a^{[l+1]}}} * \sigma'(z^{[l+1]}) * (a^{[l]})^T \\ \frac{\partial J}{\partial {b^{[l+1]}}} = \frac{\partial J}{\partial {z^{[l+1]}}} * \frac{\partial {z^{[l+1]}}}{\partial {b^{[l+1]}}} = \frac{\partial J}{\partial {a^{[l+1]}}} * \sigma'(z^{[l+1]}) \\ \frac{\partial J}{\partial {a^{[l]}}} = \frac{\partial J}{\partial {z^{[l+1]}}} * \frac{\partial {z^{[l+1]}}}{\partial {a^{[l]}}} = (W^{[l+1]})^T * \frac{\partial J}{\partial {a^{[l+1]}}}* \sigma'(z^{[l+1]}) W[l+1]J=z[l+1]JW[l+1]z[l+1]=a[l+1]Jσ(z[l+1])(a[l])Tb[l+1]J=z[l+1]Jb[l+1]z[l+1]=a[l+1]Jσ(z[l+1])a[l]J=z[l+1]Ja[l]z[l+1]=(W[l+1])Ta[l+1]Jσ(z[l+1])
通过上述的反向传播计算过程即可计算出所有权重的偏导数。

4. 总结

这里利用吴恩达课程中一张图更好的理解前向传播和反向传播的过程。

image-20221020153855604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值