神经翻译笔记3. 神经网络语言模型与词向量

神经翻译笔记3. 神经网络语言模型与词向量

本文主要参考了如下教程

其中主要会以[Neubig2017]和[StanfordCS224n]的内容为主

神经网络

关于神经网络的一些基本细节,例如基本概念、反向传播的思想等等,在博客的其它文章里(如林轩田老师的机器学习技法Hinton的Coursera课程)有过介绍,这里就不赘述了。这里想就着斯坦福大学CS224n第四讲的内容从矩阵的层面上给出反向传播梯度的计算方法

一个示例结构

神经网络结构示意图

上图给出了一个示例神经网络,各层参数与输入、输出及其它记号如下

  • 输入向量 x ∈ R 3 × 1 \boldsymbol{x} \in \mathbb{R}^{3 \times 1} xR3×1
  • 输入层到隐藏层的权重 W ∈ R 2 × 3 \boldsymbol{W} \in \mathbb{R}^{2 \times 3} WR2×3,同时还包括一个偏置向量 b ∈ R 2 × 1 \boldsymbol{b} \in \mathbb{R}^{2 \times 1} bR2×1
  • 隐藏层向量在激活前是 z ∈ R 2 × 1 \boldsymbol{z}\in \mathbb{R}^{2 \times 1} zR2×1,激活函数是 f f f,向量激活后为 a ∈ R 2 × 1 \boldsymbol{a} \in \mathbb{R}^{2 \times 1} aR2×1
  • 隐藏层到输出层的权重 U ∈ R 2 × 1 \boldsymbol{U} \in \mathbb{R}^{2 \times 1} UR2×1 (按照约定的记法,向量用小写粗体,矩阵用大写粗体,这里应该写为 u \boldsymbol{u} u。不过为了与原课件对应,这里没有这样做)
  • 神经网络的输出结果为一个标量 s s s

按照如上约定, s s s 的计算过程向量化表示如下
s = U T a = U T f ( z ) = U T f ( W x + b ) \begin{aligned} s &= \boldsymbol{U}^\mathsf{T}\boldsymbol{a} \\ &= \boldsymbol{U}^\mathsf{T}f(\boldsymbol{z}) \\ &= \boldsymbol{U}^\mathsf{T}f(\boldsymbol{Wx}+\boldsymbol{b}) \end{aligned} s=UTa=UTf(z)=UTf(Wx+b)
或者分变量写出,成为如下形式
s = U T a a = f ( z ) z = W x + b \begin{aligned} s &= \boldsymbol{U}^\mathsf{T}\boldsymbol{a} \\ \boldsymbol{a} &= f(\boldsymbol{z}) \\ \boldsymbol{z} &= \boldsymbol{Wx} + \boldsymbol{b} \end{aligned} saz=UTa=f(z)=Wx+b

按照梯度下降的原理,训练模型时需要得到损失函数 J J J对每个参数的梯度。例如,对于参数 W \boldsymbol{W} W,需要计算 ∂ J ∂ W \frac{\partial J}{\partial \boldsymbol{W}} WJ。根据反向传播算法和导数的链式法则,有
∂ J ∂ W = ∂ J ∂ s ⋅ ∂ s ∂ W \frac{\partial J}{\partial \boldsymbol{W}} = \frac{\partial J}{\partial s}\cdot \frac{\partial s}{\partial \boldsymbol{W}} WJ=sJWs
其中,第一项 ∂ J ∂ s \frac{\partial J}{\partial s} sJ如何计算应该视具体的损失函数计算方法而定,与参数本身无关。因此对任意参数,只需要关注网络输出 s s s对该参数的偏导即可

从矩阵元素看如何计算梯度

(这一部分讲得比较详细但是也很繁琐,不感兴趣的可以跳过)

要计算 ∂ s ∂ W \frac{\partial s}{\partial \boldsymbol{W}} Ws,可以首先考虑如何计算 ∂ s ∂ W i j \frac{\partial s}{\partial W_{ij}} Wijs 。由 s s s 的计算方法,有
∂ s ∂ W i j = ∂ ∂ W i j U T a \frac{\partial s}{\partial W_{ij}} = \frac{\partial}{\partial W_{ij}}\boldsymbol{U}^\mathsf{T}\boldsymbol{a} Wijs=WijUTa
由前图,每个 W i ⋅ \boldsymbol{W}_{i\cdot} Wi只与 a i a_i ai 相关, a i a_i ai又只与 U i a i U_ia_i Uiai相关,因此
∂ ∂ W i j U T a = ∂ ∂ W i j U i a i \frac{\partial}{\partial W_{ij}}\boldsymbol{U}^\mathsf{T}\boldsymbol{a} = \frac{\partial }{\partial W_{ij}}U_ia_i WijUTa=WijUiai

