6.5.4 全连接MLP中的反向传播计算
损失函数
$L(\hat y, y)$
总代价
J
$J= L(\hat y, y) + \lambda \Omega(\theta)$
正则项
$\Omega(\theta)$
$\theta$包含所有参数(权重和偏置
模型的权重矩阵
$W^l$
模型的偏置参数
$b^l$
程序的输出
x
目标输出
y
实际输出
$\hat y$
网络的深度
L
某一层的输出
$h^l$
同时也是下一层的输入。 书上用的是h,我有时候会写成a
某一层的加权输入
$z^l$
书上用的是a,我更喜欢用z
为了阐明反向传播的上述定义,让我们考虑一个与全连接的多层MLP相关联的特定图。
[success] 这一节是反向传播算法在MLP上的具体应用。 只是主要流程。具体的计算过程涉及到一些数学基础。
算法6.3首先给出了前向传播,它将参数映射到与单个训练样本(输入,目标)$(x,y)$相关联的监督损失函数$L(\hat{y}, y)$,其中$\hat{y}$是当$x$提供输入时神经网络的输出。
[success]
算法6.3通过正向传播计算每一层的unit的加权输入z和激活输出h。
h_0 = x for l = 1,...,L do: z_k = b_k + W_k.dot(h_(k-1)) h_k = f(z_k) end for y_hat = h_L J = L(y_hat, y) + lambda * omega(theta)
算法6.4随后说明了将反向传播应用于该图所需的相关计算。
[success]
算法6.4通过反向传播计算每一层的unit的h的偏导、z的偏导、w的偏导、b的偏导。 书上的g有两个用处,为了区分,我把它的两个用处分别用gh和gz gh为损失函数L(\hat y, y)对输出h^l的偏导。 gz为损失函数L(\hat y, y)对加权输入z^l的偏导。 w的偏导为总代价J对权重矩阵W^l的偏导。 b的偏导为总代价J对偏置参数|b^l的偏导。 根据定义计算第L层的情况 第L层的特殊在于$h^L = \hat y$
ghLgzL∇WLJ∇bLJ======∂hL∂L(y^,y)=∇y^L(y^,y)∂zL∂L(y^,y)=∂hL∂L(y^,y)∂zL∂hL=ghL⨀f′(zL)∂WL∂L(y^,y)+∂WL∂λΩ(θ)=∂zL∂L(y^,y)∂WL∂zL+∂WL∂λΩ(θ)gzL(xL)T+λ∇WLΩ(θ)=gzL(hL−1)T+λ∇WLΩ(θ)∂bL∂L(y^,y)+∂bL∂λΩ(θ)=∂zL∂L(y^,y)∂bL∂zL+∂bL∂λΩ(θ)gzL+λ∇bLΩ(θ)根据定义计算第l层的情况
for l = L-1, ..., 1 do:ghlgzl∇WlJ∇blJ=====∂hl∂L(y^,y)=i∑∂zil+1∂L(y^,y)∂hl∂zil+1=i∑∂zil+1∂L(y^,y)∂xl+1∂zil+1(Wl+1)Tgzl+1∂zl∂L(y^,y)=∂hil∂L(y^,y)∂zl∂hl=ghl⨀f′(zl)gzl(hl−1)T+λ∇WlΩ(θ)gzl+λ∇blΩ(θ)公式中的f'(z^l)是主要的计算量。 计算出来的是一个矩阵,称为Jacobian矩阵。
算法6.3和算法6.4是简单而直观的演示。 然而,它们专门针对特定的问题。
现在的软件实现基于之后第6.5.6节中描述的一般形式的反向传播,它可以通过显式地操作表示符号计算的数据结构,来适应任何计算图。
Last updated

