深度学习之注意力机制Attention

一、基本Encoder-Decoder机制

1.1 前言

1.1.1 说明

  • Seq2Seq 是一种重要的 RNN 模型,也称为 Encoder-Decoder 模型,可以理解为一种 N × M N×M N×M的模型。模型包含两个部分:Encoder 用于编码序列的信息,将任意长度的序列信息编码到一个向量 c c c里。而 Decoder 是解码器,解码器得到上下文信息向量 c c c之后可以将信息解码,并输出为序列。
  • 传统的RNN模型采用N-N模型(输入为N维,输出为N维),N-1(输入为N维,输出为1维),1-N(输入为1维,输出为N维),输入输出模式比较固定,不灵活,所以采用Encoder-Decoder模型可将输入维度为N,映射为输出维度为M。

1.1.2 原理

  1. Encoder-Decoder机制:编码器-解码器框架,大部分Attention模型都基于该机制,该机制处理序列-序列的问题,即输入一个序列,生成一个序列问题。比如:
    1)文本摘要,输入一篇文章(序列数据),生成文章的摘要(序列数据);
    2)文本翻译,输入一句或一篇英文(序列数据),生成翻译后的中文(序列数据);
    3)问答系统,输入一个question(序列数据),生成一个answer(序列数据);
  • 编码器:将输入变成中间表达形式(特征);
  • 解码器:将中间表示解码成输出;

1.2 基本Encoder-Decoder原理

  1. Encoder-Decoder框架在NLP领域中抽象后的最简单的结构图如下所示:
    在这里插入图片描述
  2. Encoder:编码器,对于输入的序列 x 1 , x 2 , . . . , x n x_1, x_2,...,x_n x1,x2,...,xn进行编码,使其转化为一个语义编码 C C C,语义编码 C C C存储了序列 x 1 , x 2 , . . . , x n x_1, x_2,...,x_n x1,x2,...,xn的信息;
    1)Encoder编码方式:文本处理领域主要有RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU;
    2)对于上图中的序列 x 1 , x 2 , . . . , x n x_1, x_2,...,x_n x1,x2,...,xn,通过RNN生成隐藏状态序列 h 1 , h 2 , . . . , h n h_1, h_2,...,h_n h1,h2,...,hn,其确定语义编码 C C C的方式有几种?
    ①直接用最后时刻输出的 h t h_t ht作为 C C C的状态值,即用 h 4 h_4 h4直接作为语义编码 C C C的值
    ②也可以将所有时刻的隐藏层的值进行汇总,然后生成语义编码 C C C的值,即 C = q ( h 1 , h 2 , h 3 , h 4 ) C=q(h_1,h_2,h_3,h_4) C=q(h1,h2,h3,h4) q q q是非线性激活函数
    得到了语义编码 C C C之后,就可以在Decoder中对语义编码 C C C进行解码了。
  3. Decoder:解码器,根据输入的语义编码 C C C,然后将其解码成序列数据,解码方式可以采用RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU。Decoder和Encoder的编码解码方式可以任意组合,并不是说我Encoder使用了RNN,Decoder就一定也需要使用RNN才能解码,Decoder可以使用LSTM,BiRNN。
  4. 解码方式1:如下图所示,参考论文使用 RNN 编码器-解码器学习短语表示进行统计机器翻译,语义编码 C C C包含了整个输入序列的信息,所以每一步都引入 C C C,文中Encoder-Decoder均使用RNN,在计算每一时刻的输出值 y y y时,都应该将 C C C作为输入,即 h t = f ( h t − 1 , y t − 1 , C ) , y = f ( h t , y t − 1 , C ) h_t=f(h_{t-1},y_{t-1},C), y=f(h_t,y_{t-1},C) ht=f(ht1,yt1,C),y=f(ht,yt1,C),其中 h t h_t ht为当前时刻 t t t的隐藏层神经元的值, y t − 1 y_{t-1} yt1为上一时刻的预测输出值,作为 t t t时刻的输入,每一时刻的语义编码 C C C是相同的。
    在这里插入图片描述
  5. 编码方式2:参考论文使用神经网络进行序列到序列学习只在Decoder的初始出入引入语义编码 C C C,将语义编码 C C C作为隐藏层状态值 h 0 h_0 h0的初始值,输出值 y t = f ( h t , y t − 1 ) y_t=f(h_t,y_{t-1}) yt=f(ht,yt1)
    在这里插入图片描述
  6. 普通的Encoder-Decoder结构存在的问题:最大的局限性就在于编码和解码之间的唯一联系就是一个固定长度的语义向量 C C C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量 C C C中去。但是这样做有两个弊端,一是语义向量无法完全表示整个序列的信息,二是先输入的内容携带的信息会被后输入的信息稀释掉,或者被覆盖了。输入序列越长,这个现象就越严重。

