神经网络之误差反向传播算法推导

原理

误差反向传播算法是通过误差函数计算实际输出值与期望输出值之间的误差,把误差从最后的输出层依次传播到之前各层,最后通过调整各层连接权重与偏置达到减小误差的目的。而权重和偏置的调整一般使用梯度下降法。

推导前的准备

本文误差反向传播算法的推导以包含隐藏层的多层感知器为例,结构如下图所示:

在这里插入图片描述

这里,图中和推导过程中涉及的符号代表的含义分别为:

符号含义
x i x_i xi输入值
a j a_j aj隐藏层激活值
y k y_k yk实际输出值
r k r_k rk期望输出值
w 1 i j w_{1ij} w1ij网络输入层的第i个神经元和下一层网络第j个神经元之间的连接权重
w 2 j k w_{2jk} w2jk网络隐藏层的第j个神经元和下一层网络第k个神经元之间的连接权重
b j 2 b_j^2 bj2网络隐藏层第j个神经元的偏置
b k 3 b_k^3 bk3网络输出层第k个神经元的偏置
u 1 j u_{1j} u1j隐藏层第j个神经元的激活函数的加权输入
u 2 k u_{2k} u2k输出层第k个神经元的激活函数的加权输入
E E E误差函数
η \eta η学习率

这里,误差函数采用最小二乘误差函数,公式如下:
E = ∑ n = 1 N ∣ ∣ r n − y n ∣ ∣ 2 E=\sum_{n=1}^N||r_n-y_n||^2 E=n=1Nrnyn2
激活函数使用sigmoid函数,公式如下:
f ( u ) = 1 1 + e − u f(u)=\frac{1}{1+e^{-u}} f(u)=1+eu1其中,
u = ∑ i = 1 N w i x i + b u=\sum_{i=1}^Nw_ix_i+b u=i=1Nwixi+b

开始推导

首先,再明确一下我们的目的是计算使用梯度下降法时神经网络各层间连接权重和偏差的变化值,即 Δ w 1 i j , Δ w 2 j k , Δ b j 2 \Delta w_{1ij},\Delta w_{2jk},\Delta b_j^2 Δw1ij,Δw2jk,Δbj2等值。
这里,计算过程以求解 Δ w 1 i j \Delta w_{1ij} Δw1ij为例,其它值类似,而
Δ w 1 i j = η ∂ E ∂ w 1 i j \Delta w_{1ij}=\eta\frac{\partial E}{\partial w_{1ij}} Δw1ij=ηw1ijE
根据链式求导得:
∂ E ∂ w 1 i j = ∑ k = 1 q ( ∂ E ∂ y k ∂ y k ∂ u 2 k ∂ u 2 k ∂ a j ∂ a j δ u 1 j ∂ u 1 j ∂ w 1 i j ) \frac{\partial E}{\partial w_{1ij}}=\sum_{k=1}^q (\frac{\partial E}{\partial y_k} \frac{\partial y_k}{\partial u_{2k}} \frac{\partial u_{2k}}{\partial a_j} \frac{\partial a_j}{\delta u_{1j}} \frac{\partial u_{1j}}{\partial w_{1ij}}) w1ijE=k=1q(ykEu2kykaju2kδu1jajw1iju1j)
然后逐个对等式右侧各部分求解得:
∂ E ∂ y k = − ( r k − y k ) \frac{\partial E}{\partial y_k}=-(r_k-y_k) ykE=(rkyk)
∂ y k ∂ u 2 k = f ( u 2 k ) ( 1 − f ( u 2 k ) ) = y k ( 1 − y k ) \frac{\partial y_k}{\partial u_{2k}}=f(u_{2k})(1-f(u_{2k}))=y_k(1-y_k) u2kyk=f(u2k)(1f(u2k))=yk(1yk)
∂ u 2 k ∂ a j = w 2 j k \frac{\partial u_{2k}}{\partial a_j}=w_{2jk} aju2k=w2jk
∂ a j ∂ u 1 j = a j ( 1 − a j ) \frac{\partial a_j}{\partial u_{1j}}=a_j(1-a_j) u1jaj=aj(1aj)
∂ u 1 j ∂ w 1 i j = x i \frac{\partial u_{1j}}{\partial w_{1ij}}=x_i w1iju1j=xi
最后得:
∂ E ∂ w 1 i j = − ∑ k = 1 q [ ( r k − y k ) y k ( 1 − y k ) w 2 j k a j ( 1 − a j ) x i ] \frac{\partial E}{\partial w_{1ij}}=-\sum_{k=1}^q [(r_k-y_k) y_k(1-y_k) w_{2jk} a_j(1-a_j) x_i] w1ijE=k=1q[(rkyk)yk(1yk)w2jkaj(1aj)xi]
因此,权重 w 1 i j w_{1ij} w1ij得变化值为:
Δ w 1 i j = η ∑ k = 1 q [ ( r k − y k ) y k ( 1 − y k ) w 2 j k a j ( 1 − a j ) x i ] \Delta w_{1ij}=\eta \sum_{k=1}^q [(r_k-y_k) y_k(1-y_k) w_{2jk} a_j(1-a_j) x_i] Δw1ij=ηk=1q[(rkyk)yk(1yk)w2jkaj(1aj)xi]
根据上述计算过程可以发现,权重的变化值的组成依次为:学习率、误差函数导数、激活函数导数、对应连接权重、激活函数导数和输入值,根据这个规律可以快速写出各层权重和偏差的变化值,例如:
Δ w 2 j k = η ∑ k = 1 q [ ( r k − y k ) y k ( 1 − y k ) a j ] \Delta w_{2jk} = \eta \sum_{k=1}^q [(r_k-y_k)y_k(1-y_k)aj] Δw2jk=ηk=1q[(rkyk)yk(1yk)aj]
Δ b j 2 = η ∑ k = 1 q [ ( r k − y k ) y k ( 1 − y k ) w 2 j k a j ( 1 − a j ) ] \Delta b_j^2 = \eta \sum_{k=1}^q[(r_k-y_k)y_k(1-y_k)w_{2jk}a_j(1-a_j)] Δbj2=ηk=1q[(rkyk)yk(1yk)w2jkaj(1aj)]

