Skip-Gram

模型结构

与CBOW模型正好相反,Skip-Gram模型是根据中心单词(target word)来预测其上上下文信息(context words)。如下图所示,为Skip-Gram模型的结构示意图

我们仍然使用 vwIv_{w_I} 来表示输入层上唯一的那个单词的输入向量,因此,我们对于隐藏层的输出值 hh 的计算公式与CBOW相同,表示如下:

h=Wk,T:=vwIh = W^T_{k,\cdot}:=v_{w_I}

上式显示, hh 向量其实就是输入层到隐藏层权重矩阵 WW 某一行结合输入单词 wIw_I 的向量拷贝。在输出层,与CBOW模型的输出为单个多项式分布不同的是,Skip-Gram模型在输出层输出了C个多项式分布。每个输出都使用相同的隐藏层到输出层矩阵计算:

p(wc,j=wO,cwI)=yc,j=exp(uc,j)j=1Vexp(uj)p(w_{c,j}=w_{O,c}|w_I)=y_{c,j}=\frac{\exp(u_{c,j})}{\sum\limits_{j'=1}^V\exp(u_{j'})}

其中, wc,jw_{c,j} 表示输出层的第 cc 个panel的第j个单词(何为panel?就是输出层的表示每个上下文单词的神经元的组合,图中一共有 CC 个context words,所以总共有 CC 个panel); wO,cw_{O,c} 实际上表示的是输出上下文单词(output context words)的第 cc 个单词; wIw_I 是唯一的输入单词; yc,jy_{c,j} 为输出层的第 cc 个panel上的第 jj 个神经单元的概率输出值; uc,ju_{c,j} 表示的是输出层第 cc 个panel的第 jj 个神经元的输入值;由于输出层的所有panels共享同一权重矩阵 WW' ,因此:

uc,j=uj=vwjTh,   for c=1,2,,Cu_{c,j}=u_{j}=v_{w_j}'^T\cdot h,\ \ \ for\ c=1,2,\dots,C

其中, vwjv'_{w_j} 为词汇表第 jj 个单词 wjw_j 的输出向量;同样,它也是取自于隐藏层到输出层权重矩阵 WW' 的一列。

模型训练

Skip-Gram模型参数更新公式的推导过程与One-word context 模型的推导过程大体上一样。这里我们将损失函数变为:

E=logp(wO,1,wO,2,,wO,CwI)E = -\log p(w_{O,1},w_{O,2},\dots,w_{O,C}|w_I)

=logc=1Cexp(uc,jc)j=1Vexp(uj)=-\log\prod\limits_{c=1}^C\frac{\exp(u_{c,j_{c}^*})}{\sum\limits_{j'=1}^V\exp(u_{j'})}

=c=1Cujc+Clogj=1Vexp(uj)= -\sum\limits_{c=1}^Cu_{j_c^*}+C\cdot \log \sum\limits_{j'=1}^V\exp(u_{j'})

其中, jcj_c^* 为第 cc 个输出层输出的上下文单词在词汇表中的真实索引。

在得到损失函数 EE 之后,我们对输出层的每一个panel上的所有激活单元的输入值 uc,ju_{c,j} 均求其关于 EE 的偏导数,得:

Euc,j=yc,jtc,j:=ec,j\frac{\partial E}{\partial u_{c,j}}=y_{c,j}-t_{c,j}:=e_{c,j}

其中 ec,je_{c,j} 为输出层神经元的预测误差。为了简化符号,我们定义一个 VV 维的向量 EI={EI1,EI2,,EIV}EI=\{EI_1,EI_2,\dots,EI_V\} 作为所有上下文单词的预测误差之和, EIjEI_j 用公式定义如下:

EIj=c=1Cec,jEI_j=\sum\limits_{c=1}^Ce_{c,j}

接下来,我们计算隐藏层到输出层权重矩阵 WW' 关于 EE 的偏导数为:

Ewij=c=1CEuc,juc,jwij=EIjhi\frac{\partial E}{\partial w'_{ij}}=\sum\limits_{c=1}^C\frac{\partial E}{\partial u_{c,j}}\frac{\partial u_{c,j}}{\partial w'_{ij}}=EI_j\cdot h_i

1)隐藏层到输出层权重更新

这样,我们就得到了隐藏层到输出层权重矩阵 WW' 的参数更新公式为:

wij(new)=wij(old)ηEIjhiw'^{(new)}_{ij}=w'^{(old)}_{ij}-\eta\cdot EI_j\cdot h_i

或者表示为 vwj(new)=vwj(old)ηEIjhi,   for j=1,2,,Vv'^{(new)}_{w_j}=v'^{(old)}_{w_j}-\eta\cdot EI_j\cdot h_i, \ \ \ for\ j=1,2,\dots,V

上述参数更新公式的直观概念理解与CBOW无二,除了一点就是:输出层的预测误差的计算是基于多个上下文单词context words,而不是单个目标单词 target word;需注意的是对于每一个训练样本,我们都要利用该参数更新公式来更新隐藏层到输出层权重矩阵 WW' 的每个元素。

2)输入层到隐藏层权重更新

同样,对于输入层到隐藏层权重矩阵 WW 的参数更新公式的推导过程,除了考虑要将预测误差 eje_j 替换为 EIjEI_j 外,其他也与CBOW类似。这里我们直接给出更新公式:

vwI(new)=vwI(old)ηEHTv^{(new)}_{w_I}=v^{(old)}_{w_I}-\eta\cdot EH^T

其中, EHEH 是一个 NN 维向量,组成该向量的每一个元素可以用如下公式表示:

EHi=j=1VEIjwijEH_i=\sum\limits_{j=1}^VEI_j\cdot w'_{ij}

Source

Last updated