Transformer的学习

文章目录

  • Transformer
    • 1.了解Seq2Seq任务
    • 2.Transformer 整体架构
    • 3.Encoder的运作方式
    • 4.Decoder的运作方式
    • 5.AT 与 NAT
    • 6.Encoder 和 Decoder 之间的互动
    • 7.Training

Transformer

1.了解Seq2Seq任务

NLP 的问题,都可以看做是 QA(Question Answering)的问题,QA 的问题可以看做是 Sequence to Sequence 的问题。

Sequence to Sequence 是一个常见的任务类型,例如:语音识别、语音翻译(语音辨识)、机器翻译、Chatbot、Text-to-Speech (TTS) Synthesis(文本到语音合成)、语法分析、多标签分类、目标检测等等。

image-20231214174439817

image-20231215151943187

Sequence to Sequence 任务可以由各种序列模型执行,其中 RNN 模型是经典的用于序列数据的模型,而随着 Transformer 的出现和成功,它已经在许多序列任务中取代了传统的RNN架构。

Transformer 实际上就是一个关于 Seq2Seq 的 model


2.Transformer 整体架构

image-20231215155457110

整体架构分为两部分:Encoder 与 Decoder

3.Encoder的运作方式

Encoder 做的就是输入一个Vector sequence,输出一个Vector sequence.

Alt

Encoder的运作方式如下所示:

Encoder 里面是由多个 Block 组成的,经过多个 Block 的堆叠,最后得到一个Vector sequence.

image-20231215160756468

每个 Block 所做的事情如下:对于输入的每一个 Vector sequence,首先通过 Multi-Head Attention 得到输出 a a a,然后通过残差连接得到 a + b a+b a+b,之后通过 Layer Norm 得到正则化后的Vector sequence,接着送到 Fully Connection layer,同样使用残差连接并使用 Layer Norm 得到 Encoder 的输出。

Alt

4.Decoder的运作方式

Decoder 可以分为:Decoder-Autoregressive(AT) 与 Decoder-Non-autoregressive(NAT),在transformer中使用的是 Decoder-Autoressive.

Decoder 做了什么?

  • Decoder 部分首先输入一个 START,经过 Decoder 并且使用 Softmax 就会得到一个概率分布,然后对这个概率分布使用 max 得到概率最大的那个值(也就是one-hot编码)。

Alt

  • 紧接着,将得到的输出作为输入,送入 Decoder ,不断的迭代这个过程,就得到了最后的输出。

Alt

在 Decoder 中用了一个 Masked Multi-Head Attention.

Alt

Masked Self-atttention 每次一个 vector 在输出的时候,不可以看右边的部分,也就是说在产生 b 1 b^1 b1 的时候不能在考虑 a 2 , a 3 , a 4 a^2,a^3,a^4 a2,a3,a4,产生 b 2 b^2 b2 的时候不能考虑 a 3 , a 4 a^3,a^4 a3,a4,产生 b 3 b^3 b3 的时候不能考虑 a 4 a^4 a4 ,产生 b 4 b^4 b4 的时候就可以考虑全部的信息了。

Alt

具体细节如下图所示:

Alt

目前的这个 Decoder 运作机制不知道它应该什么时候停下来。

为了让其停下来,所以要有一个END的标记。

image-20231215102329600

通过这个 END 的标记来让模型停下来。

5.AT 与 NAT

image-20231215103750514

AT Decoder 传入的是一个 START,然后一个一个的进行输出。NAT Decoder 直接传入多个 START,同时输出。

NAT好处:平行化,一个步骤产生出完整的句子,可以控制输出的长度。(怎么控制?可能会有一个 classifier 来决定输出的长度;或者输入很多个 START,那么就会输出很多个输出,忽略 END 之后的输出)

6.Encoder 和 Decoder 之间的互动

Alt

Encoder 和 Decoder 之间的互动是通过 Cross attention 机制进行互动的。主要过程就是将 Decoder 中通过第一个 Masked Multi-Head Attention 以及 Add 与 Norm 后的 vector sequence 与 encoder 输出中的所有 vector sequence 进行 qkv 的计算。计算流程见下图:

①第一个输出的计算

image-20231215110035112

②第二个输出的计算

image-20231215110055526

7.Training

image-20231215111338358

在decoder输入的时候,要输入正确的答案(Teacher Forcing技术,使用真实的标签作为输入)

把正确答案 Ground truth 给模型,让其与 distribution 进行 cross entropy,每一个输出有一个cross entropy,将这些 cross entropy 求和,进行梯度下降,求解最好的参数,希望 decoder 的输出跟正确答案越接近越好。


参考链接:

【强烈推荐!台大李宏毅自注意力机制和Transformer详解!】 https://www.bilibili.com/video/BV1v3411r78R/?p=3&share_source=copy_web&vd_source=a36f62f9fcd2efea97449039538032fa

😃😃😃

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Anaconda中使用Jupyter出现’No module named ‘pymysql‘问题解决

问题截图: 解决办法: 一.找到Anaconda所在文件夹,文件夹处输入 cmd 进入命令控制 二. 在打开的cmd中输入‘conda install pymysql’ 三、输入y 安装完成~ 测试: import pandas as pd from sqlalchemy import create_engine …

抖店怎么运营?从开店到店铺维护,具体如下!

我是电商珠珠 抖店的热度很高,不少人都想要入驻,其中对于抖店的运营方面,新手不是很懂。 今天,我就来给大家详细的讲一下。 一、入驻 入驻的话需要新手准备一张个体工营业执照,身份证、银行卡、抖音号、手机和电脑…

java SSM火车票务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM火车票务管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…

读书心得(内容取自高质量C/C++编程)

