数解 transformer 之 self attention transformer 公式整理

news2024/11/24 20:52:54

千万不要从任何角度轻看 transformer,重要的话说四遍:

千万不要从任何角度轻看 transformer

千万不要从任何角度轻看 transformer

千万不要从任何角度轻看 transformer

Attention is all you need 整个项目是鬼斧神工之作,巧夺天工之作,堪称神来之笔

它比后来的 Bert GPT x.y  flash attention 等不同角度的工作,都出神入化。

本文对应论文 “Attention is All You Need”,着重算法的数学表达

句子长度为n;比如 n=1024,或 n=2048,即,一句话最多可以是1024个单词,或 2048 个单词。

1. 位置编码

\mathbf{E}=[e_1 e_2 \cdots e_{n}]\\\\ e_{pos}(2i) = PE(pos, 2i) = sin(pos/10000^{2i/d_{model}})\\ e_{pos}(2i+1) =PE(pos,2i+1)=cos(pos/10000^{2i/d_{model}})\\ \\where\\ pos \in \{1,2,\cdots,n\},n=1024=max\_sentence\_length\\ i \in [0, d_{model}-1]\\ d_{model}=512 = word\_embedding\_dimention

可知,\mathbf{E}是由n个列向量组成的矩阵\mathbf{E}(512 \times 1024),每个列向量表示该列号pos 的位置编码向量\mathbf{E}(:,pos)

2. 输入向量

加入本句话第一个单词的词嵌入向量是x_1, 第二个单词是 x_2, 以此类推,最多是x_n.

如果句子长度不足 n个单词,则后面没有单词对应的x_i = \mathbf{0}

X=(x_1\,x_2\,\cdots\,x_n)为句子的词嵌入编码矩阵表示,为了让单词携带位置信息,直接将每个单词的词嵌入向量上加位置编码向量:

x_i = x_i + e_i

矩阵表示为:

\mathbf{X=X+E}

\mathbf{X}=(x_1+e_1 \,\,x_2+e_2\,\,\cdots\,\,x_n+e_n)

作为第一层 self-attention 模块的输入向量。

3. 完整的一层编码器计算过程

\mathbf{X}=(x_1\,\,x_2\,\, \cdots\,\,x_n)

[q_1\,q_2\cdots\,q_n] = Q = W_qX=W_q[x_1\,\,x_2\,\,\cdots\,\,x_n]

[k_1\,k_2\,\cdots\,k_n]=K=W_kX=W_k[x_1\,\,x_2\,\,\cdots\,\,x_n]

[v_1\,v_2\,\cdots\,v_n]=V=W_vX=W_v[x_1\,\,x_2\,\,\cdots\,\,x_n]

\left[ \begin{array}{cccc} a_{1,1} & a_{2,1} & \cdots &a_{n,1}\\ a_{1,2} & a_{2,2} & \cdots &a_{n,2}\\ \vdots & \vdots & \ddots & \vdots\\ a_{1,n} & a_{2,n} & \cdots &a_{n,n}\\ \end{array} \right] = A =K^TQ= \left[ \begin{array}{c} k_1^T\\ k_2^T\\ \vdots\\ k_n^T\\ \end{array} \right] [q_1\,q_2\, \cdots \,q_n]