小结

误差反向传播算法会通过误差函数计算梯度,然后调整权重与偏置,经过反复迭代训练的调整,最终获得最优解。
本文在推导过程中使用的误差函数为最小二乘误差函数,除此以外还有很多其它函数用于计算误差,比如一般多分类问题中使用交叉熵误差函数:
E = − ∑ c = 1 C ∑ n = 1 N r c n l n y c n E=-\sum_{c=1}^C \sum_{n=1}^N r_{cn}lny_{cn} E=c=1Cn=1Nrcnlnycn
二分类中的常用的误差函数为:
E = − ∑ n = 1 N [ r n l n y n + ( 1 − r n ) l n ( 1 − y n ) ] E=-\sum_{n=1}^N [r_nlny_n+(1-r_n)ln(1-y_n)] E=n=1N[rnlnyn+(1rn)ln(1yn)]
同时,激活函数除sigmoid外还有tanh、ReLU等函数:
t a n h ( u ) = e x p ( u ) − e x p ( − u ) e x p ( u ) + e x p ( − u ) tanh(u)=\frac{exp(u)-exp(-u)}{exp(u)+exp(-u)} tanh(u)=exp(u)+exp(u)exp(u)exp(u)
R e L U ( u ) = m a x ( u , 0 ) ReLU(u)=max(u,0) ReLU(u)=max(u,0)

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络反向传播算法推导可以通过以下步骤进行: 1. 定义符号和常量:根据引用\[1\]中的定义,我们可以定义网络层下标、神经元数量和输入层、隐藏层、输出层的符号。 2. 计算输出层梯度:根据引用\[3\]中的公式,输出层的梯度可以表示为 δ_k = ∂E/∂y_k * ∂y_k/∂u_k。其中,∂E/∂y_k表示损失函数对输出层输出的偏导数,∂y_k/∂u_k表示激活函数对输出层输入的偏导数。 3. 计算隐藏层梯度:根据引用\[2\]中的公式,隐藏层的梯度可以通过链式法则计算得到。具体来说,隐藏层的梯度可以表示为 δ_j = ∑(δ_k * ∂u_k/∂y_j)。其中,∑表示对输出层神经元的求和,δ_k表示输出层的梯度,∂u_k/∂y_j表示输出层输入对隐藏层输出的偏导数。 4. 更新权重和偏置:根据梯度下降法则,可以使用梯度来更新权重和偏置。具体来说,权重的更新可以表示为 Δw_ij = η * δ_j * x_i,其中,η表示学习率,δ_j表示隐藏层的梯度,x_i表示输入层的输出。偏置的更新可以表示为 Δb_j = η * δ_j。 通过以上步骤,我们可以推导神经网络反向传播算法。请注意,这只是一个简单的推导过程,具体的推导可能会根据网络结构和激活函数的选择而有所不同。 #### 引用[.reference_title] - *1* *3* [神经网络——反向传播算法公式推导](https://blog.csdn.net/qq_42733778/article/details/129501294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [神经网络反向传播算法推导](https://blog.csdn.net/hnshhshjq/article/details/85243550)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值