神经网络推导

本文详细介绍了一个单变量版本的BP神经网络算法,包括网络结构定义、前向传播过程及反向传播原理。通过数学公式推导,展示了如何通过梯度下降法调整权重与偏置,实现网络训练。

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

BP神经网络算法(单变量版本)

网络结构定义

输入变量XmXm,其中m=1,2,3,...,Ninputm=1,2,3,...,Ninput
要预测的变量tmtm,其中m=1,2,3,...,Ninputm=1,2,3,...,Ninput
设置三层网络结构,前两层为隐藏层,最后一层为输出层
第一层共有I个神经元,第二层共有J个神经元,第三层共有K个神经元。

前向传播

第一层

WimWim,表示 第一层神经网络第ii个神经元和第m个输入变量之前的权重。
bibi,表示 第一层神经网络第ii个神经元的偏置。
neti(1)=m=1NinputWimXm+bi,其中net(1)ineti(1)表示第一层神经网络中第ii个神经元的输出。
第一层的激活函数设为f(1),则经过激活函数激活后第ii个神经元的输出为

yi(1)=f(1)(neti(1))

第二层

WjiWji,表示 第二层神经网络第jj个神经元和第i个第一层神经网络的神经元输出之间的权重。
bjbj,表示 第二层神经网络第jj个神经元的偏置。
netj(2)=i=1IWjiyi(1)+bj,其中net(2)jnetj(2)表示第二层神经网络中第jj个神经元的输出。
第二层的激活函数设为f(2),则经过激活函数激活后第jj个神经元的输出为

yj(2)=f(2)(netj(2))

第三层(输出层)

WkjWkj,表示 第三层神经网络第kk个神经元和第j个第二层神经网络的神经元输出之间的权重。
bkbk,表示 第三层神经网络第kk个神经元的偏置。
netk(3)=j=1JWkjyj(2)+bk,其中net(3)knetk(3)表示第三层神经网络中第kk个神经元的输出。
第三层的激活函数设为f(3),则经过激活函数激活后第kk个神经元的输出为

yk(3)=f(3)(netk(3))

经过前向传播已经可以用来输出结果了。
但是怎么来训练这个神经网络呢?这里就要用到神经网络的反向传播!!

反向传播(Back-Propagation)-求导

要使用反向传播首先需要定义损失函数(loss function)。现在针对不同的领域损失函数的定义有非常多,这里用到最简单的均方差(Mean squared error-MSE)来训练分类任务的神经网络
均方差的定义

1ll=1nt(y(3)ktk)21l∑l=1nt(yk(3)−tk)2

nt表示分类任务最后类别的数目。如果是抛硬币那么nt=2(正面和反面)。
PS:如果是分类问题,需要将这里的t_m进行one-hot编码。并且输出层神经元的个数与nt的大小相同。

输出层推导

根据链式法则(chain-rule),求权重的导数

lossWkj=lossnet(3)knet(3)kWkj=lossnet(3)ky(2)j∂loss∂Wkj=∂loss∂netk(3)⋅∂netk(3)∂Wkj=∂loss∂netk(3)⋅yj(2)

lossnet(3)k=net(3)k(1llnt(y(3)ktk)2)=1lnet(3)k(lnt(f(3)(net(3)k)tk)2)∂loss∂netk(3)=∂∂netk(3)(1l∑lnt(yk(3)−tk)2)=1l∂∂netk(3)(∑lnt(f(3)(netk(3))−tk)2)

=1lnet(3)k((f(3)(net(3)k)tk)2)=2l(f(3)(net(3)k)tk)(f(3)(net(3)k)1)=1l∂∂netk(3)((f(3)(netk(3))−tk)2)=2l(f(3)(netk(3))−tk)⋅(f(3)′(netk(3))⋅1)

其中设lossnet(3)k=δ(3)=2l(f(3)(net(3)k)tk)(f(3)(net(3)k)1)∂loss∂netk(3)=δ(3)=2l(f(3)(netk(3))−tk)⋅(f(3)′(netk(3))⋅1)

lossWkj=δ(3)y(2)j→∂loss∂Wkj=δ(3)⋅yj(2)

