CS224N-6中解码与Attention机制,如何应用于处理?

摘要:语言模型的解码 △:在讲义中这部分内容是神经机器翻译NMT中,我认为这个适用于所有语言模型所以就单列出来了 (1)贪心解码:每一步都取最可能的单词,用前一步的输出作为下一步的输入(存在问题:有一个预测偏差,会导致后面的生成不可挽回,最终结果
语言模型的解码 △:在讲义中这部分内容是神经机器翻译NMT中,我认为这个适用于所有语言模型所以就单列出来了 (1)贪心解码:每一步都取最可能的单词,用前一步的输出作为下一步的输入(存在问题:有一个预测偏差,会导致后面的生成不可挽回,最终结果不尽人意) (2)穷举解码:顾名思义,尝试计算每一个可能的序列y,取概率最大的一个(显而易见,复杂性太高) (3)波束搜索解码:在解码器的每一步上,跟踪k个最可能的假设,假设的得分是其对数概率,我们搜索得分较高的假设,跟踪每一步的前k个假设 Attention机制 seq2seq with attention (1)序列-序列模型(又叫seq2seq模型或Encoder-Decoder模型):一个神经网络接受输入并产生神经表示(编码),另一个网络基于该神经表示产生输出(解码) (CNN、RNN、LSTM、AE等其实都可以归为seq2seq模型) 注意力机制最早用在seq2seq模型上,这里我们也以seq2seq模型中的注意力机制来分析 (2)核心思想:在解码器的每一步上,使用与编码器的直接连接来关注源序列的特定部分 (3)理解 在文本处理领域,一类常见的任务就是由一个句子(Source)生成另一个句子(Target) \[Source=(x_1,x_2,\cdots,x_m) \] \[Target=(y_1,y_2,\cdots,y_m) \] \[C=F(x_1,x_2,\cdots,x_m) \] Source经过Encoder生成中间的语义编码C,C经过Decoder时,先根据\(C\)生成 \(y_1\) ,再根据 \(C,y_1\) 生成 \(y_2\) ,以此类推 传统的循环神经网络中,\(y_1,y_2,y_3\)的计算都是基于同一个C。深入思考一下,发现这可能并不是最好的方案,因为 Source 中不同单词对 \(y_1,y_2,y_3\) 的影响是不同的,所以,很自然地就有了如下思路:对 \(y_1\) 使用\(C_1\),对 \(y_2\) 使用 \(C_2\cdots\) \[C_1=a_{11}f(x_1)+a_{12}f(x_2)+a_{13}f(x_3)$$ $$C_2=a_{21}f(x_1)+a_{22}f(x_2)+a_{23}f(x_3) \] \[C_3=a_{31}f(x_1)+a_{32}f(x_2)+a_{33}f(x_3) \] 权重向量\(a_t\)即为下图中的Attention Output,接下来会讲具体是怎么计算的 (4)对步骤的具体计算 在第t个时间步长(生成第t个单词时)下,会进行如下运算: 编码器的隐藏层: \(h_1,\cdots,h_N\) 解码器的隐藏层: \(s_t\) 那么我们的注意力得分 \(e^t=[s_t^Th_1,\cdots,s_t^Th_N]\) 那么我们的注意力分布 \(a^t=softmax(e^t)\) 那么我们的注意力输出 \(a_t=\displaystyle\sum_{i=1}^Na_i^th_i\) (此即为权重向量) 最后将注意力输出与解码器的隐藏层连接起来,按照无注意力的seq2seq模型处理 (5)意义 ①注意力机制显著提高了NMT的性能 ②提供了一个更加“拟人化”的MT模型 ③解决了瓶颈问题 ④有助于消除梯度问题 ⑤提供了可解释性 attention variants (1)种类: ①Basic dot-product attention: \(e_i=s^Th_i\) ②Multiplicative attention: \(e_i=s^TWh_i\) ③Reduced-rank multiplicative attention: \(e_i=s^T(U^V)h_i=(Us)^T(Vh_i)\) ④Additive attention: \(e^T=v^Ttanh(W_1h_i+W_2s)\) (2)注意力机制是一种通用的学习技巧,更通用定义为:给定一组向量值和一个向量查询,注意力是一种根据查询计算值的加权和的技术。