前向传播、反向传播和计算图

1.前向传播

为简单起见,隐藏层不包括偏置项。x\in \mathbb{R}^{d},中间变量为:

z=W^{(1)}x

其中W^{(1)}\in \mathbb{R}^{h\times d}是隐藏层的权重参数。再通过激活函数\phi后,隐藏激活向量:

h=\phi (z)

隐藏变量h也是一个中间变量。假设输出层的参数只有权重W^{(2)}\in \mathbb{R}^{q\times h},我们可以得到输出层变量,它是一个长度为q的向量。

o=W^{(2)}h

假设损失函数为l,样本标签为y,则单个样本的损失项,L=l(o,y)

根据正则化定义,给定超参数\lambda,正则化项为:

s=\frac{\lambda }{2}(\left \| W^{(1)} \right \|_{F}^{2}+\left \| W^{(2)} \right \|_{F}^{2})

最后,模型在给定数据样本上的正则化损失为:

J=L+s

2.反向传播

反向传播(backward propagation)指的是计算神经网络参数梯度的方法。简言之,该方法根据微积分中的链式规则,按相反的顺序从输出层到输入层遍历网络。该算法存储了计算某些参数梯度时所需的任何中间变量(偏导数)。假设我们有函数Y=f(x)和Z=g(Y),其中输入和输出是任意形状的张量。利用链式法则,我们可以计算Z关于X的导数.

\frac{\partial Z}{\partial Y}=prod(\frac{\partial Z}{\partial Y},\frac{\partial Y}{\partial X})

在这里,我们使用prod运算符在执行必要的操作(如换位和交换输入位置)后将其参数相乘。对于向量,这很简单,它只是矩阵-矩阵乘法。对于高维张量,我们使用适当的对应项。运算符prod指代了所有的这些符号。

回想一下,在计算单隐藏层简单网络的参数是W^{(1)}W^{(2)}。反向传播的目的是计度\partial J/\partial W^{(1)}\partial J/\partial W^{(2)}。为此,我们链式法则,以此计算每个中间变量和参数的梯度。计算的顺序与前向传播中执行的顺序相反,因为我们需要从计算图的结果开始,并朝着参数的方向努力。第一步是计算目标函数J=L+s相对于损失项和正则项的梯度。

\frac{\partial J}{\partial L}=1 and \frac{\partial J}{\partial s}=1

接下来,我们根据链式法则计算目标函数关于输出层变量的梯度:

\frac{\partial J}{\partial o}=prod(\frac{\partial J}{\partial L},\frac{\partial L}{\partial o})=\frac{\partial L}{\partial o}\in \mathbb{R}^{q}

接下来,我们计算正则化项相对于两个参数的梯度:

\frac{\partial s}{\partial W^{(i)}}=\lambda W^{(i)}

现在我们可以计算最接近输出层的模型参数的梯度\partial J/\partial W^{(2)}\in \mathbb{R}^{q\times h}.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三金无盖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值