Backpropagation

本文详细介绍了Backpropagation算法在深度神经网络中的应用原理及推导过程。从激活函数出发,推导出如何通过梯度下降来更新权重和偏差,以最小化损失函数。并进一步解释了误差反向传播的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇博客主要推导深度神经网络中,经典的Backpropagation求导算法的推导。 因为是随手做的笔记,所以中间有一些中英文夹杂的表达,希望不会对您的理解不会有干扰。还请读者见谅。 In this part, we will derive some most important equations in deep learning. \
在一个神经网络中,使用alk表示第l层,第k个神经元的activation的值,使用blk表示第l层,第k个神经元的bias。使用wljk表示第l层上的第j个单元和第l-1层上的第k个单元的权重。由此可以根据前一层的激活值,计算出当前层任意一个单元的激活值。激活函数是

alj=σ(kwljkal1k+blj)

其中σ 是激活函数。\
假设第l层有2个单元,第l-1层有4个单元,那么我们可以将其写成向量形式
al=σ^(wlal1+bl)=σ^([wl11wl21wl12wl22wl13wl23wl14wl24]al11al12al13al14+[bl1bl2])

相应的,激活函数σ^也变成可以处理向量的形式。\
这里用C表示cost function,BP的目的是求出CwCb。 最原始的求函数代价函数的偏导的方式就是使用表达式然后求导。 以两层神经元为例,计算代价函数,然后对weight进行求导如下:这里的未知数就是w2,b2,代价函数为
CCwCb=a2a^2=σ^(w2a1+b2)=σ^(w2)a1=σ^(b2)

两个简单的神经网络
这里只有一个输入层,一个输出层,比较简单,但是如果有多个层,就比较复杂了,比如右图中的情况
C=a3a^3=σ(w3a2+b3)a^3=σ(w3σ(w2a1+b2)+b3)a^3

如果层数再增加,嵌套就只能在往上增加了,最后导致求导非常复杂。\
BP很早就被使用在auto difficiation中,第一个在神经网络中使用BP的应该是Werbos (1982)。 然后接着在论文中发表 (Parker, 1985; LeCun, 1985)。 here is a link to talk about the history of backpropagation “Who Invented Backpropagation”. 下面开始介绍BP具体做的内容。\
在前面的做法中,我们直接把最终的误差和单个weight联系起来,在BP中,我们引入一个新的中间变量,表示某个单元的误差,σlj.\ 这里介绍了一个扰动的概念,zlj表示该单元的weighted 输入,如果通过扰动该单元(改变单元的权重wlj),我们有Δzlj,那么该单元就输出σ(zlj+Δzlj),相应的最终的输出也要变,变化量可以求出来CzljΔzlj. 如果想要向下降方向移动,那么这个扰动需要满足CzljΔzlj<0, 这里举一个f(x)=4x2为例,初始值给1,fx=8x, 那么在xop>0时,Δx应该选择向小的方向变动,当xop<0时, Δx应该选择向大的方向变动。 这里也是这个道理,如果求得了Czlj,就可以知道怎么调整Δzlj(即权重),使得目标函数变小,即往优化的方向上走。因为这个缘故,我们专门定义一个指标
δljCzlj

在这种定义下,根据链式法则,我们可以将之前的求导目标变成
CW=CZZW=δZW

对每一个神经元来说,其输入zlj是w和b的线性函数,求导相当容易。所以求每个神经元的误差是非常有用的。
\subsection{Derivative of neuron error}
这里假设C的表达式是已知的,比如
CCaLδL=1/2||(yaL)||2=aLy=(aLy)aLzL=(aLy)σ(zL)

这里是第L层,那第L-1层呢?因为C也是关于aL1的函数,所以
CaL1δL1=CzLzLaL1=δLzLaL1=(WL)TδL=CaL1aL1zL1=(WL)TδLσ(zL1)

以上图中的神经网络为例,CaLR3×1,z3=w33×2a22×1+b33×1.
根据这种传播规律,首先计算出第L层的neurons error δ之后,\textbf{就可以逐步往前回溯},求出前面所有层中的error。这个error并不是目标函数中的error,而是一个变化率,当输入和改变1个单位的时候,目标函数C的该变量。\
以L层为例对weight进行求导
zL3×1CwL=wL3×2aL12×1+bL3×1=δLzLwL=δL(aL1)T

同理,以L层为例对bias求偏导
CbL=δL

到此为止,使用backpropagation求偏导就解决了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值