首页 > 编程知识 正文

attention机制详解,Attention attention

时间:2023-05-06 21:24:31 阅读:199669 作者:279

文章目录 Attention 机制01背景:Seq2seq 模型:翻译的时候生成词 02 attention 机制的直观理解03 权重系数求法04 Score 函数05模型结构分析06 模型的数学推导(上)07 模型的数学推到(下)08 对齐机制(align)09 自注意力机制(self-attention)10 注意力机制理解 Bert 专题系列(一):Attention机制什么是attention Attention 机制详解(一) Seq2Seq 中的attention(二) self-attention 和 transformerTransformer 模型结构:Self-attention 结构举例说明 (三) Attention 模型应用NLPCV其他

Attention 机制

参考:https://www.bilibili.com/video/BV1L4411q785?from=search&seid=6404410360469991887
https://www.statist.cn/2020/06/26/Attention/

01背景:

谷歌的 《attention is all you need》
不同类型:Self-attention ,multi_head attention, Bert

Seq2seq 模型:翻译的时候生成词


每次翻译一个词语的时候,都需要读一遍句子,再翻译每一个词语 —— 能记住多少东西
问题:

1、 长内容无法完全记住(遗忘) a) 解决:存储 —— 内容是什么:学习到的东西,每一个时刻隐含层的向量 —— 所有的编码向量都存储了,解码需要哪个就取哪个,哪个贡献大取哪个(上图的C 变为 C1,C2,C3…) —— 得到每个编码对当前输出的权重,用 ∑ weight * value (风中的绿草求和)即得到最终结果 2、对齐问题,I am Chinese 对应 我是中国人(次序问题) 02 attention 机制的直观理解

03 权重系数求法

如上图所示,y(am) 是目标输出,是编码C、上一时刻输入的状态向量h t-1等,经过非线性变换f 得到的。如何得到编码C呢?首先输入语句编码得到输入向量,由于不同输入向量对某一个输出的贡献不同(如 我 和 人 对 am输出的贡献),可以分配不同的权重,风中的绿草求和得到编码C(am)
权重如何得到?依据 查询向量qt 和 某时刻状态向量(当前时刻ht 或 前一时刻ht-1) 的相似性,用score 函数得到权重值。

04 Score 函数



(1) 内积,存在问题:两个向量表示的维度不同,
(2) 中间矩阵,将不同维度转换成相同维度 XTWY;如 图中x 从3维变成4维,然后可以和 y 进行点积
(3) 训练神经网络。没有第二种方法好,因为 x,y 之间是没有关联的,只是通过神经网络得到了输出

05模型结构分析



Soft-attention:将输入向量风中的绿草求和作为当前时刻的输入
采用注意力机制作为输入,具有记忆功能:这里的每个状态有正向传输的,得到前面序列的信息;有反向传输的,得到后面序列的信息;然后经过风中的绿草求和得到输入,计算之后得到输出。

Hard_attention:输入的只是某几个向量,如输入的只有 h1, h2向量

软注意力机制是可微的,可以用反向传播机制计算;硬注意力机制不可微,比较难计算,可以用强化学习的方式处理

06 模型的数学推导(上)

P() 是最终要计算的概率
St 是隐含层的输出向量,yt 是最终输出的某一部分。用 LSTM 或 GRU 的网络得到
Ct 是输入的编码(输入的语义向量),即输入向量的风中的绿草和。
系数 at,1 , at,2 …(或 et,i)怎么得到:打分函数( score() )。i 是和编码的时候的向量比较,t 是和解码的时候的向量比较。—— 再用 softmax 将其归一化,转化为概率

07 模型的数学推到(下)

真正输入的是e(yt-1) ,即 yt-1 (一般是 one-hot 码)的embedding(压缩之后,信息更紧密)

Uo, Vo, Co 是对应的矩阵
ht 是得到的 ht,2i-1 ~, ht,2i ~的较大值,如i=1时,ht,1 = max{ht,1,ht,2},i=2时,ht,2 = max{ht,3,ht,4} … 类似于池化操作,减少数据量 —— maxout() 激活函数

