embedding到一个低维向量,但是需要回到onehot高维表示,所以大部分填词游戏最后都需要加上一个MLP接头。
word2vec如此简单的结构,学习到的是embedding
基于计数的统计方法和word2vec融合就形成了glove词嵌入模型
总结:通过各种填词游戏训练最后得到好的embedding
使用负采样代替大矩阵乘法+softmax的大量计算(抽列+sigmoid)
负采样:使用二分类拟合多分类 只计算出一个值即可?接上sigmoid计算二分类loss?什么垃圾
因此,所有的多分类都可以使用二分类简化,因为softmax和sigmoid本质也一样
负采样:对负例样本进行采样:比如一个+,100个-,代替一个+,999999个-
负采样对语料库中的高频词进行,直观上合理,但是数学上为什么合理?
一般word embedding和特定任务的训练是分开的(即迁移学习),但是也可以一起。
woman-queen=man-?这种问题就是来评估embedding效果的,直接vec-vec查看即可
skip-gram比CBOW好,难以直观理解
RNN天然携带position信息,还可以处理无限长的序列;(RNN是语言模型,即计算条件概率P(next|past1, past2, past3),进而计算P(sentence))
transformer由于attention算法没有考虑位置信息,所以需要position embedding
关于RNN的一切:
RNN只是个数据融合器/有限状态机,顾名思义隐含向量叫做状态,保存了前文综合信息,仅此而已。
做预测还需要接上奶嘴MLP。
embedding RNN 和奶嘴MLP网络是割裂的三个层次,积木拼在一起。
所以RNNLSTM只是一个信息融合机,和预测下一个词等应用完全无关。
没有什么teacher forcing问题。
hidden = hidden.detach()让hidden忘掉了他是从哪里计算得来的,于是再使用hidden进行运算,hidden就会被当作新的独立变量,它的祖先也就得不到梯度更新了。(truncated BPTT)
预测下一个词的模型的评价指标:困惑度=e^Loss(困惑度本质就是loss罢了)
困惑度的物理意义:困惑度表示“概率的倒数”(正确标签对应的概率倒数),也可以解释为分叉度,即有几个分叉选择
RNN为什么不擅长长时记忆?答:BPTT会发生梯度消失/爆炸
RNN通过向过去传递梯度,学习长时依赖关系,但是中间发生了梯度消失/爆炸,于是学不到长期关系。(RNN如何学习长期关系?答:通过向很长时间以前的时刻传递梯度)
梯度消失原因:1.反复经过激活函数(tanh两边都趋于0,所以反向经过一次就会梯度变小)
梯度消失/爆炸的原因:2.反向传播每个时间RNN层中的梯度都乘以相同的权重矩阵,于是爆炸/消失
梯度爆炸的应对策略:梯度裁剪
梯度消失的解决方案:LSTM
原因:化矩阵乘积为哈达玛元素乘积,且每次向量不一样,不会出现累积效应