论文阅读:Attention is all you need

【最近课堂上Transformer之前的DL基础知识储备差不多了,但学校里一般讲到Transformer课程也接近了尾声;之前参与的一些科研打杂训练了我阅读论文的能力和阅读源码的能力,也让我有能力有兴趣对最最源头的论文一探究竟;我最近也想按照论文梳理一下LLM是如何一路发展而来的,所以决定阅读经典论文。本文是这个系列的第一篇。】

Attention is all you need 这篇文章提出了一个新的“简单的”架构、LLM的基石——Transformer,主要是针对机器翻译任务,当然后来就出圈了。在这篇文章之前,机器翻译的做法是Encoder+Decoder(端到端),其中Encoder和Decoder都是循环神经网络+Attention。这篇文章所做的是把循环神经网络去掉,整个端到端是纯Attention的。

图解整体架构

论文中的这张图就可以说明Transformer的架构。左下方的inputs是传入的单词组成的句子,所以要经过一个embedding层,这是常规操作;然后通过N个编码块(论文中叫‘层’),每个编码块包括Multi-Head Attention(positional Encoding后面讲),归一化,前馈网络和残差连接(需要有resnet基础);编码器的输出给到解码器,但是是拦腰给进去的,不是在outouts的位置;解码器是"shifted right"的,意思是逐字生成的;解码块比编码块就多了一个Masked Multi-Head(后面讲),别的都和编码器一样。最后编码器通过一个softmax,就得到一个概率分布(即对字典里的每一个字都输出一个概率,一般概率最高的字作为这一步输出的字)。

接下来逐个详解模型中的每一个部分:

这个子层连同上面的norm,表示成公式就是

LayerNorm

为什么要用LayerNorm而不是batchNorm?因为每一个seq的长度是不同的,使用batchNorm是把多个序列在某一个embedding维度上做归一化,而使用LayerNorm是在一个对一个序列在所有embedding维度上做归一化。前者当序列长度波动大时,每个batch的均值和方差也波动较大,预测不稳定。

Attention

q, k, v 是三种向量,Attention输出是多个v向量的加权平均,具体权重是多少呢?按q和k的相似度来决定。k-v是成对的; 新来了一个q,计算q和每个k的相似度,相似度高的,k对应v的权重就高。

scaled dot-product attention

既然注意力机制要计算相似度,那么Transformer用的是哪一种相似度计算方式呢?

使用了最简单的内积相似度。

除以dk是为了防止值过大或过小,梯度消失。

Mask

在输出的到t时刻时,应该只看k1, k2, ... kt-1,所以之后的都被置为很小的负数,通过softmax后就会变为0。

多头注意力机制

就是把上面的Attention做多次,最后把结果拼起来,而每次都维度小一点。为什么要用多头?增加可学习的变量W,否则没有什么可学参数。

在Transformer中,输入输出的地方q, k, v是相同的,一个向量复制3份;但编码器传给解码器的向量是作为K,V,而Q来自解码器下一个输入。也就是解码器在解码器中通过控制权重挑出自己感兴趣的东西。

feed forward

就是mlp

embedding

在Transformer中,embedding是共享权重的。

位置编码

注意到加权是顺序无关的,词序列打乱之后,加权结果不会变。为了解决这个问题,做如下位置编码并和embedding相加

训练

训练部分在论文中也有详细交代,步长也比较讲究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue2-Vuex中State、Mutation及mapState辅助函数、mapMutations的基本用法

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 个人笔记,仅供参考。 state:全局共享的响应式数据 mutation:声明修改全局响应式数据…

分数1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 求和

要求&#xff1a;计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值&#xff0c;打印出结果。 法一&#xff1a; 从要求&#xff0c;我们可以看出&#xff0c;计算内容分为正数和负数。对他们求和&#xff0c;可以通过分别求和再相加。 #include<stdio.h> int main() {fl…

9.云原生存储之ceph在k8s中应用及问题处理

云原生专栏大纲 文章目录 ceph应用场景ceph应用在k8s集群外使用块设备ceph客户端配置创建块挂载使用删除pool 在k8s集群内使用块设备创建块池和StorageClass使用存储 块存储映射问题处理问题现象事件分析csi-rbdplugin pod日志分析问题小结CentOS 7 编译安装 nbd 模块nbd内核模…

Chapter 9 运算符重载

目的&#xff1a;运用运算符重载 &#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&#x1f353;&…

go语言将cmd stdout和stderr作为字符串返回而不是打印到控制台

go语言将cmd stdout和stderr作为字符串返回而不是打印到控制台 1、直接打印到控制台 从 golang 应用程序中执行 bash 命令&#xff0c;现在 stdout 和 stderr 直接进入控制台&#xff1a; cmd.Stdout os.Stdout cmd.Stderr os.Stderrpackage mainimport ("fmt"…

MySQL8密码重置——Windows环境

1. 环境变量配置 加入操作会方便点&#xff0c;不用每次都要进入其安装目录 Path环境变量加入&#xff1a;%MYSQL_HOME%\bin 2. 停掉服务及服务安装 3. 创建my.ini MySQL安装目录&#xff08;C:\Program Files\MySQL\MySQL Server 8.0&#xff09;下创建my.ini文件 my.ini文…

Python函数,函数的定义和调用,函数的参数、返回值及类型、嵌套、作用域

