首页 > 其他分享 >Transformer学习

Transformer学习

时间:2023-05-03 20:44:51浏览次数:42  
标签:transformer Attention Transformer qkv 学习 源码 注意力

Transformer学习

此帖用于整理回顾自己学transformer的一些问题和知识

极好的博客和资料:

Transformer 模型详解-CSDN博客:原理讲的很清楚

举个例子讲下transformer的输入输出细节及其他 - 知乎 (zhihu.com):讲的是输入输出的细节

Transformer论文逐段精读【论文精读】B站:李沐dalao懂的都懂

transformer的细节到底是怎么样的? - 知乎 (zhihu.com):很详细

一些问题

  • 是不是编码器和解码器中堆叠层的数量一样?
    • 从源码和论文的图上看是这样的,都是N=6
  • 全局注意力是怎么来的,一次embedding是一个句子还是一篇文章
    • 还没解决

一些注意点

  • 多头自注意力块(Multi-Head Attention)的输入qkv都是相同的。但是在实际运算时,qkv都要先通过一个全连接层 给每个单头自注意力块生成qkv,过了全连接层之后,每个单头自注意力块中的qkv就不一样了。

  • 与CNN的一个对比:一个CNN块假设是看3*3的像素,它是没有办法看全貌信息的,但是transformer可以一次性把整个序列的内容都看到。 但是CNN有一个好处就是它可以是多通道输出的,可以认为一个输出通道对应了一种输出模式、一种特定的特征。Transformer为了有这个效果引入了多头注意力机制。当然还一个原因是单头注意力确实没有什么可以学的参数

  • layerNorm是对某个样本全部特征做norm,BatchNorm是对某个特征做norm

  • mask分两个,一个是解码器中的Sequence Mask,这是为了让训练时过程与使用时一致。另一个是Padding Mask,因为训练时不会每个句子长度都一样,因此需要将较短的句子的长度补到最长句子的长度,而凑长度而补的这些信息自然是不应该参与最后的自注意力计算的,因此要使用mask忽视掉它们。值得注意的Mask是在 \(Q*K^T\)算完之后进行。

  • 思考:为什么采用论文中的公式为位置编码?

    我的理解:在公式的定义下,时间步p和时间步p+k的位置编码的内积,即 是与p无关,只与k有关的定值。也就是说,任意两个相距k个时间步的位置编码向量的内积都是相同的,这就相当于蕴含了两个时间步之间相对位置关系的信息。此外,每个时间步的位置编码又是唯一的,这两个很好的性质使得上面的公式作为位置编码是有理论保障的。

注意力机制

Attention机制含义是:加权和。重要的赋予较高的权重,不重要的权重低,根据权重对Value进行加权和就是Attention。

有很多种attention机制,本文中作者所选用的是:scaled Dot-Product Attention(缩放的点积自注意力机制,说是scaled是因为除了一个\(\sqrt{d_k}\))。点乘自注意力机制算是最简单的自注意力计算了,这个实现起来比较简单作者选用了这一个。

通过对于某一个q,要计算这个q和其他所有的k之间的关系,得到每个k与这个q之间的关系紧密程度,也就是得到一个权重,这个权重决定了计算这个q的最终结果时每个v的权重。

源代码参考

比较好的源码实现:The Annotated Transformer (harvard.edu)(这个是哈佛一个团队实现的,逻辑很清晰)

非常好的源码讲解:Transformer代码完全解读! - 知乎(对应的也是上面的源码)

标签:transformer,Attention,Transformer,qkv,学习,源码,注意力
From: https://www.cnblogs.com/tantor/p/17369653.html

相关文章

  • vue学习 第九天(2) css高级技巧. ---- 精灵图 / 字体图片 / CSS三角
    学习目标:1)精灵图2)字体图标3)CSS三角4)CSS用户界面样式5)vertical-align属性应用6)溢出的文字省略号显示7)常见的布局技巧 1、精灵图1)需要精灵图的原因  (减少网页多张小图片的多次服务器请求)网页中有很多小的背景图,过多的图片。......
  • 机器学习预测给定生物DNA序列是编码序列还是非编码序列
    在生物学中,DNA序列通常指非编码序列,因为DNA是生物体内存储基因信息的一种生物大分子,具有一定的生物学特性和结构。然而,基于DNA序列的机器学习预测可以包括编码和非编码序列的任务。以下是一些基于DNA序列的机器学习应用:应用于非编码DNA序列的机器学习模型:基因预测:使用机器学习......
  • vue学习 第九天(1) 元素的显示与隐藏 display (不保留位置) / visibility (保留位置) /
    元素的显示与隐藏本质:让一个元素在页面中隐藏或者显示出来。1、display属性,隐藏后不保留位置1)display::none;隐藏对象2)display:block;除了转换为块级元素之外,同时还有显示元素的意思。display隐藏元素后,不再占有原来的位置。 2......
  • Tomcat-学习目录
    1、Tomcat-基本介绍【理论知识】https://www.cnblogs.com/ygbh/p/17368777.html2、安装JDKhttps://www.cnblogs.com/ygbh/p/17368832.html3、Linux-安装Tomcathttps://www.cnblogs.com/ygbh/p/17369008.html4、Tomcat配置文件解析https://www.cnblogs.com/ygbh/p/17......
  • linux学习笔记(29)linux共享目录,NFS,使用autofs实现NFS 自动挂载
     【1】NFS简介(1.1)什么是NFS NFS是NetworkFileSystem的缩写,即网络文件系统。英文NetworkFileSystem(NFS),是基于UDP/IP协议的应用,可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。 NFS在文件传送或信息传送过程中依赖于RPC协议。RPC:远程过程调用(R......
  • Bootstrap学习笔记
    目录1总览2Bootstrap网格系统2.1核心特性2.2固定布局2.3响应式布局2.4行列对齐3Bootstrap基础组件4Bootstrap高级组件本文是笔者在学习Bootstrap框架时整理的笔记,通过本文,读者可以初步了解该框架的基本用法和前端开发的大体思路。1总览Bootstrap官网:https://getbootst......
  • python学习笔记8(json数据格式、pycharts简单折线图)
    1.jsonjson是一种轻量级的数据交互格式,可以以json指定的格式去组织和封装数据;json本质上是一个带有特定格式的字符串;json负责不同编程语言中的数据传递和交互;1.1python数据与json数据相互转化引入json模块importjson1.1.1python数据转json数据importjson#python列表......
  • three.js 入门学习(一)
    webGl和three.jshttp://webgl3d.cn/pages/aac9ab/图形学算法Web3DWebGPU下载yarnaddthree@types/three使用import*asTHREEfrom'three';onstscene=newTHREE.Scene();仅导入你所需要的部分import{Scene}from'three';一个初始化的demo场景、相机......
  • Salesforce LWC学习(四十三) lwc 零基础学习路径的视频已上传B站
    本篇参考:https://www.bilibili.com/video/BV1QM411G7pN/还记得salesforce零基础学习(一百二十五)零基础学习SF路径 中描述的那样,预计今年年底以前基于0基础学习的内容录制成视频,更好的更方便的进行学习和互动。当时的一个动机是以前公司做veeva的同事或者java以及.net转过来的同事......
  • 基于 CentOS Linux release 7.9.2009 的软件开发学习
    了解Linux系统:作为新手程序员,首先要熟悉Linux系统,学习基本的命令行操作,如文件和目录操作、进程管理和权限控制等。选择编程语言:根据你的兴趣和项目需求,选择一种编程语言进行学习。常用的编程语言包括Python、Java、C++、Ruby和PHP等。安装开发工具:为了进行软件开发,你需......