二、Attention机制

2.1 Attention基本原理

在这里插入图片描述

  • 注意:
    1)encoder(编码器)对每个次的输出作为 k e y key key v a l u e value value,它们是相同的;
    2)decoder(解码器)对上一个词的输出作为 q u e r y query query

参照上图理解Attention,将Source中的包含一系列<Key,Value>数据对(key和value是相等地,都是encoder的输出值 h h h),此时给定Target中的某个元素Query(即decoder中的 h i h_i hi),通过计算Query和各个Key的相似性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。第一阶段进行相似度计算:
A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 n S i m i l a r i t y ( Q u e r y , K e y i ) ∗ V a l u e i (1) \begin{aligned} Attention(Query, Source)=\sum_{i=1}^n Similarity(Query, Key_i)*Value_i \end{aligned} \tag{1} Attention(Query,Source)=i=1nSimilarity(Query,Keyi)Valuei(1)
其中 n n n是Key, Value对的个数, S i m i l a r i t y ( Q , K i ) Similarity(Q, K_i) Similarity(Q,Ki)的计算方式如下:
点 积 : S i m i l a r i t y ( Q u e r y , K e y i ) = < Q u e r y , K e y i > 余 弦 相 似 度 : S i m i l a r i t y ( Q u e r y , K e y i ) = < Q u e r y , K e y i > ∥ Q u e r y ∥ ∗ ∥ K e y i ∥ M L P 单 层 隐 藏 层 神 经 网 络 : S i m i l a r i t y ( Q u e r y , K e y i ) = M L P ( Q u e r y , K e y i ) (2) \begin{aligned} 点积:Similarity(Query, Key_i)=<Query, Key_i>\\ 余弦相似度:Similarity(Query, Key_i)=\frac{<Query, Key_i>}{\|Query\|*\|Key_i\|}\\ MLP单层隐藏层神经网络:Similarity(Query, Key_i)=MLP(Query, Key_i) \end{aligned} \tag{2} Similarity(Query,Keyi)=<Query,Keyi>Similarity(Query,Keyi)=QueryKeyi<Query,Keyi>MLPSimilarity(Query,Keyi)=MLP(Query,Keyi)(2)
第一阶段计算出Query和 K e y i Key_i Keyi的相似度后,第二阶段将相似度得分进行softmax计算(一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax机制突出重要元素的权重),一版采用如下公式计算:
α = S o f t m a x ( S i m i ) = e S i m i ∑ j = 1 n e S i m i (3) \begin{aligned} \alpha=Softmax(Sim_i)=\frac{e^{Sim_i}}{\sum_{j=1}^n e^{Sim_i}} \end{aligned} \tag{3} α=Softmax(Simi)=j=1neSimieSimi(3)
上式中的 α i \alpha_i αi即为 V a l u e i Value_i Valuei的权重系数,第三阶段进行加权求和即可得到Attention的数值,如下所示:
A t t e n t i o n ( Q u e r y , V a l u e i ) = ∑ i = 1 n α i ∗ V a l u e i (4) \begin{aligned} Attention(Query, Value_i)=\sum_{i=1}^n \alpha_i*Value_i \end{aligned} \tag{4} Attention(Query,Valuei)=i=1nαiValuei(4)

2.2 Attention总结

在这里插入图片描述
阶段1:Query与每一个Key通过F函数得到相似性评分s;
阶段2:将s评分进行softmax转换成[0,1]之间的概率分布;
阶段3:将 [ α 1 , α 2 , α 3 … α n ] [\alpha_1,\alpha_2,\alpha_3…\alpha_n] [α1,α2,α3αn]作为权值矩阵对每一个Value进行加权求和得到最后的Attention值。

  • 参考网址:
  1. https://blog.csdn.net/Tink1995/article/details/105012972?spm=1001.2014.3001.5501
  2. https://blog.csdn.net/u014595019/article/details/52826423?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
  3. https://zhuanlan.zhihu.com/p/75750440
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值