由于 U i U_i Ui W i j W_{ij} Wij无关,因此可以提出来。代入其它变量定义,并将 f f f的导数记作 f ′ f' f(因为可选的激活函数有很多种),可以得到
∂ ∂ W i j U i a i = U i ∂ ∂ W i j a i = U i ∂ a i ∂ z i ∂ z i ∂ W i j = U i ∂ f ( z i ) ∂ z i ∂ z i ∂ W i j = U i f ′ ( z i ) ∂ z i ∂ W i j = U i f ′ ( z i ) ∂ ( W i ⋅ x + b i ) ∂ W i j = U i f ′ ( z i ) ∂ ∂ W i j ∑ k W i k x k = U i f ′ ( z i ) x j \begin{aligned} \frac{\partial}{\partial W_{ij}}U_ia_i &= U_i \frac{\partial}{\partial W_{ij}}a_i \\ &= U_i \frac{\partial a_i}{\partial z_i} \frac{\partial z_i}{\partial W_{ij}} \\ &= U_i \frac{\partial f(z_i)}{\partial z_i}\frac{\partial z_i}{\partial W_{ij}} \\ &= U_i f'(z_i)\frac{\partial z_i}{\partial W_{ij}} \\ &= U_i f'(z_i)\frac{\partial (\boldsymbol{W}_{i\cdot}\boldsymbol{x} + b_i)}{\partial W_{ij}} \\ &= U_i f'(z_i) \frac{\partial }{\partial W_{ij}}\sum_kW_{ik}x_k \\ &= U_i f'(z_i) x_j \end{aligned} WijUiai=UiWijai=UiziaiWijzi=Uizif(zi)Wijzi=Uif(zi)Wijzi=Uif(zi)Wij(Wix+bi)=Uif(zi)WijkWikxk=Uif(zi)xj
如果将 U i f ′ ( z i ) U_if'(z_i) Uif(zi)看做一个整体,记作 δ i \delta_i δi,那么有
∂ s ∂ W i j = δ i x j \frac{\partial s}{\partial W_{ij}} = \delta_ix_j Wijs=δixj
由于标量 y y y对矩阵 X ∈ R m × n \boldsymbol{X} \in \mathbb{R}^{m \times n} XRm×n的求导法则为
∂ y ∂ X = [ ∂ y ∂ X 11 ⋯ ∂ y ∂ X 1 n ⋮ ⋱ ⋮ ∂ y ∂ X m 1 ⋯ ∂ y ∂ X m n ] \frac{\partial y}{\partial \boldsymbol{X}} = \left[\begin{matrix}\frac{\partial y}{\partial X_{11}} & \cdots & \frac{\partial y}{\partial X_{1n}} \\ \vdots & \ddots & \vdots \\ \frac{\partial y}{\partial X_{m1}} & \cdots &\frac{\partial y}{\partial X_{mn}}\end{matrix}\right] Xy=X11yXm1yX1nyXmny
因此
∂ s ∂ W = [ ∂ s ∂ W 11 ∂ s ∂ W 12 ∂ s ∂ W 13 ∂ s ∂ W 21 ∂ s ∂ W 22 ∂ s ∂ W 23 ] = [ δ 1 x 1 δ 1 x 2 δ 1 x 3 δ 2 x 1 δ 2 x 2 δ 2 x 3 ] = δ x T \begin{aligned} \frac{\partial s}{\partial \boldsymbol{W}} &= \left[\begin{matrix}\frac{\partial s}{\partial W_{11}} & \frac{\partial s}{\partial W_{12}} & \frac{\partial s}{\partial W_{13}} \\ \frac{\partial s}{\partial W_{21}} & \frac{\partial s}{\partial W_{22}} & \frac{\partial s}{\partial W_{23}}\end{matrix}\right] \\ &= \left[\begin{matrix} \delta_1x_1 & \delta_1x_2 & \delta_1x_3 \\ \delta_2x_1 & \delta_2x_2 & \delta_2x_3\end{matrix}\right] \\ &= \boldsymbol{\delta}\boldsymbol{x}^\mathsf{T} \end{aligned} Ws=[W11

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值