同理可得

lossbk=lossnet(3)knet(3)kbk=lossnet(3)k=δ(3)∂loss∂bk=∂loss∂netk(3)⋅∂netk(3)∂bk=∂loss∂netk(3)=δ(3)

这里就求得了最后一层相关权重和偏置的导数了。

第二层隐藏层推导

与输出层的求导非常相似,也是使用链式法则(chain-rule),求第二层隐藏层权重的导数

lossWji=lossnet(2)jnet(2)jWji=lossnet(2)jy(1)i∂loss∂Wji=∂loss∂netj(2)⋅∂netj(2)∂Wji=∂loss∂netj(2)⋅yi(1)

lossnet(2)j=net(2)j(1llnt(y(3)ktk)2)=1lnet(2)j(lnt(f(3)(net(3)k)tk)2)∂loss∂netj(2)=∂∂netj(2)(1l∑lnt(yk(3)−tk)2)=1l∂∂netj(2)(∑lnt(f(3)(netk(3))−tk)2)

=1lnet(2)j((f(3)(net(3)k)tk)2)=1lnet(2)j(f(3)(j=1JWkjy(2)j+bk)tk)2=1l∂∂netj(2)((f(3)(netk(3))−tk)2)=1l∂∂netj(2)(f(3)(∑j=1JWkjyj(2)+bk)−tk)2

=1lnet(2)j(f(3)(j=1JWkjf(2)(net(2)j)+bk)tk)2=1l∂∂netj(2)(f(3)(∑j=1JWkjf(2)(netj(2))+bk)−tk)2

=2lf(3)(j=1JWkjf(2)(net(2)j)+bk)tk)f(3)(j=1JWkjf(2)(net(2)j)+bk)j=1JWkjf(2)(net(2)j)1=2l⋅f(3)(∑j=1JWkjf(2)(netj(2))+bk)−tk)⋅f(3)′(∑j=1JWkjf(2)(netj(2))+bk)⋅∑j=1JWkjf(2)′(netj(2))⋅1

=δ(3)kj=1JWkjf(2)(net(2)j)=j=1J(Wkjδ(3)k)f(2)(net(2)j)=δk(3)⋅∑j=1JWkjf(2)′(netj(2))=∑j=1J(Wkj⋅δk(3))⋅f(2)′(netj(2))

!!!注意δ(3)kJj=1Wkjf(2)(net(2)j)δk(3)⋅∑j=1JWkjf(2)′(netj(2))这个式子 (************还需要配图说明)
其中设lossnet(2)j=δ(2)=Jj=1(Wkjδ(3)k)f(2)(net(2)j)∂loss∂netj(2)=δ(2)=∑j=1J(Wkj⋅δk(3))⋅f(2)′(netj(2))

lossWji=δ(2)y(1)i→∂loss∂Wji=δ(2)⋅yi(1)

同理可得

lossbj=lossnet(2)jnet(2)jbj=lossnet(2)j=δ(2)∂loss∂bj=∂loss∂netj(2)⋅∂netj(2)∂bj=∂loss∂netj(2)=δ(2)
第一层隐藏层推导

与第二层隐藏层推导一样,也是使用链式法则(chain-rule),求第一层隐藏层权重的导数

lossWim=lossnet(1)inet(1)iWim=lossnet(1)iXm∂loss∂Wim=∂loss∂neti(1)⋅∂neti(1)∂Wim=∂loss∂neti(1)⋅Xm

其中设lossnet(1)i=δ(1)=Ii=1(Wjiδ(2)j)f(1)(net(1)i)∂loss∂neti(1)=δ(1)=∑i=1I(Wji⋅δj(2))⋅f(1)′(neti(1))

lossWim=δ(1)Xm→∂loss∂Wim=δ(1)⋅Xm

同理可得

lossbi=lossnet(1)inet(1)ibi=lossnet(1)i=δ(1)∂loss∂bi=∂loss∂neti(1)⋅∂neti(1)∂bi=∂loss∂neti(1)=δ(1)

神经网络中所有需要求解的导数都已经完成。接下来只要进行反向传播更新便可以训练该神经网络了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值