6、深度RNN-Deep RNN
在学习非常复杂的函数时,将多层RNN堆在一起形成更深层次的RNN会更有帮助。DRNN的架构示意图如下图所示:
如上图所示,若要计算 a[2]<3>,即第2层,在第3个时间步下的值,需要如下计算:
通常情况下,RNN的深度不会超过3层,因为RNN有横向的时间维度;但是在超过3层之后,可以继续添加没有横向时间维度连接的更深层次的神经元,经历更深层次的神经网络之后在输出预测值
y<t>。
7、词汇嵌入-Word Embedding
在建立语料库vocabulary之后,最简单的方法是使用one-hot方式来表示某个词汇,但是one-hot表示方式不能只能表示出其在语料库中的位置,不能体现出词汇之间的相互关系,所示使用更多的特征来表示某个词汇,如下图所示:
7.1 使用词汇嵌入做词汇类比推理
若已经知道man对应的单词是woman,需要预测king对应的单词是什么,任务可以用公式表示为:
Findawordw:argwmaxsim(ew,eking−eman+ewoman)
最常用的相似度函数为余弦相似度函数,
其中 u , v u,v u,v表示通过word embedding 得出的向量。
7.2 嵌入矩阵
使用词汇嵌入之后的嵌入矩阵如下所示:
上图展示了特征为300个,vocabulary库中词汇量为10000的词汇嵌入矩阵。
7.3 Word 2 Vec
用来训练word embedding的skip-gram模型的构建过程如下所示:
这是一种监督训练的方式,已知训练集中的输入输出,首先取出输入序列中的某个单次,获取其在word Embedding中的值 ec,之后通过softmax层得到这个输入的预测值 y
,需要训练的参数包括word embedding中的参数和softmax计算式中的参数 θ t \theta_t θt。训练模型使用的损失函数为交叉熵误差:L(y
,y)=−∑i=110000(yilog(y
i))
7.4 负采样法-negative sampling
使用上述Word 2 Vec模型最大的缺陷在于softmax函数的计算速度上,因为softmax函数的分母时所有语义库中单词参数计算的累和。所以考虑使用改进的学习方法。 首先构建训练数据,构建方法如下所示:
从输入序列中随机选取一个单词,orange,之后选取orange的临近单词(左右10个单词之间),选定juice,将这条记录的target值置为1;之后后续的训练数据的context的单词均为orange,word为从vocabulary库中随机选取的单词,之后这些记录的target值置为0。
7.5 Global Vector for word Representation-GloVe
首先定义 x i j x_{ij} xij表示 i i i在 j j j的上下文中出现的次数,即表示 i , j i,j i,j同时出现的概率。GloVe模型如下所示:
7.6 使用word embedding做情感分类
情感分类问题通常缺少大量的训练数据,而word embedding可以有效地克服这个缺陷。使用RNN和word embedding做情感分类的模型如下所示:
7.7 word embedding 除偏
word可以用来去除性别,种族,性取向的偏差。
8、序列到序列模型-SeqtoSeq
8.1 基本模型
语言翻译中的序列到序列模型如下图所示:
图片描述中的序列到序列的模型如下图所示:
机器翻译可以看作是一个条件语言建模问题,条件是输入的句子经过编码之后的编码值;在选择输出的句子时,不是随机选择一个生成的句子输出而是选择输出句子中所有输出词汇的联合概率最大的句子进行输出:
8.2 束搜索-beam search
在进行机器翻译时,我们想要的不是一个随机的输出,而是一种最优输出,但是由于可能的输出空间很大,造成很难输出最优的翻译序列,所以使用束搜索的定向搜索方式来提高输出的质量,即优化上述8.1中的条件概率式。
beam search的思想是,在每一个事件步,不是只保存最优的词汇选择,而是保持beam width e.g.(3个)个最优的词汇,最优的衡量标准是当前和之前选择词汇在输出序列编码条件下的联合概率。
第三步的束搜索的过程示意如下所示:
若束搜索的宽度beam width被设置为1,则beam search即为贪婪搜索。
8.3 束搜索的改进措施
长度归一化,使用束搜索来优化下式的时候
因为每一个累乘的概率的取值范围都是[0,1],所以当累乘的项过多时,会出现值下溢出风险,所以借助对数函数对上述目标进行改进:
将累乘项变为累加项。这样处理之后还是会有问题,因为概率的取值在[0,1]之间,所以每个对数的取值均小于0,所以当目标为求最大化时,算法会倾向于选择较短的输出序列,为了克服这个缺陷,采用长度归一化的处理方式,如下所示:
其中, α取值为0时,表示不进行归一化;取值为1时表示进行完全长度归一化;在实践中,一般将 α的取值置为0.7。
使用束搜索的另一大比较棘手的问题是怎样选择合适beam width,当这个width选择过大时,可以得到更好的解,但是通常要耗费更长的时间;当width选择过小时,得到解的质量通常更差,但是通常求解效率更高。通常的做法是首先选取比较小的width,如width=3,之后慢慢增大到10,100,之后根据求解的时间和效果选定出合适的width。试验表明,当width非常大时,如扩大到1000,可以获得的收益增加量会逐渐减小,效益边缘递减效应。
8.4 beam search的误差分析
下图是进行误差分析的方法,基本思想是将一个正确的翻译放到输出结果序列中,之后计算某个词汇正确翻译的概率和使用机器翻译的词汇的概率,将二者进行对比,若正确翻译词汇选择的概率更大,说明RNN网络问题不大,应该适当增加beam width;反之若机器翻译词汇概率更大,则说明束搜索选择出了合适的词汇,但是这个词汇不是最合适的,说明RNN网络出现问题,应该采用其他方式改进RNN
9、注意力模型-Attention Model
注意力模型在基本RNN模型的基础之上添加了注意力机制,令 α<t,t′>表示某个时间步下的输出 y<t>应该对激活函数值 a<t′>付出的注意力;其中{a}^{<t'>}, \overleftarrow{a}^{<t'>}) a<t′>=(a
<t′>,a
<t′>)表示某个时间步 t ′ t' t′下双向RNN模型的激活函数值向量;某个输出 y<t>对所有激活函数值的注意力之和为 ∑t′α<t,t′>=1;定义中间语义 c<t>表示在注意力机制下,某个输出 y<t>对应的所有激活函数值的注意力权重累加值。BRNN框架下使用注意力机制的示意图如下所示:
注意力数值的计算方式如下式所示:
其中, e<t,t′>通过一个简单的单层神经网络来试验求解,网络输入为 s<t−1>和 a<t′>。整个过程如下图所示:
10、Transformer 模型
10.1 self-attention机制
自注意力机制下,需要对输入序列的每一个单次都计算基于注意力的向量表示
在计算每一个单次的注意力向量之前,首先需要确定出每一个单次 i i i对应的query(q<i>),key(k<i>)和 value(v<i>)三个值,其计算方式如下所示:
其中, WQ,WK,WV是需要学习的参数。自注意力的计算方式示意图如下所示:
其中,向量表示形式中的 dk
表示点积缩放,用来防止数值爆炸问题。
10.2 multi head attention机制
多头注意力机制本质上就是将自注意力机制重复了多遍,之后将每一遍的结果进行串联,最后乘以一个群众系数 wo之后得到,多头注意力机制的计算过程如下图所示:
Transformer model
Transformer模型的架构如下所示: