首页 > 编程知识 正文

社会化机制的理解,注意力机制实例

时间:2023-05-04 23:55:56 阅读:160138 作者:1508

注意力机制在NLP中越来越重要,上有谷歌的“Attention is All You Need”论文,下有Tranformer、BERT等强大的NLP表达模式,attention在NLP中的地位现总结注意力机制,回顾近期相关研究进展。

注意力机制注意力机制是指对输入权重分配的关注。 最初用于注意力机制的是编码器-解码器(encoder-decoder )。 注意力机制通过对编码器所有时间步的隐藏状态进行加权平均得到下一级输入变量。

注意机制的一般公式可以写成如下

$ $bold symbol { o }=text { soft max } (bold symbol { q }bold symbol { k } ^top )boldsymbol{V}$$

注意机制广义上是由查询项矩阵$boldsymbol{Q}$、对应的关键项$boldsymbol{K}$和需要加权平均的值项$boldsymbol{V}$组成的层次识别器

这里可以从两个视点来看:

工学理解从工学上简单理解的话,注意机制可以理解为根据键k和值v从数据库(内存插槽) q得到输出o。 因为v是输入,所以可以理解为注意机制的核心是如何构建数据库q和键值k的方法。

算法性理解从算法上理解,可以类比注意机制和池化。 也就是说,从将卷积神经网络中的池化看成一种特殊的平均加权的注意力机制,或者说注意力机制是一种具有对输入分配偏好的通用池化方法(含参数的池化方法)。查询项的构建来看注意机制的最早的Attention提案,在最初提出注意机制的论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,主要用作翻译模型,解决翻译对照问题(正文中的QK

{ % raw % } $ $ bold symbol { c } { t ' }=sum { t=1} ^ talpha _ { t ' t } bold symbol { h } t $ $ (alpha )

$boldsymbol{c}_{t'}$是输出变量,$boldsymbol{h}t$是隐藏层,{% raw %}$alpha{t' t}${% endraw %} 由于boldsymbol{h}${%endraw%},$sigma$的本质是该注意力机制由Bahdanau在seq2seq上正式提出,也称为循环注意力机制,更是$sigma$函数

最基本形态的注意力机制

如果你从上面抽象注意力机制

{ % raw % } $bold symbol { c } { t }=sum { t=1} ^ tsigma (bold symbol { q },boldsymbol{k}_t )。

q表示查询项目,k表示键值,h表示隐含层输入变量,$sigma$表示变换函数,c表示模型输出的context vetor。 如果很有趣的话,也可以理解输入的h用对应的键值k调查q,并以$sigma$输出c

水平注意力(Hierarchical Attention Networks )水平注意力由Zichao ssdld提出,主要用于解决多层次问题。 例如,在文本分类中,可以将单词作为一个级别,将段落作为一个级别。 由此,由于有多个层次,其下的层次会影响上的层次,因此建立层次注意力模型。

分层注意力机制是指将多种注意力模型堆积起来,形成多层次的注意力,其公式表达可写作

{ % raw % } $bold symbol { c } { t } ^ { {bold symbol { i1 } }=sum { t=1} ^ t sigma ^ {bold symbol }

symbol{h}t^{(boldsymbol{i})}, boldsymbol{h}{t}^{(boldsymbol{i})} = boldsymbol{v}{t}^{(boldsymbol{i+1})}boldsymbol{c}{i}^{(boldsymbol{t})}$$ $$boldsymbol{h}{0} = boldsymbol{W}_{t}^{(0)}boldsymbol{X}$$ {% endraw %}

q 为查询项, k 为键值项, h为隐含层输入变量,$sigma$ 为变换函数,c表示模型输出的context vetor,i表示层级。

什么意思呢? 首先,可以看到上层的注意力是以下层的输出作为输入,一层一层堆叠上去。

循环注意力

前面讲到,其实所谓的循环注意力模型就是最早提出的seq2seq的翻译模型:

{% raw %} $$ begin{align} boldsymbol{o}{i} &= f(boldsymbol{s}{i}) boldsymbol{s}{i} &= a(boldsymbol{s}{i-1},boldsymbol{o}{i-1},boldsymbol{s}{i}) boldsymbol{c}{t'} &= sum{t=1}^Talpha_{t' t}boldsymbol{h}t alpha{t' t} &= frac{exp(e_{t' t})}{ sum_{k=1}^T exp(e_{t' k}) },quad t=1,ldots,T e_{t' t} &= sigma(boldsymbol{s}_{t' - 1}, boldsymbol{h}t) sigma(boldsymbol{s}{t' - 1}, boldsymbol{h}_t) &= boldsymbol{V}^top tanh(boldsymbol{W}s boldsymbol{s}{t' - 1} + boldsymbol{W}_h boldsymbol{h}_t) end{align} $$ {% endraw %} 其中

他的核心思想是将下一个输出的状态{% raw %}$boldsymbol{s}{t-1}${% endraw %}一起输入$sigma$函数。 $alpha{t' t}$就是注意力模型中的权重项,O表示输出,s表示解码器中的隐藏层变量,c表示context vetor, h表示编码器中的隐藏层变量。

全局注意力模型(Gobal Attention)

全局注意力模型是由Minh-Thang Luong在2015年的《Effective Approaches to Attention-based Neural Machine Translation》中提出:

这个全局注意力模型是在循环注意力模型上左的改进,加个一层Global align weights(见上图),原循环注意力模型的键值项K是直接采用$boldsymbol{h}_t$。其公式:

{% raw %} $$ begin{align} alpha_t(s) &= text{align}(boldsymbol{h}_t, bar{boldsymbol{h}_s}) &= frac{ text{exp}(text{score}(boldsymbol{h}_t, bar{boldsymbol{h}s}))} { sum{boldsymbol{s'}} text{exp}(text{score}(boldsymbol{h}t, bar{boldsymbol{h}{s'}})) } end{align} $$ {% endraw %}

{% raw %}$boldsymbol{h}_{t}${% endraw %} 表示当前目标时刻 t 的编码器的隐藏变量,{% raw %}$bar{boldsymbol{h}_s}${% endraw %}表示所有的原时刻的编码器的隐藏变量 score表示一种打分方式,其中论文中给出的是三种: {% raw %} $$ text{score}(boldsymbol{h}_t, bar{boldsymbol{h}_s)} = begin{cases} boldsymbol{h}_t^T bar{boldsymbol{h}_s}, &text{dot} boldsymbol{h}_t^T boldsymbol{W}_a bar{boldsymbol{h}_s}, &text{general} boldsymbol{v}_a^T text{tanh}(boldsymbol{W}_a[boldsymbol{h}_t;bar{boldsymbol{h}_s}]),&text{concat} end{cases} $$ {% endraw %}

dot表示点乘/点积,concat表示联接,即将两个变量连接起来,general是一般形式,中间加权重参数。

注: While our global attention approach is similar in spirit to the model proposed by Bahdanau et al. (2015), there are several key differences which reflect how we have both simplified and generalized from the original model.

局部注意力模型(Local Attention)

局部注意力模型其实是和全局注意力模型在同一篇论文提出的,局部注意力模型在全局注意力模型的基础上增加了aligned position帮助定位,使查询项Q和键值项K能专注部分信息:

位置aligned position的公式:

{% raw %} $$p_t = S cdot text{sigmod}(boldsymbol{v}_p^T text{tanh}(boldsymbol{W}_pboldsymbol{h}_t)), p_t in [0, S]$$ {% endraw %}

S表示原句的长度,W和v为预测参数。

键值和查询项的权重: {% raw %} $$alpha_t(s) = text{align}(boldsymbol{h}_t, bar{boldsymbol{h}_s})text{exp}(- frac{(s-p_t)^2}{2sigma^2})$$ {% endraw %}

$p_t$的范围是【0,S】,s为$p_t$窗体中间的正数,$sigma=frac{D}{2}$:

自注意力(Self Attention)

1、从n个输入直接输出n个输出,没有序列,每个输入对应着一个K,V,Q; 2、可以并行运算

多头注意力模型(Multi-Head Attention)

多头自注意力模型 其公式: {% raw %} $$ text{MultiHead}(Q,K,V) = text{Concat}(text{head1},...,text{head}_h)boldsymbol{W}^O $$ $$ text{head}_i = text{Attention}(boldsymbol{Q}boldsymbol{W}_i^Q,boldsymbol{K}boldsymbol{W}_i^K,boldsymbol{V}boldsymbol{W}_i^V) $$ $$ text{Attention}(boldsymbol{Q},boldsymbol{K},boldsymbol{V}) = text{softmax}(frac{boldsymbol{Q}boldsymbol{K}^T}{sqrt{d_k}})boldsymbol{V} $$ {% endraw %}

注意力模型的应用 Transformer

Transformer模型是 Google 团队在2017年《Attention is All You Need》中提出,Transformer模型在后面成为构成 BERT 的基石之一,那么我们来看看是怎么通过自注意力模型构建Transformer的:

Transformer从结构上来说依然是个Encoder-Decoder模型,但是,它和传统的seq2seq主要有三点不同:

使用位置编码,也就是Positional Encoding代替序列信息。使用Transformer Block来实现注意力机制采用多头自注意力,可以并行运算

位置编码(Positional Encoding)

公式: {% raw %} $$ boldsymbol{P}{i,2j} = text{sin}(frac{i}{10000^{2j/d}}) $$ $$ boldsymbol{P}{i,2j+1} = text{sin}(frac{i}{10000^{2j/d}}) $$ $$ boldsymbol{H} = boldsymbol{X} + boldsymbol{P}, boldsymbol{X} in Bbb{R}, boldsymbol{P} in Bbb{R} $$ {% endraw %}

Position-wise FFN input(batch, seq len, fea size) 转换成 (batch*seq len, fea siz)使用了两层MLP最后的输出在转化为3-D等于使用了一个$1times1$的卷积层Layer Normalizaiton Layer Normalization

Layer Normalization最早由 乐观的草丛 Lei Ba 在2016年《Layer Normalization》一文中提出。

shape:[N, C, H, W] N 代表batch长度,C代表通道数,H代表每层的隐藏单元数,W代表每层的权重;

BatchNorm是在batch上,对NHW做归一化;LayerNorm在channel方向上,对CHW归一化;InstanceNorm在单个通道像素上,对HW做归一化;GroupNorm,有点类似LayerNorm,将channel分组,然后再做归一化; BERT

BERT,全称 Bidirectional Encoder Representations from Transformers,是由

BERT特点:

使用 Transformer Block 代替 RNN,通过堆叠Transformer Block将模型变深;使用随机 Mark 的方式训练;使用双向编码的形式;

后面我们通过实现BERT来回归整个Attention系列: BERT代码实现及解读

origin:https://shikanon.com/

参考文献 https://github.com/d2l-ai/d2l-zhNeural Machine Translation by Jointly Learning to Align and Translate. Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. ICLR, 2015.Hierarchical attention networks for document classification. Zichao ssdld et al. ACL, 2016.Effective approaches to attention-based neural machine translation. Minh-Thang Luong, Hieu Pham, and Christopher D Manning. EMNLP, 2015.Long Short-Term Memory-Networks for Machine Reading. Jianpeng Cheng, Li Dong and Mirella Lapata. EMNLP, 2016.Attention Is All You Need. Ashish Vaswani, et al. NIPS, 2017.

转载于:https://my.oschina.net/Kanonpy/blog/3080936

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