版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是 程序风格的重要构成因素。 可以把程序的版式比喻为“书法”。好的“书法”可让人对程序一目了然,看得兴致勃勃。差的程序“书法”如螃蟹爬行,让人看得…

Unity | Shader基础知识(第六集:语法<如何加入外部颜色资源>)

目录 一、本节介绍 1 上集回顾 2 本节介绍 二、语法结构 1 复习 2 理论知识 3 Shader里声明的写法 4 Properties和SubShader毕竟不是一家人 三、 片元着色器中使用资源 四、代码实现 五、全部代码 六、下集介绍 相关阅读 Unity - Manual: Writing Surface Shaders…

ACL——访问控制列表

目录 1、ACL的产生背景及概述 2、ACL的应用 3、ACL的分类 4、ACL的组成 5、ACL的匹配位置 6、ACL的案例 案例1-----拒绝源IP为192.168.10.1的数据包 案例2------拒绝源IP在192.168.10.0/24整个网段的所有数据包 案例3------拒绝源IP为192.168.10.0/24所有奇数主机发送的…

VUE学习三、前端项目部署

1.前端项目打包 执行命令 npm run build:prod正常命令结束 , 会在前端项目里面出现dist文件夹 2.nginx下载安装 nginx下载 : http://nginx.org/en/download.html Windows 下载版本 Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说…

【Java JVM】实例对象内存布局

当 Java 应用启动后, 基本就是在不断的创建对象, 回收对象的过程中。 而这些创建的对象基本都是存放在应用的堆 (heap) 中, 但是这些对象在堆中又是什么样子的呢? 在这篇文章中, 我们分析一下 Java JVM 中实例对象的内存布局。 在 HotSpot 虚拟机里, 对象在堆内存中的存储布局…

如何禁止孩子在电脑中浏览某些网页?

在使用电脑的过程中,我们会使用浏览器来查看网页。而在孩子使用电脑的过程中,有些网页并不适合孩子查看。因此,我们需要禁止孩子浏览不健康的网页。那么,该如何禁止孩子在电脑中浏览某些网页呢? 定时关机3000简介 定时…

【docker】部署minio对象存储并用rclone同步

docker部署minio对象存储并用rclone同步 本文首发于 ❄️慕雪的寒舍 1.什么是minio? minio是一个开源的对象存储服务器,兼容S3协议。 官网:https://min.io/ 官方在开源的基础上也提供云端S3服务,分为个人和企业,有不…

Axure的动态图使用以及说明

认识Axure动态图 Axure动态图是Axure中的一种功能,它允许用户在原型中添加动画效果和交互动作,使原型更加生动和具有真实的用户体验。用户可以通过添加动态图来展示页面过渡、按钮点击、下拉菜单等交互操作的效果。 这是:就是我们今天要叫的…

ISCTF(a)

where_is_the_flag 答案应该被分成了三份了 蚁剑连接看看 第一个 第二个 第三个,在www下 Yunxi{0797d78c-0cb2-4cfb-87e6-f9c102f716f3} 命令执行 POST : 1 system ( tac flag.php ); 1 system ( tac /flag2 ); 1 system ( env ); 1z_Ssql 使用万能密码 后…

【数学建模】《实战数学建模:例题与讲解》第十四讲-模拟退火、遗传算法(含Matlab代码)

【数学建模】《实战数学建模:例题与讲解》第十四讲-模拟退火、遗传算法(含Matlab代码) 基本概念模拟退火(Simulated Annealing)遗传算法(Genetic Algorithms) 习题14.1(1&#xff09…

Leetcode—118.杨辉三角【简单】

2023每日刷题&#xff08;六十&#xff09; Leetcode—118.杨辉三角 实现代码 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> ans(numRows);for(int i 0; i < numRows; i) {ans[i].resize(i 1);ans…

小狐狸GPT付费2.4.9弹窗版学习源码介绍

小狐狸GPT付费2.4.9弹窗版学习源码是一套基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型的开源代码库&#xff0c;旨在帮助开发者快速构建和训练自己的语言模型。该源码集成了多个先进的自然语言处理技术&#xff0c;包括预训练、微调、对话生成等&am…

BugKu-Web-滑稽

题目环境 持续的动态图片 F12审查元素 拿下flag&#xff1a;flag{595d994a34342417bfc3a3c3a23e0a48}

基于ssm新锐台球厅管理系统的设计与实现论文

新锐台球厅管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为一般的台球厅都会跟上时代的变化&#xff0c;用上计算机来代表重复性的劳动&#xff0c;并且给用户一种新奇的感受&#xff0c;实现新锐台球厅管理系统 在技术上已成熟。本文介绍了新锐台…

【linux】(ubuntu)下 QT 出现的问题

错误一&#xff1a;Make 运行QT程序以后出现这样的错误。 【解决方法】 我的ubuntu版本是18.04.4&#xff0c; 原因1&#xff1a;没有更换软件源 原因2&#xff1a;没安装相关 软件包 注意&#xff1a;这一步很有可能卡死这一步&#xff0c;所以如果一直卡在这并且进度…

51单片机的串口通信

串口通信 本文主要涉及51单片机的串口以及串口通信&#xff0c;包括串口控制寄存器的设置以及波特率的计算方法等。 文章目录 串口通信一、 串行通信与并行通信二、 单工、半双工与全双工通信三、 单片机串口介绍&#xff08;1&#xff09;串口控制寄存器 SCON&#xff08;2&am…

C++:命名空间

从今天正式开始对C的学习&#xff0c;这里只学习C对C的拓展&#xff0c;和C相同的部分在C语言专栏中都可以找到&#xff0c;我们先看一段C代码 #include<iostream> using namespace std; int main() {cout<<"hello world<<endl;return 0; } 同样也是打…