\left[ \begin{array}{cccc} a_{1,1}^{'} & a_{2,1}^{'} & \cdots &a_{n,1}^{'}\\ a_{1,2}^{'} & a_{2,2}^{'} & \cdots &a_{n,2}^{'}\\ \vdots & \vdots & \ddots & \vdots\\ a_{1,n}^{'} & a_{2,n}^{'} & \cdots &a_{n,n}^{'}\\ \end{array} \right] = A^{'} = \mathbf{softmax}_{column}(\mathbf{A}) = \mathbf{softmax}_{column} ( \left[ \begin{array}{cccc} a_{1,1} & a_{2,1} & \cdots &a_{n,1}\\ a_{1,2} & a_{2,2} & \cdots &a_{n,2}\\ \vdots & \vdots & \ddots & \vdots\\ a_{1,n} & a_{2,n} & \cdots &a_{n,n}\\ \end{array} \right] )

\mathbf{Y}_1=\mathbf{V}\mathbf{A}^{'}=[v_1\,v_2\,\cdots\,v_n]\mathbf{A}^{'}

\mathbf{Y}_1=\mathbf{Y}_1+\mathbf{X}

\mathbf{Y}_1=Norm(\mathbf{Y}_1)

 假设 \mathbf{Y}_1 是有multihead中的 \mathbf{Head}_1 所产生的输出矩阵,

\mathbf{Y} =[\mathbf{Y_1Y_2 \cdots Y_8}] 

上面是把8个multihead的输出拼接起来了的到 \mathbf{Y}

然后经过本层的这个feed forward neuron network:

\mathbf{Z}=\mathbf{FFN}(\mathbf{Y})

\mathbf{Z} = \mathbf{Z}+\mathbf{Y}

\mathbf{Z}=Norm(\mathbf{Z})

然后将 \mathbf{Z} 送入下一层编码器,进行相同的计算过程,只是其中的\mathbf{W_q, W_k, W_v, FFN} 的权重不同而已。

4. Norm() 运算的细节

每一个层中都出现了两个次 normalize() 运算:

\mathbf{Y}=Norm(\mathbf{Y})

\mathbf{Z}=Norm(\mathbf{Z})

这里的作为输入和输出的 \mathbf{Y, Z}都是矩阵,矩阵的行数都是词嵌入的维度 d_{model}=512

Y的列数是句子最大长度 max_sentence_length

Z的列数是句子最大长度的8倍,因为是8个multihead的结果矩阵拼接起来的产物。

但无论怎样,normalize运算仅单独作用在矩阵Y和Z的每一列数据上,使得本列数据归一为标准正态分布的样子,即,独立同分布,这样据说可以加速训练过程,加快模型收敛,

针对\mathbf{Y, Z}具体实现如下:

假设需要被Norm()运算的矩阵抽象为用\mathbf{X}来表示,

    step1, 以矩阵的列为对象,计算本列元素的均值:

u_j=\frac{1}{m} \mathop{\sum} ^{m}_{i=1}x_{ij}\\ \\where \,\, m=d_{model} = 512\\ j =1,2,\cdots ,max\_sentence\_length=1024

    step2, 继续以矩阵的列为对象,计算每列的方差:

\sigma ^2_j=\frac{1}{m}\sum^m_{i=1}(x_{ij}-u_j)^2\\\\ where\,\,m=d_{model} = 512 \\j=1,2,\cdots ,max\_sentence\_length=1024

    step3, 归一化每个列元素,每个列元素减去本列均值,再除以方差:

x_{ij}=\frac{x_{ij}-u_j}{\sqrt{\sigma^2_j + \epsilon}}

        其中分母中加了\epsilon,仅仅是为了应对极低概率地出现 \sigma^2_j = = 0的分母为0的情况。

小结:

以上3个step的总体效果为:

Norm(\mathbf{X})=\frac{\mathbf{x}_{ij} - u_j}{\sqrt{\sigma^2_j}+\epsilon}

5. FNN的具体计算

6. 更多参考资料

原论文:

https://arxiv.org/abs/1706.03762dicon-default.png?t=N7T8https://arxiv.org/abs/1706.03762The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.Discussions:Hacker News (65 points, 4 comments), Reddit r/MachineLearning (29 points, 3 comments)Translations: Arabic, Chinese (Simplified) 1, Chinese (Simplified) 2, French 1, French 2, Italian, Japanese, Korean, Persian, Russian, Spanish 1, Spanish 2, VietnameseWatch: MIT’s Deep Learning State of the Art lecture referencing this postFeatured in courses at Stanford, Harvard, MIT, Princeton, CMU and othersIn the previous post, we looked at Attention – a ubiquitous method in modern deep learning models. Attention is a concept that helped improve the performance of neural machine translation applications. In this post, we will look at The Transformer – a model that uses attention to boost the speed with which these models can be trained. The Transformer outperforms the Google Neural Machine Translation model in specific tasks. The biggest benefit, however, comes from how The Transformer lends itself to parallelization. It is in fact Google Cloud’s recommendation to use The Transformer as a reference model to use their Cloud TPU offering. So let’s try to break the model apart and look at how it functions.The Transformer was proposed in the paper Attention is All You Need. A TensorFlow implementation of it is available as a part of the Tensor2Tensor package. Harvard’s NLP group created a guide annotating the paper with PyTorch implementation. In this post, we will attempt to oversimplify things a bit and introduce the concepts one by one to hopefully make it easier to understand to people without in-depth knowledge of the subject matter.2020 Update: I’ve created a “Narrated Transformer” video which is a gentler approach to the topic:A High-Level LookLet’s begin by looking at the model as a single black box. In a machine translation application, it would take a sentence in one language, and output its translation in another.icon-default.png?t=N7T8http://jalammar.github.io/illustrated-transformer/

图解Transformer(完整版)!笔者看过的 Transformer 讲解的最好的文章。icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=2247515317&idx=3&sn=d06f49715290c8f8c56144031d1e60b3&chksm=ebb78461dcc00d77b57d12d4ec9388054ffa0e06fa1b2454e9c7f4b785f114983fe4708ecf0a&scene=27

自然语言处理Transformer模型最详细讲解(图解版)-CSDN博客文章浏览阅读1.3w次,点赞47次,收藏255次。近几年NLP较为流行的两大模型分别为Transformer和Bert,其中Transformer由论文《Attention is All You Need》提出。该模型由谷歌团队开发,Transformer是不同与传统RNN和CNN两大主流结构,它的内部是采用自注意力机制模块。_transformer模型https://blog.csdn.net/m0_47256162/article/details/127339899

Transformer详解 - mathorB站视频讲解Transformer是谷歌大脑在2017年底发表的论文attention is all you need中所提出的seq2seq模型。现在已经取得了大范围的应用和扩展,而BERT就...icon-default.png?t=N7T8https://wmathor.com/index.php/archives/1438/

Transformers from scratch | peterbloem.nlicon-default.png?t=N7T8https://peterbloem.nl/blog/transformers

未完待续 ... ...

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

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

相关文章

C语言程序设计(第四版)—习题7程序设计题

目录 1.选择法排序。 2.求一批整数中出现最多的数字。 3.判断上三角矩阵。 4.求矩阵各行元素之和。 5.求鞍点。 6.统计大写辅音字母。 7.字符串替换。 8.字符串转换成十进制整数。 1.选择法排序。 输入一个正整数n(1<n≤10)&#xf…

SpringBoot RabbitMQ收发消息、配置及原理

今天分析SpringBoot通过自动配置集成RabbitMQ的原理以及使用。 AMQP概念 RabbitMQ是基于AMQP协议的message broker,所以我们首先要对AMQP做一个简单的了解。 AMQP (Advanced Message Queuing Protocol) is a messaging protocol that enables conforming client a…

Springmvc 的参数绑定之list集合

标签中name属性的值就是pojo类的属性名 参数绑定4 list [对象] <form action"teaupd.do" method"post"> <c:forEach items"${list}" var"tea" varStatus "status"> 教师编号&#xff1a;<input…

大模型专题:2023爱分析·大模型厂商全景报告

今天分享的是大模型系列深度研究报告&#xff1a;《大模型专题&#xff1a;2023爱分析大模型厂商全景报告》。 &#xff08;报告出品方&#xff1a;爱分析&#xff09; 报告共计&#xff1a;80页 研究范围定义 大模型是指通过在海量数据上依托强大算力资源进行训练后能完成…

统计图环形图绘制方法

统计图环形图绘制方法 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制&#xff0c;饼图环形图绘制较难。 在网上看到一种类很有艺术感的环形图图例&#xff0c;一时手痒也就搞了一个绘制方法。 本方法采用C语言的最基本功能&…

每日OJ题_算法_递归④力扣24. 两两交换链表中的节点

目录 ④力扣24. 两两交换链表中的节点 解析代码 ④力扣24. 两两交换链表中的节点 24. 两两交换链表中的节点 难度 中等 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即…

08-静态pod(了解即可,不重要)

我们都知道&#xff0c;pod是kubelet创建的&#xff0c;那么创建的流程是什么呐&#xff1f; 此时我们需要了解我们k8s中config.yaml配置文件了&#xff1b; 他的存放路径&#xff1a;【/var/lib/kubelet/config.yaml】 一、查看静态pod的路径 [rootk8s231 ~]# vim /var/lib…

【网工】华为设备命令学习(防火墙)

实验目的PC1连接到外网。 关于防火墙的其他知识后续补充。 ensp里的防火墙 用户名admin 密码Admin123 防火墙的接口类型 1.路由模式 物理口可以直接配. ​​​​​2.交换模式 物理口不能直接配IP&#xff0c;类似交换机&#xff0c;可以配vlan 首先我们先要对各个设备进…

前端开发:Vue框架与前端部署

Vue Vue是一套前端框架&#xff0c;免除原生)avaScript中的DOM操作&#xff0c;简化书写。是基于MVVM(Model–View-ViewModel)思想&#xff0c;实现数据的双向绑定&#xff0c;将编程的关注点放在数据上。简单来说&#xff0c;就是数据变化的时候, 页面会自动刷新, 页面变化的时…

Crypto-RSA2

题目&#xff1a;&#xff08;BUUCTF在线评测 (buuoj.cn)&#xff09; 已知e,n,dp/(dq),c求明文: 首先有如下公式&#xff1a; dp ≡ d mod (p-1) &#xff0c;ed ≡ 1 mod φ(n) &#xff0c;npq &#xff0c;φ(n)(p-1)(q-1) python代码实现如下&#xff1a; import libnu…

npm报错之package-lock.json found. 问题和淘宝镜像源过期问题

1、package-lock.json found. 问题的解决 在执行yarn add react-transition-group -S 安装react-transition-group时出现package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in orde…

【旧文更新】【优秀毕设】人脸识别打卡/签到/考勤管理系统(OpenCV+最简基本库开发、可移植树莓派 扩展网络图像推流控制 验证码及Excel邮件发送等功能)

【旧文更新】【优秀毕设】人脸识别打卡/签到/考勤管理系统&#xff08;OpenCV最简基本库开发、可移植树莓派 扩展网络图像推流控制 验证码及Excel邮件发送等功能&#xff09; 文章目录 关于旧文新发毕设结构主页面验证码识别效果管理页面人脸信息采集管理实时数据更新签到结果…

使用Docker Compose搭建Redis主从复制

在Docker中搭建Redis主从架构非常方便&#xff0c;下面是一个示例&#xff0c;演示一下如何使用Docker Compose搭建一个Redis主从复制环境。首先&#xff0c;确保我们本地环境已经安装了Docker和Docker Compose。 我这里使用OrbStack替代了Docker desktop。 1. 创建一个名为r…

数据结构与算法:双向链表

朋友们大家好啊&#xff0c;在上节完成单链表的讲解后&#xff0c;我们本篇文章来对带头循环双向链表进行讲解 双向链表 双向链表、头节点和循环的介绍构建双向链表节点的构建初始化双向循环链表&#xff08;空链表&#xff09;销毁双向链表 链表的打印双向链表头尾的插与删尾插…

CSS3学习(二)

目录&#xff1a; 1. 字体属性 1.1 字体系列 1.2 字体大小 1.3 字体粗细 1.4 文字样式 1.5 字体复合属性 1.6 总结 2 文本属性 2.1 文本颜色 2.2 对齐文本 2.3 装饰文本 2.4 文本缩进 2.5 行间距 2.6 总结 1. 字体属性 1.1 字体系列 使用font-family属性定义文…

JavaScript设计模式与开发实战

JavaScript设计模式与开发实践 第一章、面向对象的JavaScript 1.1 多态 类似java面向对象&#xff0c;通过继承共有特征&#xff0c;来实现不同方法。JavaScript的多态就是把“做什么”和“谁去做”分离&#xff0c;消除类型间的耦合关系。 他的作用就是把过程化的条件分支…

【JavaEE】spring boot快速上手

SpringBoot快速上手 文章目录 SpringBoot快速上手Maven会出现的一个官方bug创建完项目之后常用的的三个功能依赖管理Maven仓库中央仓库本地仓库国内源配置私服 springboot项目创建什么是springspring boot项目的创建Hello Worldweb服务器 SpringMVC什么是SpringWebMVC什么是MVC…

Sora:AI视频生产力的颠覆性跃进,让创意瞬间成“视界”!

在AI视频技术宇宙中&#xff0c;RunwayGen2、Stable Video Diffusion和Pika等明星产品早已名声在外。然而&#xff0c;今日横空出世的Sora犹如一颗璀璨新星&#xff0c;以其震撼性的创新突破&#xff0c;在视频制作领域掀起了一场革命&#xff01;相较于市面上同类AI视频神器&a…

【Java程序员面试专栏 分布式中间件】Redis 核心面试指引

关于Redis部分的核心知识进行一网打尽,包括Redis的基本概念,基本架构,工作流程,存储机制等,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 基础概念 明确redis的特性、应用场景和数据结构 什么是Redis,Redis有哪些应用场景 Redi…

互联网加竞赛 基于计算机视觉的身份证识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-sen…