Backpropagation

本文深入探讨了反向传播算法的基本原理,包括四个核心等式的推导过程,并介绍了如何使用该算法来计算神经网络中权重和偏置项的梯度。

Backpropagation

@[深度学习, 向后传播算法]

wjkl 表示 (l1)th 层的第 k 个神经元和第lth层的第j个元素的连接

神经网络权重

enter image description here

blj l 层神经元的bias
aij l 层神经元的activation

alj=σ(kwljkal1k+blj),(1)

wljk : j 的范围是第l层神经元的个数,k的范围是第 (l1) 层神经元的个数,这个表示方便将公式表示为矩阵的形式

al=σ(wlal1+bl).(2)

这里 al1 是第 l 层的激活神经元

代价函数相关的两个假设

backpropagation的目标就是计算代价函数对w b 的偏导

二次代价函数的形式:

C=12nxy(x)aL(x)2,(3)

  • 假设1:代价函数能够被写成 C=1nxCx ,需要这个假设的原因是backpropagation实际上需要我们计算的是对单个训练样本的偏导( Cxw Cxb
  • 假设2:代价函数能够被写成神经网络输出的函数
    enter image description here
    例如:二次代价函数能够写成:

C=12yaL2=12j(yjaLj)2,(4)

Hadamard product

[12][34]=[1324]=[38].(5)

Backpropagation的四个基本等式

backpropagation是为了理解在神经网络中改变weights和biases是怎样改变代价函数,最终,意味着计算偏导 Cwljk Cblj

为了计算偏导,我们首先计算中间量, δlj ,表示 lth 层第 j 个神经元的error

zlj=(kwljkal1k+blj),(6)

δljCzlj.(7)

backpropagation给了一个对每层计算 δl 的方法

误差在输出层的等式

δLj=CaLjσ(zLj).(BP1)

* C/aLj 衡量了以第 jth 个激活元为函数的变化速率
* σ(zLj) 衡量了sigmoid函数对 zLj 的变化速率
* C/aLj 的精确形式取决于代价函数的选择,例如针对二次代价函数而言
* 当 σ(zLj) 趋近于0或1的时候, σ(zLj)0 δLj 也会变的很小,可以说输出神经元已经饱和,weight开始停止学习或学习的很慢

C=12j(yjaj)2
CaLj=(ajyj)

δL=aCσ(zL).(BP1a)

二次代价函数的 δL
δL=(aLy)σ(zL)

在式子中都有较好的向量形式,因此容易利用Numpy等库进行计算

下一层误差等式, δl+1

δl=((wl+1)Tδl+1)σ(zl),(BP2)

总结而言:
* 当输出神经元的状态是low-activation或者sturated时,weight将会缓慢的学习
* 这四个公式对任何形式的激活函数都有用

An equation for the rate of change of the cost with respect to any bias in the network:

Cblj=δlj(BP3)

Cb=δ,(BP3a)

An equation for the rate of change of the cost with respect to any weight in the network
Cwljk=al1kδlj.(BP4)

Cw=ainδout,(BP4a)

证明

(BP1)

δLj=CaLjσ(zLj).(BP1)

δLj=CzLj

链式法则
δLj=CaLjaLjzLj

(BP2)

δl=((wl+1)Tδl+1)σ(zl),(BP2)

δlj=Czlj=kCzl+1kzl+1kzlj=kzl+1kzljδl+1k,()(a)(b)

zl+1k=jwl+1kjalj+bl+1k=jwl+1kjσ(zlj)+bl+1k

(BP3)

Cblj=δlj(BP3)

Cblj=Czljzljblj

zljblj=1

(BP4)

Cwljk=al1kδlj.(BP4)

Cwljk=Czljzljwljk()

zlj=kwljkal1k+blj

backpropagation算法

backpropagation equations 提供了一个计算代价函数梯度的方式

  1. 输入 x :设置相应的 activation a1 为输入层
  2. Feedforward: 对每一层 l=2,3,...,L 计算 zl=wlal1+bl al=σ(zl)
  3. Output error (输出层误差) : 计算向量 δL=aCσ(zL)
  4. Backpropagate the error : 对每一层 l=L1,L2,...,2 计算 δl=((wl+1)Tδl+1)σ(zl)
  5. 输出 : 计算代价函数的梯度,通过 Cwljk=al1kδljCblj=δjl

mini-batch:(随机梯度下降结合backpropagation)
1. 输入一组训练样本
2. 对每个训练样本:设置相应的输入激活元 ax,1
- Feedforward: 对每一层 l=2,3,...,L 计算 zx,l=wlax,l1+bl ax,l=σ(zx,l)
- Output error (输出层误差) : 计算向量 δx,L=aCxσ(zx,L)
- Backpropagate the error : 对每一层 l=L1,L2,...,2 计算 δx,l=((wl+1)Tδx,l+1)σ(zx,l)
3. 梯度下降 : 对每一层 l=L,L1,...,2 ,更新权重weights,根据规则

wlwlηmxδx,l(ax,l1)T
blblηmxδx,l

Backpropagation Through Time(BPTT)即反向传播通过时间,是RNN用于计算梯度的方法,从最后一个时间步 T 向时间步 1 传播。其核心公式为计算权重矩阵 \( \mathbf{W}_h \) 的梯度: \( \frac{\partial L}{\partial \mathbf{W}_h} = \sum_{t=1}^T \frac{\partial L}{\partial \mathbf{h}_t} \cdot \frac{\partial \mathbf{h}_t}{\partial \mathbf{W}_h} \) ,误差项 \( \delta_t \) 的计算公式为 \( \delta_t = \frac{\partial L}{\partial \mathbf{h}_t} = \left[ \frac{\partial L}{\partial \mathbf{y}_t} \cdot \frac{\partial \mathbf{y}_t}{\partial \mathbf{h}_t} + \frac{\partial \mathbf{h}_{t+1}}{\partial \mathbf{h}_t} \cdot \delta_{t+1} \right] \cdot \sigma'(\mathbf{z}_t) \) [^1]。 BPTT算法的具体实现步骤可通过伪代码展示: ```python def GRADDESCBPTT(x, y, h, θ, ζ, loss, η): h0 = h ∇θJ, ∇ζJ = 0 # 初始化梯度为0 for i in range(1, L + 1): zi = W * hi-1 + U * xi + b # 计算隐藏状态输入 hi = Ψ(zi) # 更新隐藏状态 ŷi = V * hi + c # 生成预测 if loss == "squared": ei = ŷi - yi else: ei = σ(ŷi) - yi ∇ζJ = ∇ζJ + ∇ζ * g(hi) * ei # 累积预测参数梯度 εL+1 = 0 # 初始化误差向量为0 for i in range(L, 0, -1): εi = W.T * DΨ(zi+1) * εi+1 + V.T * ei # 更新误差向量 ∇θJ = ∇θJ + ∇θ * fi(hi-1) * εi # 累积过渡参数梯度 θ = θ - η * ∇θJ # 更新过渡参数 ζ = ζ - η * ∇ζJ # 更新预测参数 return θ, ζ ``` 在应用方面,递归神经网络(RNN)作为深度学习的核心组成部分之一,BPTT作为其计算梯度的方法,在处理复杂序列数据的任务上发挥重要作用。不过,RNN在处理长时间依赖时表现不佳,主要是因为BPTT存在梯度消失问题。当RNN进行反向传播时,梯度需通过时间逐步传递,在深度序列中,由于权重矩阵的反复相乘,梯度可能会快速衰减至接近零,导致模型无法学习到长距离时间依赖 [^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值