简介

自注意力(self-attention):一个seq2seq的映射运算,具体而言,也就是将输入向量通过映射(或者说某种函数运算)输出对应的结果. 向量的维度都为

对于每个输出,就是用自注意力运算生成的,而这个运算原理,其实就是对输入向量进行加权平均罢了,公式为:

在此处是整个序列的索引(范围即[1,k]),并使权重相加为1。注意这个权重并不是某个参数,因为它是从计算而来。实现这个权重最简单的方法就是先对输入向量作点积(dot product)运算:

当然,经过这次点积运算,各值域为负无穷到正无穷,所以在这之后使用softmax将其映射到的范围,以确保它们在整个序列上的和为1。

以上为自注意力的基本运算。

代码

下代码展示了基本的自注意力运算,注意此处

import torch
import torch.nn.functional as F
#固定随机数以获得相同的结果
torch.manual_seed(0)
if __name__=='__main__':#假设输入x是一个张量, batch size为b, 矩阵size为 txk#为了简便,我们在这里创建一个batch size 为1,size为2x3的张量#为了体现下面softmax的负值转正,此处使用标准正态分布来生成含负数的矩阵input_tensor= torch.randn((1, 2, 3))x = input_tensorprint('X.shape:{}\nDatas:\n{}\n'.format(x.shape, x))# 对于原始的点积权重, 我们只需要将x与它的转置矩阵相乘即可raw_weights = torch.bmm(x, x.transpose(1, 2))print('raw_weights.shape:{}\n{}\n'.format(raw_weights.shape, raw_weights))#之后, 为了将该权重的值全转换为正值,并使它们的和为1,我们接着使用一个row-wise(对行进行操作)的softmax函数:#再次注意这里是基于行的softmax,进行验算时按行相加会发现和是为1的weights = F.softmax(raw_weights, dim=2)print('weights.shape:{}\n{}\n'.format(weights.shape, weights))#最后,为了计算输出序列y,我们只需要将权重与x相乘即可。#y的结构也为(b ,t, k),它的每个结果由权重矩阵的每行与x的每列相乘所得y = torch.bmm(weights, x)print('y.shape:{}\n{}\n'.format(y.shape, y))

结果:

X.shape:torch.Size([1, 2, 3])
Datas:
tensor([[[ 1.5410, -0.2934, -2.1788],  [ 0.5684, -1.0845, -1.3986]]])raw_weights.shape:torch.Size([1, 2, 2])
tensor([[[7.2079, 4.2414],[4.2414, 3.4554]]])weights.shape:torch.Size([1, 2, 2])
tensor([[[0.9510, 0.0490],[0.6870, 0.3130]]])y.shape:torch.Size([1, 2, 3])
tensor([[[ 1.4934, -0.3322, -2.1406],  [ 1.2366, -0.5411, -1.9346]]])

此处设定的txk为2x3,即有两个向量,以上由输入x到输出y的大致流程如下图:

可以看到,对于每个结果,它们都结合了输入里的每个向量进行加权。对于输出,如果我希望的重要性降低,那么它对应的点积结果就应该是个很小甚至是负值。

参考:Transformers from scratch | peterbloem.nl

对自注意力(self-attention)的理解以及基于pytorch的简易示例相关推荐

  1. 基于PyTorch实现Seq2Seq + Attention的英汉Neural Machine Translation

    NMT(Neural Machine Translation)基于神经网络的机器翻译模型效果越来越好,还记得大学时代Google翻译效果还是差强人意,近些年来使用NMT后已基本能满足非特殊需求了.目前 ...

  2. Attention机制理解笔记(空间注意力+通道注意力+CBAM+BAM)

    Attention机制理解笔记 声明 Attention分类(主要SA和CA) spitial attention channel attention SA + CA(spitial attentio ...

  3. 序列到序列网络seq2seq与注意力机制attention浅析

    序列到序列网络 序列到序列网络(Sequence to Sequence network),也叫做seq2seq网络, 又或者是编码器解码器网络(Encoder Decoder network), 是 ...

  4. 注意力机制的直观理解

    原题:Attention Mechanism in Deep Learning--A TensorFlow Implementation of Neural Machine Translation w ...

  5. 注意力机制的详细理解

    一.线性Attention的探索:Attention必须有个Softmax吗? 前几天笔者读到了论文 Transformers are RNNs: Fast Autoregressive Transf ...

  6. 注意力机制Attention Mechanism及论文

    注意力机制Attention Mechanism Q,K,V 注意力分数 seq2seq中注意力机制的应用 注意力机制源于对人类视觉的研究.在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息 ...

  7. 关于《注意力模型--Attention注意力机制》的学习

    关于<注意力模型--Attention注意力机制>的学习 此文大部分参考深度学习中的注意力机制(2017版) 张俊林的博客,不过添加了一些个人的思考与理解过程.在github上找到一份基于 ...

  8. 翻译: 详细图解Transformer多头自注意力机制 Attention Is All You Need

    1. 前言 The Transformer--一个使用注意力来提高这些模型的训练速度的模型.Transformer 在特定任务中的表现优于谷歌神经机器翻译模型.然而,最大的好处来自于 The Tran ...

  9. 注意力机制(Attention)最新综述论文及相关源码

    来源:专知 注意力机制(Attention)起源于模仿人类的思维方式,后被广泛应用于机器翻译.情感分类.自动摘要.自动问答等.依存分析等机器学习应用中.专知编辑整理了Arxiv上一篇关于注意力机制在N ...

最新文章

  1. python3.7.4安装教程桌面_Python 3.7.4 for Windows的安装
  2. 电脑编程教学_“人工智能”将无处不在,我的孩子要不要学习电脑编程?
  3. 测试时用存储过程来修改测试数据
  4. OpenCV-Python中的两种图像通道分离法
  5. 一键安装GitLab7在RHEL6.4上
  6. 代码大全阅读笔记02
  7. Yolov5身份证检测——C++ OpenCV DNN推理
  8. 为什么各大银行一直在不遗余力推广信用卡呢?
  9. Discuz!NT - 在线显示列表 游客 bug 修复
  10. 全景图解高铁数据,谁是最有潜力的高铁城市?
  11. oracle两个表合并 sql,如何创建从两个表(Oracle DBMS)生成“合并”数据集的Select SQL语句?...
  12. ad从2003升级到2008总结
  13. idea的setting界面怎么进_电脑怎么备份系统
  14. 7-181 帅到没朋友 (20 分)
  15. springmvc与Servlet3.0不依赖common包实现文件上传
  16. R语言编程基础(1)
  17. First of all, let’s talk about the richest man in Japan
  18. [UIKit学习]00.关于前置知识(storyboard,UIViewController,类扩展,项目属性)
  19. JavaScript异步编程的四种方法(转)
  20. Linux--进程组 作业 会话 守护(精灵)进程

热门文章

  1. [解决方案]Window 2008 R2 + IIS7.5 + VS2013 错误代码 0x80070002
  2. service docker start后docker stop/waiting的解决方法
  3. Sonar问题及解决方案汇总
  4. Gradle - 编译报org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm的问题解决
  5. django解决页面跳转问题
  6. Mipmap drawables图标
  7. git reset --mixed, - soft和--hard有什么区别?
  8. Win11怎么重置系统?Win11电脑重置系统的操作方法
  9. ros之service通讯
  10. listctrl 的使用技巧