「embedding白盒子」参数梯度更新视角的word2vec模型解释

本文是2016年的论文《word2vec Parameter Learning Explained》的论文笔记。经过该论文的分析,词的word2vec预训练模型不再是一个黑盒子。该论文透彻地回答了一个问题:
为什么在一个以onehot词向量作为输入和输出的三层神经网络里,第一层与第二层中间的权重矩阵能够表达词的信息呢?更简洁地来说,为什么word2vec能够训练出表达语言信息的稠密词向量呢?

简单模型:一个输入词和一个输出词

先抛弃掉带有滑动窗口概念的CBOW模型和skip-gram模型,先考虑以下简单的模型,只有一个输入词和一个输出词(输入和输出都是onehot):


简单版CBOW模型

word2vec模型里,只要输入词和输出词在语言上是接近的,就能通过训练得到表达语言信息的稠密词向量。注意,在这个简单的模型里,还未有句子里相邻的词的概念。

w_I是输入词;
V是词的总数;
x\in \mathbb{R}^{V}是词的onehot向量;
W\in \mathbb{R}^{V×N}是第一层到第二层的权重矩阵;
v_{w_I}^{T}\in \mathbb{R}^{N}是权重矩阵W里代表词w_I的那一行向量的转置;
h是隐藏层向量:
h=W^Tx=v_{w_I}^{T}
W'\in \mathbb{R}^{N×V}是第二层到输出层的权重矩阵;
v'_{w_j}\in \mathbb{R}^{N}是权重矩阵W'的第j列;
u_j={v'_{w_j}}^Th
p(w_j|w_I)=p_j=\frac{exp(u_j)}{\sum_{j'=1}^{V}exp(u_{j'})}=\frac{exp({v'_{w_j}}^Tv_{w_I})}{\sum_{j'=1}^{V}exp({v'_{w_{j'}}}^Tv_{w_I})}
必须注意的是,向量v_wv'_w都是词w的稠密表达。前者是输入层到隐藏层的权重矩阵的某一行,后者是隐藏层到输出层的某一列。为了简化表达,下文将v_w称为输入词向量,将v'_w称为输出词向量。
假设t_j是输出词的onehot向量的第j个元素,如果输出词恰好是第j个词,那么
t_j=1,否则为0。假设输出词是第j^*个词,交叉熵损失函数为
E=-\sum_{j=1}^{V}t_jlogp(w_j|w_I)=-logp(w_{j^*}|w_I)=-u_{j^*}+log\sum_{V}^{j=1}exp(u_j)
套用一下求导公式,当j=j^*时有\frac{\partial E}{\partial u_j}=p_j-1,当j≠j^*时有\frac{\partial E}{\partial u_j}=p_j,总而言之,有:
\frac{\partial E}{\partial u_j}=p_j-t_j=e_j
e_j的含义是第j个词的error。对于权重矩阵W'的其中一个元素:
\frac{\partial E}{\partial w'_{ij}}=\frac{\partial E}{\partial u_j}\frac{\partial u_j}{\partial w'_{ij}}=e_jh_i
假设学习率是\eta,那么矩阵W'的某个元素的梯度更新的公式为:
{w'_{ij}}^{(new)}={w'_{ij}}^{(old)}-\eta e_jh_i
或者,矩阵W'的某一列的梯度更新公式为:
{v'_{w_j}}^{(new)}={v'_{w_j}}^{(old)}-\eta e_jh
在最初的时候,权重w_{ij}是被随机初始化的。上式是W'的某一列的梯度更新,该权重矩阵的每一列都是要被更新的。如果第j列刚好是输出词,那么e_j<0v'_{w_j}就会加上一小部分的h,这使得v'_{w_j}与输入词的输入向量v_{w_I}的距离更近;如果第j列不是输出词,那么e_j>0v'_{w_j}就会减去一小部分的h,这使得v'_{w_j}与输入词的输入向量v_{w_I}的距离更远。这里说的近和远,都是在内积测度下的距离。思考一下如果输入词和输出词是在一个小窗口里面的两个词,那么这两个词大抵上是在语言上意思接近的两个词。以上的梯度更新过程能让输入词和输出词的对应的权重更接近。这里说的权重是W'。接下来我们来看一下权重W
\frac{\partial E}{\partial h_i}=\sum_{j=1}^{V}\frac{\partial E}{\partial u_j}\frac{\partial u_j}{\partial h_i}=\sum_{j=1}^{V}e_jw'_{ij}=EH_i
标量EH_i并成一个向量:EH,其含义是输出权重的每一列(每一个输出词向量)的加权和,而权重是error。
经过简单的矩阵运算可以得到:
\frac{\partial E}{\partial W}=xEH^T=\begin{bmatrix} 0 & 0 & ... & 0\\ 0 & 0 & ... & 0\\ \vdots &\vdots & & \vdots \\ EH_1 & EH_2 & ... & EH_N\\ \vdots &\vdots & & \vdots \\ 0 & 0 & ... & 0 \end{bmatrix}
上式便是梯度,而只有输入词w_I的那一行的梯度会被更新,其它梯度都不变:
{v_{w_I}}^{(new)}={v_{w_I}}^{(old)}-\eta EH^T
直观地来说,由于EH是以e_j作为权重的输出词向量的加权求和,我们可以理解为对输入词w_I的输入向量加上了所有词的输出词向量的一部分,以\eta e_j为权重。v_{w_I}加上了v'_{w_O},以及减去了其它所有词v'_j。在内积测度上,每次更新梯度,v_{w_I}向输出词的输出向量v'_{w_O}走得更近了,以及向所有不是输出词的词的输出向量v'_j走得更远了。
在使用一个语料库不断地更新梯度时,所有词的输出向量v'_j被输入词的输入向量“来回地拉扯”,输入词的输入向量v_{w_I}也被所有词的输出向量“来回地拉扯”,就像有一个物理的力量在不断调整词向量在空间的位置,使得意思相近的词在空间上的距离更接近。只要通过一种工程方法保证输入词和输出词是意思接近的或者有联系的,那就能够保证在梯度下降的过程中,意思相近的词在空间上的距离更接近。而这种工程方法就是基于滑动窗口的CBOW或者skip-gram。

