反向传播

作用
反向传播的作用就是计算网络的参数 w ∗ , b ∗ w^{*} ,b^{*} w,b反向传播并不是和梯度下降不同的训练方法,他与梯度下降相同,但是在计算梯度向量的时候更加高效。
链式法则
反向传播

对整个网络有,其损失函数为: L ( θ ) = ∑ n = 1 N l n ( θ ) L(\theta ) = \sum_{n=1}^{N}l^{n}(\theta ) L(θ)=n=1Nln(θ),他是所有训练数据的损失之和。
反向传播
把训练数据里的任意一个样本点输入 x n x^{n} xn到神经网络中,它会输出一个 y n y^{n} yn,把这个输出 y n y^{n} yn和样本点本身的标签target y n ^ \hat{y^{n}} yn^作一个交叉熵,这个交叉熵定义了输出值,和标签之间的距离 l n ( θ ) l^{n}(\theta ) ln(θ),如果交叉熵比较大,说明输出和标签之间距离较远,这个网络的参数的损失比较大,参数不好。
对所有的训练集损失进行求和,得到toal loss.这就作为损失函数。对损失函数的参数做偏微分得到:
反向传播
以上图中被红色框标记的神经元为例,假设有两个输入 x 1 x_{1} x1, x 2 x_{2} x2,通过这个神经元我们得到 z = b + w 1 x 1 + w 2 x 2 z = b+w_{1}x_{1}+w_{2}x_{2} z=b+w1x1+w2x2,然后经过**函数(activation function)从神经元中输出,作为后续的神经元的输入。
对于 ∂ l ∂ w \frac{\partial l}{\partial w} wl的计算可以拆分为两项, ∂ l ∂ w = ∂ z ∂ w ∂ l ∂ z \frac{\partial l}{\partial w} = \frac{\partial z}{\partial w}\frac{\partial l}{\partial z} wl=wzzl,将计算前面一项 ∂ z ∂ w \frac{\partial z}{\partial w} wz这个过程称为forward pass ,计算后面一项 ∂ l ∂ z \frac{\partial l}{\partial z} zl称为backward pass。
反向传播
对于Forward pass
即为权重所对应的上一层神经元的值( x 1 , x 2 x_{1},x_{2} x1,x2),有:
反向传播
∂ l ∂ w \frac{\partial l}{\partial w} wl是看w前面连接的输入是什么,则微分后的 ∂ z ∂ w \frac{\partial z}{\partial w} wz就是什么,只要计算神经网络里的每一个神经元对应的输出,就可以计算出z对w的偏微分。
1、input layer作为神经元的输入时, w 1 w_{1} w1前面连接的是 x 1 x_{1} x1,所以微分是 x 1 x_{1} x1 w 2 w_{2} w2前面连接的是 x 2 x_{2} x2所以微分值就是 x 2 x_{2} x2
2、隐层作为神经元的输入时,那么神经元的输入就是前一个神经元的输出,于是 ∂ z ∂ w \frac{\partial z}{\partial w} wz的值就是前一层z经过激励函数之后的输出值。
反向传播
对于Backward pass
若激励函数是sigmoid函数:
反向传播
如图可知,z通过激励函数得到a,令a等于 σ ( z ) \sigma (z) σ(z),这个神经元的输出是 a = σ ( z ) a = \sigma (z) a=σ(z),接下来a乘以权重 w 3 w_{3} w3,得到 z ′ z^{'} z,他是下一个神经元激励函数的输入,a乘以权重 w 4 w_{4} w4,得到 z ′ ′ z^{''} z,根据链式法则可知:
反向传播
其中 ∂ a ∂ z = σ ′ ( z ) \frac{\partial a}{\partial z} = \sigma ^{'}(z) za=σ(z).
对于 ∂ l ∂ a \frac{\partial l}{\partial a} al,可知a会影响 z ′ z^{'} z z ′ ′ z^{''} z,利用链式法则可知:
反向传播
由于已知 z ′ = a w 3 + . . . . z^{'} = aw^{3}+.... z=aw3+...., z ′ ′ = a w 4 + . . . . z^{''} = aw^{4}+.... z=aw4+....,可以推断出:
反向传播
带入原式可知:
反向传播