假设 maxout() 之后的维数是500 维,而输入的字典维度是 1000维,要在其中选择正确的结果,则 用矩阵Wo 将500维转化为 1000 维。Ot = Wo * ht,最后要得到概率,在经过一个 softmax() 即可, Pt = softmax(Ot)

和 seq2seq 的差别:输入句子的语义向量变化,其他没有改变

08 对齐机制(align)

如:我是中国人 = I am Chinese。
若采用 seq2seq,最终得到的最后的结果压缩的信息,没有对应关系,不能解决 align问题
Attention 机制可以解决这个问题:am 对应输入的 “是” 权重比较大,所以具有对应关系;其余也有类似对应关系,就可以得到对齐机制 —— 目标句子和输入句子关联比较大,全重大的相对应。用 hot-map 表示,一般是对角线具有最大权重,关联比较大,具有对应关系

09 自注意力机制(self-attention)

与 seq2seq 的差别:在编码的时候得到语义向量C,可以表示输入和输出句子之间的对应关系。由于语义向量是多个 输入向量的风中的绿草和,所以包含除过该向量之外的信息,可以更好的反应上下文语义信息。
注意力机制:编码和解码的句子不同,但有对应关系
自注意力机制:编码和解码的句子完全相同,对一个句子先编码、再解码、找到内部的关联

10 注意力机制理解

输入和输出相同,注意力怎么得到?
注意力机制中 语义向量C是输入语句编码的风中的绿草和,权重通过 score() 函数得到和搜索向量的相似性 而得到的。
自注意力机制中,打分得到的权重与 解码向量的关系 通过什么得到?
(1) st-1,和注意力机制中的类似
(2) 引入新的向量U,用来和每个单词向量比较,得到打分。U向量可以作为一个句子表示。Score() 中的U是一个参数,可以通过模型进行学习的。
也有文章表示,可以通过学习得到向量U,作为文档的的一个句子表示

Bert 专题系列(一):Attention机制

三次课:Attention、Transformer、BERT

这里的上下文无关是指无法表示一词多义,同一个词在不同的上下文会有不同的意思

什么是attention


注意力可以理解为权重向量。

Context vector 是根据输入语句,提取出来的特征,可以通过不同的方式得到。Seq2seq 中,预测不同的输出,如“吃”,“苹果”都是通过同一个 context vector 得到的。但可能有的输出和部分输出的关联不大 —— 使用 attention机制

Attention 机制不对应某个特定时刻,而是多个时刻的向量的线性组合
hi 表示用 LSTM产生的 某个时刻的向量,通过正向和反向传输的向量的拼接,结合序列之前和之后的信息 ,再将 多个时刻的 拼接的向量 进行线性组合作为 解码器的输入
Additive Attention 等都是计算 align的方法,只要计算得到 αt,i 这权重值就可以,可以任意设计

Additive attention中,计算 align时中间有一个隐藏层,Wa 是隐藏层的权重,然后经过激活函数,再经过 VaT 进行维度变换,得到最终的 score 值

Self-attention:输入和输出相同,研究输入向量之间的关联,如 x1 , x2… 之间的关联,输出也是 x1,x2,….
Soft-attention:所有语义向量的线性组合
Hard_attention:只选取部分语义向量作为输入

Attention 机制详解

参考:https://zhuanlan.zhihu.com/p/47063917

(一) Seq2Seq 中的attention

RNN 结构的局限性:之前的NMT(neural Machine Translation)模型中,使用encoder-decoder结构,即 encoder 读取输入的句子将其转化为定长的向量,decoder 将这个向量翻译成对应的目标语言的文字(对翻译任务来说)。通常encoder 和 decoder 均采用 RNN 结构如 LSTM 或 GRU等

如图,利用encoder RNN将输入语句信息总结到最后一个hidden vector中,并将其作为decoder初始的hidden vector,利用decoder解码成对应的其他语言中的文字。
存在问题:RNN机制存在长程梯度消失问题,且较长的句子难以转化为定长的向量,容易信息丢失
Attention 机制:寻找源语句中对应的上下文词语,并结合之前已经翻译的部分推断当前时刻翻译结果