函数是一段可重复使用的代码块&#xff0c;用于执行特定的任务。在Python中&#xff0c;函数可以通过定义和调用来使用。 函数的定义使用关键字def&#xff0c;后面跟着函数名、括号以及冒号。函数体缩进在冒号之后的下一行开始&#xff0c;用于执行特定的功能。函数的定义通常…

Chrome 插件 V3 版本 Manifest.json 中的内容脚本(Content Scripts)解析

内容脚本&#xff08;Content Scripts&#xff09; 指定在用户打开某些网页时要使用的 JavaScript 或 CSS 文件。 内容脚本是在网页环境中运行的文件。通过使用标准文档对象模型 (DOM)&#xff0c;开发者能够读取浏览器所访问网页的详情、更改这些网页&#xff0c;并将信息传递…

有哪些品牌的超声波清洗机是值得入手的?超声波清洗机推荐

作为一个既对生活品质有追求&#xff0c;又只想躺平的懒人&#xff0c;一直在努力尝试让轻松的生活少一点绊脚石&#xff0c;而其中最重要的一个&#xff0c;就是清洗眼镜清洗日常生活的一些小物件&#xff0c;讲真&#xff0c;洗这些东西有时候就跟下班回家的KPI一样。白天不累…

SearchInsertPosition【搜索插入位置】

给定的数组已经排序&#xff0c;找到第一个不小于给定值就可以了。 public int searchInsert(int[] nums, int target) {for(int i0;i<nums.length;i){//数组中存在&#xff0c;返回下标if(nums[i] target){return i;}//数组中不存在&#xff0c;需插入到数组中间位置情况…

《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(6)-Fiddler状态面板详解

1.简介 按照从上往下&#xff0c;从左往右的计划&#xff0c;今天就轮到介绍和分享Fiddler的状态面板了。 2.状态面板概览 Fiddler的状态面板概览&#xff0c;如下图所示&#xff1a; 3.状态面板详解 Fiddler底端状态栏面板详解&#xff0c;如下图所示&#xff1a; 3.1Captu…

重新分区扩展C盘

电脑 – 管理 使用第三方工具&#xff1a;DiskGenius数据恢复及分区管理软件 要选择完成后重启 &#xff0c;如果这里忘记勾选&#xff0c;后面也会再次提醒并默认勾选重启 "调整后容量"是指图片上显示的非C盘之外的盘符的容量&#xff0c;这里指E盘大小 上面已经利…

vue知识-05

聊天室案例(django接口) # chat.hetm<<script src"/static/axios.js"></script><script src"/static/vue.js"></script><body> <div id"app"><h1>聊天室</h1><button click"handleS…

解读vue配置文件(vue.config.js)

use strict const path require(path) const defaultSettings require(./src/settings.js) const CompressionPlugin require(compression-webpack-plugin)function resolve(dir) {return path.join(__dirname, dir) }const name defaultSettings.title // 网址标题 const …

浏览器事件循环(事件轮询)

浏览器事件循环(事件轮询) 文章目录 浏览器事件循环(事件轮询)1.浏览器事件循环流程2.同步任务、异步任务、宏任务和微任务概念同步任务&#xff1a;异步任务&#xff1a;宏任务&#xff1a;微任务&#xff1a; 3.宏任务和微任务区别异步任务的分类&#xff1a;异步任务执行顺序…

从事铁路工作保护足部,穿什么劳保鞋更安全

铁路运输在我国交通运输业中起着骨干作用&#xff0c;为国民经济的可持续发展和人口流动做出了巨大贡献。安全是铁路运输不可忽视的问题&#xff0c;在作业场地随处能见到“安全就是生命&#xff0c;责任重于泰山”的安全标语&#xff0c;由此可见安全问题是放在首位的。 铁路施…

PyTorch深度学习实战(30)——Deepfakes

PyTorch深度学习实战&#xff08;30&#xff09;——Deepfakes 0. 前言1. Deepfakes 原理2. 数据集分析3. 使用 PyTorch 实现 Deepfakes3.1 random_warp.py3.2 Deepfakes.py 小结系列链接 0. 前言 Deepfakes 是一种利用深度学习技术生成伪造视频和图像的技术。它通过将一个人的…

用python实现word中所有图片变清晰

要使用Python将Word文档中的所有图片变清晰&#xff0c;你需要使用一些库&#xff0c;例如python-docx和OpenCV。以下是一个简单的示例&#xff0c;说明如何使用这些库来提高Word文档中图片的清晰度。 请注意&#xff0c;这种方法基于简单的图像增强技术&#xff0c;可能无法提…

学习Vue配置代理总结

今天学习了Vue的配置代理&#xff0c;当我们想要向服务器取回来数据时就先要向服务器发送请求&#xff0c;但前端发送请求的方式也有很多种&#xff0c;首先是发送请求的鼻祖JS的XMLHttpRequest&#xff08;xhr&#xff09;&#xff0c;它操作起来相对麻烦&#xff0c;开发中也…

SpringBoot自定义Starter(@EnableXXX和META-INF的SPI自动添加)

目录 1. 自定义Starter1.1 场景和效果1.2 starter实现1.2.1 创建自定义starter项目1.2.2 把所有maven依赖导入1.2.3 实现公共代码逻辑1.2.4 添加方式一&#xff1a;实现RobotAutoConfiguration配置类1.2.5 添加方式二&#xff1a;实现RobotAutoConfiguration配置类 EnableRobo…