CBOW:多个输入词与一个输出词

CBOW模型

如图所示,句子的滑动窗口的中心词w_O作为输出词,中心词旁边的C个词w_{I,1},...w_{I,C}作为输入词。输入层到隐藏层里,不同的输入词共享一个权重矩阵:
h=\frac{1}{C}W^T(x_1+x_2+...+x_C)=\frac{1}{C}(v_{w_1}+v_{w_2}+...+v_{w_C})^T
u_j={v'_{w_j}}^Th
p(w_j|w_{I,1},...w_{I,C})=\frac{exp(u_j)}{\sum_{j'=1}^{V}exp(u_{j'})}
\frac{\partial E}{\partial h_i}=\sum_{j=1}^{V}e_jw'_{ij}=EH_i
这种情况下损失函数、\frac{\partial E}{\partial W'}以及W'的梯度更新的含义都是和上面一样的。重点探究一下W的梯度更新的含义。
上面的简单模型里,W的梯度下降只需要更新一个输入词的输入向量的梯度。此处的CBOW里,需要更新C个词的输入向量的梯度。通过简单的矩阵运算得到:
\frac{\partial E}{\partial W}=\frac{1}{C}(x_1+x_2+...+x_C)EH^T
\frac{\partial E}{\partial W}是一个梯度矩阵,这个矩阵里只有对应着输入词的行的梯度才是非零的。梯度更新的公式如下:
{v_{w_{I,c}}}^{(new)}={v_{w_{I,c}}}^{(old)}-\frac{1}{C}\eta EH^T
其含义与上面的分析也是一样的。其实多对一的CBOW模型与上面简单的一对一模型几乎没有变化,只不过是窗口内多个输入词输入进去一起训练了。

skip-gram:一个输入词与多个输出词

skip-gram模型

skip-gram模型的输入层到隐藏层与简单模型一样,仅考察输出层。对于第c个词:
p(w_{c,j}=w_O|w_I)=\frac{exp(u_{c,j})}{\sum_{j'=1}^{V}exp(u_{j'})}
由于隐藏层到输出层是共享权重的,所以u_{c,j}u_j是相等的。下标多了个字母c只是为了表达这是第c个输出词的预测。
u_{c,j}=u_j={v'_{w_j}}^Th
skip-gram的一个细节是,假定C个输出词之间是独立的。因此C个输出词的联合概率密度的对数,作为损失函数,可以写成:
E=-logp(w_{O,1},w_{O,2},...,w_{O,C}|w_{I})=-log\prod_{c=1}^{C}p(w_{O,c}|w_{I})
=-log\prod_{c=1}^{C}\frac{exp(u_{c,j_c^*})}{\sum_{j'=1}^{V}exp(u_{j'})}=-\sum_{c=1}^{C}u_{c,j_c^*}+Clog\sum_{j'=1}^{V}exp(u_{j'})
对于第c个词(c=1,2,...,C)有:
\frac{\partial E}{\partial u_{c,j}}=p_{c,j}-t_{c,j}=e_{c,j}
定义EI_j=\sum_{c=1}^{C}e_{c,j}EI_j的含义是C个词的error加起来。便得到了损失函数对W'的梯度:
\frac{\partial E}{\partial w'_{ij}}=\sum_{c=1}^{C}\frac{\partial E}{\partial u_{c,j}}\frac{\partial u_{c,j}}{\partial w'_{ij}}=EI_jh_i
梯度下降的公式:
{w'_{ij}}^{(new)}={w'_{ij}}^{(old)}-\eta EI_jh_i
或者,矩阵W'的某一列的梯度更新公式为:
{v'_{w_j}}^{(new)}={v'_{w_j}}^{(old)}-\eta EI_jh
EH_i=\sum_{j=1}^{V}EI_jw'_{ij},只与简单模型的有了些许变化,其含义并没有变;在简单模型里,v_{w_I}是朝着一个输出词的输出向量接近,朝着所有不是输出词的输出向量远离,在skip-gram理则是朝着C个输出词的输出向量接近,朝着所有不是输出词的输出向量远离(内积测度下的接近和远离)。W的梯度下降公式:
{v_{w_I}}^{(new)}={v_{w_I}}^{(old)}-\eta EH^T

word embedding的优良性质

词embedding向量有非常优良的性质,这些性质使得embedding向量包含了语义信息,因此可以直接用于深度语言模型的有监督训练;例如:

  1. 词性相同且意思相近的词embedding很接近。这个接近不仅体现在cosine相似度上,也体现在欧氏距离上。例如,v(猫咪)与v(狗狗)相似,而v(萨摩耶)与v(柴犬)相似。
  2. 类比性质:这是一个非常神奇的,更加能体现语义的性质。如v(中国)-v(北京)≈v(法国)-v(巴黎),国家的embedding和首都的embedding之差能得到相似的向量。又如v(国王)-v(王后)≈v(男人)-v(女人)。人类在婴儿时期学习语言很大程度上都是依靠类比的能力;本文在解释Word2vec的原理也大量使用了类比的方法。类比是人类学习的一把不可或缺的斧子。而word2vec模型居然有类比的能力,太神奇了!但是本文对word2vec的原理探究中,为何它能有类比性质依然没有很清晰地说明。下图是embedding向量的降维可视化:


TODO: hierarchical softmax、negative sampling...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容