近似训练

​ 在对跳元模型和连续词袋模型的梯度计算过程中需要求和,所以对于词典而言,求和的梯度计算成本十分巨大。所以我们可以采用负采样和分层softmax


负采样

​ 负采样修改了原目标函数,放弃softmax转而使用sigmoid来实现。

​ sigmoid的函数定义如下:

​ 我们从最大化文本序列中所有这些事件的联合概率开始训练词嵌入,如果只算正向部分,那对于给定长度为TT的文本序列,以w^(t)表示时间步t的词,并使上下文窗口为m,最大化联合概率为:

而负采样添加从预定义分布中采样的负样本。

​ 用Wk表示噪声词,则Wk与中心词的窗口内上下文词的条件概率为:

​ 用v和u分别表示中心词和上下文词的两个向量,用it和hk分别表示窗口内词与噪声词在时间步t处的索引,则件概率的对数损失为:

总结:每个训练步的梯度计算成本与词表大小无关,而是线性依赖于采样K。当将超参数K设置为较小的值时,在负采样的每个训练步处的梯度的计算成本较小。


分层SoftMax

分层softmax使用二叉树,其中树的每个叶节点表示词表中的一个词。原理图如下

​ 若用二叉树来实现中心词和上下次的分割,那在寻找的时候会议二的n次方的形式缩减计算成本,因为二叉树查找的时间复杂度为log以2为底 n,所以我们的运算数量级可以减小到log以2为底的结点个数数量级,计算成本显著降低。