【深度学习-注意力机制attention 在seq2seq中应用】

这篇具有很好参考价值的文章主要介绍了【深度学习-注意力机制attention 在seq2seq中应用】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为什么需要注意力机制

【深度学习-注意力机制attention 在seq2seq中应用】,深度学习,深度学习,人工智能

这是一个普通的seq2seq结构,用以实现机器对话,Encoder需要把一个输入的一个句子转化为一个最终的输出,上下文context vector,然后在Decoder中使用,但这里有些问题:

  1. 如果句子很长,这个向量很难包含sequence中最早输入的哪些词的信息,那么decoder的处理必然也缺失了这一部分。
  2. 对话的过程中,大部分情况下decoder第一个的输出应该关心的权重更应该是encoder的前半部分的输入,比如这里Yes,其实应该是对are you这样一个疑问的输出,但是这就要求decoder的预测的时候有区别的针对sequence的输入做输出,现在这个结构没办法实现这个功能。

你可能会想到LSTM或者GRU也是有memory记忆功能的,解决方案:
LSTM中的memory没有办法很大,假设它的memory的大小时K的话,就需要有一个K*K的矩阵,如果太大的memory,不仅计算量大,参数太多还会容易过拟合,因此不可行

attention机制就是用来解决这个问题,attention里面memory增加的话,参数并不会增加,一句话总结就是attention就是来解决长输入在decoder时,能够找到应该关注的输入部分的问题,它最初时从机器翻译发展的,后续也扩展到了其他领域

attention机制的架构总体设计

【深度学习-注意力机制attention 在seq2seq中应用】,深度学习,深度学习,人工智能
这就是总体的架构设计,输入a1…an,输出b1…bn 对应,注意这里的b考虑了所有的输入,这个输出带有对于每个输入的attention score,score越大,证明这个输入越重要,a在这里可以是输入,也可以是输入解码器后hidden layer的输出,那么中间蓝色框部分就是attention主体实现,它用来生成的b1到bn
举个例子:输入are you free tomorrow? 输出的时候Yes更关注的是are you,那这个的attention score就需要高一些

普通的seq2seq结构
【深度学习-注意力机制attention 在seq2seq中应用】,深度学习,深度学习,人工智能
带有注意力的seq2seq
【深度学习-注意力机制attention 在seq2seq中应用】,深度学习,深度学习,人工智能

在普通的seq2seq相比,解码器使用的上下文变量C不再仅仅是编码器的输出,而是 注意力的输出

与普通的seq2seq模型对比下,带有注意力模型的修改就分为了两部分
1.attention本身的实现
2.attention应用到模型部分

以下详述这了两部分

一、attention本身实现

先不介绍内部的一些数学处理,attention的输出实际上是对某种输入的选择倾向
输入就是要被选择的数据和对应的查询线索
输出对要选择数据的权重
举个例子
输入:the dog is running across the grass
翻译:这个小狗正在穿越草地
解码翻译这 个 小 狗 这些词的时候,注意力应该放在the dog上,这时候我们给与the dog这些词更多的权重,这时候对于输入可能的权重就是0.5 0.5 0 0 0 0

【深度学习-注意力机制attention 在seq2seq中应用】,深度学习,深度学习,人工智能

在数学模型方面,
键key
查询Query
值 Value

要实现的是根据键和查询生成的线索,去计算对于值Value的倾向选择,数学表达是这样的:
【深度学习-注意力机制attention 在seq2seq中应用】,深度学习,深度学习,人工智能
这里的a(q, ki) 一般是经过一个评分函数映射成标量和然后一个softmax操作

这里可以形象的理解一下,比如下面三组数据:

id 体重->Q 身高->K 年龄-> V
1 50 160 50
2 65 165 23
3 60 175 21