关键:计算encoder 和 decoder state 之间的关联性的权重,得到 attention 的分布,从而对当前输出位置得到比较重要的输入位置的权重,在预测输出时相应的会占较大的比重。
优点:打破了利用 encoder 得到单一向量的限制,使模型可以集中在所有对于下一个目标单词重要的输入信息上;还可以通过观察 attention 权重,找到哪部分翻译对应哪部分源文字。 如下图

(二) self-attention 和 transformer

《attention is all you needed》
Seq2seq 无法处理一词多义问题(如 Chinese:汉语、中国人)
Attention机制 计算每个单词和其他单词的相关性。Encoder 读入输入数据,利用层层叠加的 self-attention 机制对每一个词进行考虑了上下文信息的表征;decoder 也利用类似的 self-attention 机制,结合 attend encoder 和 之前产生的输出文字信息,得到当前时刻的输出信息。

Transformer 模型结构:

说明:第一级decoder的key, query, value均来自前一层decoder的输出,但加入了Mask操作,即我们只能attend到前面已经翻译过的输出的词语,因为翻译过程我们当前还并不知道下一个输出词语,这是我们之后才会推测到的。
而第二级decoder也被称作encoder-decoder attention layer,即它的query来自于之前一级的decoder层的输出,但其key和value来自于encoder的输出,这使得decoder的每一个位置都可以attend到输入序列的每一个位置。
Position encoding:模型没有recurrence 或 convolution 操作,所以没有明确的关于单词在源句子中位置的相对或绝对信息。为了让模型学习位置信息,添加了 position encoding。
Add&Norm块:Add表示 residual connection,解决多层神经网络训练困难的问题,通过将前一层的信息无差的传到下一层,可以有效的仅关注差异部分,类似 resnet。Norm 表示 Layer Normalization,对层的激活值归一化,加快模型训练过程,使其更快收敛。

Multi-head attention:多个 self-attention 结构的结合,每个head 学习到在不同的表示空间的特征,学习到的attention 侧重点不同,提供给模型更大的容量

Self-attention 结构

如上图所示

举例说明


假如我们要翻译一个词组Thinking Machines,其中Thinking的输入的embedding vector用 x1 表示,Machines的embedding vector用 x2表示
处理 thinking 这个词:计算句子中所有词与它的 attention score,相当于将当前词作为搜索的query,去和句子中所有词(包含其本身)的key去匹配;—— q1 代表 thinking 对应的 query vector,k1、k2代表 thinking 和 machine 的key vector,用q1 与k1,k2的点乘计算 thinking 的 attention score;同理可计算 machine 的attention score。然后进行尺度缩放 与 softmax 归一化。—— 然后用 attention score 与 value vector 相乘,得到风中的绿草的向量。
Multi-head 就是将输入X转化成成不同的部分,对应不同的Q、K、V表示,得到 谨慎的舞蹈 之后,最后再将其结果结合起来得到Z。

(三) Attention 模型应用 NLP 《attention is all you need》机器翻译《Universal Transformer》结合Transformer结构与RNN中循环归纳的优点,使得Transformer 结构能够适合更多自然语言处理问题《Bert:Pre-Training of Deep Bidirectional Tranformers for Language Understanding》利用双向Transformer进行预处理,得到包含上下文信息的表示,进一步用来fine-tune 很多种NLP任务《Generating Wikipedia by Summarizing Long Sequences》文章生成:通过处理若干源文章,提取有效信息,再利用 Transformer Decoder合成一篇类似 WikiPedia 风格的文章。 CV

《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》利用attention 机制进行image caption(将图像转化为文字描述)

《Image Transformer》 利用attention 机制进行图像合成,如将局部图像补全,通过低分辨率合成高分辨率

《Squeeze-and-Excitation Networks》
参考:https://www.bilibili.com/video/BV1SA41147uA?from=search&seid=6652222480559909741





其他

《One Model To Learn Them All》采用多适应性的模型架构希望一个模型可以处理多领域的问题。
《Neural Attentive Session-based Recommendation》利用Attention模型处理用户session中的序列信息进行相关推荐,值得参考。
《Generating Long-Term Structure in Songs and Stories》来自谷歌Magenta项目,利用Attention RNN创作乐曲,很有意思。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。