热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pytorch实现attention_SelfAttention手动推导及实现

一、前言问:transformer模型的众多派生BERT,RoBERTa,ALBERT,SpanBERT,Di

一、前言

问:transformer模型的众多派生BERT,RoBERTa,ALBERT,SpanBERT,DistilBERT,SesameBERT,SemBERT,SciBERT,BioBERT,MobileBERT,TinyBERT和CamemBERT有什么共同点?

答:Self-attention//Transformer架构

使用Transformer架构对NLP任务建模,避免使用递归神经网络,完全依赖Self-Attention机制绘制输入和输出之间的全局依赖关系。

本文要:

  1. 探究Self-Attention机制背后的数学原理
  2. 引导完成Self-Attention模块中涉及的数学计算
  3. 从头带领编写Self-Attention模块代码(pytorch)

二、自注意力机制(Self-Attention)

一个self-attention模块输入为 n,输出也为 n.那么在这个模块内部发生了什么?用门外汉的术语来说,self-attention机制允许输入彼此之间进行交互(“self”)并找出它们应该更多关注的区域(“Attention”)。输出是这些交互作用和注意力得分的总和。

v2-058a9fc42c50efa1a62a2fe124fb8dca_b.jpg

在self-attention中,每个单词有3个不同的向量,它们分别是Query向量(

),Key向量(
)和Value向量(
),长度均是64。它们是通过3个不同的权值矩阵由嵌入向量
乘以三个不同的权值矩阵
,
,
得到,其中三个矩阵的尺寸也是相同的。均是
。(Transformer中使用的词嵌入的维度为
。)

slef: 自己和自己计算相似度函数,然后进一步进行关注对吧。

计算过程:

假如我们要翻译一个词组Thinking Machines,其中Thinking的输入的embedding vector用

表示,Machines的embedding vector用
表示,以
举例,整个过程可以分成7步:
  1. 输入单词转化成嵌入向量;
  2. 根据嵌入向量得到
    ,
    ,
    三个向量;
  3. 为每个向量计算自注意力得分,分数决定当我们在某个位置对单词进行编码时,要在输入句子的其他部分上投入多少注意力:
    ;
  4. 为了梯度的稳定,对计算的分数进行 Scale,即除以
    ,原因是如果点乘结果过大,使得经过 softmax 之后的梯度很小,不利于反向传播
  5. 对score施以softmax激活函数,归一化;
  6. softmax乘Value值
    (每个单词的value),得到加权的每个输入向量的评分
    ;
  7. 相加之后得到最终的输出结果
    :

v2-22f4c75f7f79b9204640e42ca705a0d4_b.jpg
q, k, v 的自我理解:q:当前词作为搜索词,此时对应query_vector k: 句子中的所有词(包括query,去和query匹配搜寻相关度,此时对应key_vector。故qk相乘可以决定在句子每个单词上投入多少注意力。v: 句子中每个词自身的价值value,将求得的注意力得分与v相乘得到最终每个单词的得分。

矩阵计算:

实际实现时采用的是基于矩阵的计算方式

v2-41b14c93fed52b579e775ba6d7483af7_b.jpg

三、实例演示

步骤(忽略了二中的第四步):

  1. 准备输入x
  2. 初始化 K, Q, V的权重矩阵
  3. x与K, Q, V相乘得到key, query, value的表示
  4. 计算x的注意力得分(k, v),即求得每个单词的权重weight
  5. softmax
  6. weight分别乘value中的每一行,得到的是对应的加权矩阵
  7. 矩阵按列相加得到分数矩阵Zx
  8. 将每个输入的分数按列排列得到最终的输出Z

手动计算过程:

参考:https://mp.weixin.qq.com/s/xLI0yY1hAlOZ1c01SexA1A

四、代码实现(pytorch)

具体步骤同三

(矩阵中点乘和乘法不同,具体见参考3)


参考:

动手推导Self-Attention​mp.weixin.qq.com
v2-69bac2b7865fadb993cc3afffde8153c_180x120.jpg
自定义:Transformer详解​zhuanlan.zhihu.com
[Python] numpy中运算符* @ mutiply dot的用法分析​blog.csdn.net
v2-2a5027b5bff83f50a189c6146b4f7548_ipico.jpg


推荐阅读
  • navicat生成er图_实践案例丨ACL2020 KBQA 基于查询图生成回答多跳复杂问题
    摘要:目前复杂问题包括两种:含约束的问题和多跳关系问题。本文对ACL2020KBQA基于查询图生成的方法来回答多跳复杂问题这一论文工作进行了解读 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 读手语图像识别论文笔记2
    文章目录一、前言二、笔记1.名词解释2.流程分析上一篇快速门:读手语图像识别论文笔记1(手语识别背景和方法)一、前言一句:“做完了&#x ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 语义分割系列3SegNet(pytorch实现)
    SegNet手稿最早是在2015年12月投出,和FCN属于同时期作品。稍晚于FCN,既然属于后来者,又是与FCN同属于语义分割网络 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 安装Tensorflow-GPU文档第一步:通过Anaconda安装python从这个链接https:www.anaconda.comdownload#window ... [详细]
  • 都会|可能会_###haohaohao###图神经网络之神器——PyTorch Geometric 上手 & 实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了###haohaohao###图神经网络之神器——PyTorchGeometric上手&实战相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
  • YOLOV4 Pytorch版本训练自建数据集和预测
    1.程序下载本文程序核心部分完全参考开源代码:https:github.comWongKinYiuPyTorch_YOLOv4。只是从一种学习的角度去写了我的代码仓库,在基础上增加 ... [详细]
author-avatar
手机用户2502924251
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有