当输入体重K 63, 身高V 170,问现在的年龄大概是多少呢?
看到表中的信息,人脑会自然猜测年龄在23和21之间,也就是在id 2和3上权重比较高,0.6* 23 +0.4* 21,这个也接近于注意力的实质,其实是根据Q和V 做评分,用以对V加权取值,这些权重值,就是注意力。
a(q, k1) v1+ a(q, k2)v2

评分函数

评分函数实际有很多种,tanh, 经过一个线性变换,或者sin cos 、加 等等,目前业内没有最好的实践

attention在网络模型的应用-Bahdanau 注意力

很多的论文都涉及注意力的使用,这块的依据是比较早和出名的Bahdanau注意力讲解。
上文seq2se模型中讲过解码器的输入是编码器的输出(上下文变量)以及解码器输入,而在有注意力的网络模型中,这个上下文变成了注意力的输出,解码器示意:
【深度学习-注意力机制attention 在seq2seq中应用】,深度学习,深度学习,人工智能
其中的at,i 就是注意力权重的输出
【深度学习-注意力机制attention 在seq2seq中应用】,深度学习,深度学习,人工智能
时间步t-1 解码器的隐状态是St-1,也是所谓的查询
ht编码器隐状态,是键也是值文章来源地址https://www.toymoban.com/news/detail-708826.html

加性注意力代码实现

class AdditiveAttention(nn.Module):
    """加性注意力实现
    """
    def __init__(self, key_size, query_size, num_hiddens, dropout, **kwargs):
        super(AdditiveAttention, self).__init__(**kwargs)
        self.W_k = nn.Linear(key_size, num_hiddens, bias=False)
        self.W_q = nn.Linear(query_size, num_hiddens, bias=False)
        self.w_v = nn.Linear(num_hiddens, 1, bias=False)
        self.dropout = nn.Dropout(dropout)

    def forward(self, queries, keys, values, valid_lens):
        queries, keys = self.W_q(queries), self.W_k(keys)
        # 在维度扩展后,
        # queries的形状:(batch_size,查询的个数,1,num_hidden)
        # key的形状:(batch_size,1,“键-值”对的个数,num_hiddens)
        # 使用广播方式进行求和
        features = queries.unsqueeze(2) + keys.unsqueeze(1)
        features = torch.tanh(features)
        # self.w_v仅有一个输出,因此从形状中移除最后那个维度。
        # scores的形状:(batch_size,查询的个数,“键-值”对的个数)
        scores = self.w_v(features).squeeze(-1)
        # 这部分主要是为了遮蔽填充项,理解注意力上的时候可以先忽略它
        self.attention_weights = masked_softmax(scores, valid_lens)
        # values的形状:(batch_size,“键-值”对的个数,值的维度)
        return torch.bmm(self.dropout(self.attention_weights), values)

