Skip to content

反向传播

原理和直觉

神经网络的核心就是最基础的线性模型,y=wx+b,也就是说,在正向传播的情况下,最终得出的结果收到参数wb的影响,

那么在一个神经网络还没训练好的时候,他必然产生偏差,产生的偏差大小说到底还是受参数wb的影响,因此在神经网络模型有偏差的时候,效率最高的方式是:找到对偏差影响大的w和b,然后调整他们

因此,参数wb

  • 正向传播:用于计算预测结果

image-20260410140044545

解释一下,上面的反向传播直觉的图:

绿色的大圈J为这个网络模型最终的总偏差,由线性模型可以看出,a3的偏差有三个部分组成,由w3产生的偏差,由a2产生的偏差和由b3产生的偏差

而a3为输出层,虽然只有一个单位,但他的偏差是由上一层传播而来的,同理,上一层的每个神经元的偏差也是有w,a,b三部分组成的,因此偏差一层一层传播,一层一层累计到最后

image-20260410140249975

之所以用向量求和,是因为参数很多,要快速降低损失值,必然是沿着切线方向下降最快,因此,找到切线方向的话,就需要向量

但实际上,这两种方法本质上并没有区别,都是要把偏差值一层一层,一个神经元一个神经元的分配回去。

但是向量求和的方式就要涉及计算梯度了

梯度

image-20260410141438593

如上图,右图为损失函数,黑色切线是该点,是的损失值下降最快的方向,向量分解的话,就是分别调整w,和b两个参数

回到网络模型的话, 反向传播,一层一层往回传,去调整每一层每一个神经元的wb

image-20260410142918846

求导的向量分解不墨迹了,大一的东西

i为每层第i个神经元,[l]为神经元第l

搞数学,正向传播咋算的

image-20260410143327488

如图所示,就是上一层输出作为下一层输入,每一层的计算就是一个多元线性回归,没啥墨迹的

image-20260410143658930

上标[l]代表网络模型第l

搞数学,反向传播咋算的

image-20260410143853136

如图所示,对损失值 J 求激活值a的梯度,该梯度表示激活函数的输出对最终损失值的影响程度。

由于激活值 a 是线性变换 z=wx+b 经过激活函数作用得到的,即a=σ(z)

因此可以通过链式法则,将梯度从激活值 a 继续反向传播到 z(每层神经元),再进一步传播到参数 wb

从而计算出各层参数对最终损失的梯度,并据此进行参数更新。

这样,就算出来每一层,每一个神经元中的w和b,对最终损失的影响程度

基于这个相对影响程度,就可以针对每一个神经元的进行调参,使得对偏差影响大的神经元的的参数调整幅度更大,对偏差影响程度小的参数调整幅度小

image-20260410145204045

最终通过反向传播,一层一层更新参数:

w=wηJw

Released under the MIT License.