NLP with Deep Learning Lecture 2 笔记

本篇是学习斯坦福公开课”Natural Language Processing with Deep Learning”时的笔记。

包含leture2的内容。

1. Word2Vec的含义

一个单词,神经网络理解不了,需要人转换成数字再喂给它。最naive的方式就是one-hot,但是太过于稀疏,不好。所以在改进一下,把one-hot进一步压缩成一个dense vector。

word2vec算法就是根据上下文预测单词,从而获得词向量矩阵。

预测单词的任务只是一个幌子,我们需要的结果并不是预测出来的单词,而是通过预测单词这个任务,不断更新着的参数矩阵weights。

预测任务由一个简单的三层神经网络来完成,其中有两个参数矩阵 V U VDh×W UW×Dh

V 是输入层到隐藏层的矩阵,又被称为look-up table(因为,输入的是one-hot向量,一个one-hot向量乘以一个矩阵相当于取了这个矩阵的其中一列。将其中的每一列看成是词向量)。

U是隐藏层到输出层的矩阵,又被称为word representation matrix(将其中的每一行看成是词向量)。

最后需要的词向量矩阵是将两个词向量矩阵相加 = V+UT ,然后每一列就是词向量。

2 两种实现方法

2.1 Skip-Gram

训练任务:根据中心词,预测出上下文词

输入:一个中心词(center word, xW×1

参数:一个look up table VDh×W ,一个word representation matrix UW×Dh

输出:T个上下文词(context word, ŷ W×1

损失函数:cross-entropy - Jt(θ)=ylogŷ 

详细步骤:

vc=VxDh×1

z=UvcW×1

ŷ =softmax(z)W×1

Jt(θ)=ylogŷ 

J(θ)=1Tt=1TJt(θ)

Skip-Gram步骤图:

skipgram1

2.2 CBOW

与Skip-Gram相反,是通过完成上下文词预测中心词的任务来训练词向量的。

训练任务:根据上下文词,预测出中心词

输入: T 个上下文词(context word,xW×1

参数:一个look up table VDh×W ,一个word representation matrix UW×Dh

输出:一个中心词(center word, ŷ W×1

损失函数:cross-entropy - Jt(θ)=ylogŷ 

详细步骤:

vot=VxtDh×1

vo=t=1Tvot

z=UvoW×1

ŷ =softmax(z)W×1

J(θ)=Jt(θ)=ylogŷ 

CBOW步骤图:

cbow

3. 两种优化方法

3.1 Negative Sampling

以下内容基于Skip-Gram模型。CBOW同理。

原始的方法中使用softmax()将z转化成 ŷ  。很明显地,softmax()公式的分母将整个corpus都遍历了一遍,这个计算量并不小:

softmax(z)=ziWj=1zj

代替的方法是“负采样”。即从一个特定分布中,随机取出k个words来代表整个corpus。k个words和中心词(center word)组成成为noise pairs,上下文词(context words)和中心词(center word)组合成为true pairs。

这样一来,需要改变loss function为:

Jt(θ)=logσ(uTovc)k=1Klogσ(uTkvc)

注: ui=U[i] ,即U中第i行。

如果true pair出现的概率越大,noise pairs出现的概率越小,则这个loss会减小,满足loss的定义,所以可以把loss表示成如上公式。

3.2 Hierarchical Softmaxg

待续……

4. 两种求导

以下内容基于Skip-Gram模型。CBOW同理。

模型要学习的是两个参数矩阵 V U

4.1 Naive Softmax bp

首先,对 V 求梯度其实就是对vc求梯度,因为在forward过程中,参与loss计算的只有 V 中第c列。所以,只对 vc 求导即可。

其次,对 U 求梯度,对U中每一个元素进行求导,因为在forward过程中, U 中每一个元素参与loss计算(softmax中)。

Forward如下,只考虑一对pair:

vc=Vx

z=Uvc

ŷ =softmax(z)

Jt(θ)=ylogŷ 

Back Propagate如下:

定义几个reused项:

δ1=Jtz=ŷ y

这一项很好求, softmax(z)=ziWj=1zj ,先求 Jtzi ,再求 Jtzj(ji) ,然后组合成 Jtz

然后对 U 进行求导:

JtU=JtzzU=δ1vTc

提示:可以先大概的写出链式求导的几个项,然后根据维度进行组合。

接着对 V 进行求导:

JtV=Jtvc=Jtzzvc=UTδ1

4.2. Negative Sampling bp

首先,对 V 求梯度其实就是对vc求梯度,因为在forward过程中,参与loss计算的只有V中第c列。所以,只对 vc 求导即可。

其次,对U求梯度,对 uo uk 求梯度,因为在forward过程中,参与loss计算的只有 uo uk

Forward如下,只考虑一对true pair:

vc=Vx

z=Uvc

Jt(θ)=logσ(uTovc)k=1Klogσ(uTkvc)

Back Propagate如下:

vc 求导:

Jt(θ)vc=Jt(θ)uTovcuTovcvc+k=1KJt(θ)uTkvcuTkvCvc=(σ(uTovc)1)uok=1K(σ(uTkvc)1)uk

同理,对 uo 求导:

Jt(θ)uo=(σ(uTovc)1)vc

同理,对 uk 求导:

Jt(θ)uk=(σ(uTkvc)1)vc

然后其余 urest

Jt(θ)urest=0

最后整理得:

Jt(θ)V=Jt(θ)vc

Jt(θ)U=[Jt(θ)uo;Jt(θ)uk;Jt(θ)urest]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值