到了这里,关于【深度学习-注意力机制attention 在seq2seq中应用】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 深入理解深度学习——注意力机制(Attention Mechanism):位置编码(Positional Encoding)

    深入理解深度学习——注意力机制(Attention Mechanism):位置编码(Positional Encoding)

    分类目录:《深入理解深度学习》总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nadaraya-Watson核回归 ·注意力机制(AttentionMechanism):注意力评分函数(AttentionScoringFunction) ·注意力机制(AttentionMechanism):Bahda

    2024年02月08日
    浏览(17)
  • NLP 学习笔记十-simple RNN+attention(注意力机制)

    NLP 学习笔记十-simple RNN+attention(注意力机制)

    感兴趣的伙伴,看这个笔记,最好从头开始看哈,而且我的笔记,其实不面向零基础,最好有过一些实践经历的来看最好。 紧接上一回,我们谈到seq2seq模型解决用于机器翻译的问题。其中seq其实是采用lstm作为自己的基础记忆网络实现的,当然也可以用RNN实现实现seq2seq模型。

    2024年02月09日
    浏览(12)
  • 【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)

    【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)

    ECANet(Efficient Channel Attention Network) 是一种 用于图像处理任务的神经网络架构,它在保持高效性的同时,有效地捕捉图像中的通道间关系,从而提升了特征表示的能力 。ECANet通过引入通道注意力机制,以及在卷积层中嵌入该机制,取得了优越的性能。本文将对ECANet的核心思

    2024年02月13日
    浏览(11)
  • 【深度学习注意力机制系列】—— SKNet注意力机制(附pytorch实现)

    【深度学习注意力机制系列】—— SKNet注意力机制(附pytorch实现)

    SKNet(Selective Kernel Network) 是一种用于图像分类和目标检测任务的深度神经网络架构,其核心创新是 引入了选择性的多尺度卷积核(Selective Kernel)以及一种新颖的注意力机制 ,从而在不增加网络复杂性的情况下提升了特征提取的能力。SKNet的设计旨在 解决多尺度信息融合的

    2024年02月13日
    浏览(13)
  • 【深度学习注意力机制系列】—— SCSE注意力机制(附pytorch实现)

    【深度学习注意力机制系列】—— SCSE注意力机制(附pytorch实现)

    SCSE注意力模块 (来自论文[1803.02579] Concurrent Spatial and Channel Squeeze Excitation in Fully Convolutional Networks (arxiv.org))。其对SE注意力模块进行了改进,提出了 cSE、sSE、scSE 三个模块变体,这些模块可以 增强有意义的特征,抑制无用特征 。今天我们就分别讲解一下这三个注意力模块。

    2024年02月13日
    浏览(12)
  • 【深度学习注意力机制系列】—— CBAM注意力机制(附pytorch实现)

    【深度学习注意力机制系列】—— CBAM注意力机制(附pytorch实现)

    CBAM(Convolutional Block Attention Module) 是一种用于增强卷积神经网络(CNN)性能的注意力机制模块。它由Sanghyun Woo等人在2018年的论文[1807.06521] CBAM: Convolutional Block Attention Module (arxiv.org)中提出。CBAM的主要目标是 通过在CNN中引入通道注意力和空间注意力 来提高模型的感知能力,从

    2024年02月13日
    浏览(10)
  • 【深度学习注意力机制系列】—— SENet注意力机制(附pytorch实现)

    【深度学习注意力机制系列】—— SENet注意力机制(附pytorch实现)

    深度学习中的注意力机制(Attention Mechanism)是一种模仿人类视觉和认知系统的方法,它允许神经网络在处理输入数据时集中注意力于相关的部分。通过引入注意力机制,神经网络能够自动地学习并选择性地关注输入中的重要信息,提高模型的性能和泛化能力。 卷积神经网络

    2024年02月14日
    浏览(13)
  • 【深度学习】注意力机制

    注意力机制(Attention Mechanism)是一种在计算机科学和机器学习中常用的技术,可以使模型在处理序列数据时更加准确和有效。在传统的神经网络中,每个神经元的输出只依赖于前一层的所有神经元的输出,而在注意力机制中,每个神经元的输出不仅仅取决于前一层的所有神经

    2024年02月02日
    浏览(16)
  • 注意力机制-CA注意力-Coordinate attention

    注意力机制-CA注意力-Coordinate attention

    CA(Coordinate attention for efficient mobile network design)发表在CVPR2021,帮助轻量级网络涨点、即插即用。 CA注意力机制的优势: 1、不仅考虑了通道信息,还考虑了方向相关的位置信息。 2、足够的灵活和轻量,能够简单的插入到轻量级网络的核心模块中。 提出不足 1、SE注意力中只

    2024年02月02日
    浏览(8)
  • 深度学习——常见注意力机制

    深度学习——常见注意力机制

    SENet属于通道注意力机制。2017年提出,是imageNet最后的冠军 SENet采用的方法是对于特征层赋予权值。 重点在于如何赋权 1.将输入信息的所有通道平均池化。 2.平均池化后进行两次全连接,第一次全连接链接的神经元较少,第二次全连接神经元数和通道数一致 3.将Sigmoid的值固定

    2024年02月14日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包