Transformer 论文阅读笔记
文章目录
- 前言
- 论文阅读
- 研究现状
- 工作内容
- 模型架构
- 训练过程
- 实验结果
- 模型代码
- 其他评价
前言
Transformer可以说是深度学习领域最重要的,里程碑式的工作之一,发表于2017年的NIPS。该模型开创了自MLP(多层感知机)、CNN(卷积神经网络)和RNN(循环神经网络)之后的第四种基础模型。这项工作也成为当前AIGC盛行的最重要的基础,是Google公司对人工智能领域的卓越贡献。
Transformer论文中的所有作者都是共同一作,这种情况一般是比较少见的。但是,这篇文章中也详细介绍了每一名作者对文章所做的贡献是什么,而非只是给每个作者的贡献用几个很虚的词进行描述。反观当今学术界的共同一作挂名现象,不得不说有些论文的共同一作已经失去了原本的意义,可悲可叹。
根据2024年3月份的最新消息,实际上Transformer中二作Shazeer贡献最大。
论文阅读
研究现状
- 目前的主流序列转录模型:主流的序列转录模型使用复杂的循环神经网络或卷积神经网络,包含一个编码器和一个解码器。性能最好的模型中,会在编码器和解码器之间增加一种注意力机制。对于自然语言处理中的主流序列转录任务,目前最好的方法都是基于RNN、LSTM和GRU的。
- 循环神经网络存在的问题:循环神经网络需要通过上一个时间步的隐藏状态和当前时刻的输入来获取当前时间步的隐藏状态,这样就妨碍了模型的并行程度。
- 注意力机制在编解码器中的应用现状:注意力机制往往用于循环神经网络编解码器中,将编码器的内容高效地传递给解码器,但是,目前还没有仅仅基于注意力机制的模型架构。
工作内容
- 研究概述:本文提出了一种简单的网络架构Transformer,该架构完全基于注意力机制,而舍弃了循环神经网络和卷积神经网络。该模型中将循环神经网络中的所有循环层替换为了多头注意力,不仅能够取得更好的性能,而且受益于很好的并行策略,该模型的训练时间也显著更低。
- 与CNN和RNN的联系:Transformer中通过多头注意力机制,模拟卷积神经网络的多输出通道的优点;通过完全并行,克服了循环神经网络中需要逐时间步计算隐藏状态的缺点。
模型架构
- 编解码器架构:Transoformer仍然基于编解码器的基本架构,即包含一个编码器和一个解码器。
- 词元嵌入层: 将每一个词元转换为一个向量;
- 编码器:编码器由6个完全相同的神经网络层组成,每个层都包含两个子层,分别是一个多头注意力子层和一个MLP子层(包含两个线性层)。这两个子层内部都有残差连接,输出都经过了层归一化。编码器的输出作为解码器的输入。出于方便残差连接的简单考虑,所有输出向量的维度都控制为512。
- 解码器:解码器也由多个相同的块构成。与编码器的块不同,解码器的块中包含三个子块,其中两个子块与编码器的两个子块相同,但是第三个子块是一个带掩码的多头注意力机制子块(当然其中也有残差连接和层归一化)。之所以需要带掩码的模块,是因为按照逻辑,解码器在计算某个时间步的输出时不应该看到该时间步及其之后的输入内容,因为所有时间步的输入是一次性传入解码器的。
- 层归一化:对每一个样本对应的特征向量做一个标准化。
- 注意力机制:注意力机制中有三个重要概念,分别是Key(简称K)、Value(简称V)和Query(简称Q)。计算注意力机制的过程如下:首先,需要计算Query和每个Key之间的相似度;然后,根据Query和每个Key之间的相似度为每个Value分配权重,与Query越相似的Key对应Value的权重越大;最后,对Value进行加权平均求和,即获得最终的Output。Transformer中,除了解码器中的多头注意力子层,对于输入的序列,该序列同时作为Q K和V,即被称为自注意力机制。
- 两种常见的注意力机制:加性注意力机制和点积注意力机制。Transformer中采用的是改进型的点积注意力机制。
- 相似度的计算:最简单的相似度计算可以采用余弦相似度,即将两个向量进行内积,值越大表示两个向量的方向越相近,也就是相似度越高。在Transformer中,对点积注意力进行了Scale改进,也就是除以Key的维度的平方根,从而防止传递的梯度过小使得模型难以训练。
- 多头注意力机制:Transformer中没有做高维的注意力函数计算,相反,它将注意力函数中的各个序列都进行了投影降维,并基于降维后的序列,进行了8次注意力函数计算,并将计算的结果拼接在一起。这样的方式模拟了卷积神经网络中的多通道输出,从而尽可能地保留了特征识别结果的多样性。
- 位置编码:由于注意力机制的计算过程之中并没有蕴含时序信息,因此需要显式地向模型中输入时序信息。在Transformer中,在输入部分增加了位置编码,该位置编码是基于当前词元的位置下标和三角函数进行计算的。最终,将位置编码和嵌入后的词元向量直接相加,就得到了每个词的完整表示。
训练过程
采用8张NVIDIA P100 GPU进行训练(现在Google的工作大部分都是基于更快的TPU进行训练的了,而非使用GPU),使用Adam优化器。对于学习率,采用的是一种先提升后降低的策略;模型中采用了大量Dropout技术进行正则化,dropout率设置为0.1。另外,还使用了Inception V3中的标签平滑化操作来进行另一种正则化。
实验结果
- 机器翻译任务:在两个机器翻译任务上,该模型在性能上更加优越,并且有更高的并行程度,需要显著更少的训练时间。在一项英语到德语的翻译实验中,该模型比包括集群算法在内的最好结果高出了两个BLEU;在另一项英语到法语的翻译任务中,该模型实现在所有单模型中最好的性能,并且训练的速度要比其他的架构都快很多。
- 另一项NLP任务:另外,在另一个NLP任务上,Transformer也取得了很好的效果。
模型代码
存放于Github上的tensor2tensor模块中。
其他评价
由于注意力机制对整个模型的归纳偏置更少,因此往往需要更多的数据和更大的模型才能达到很好的效果。
相关文章:
Transformer 论文阅读笔记
文章目录 前言论文阅读研究现状工作内容模型架构训练过程实验结果模型代码 其他评价 前言 Transformer可以说是深度学习领域最重要的,里程碑式的工作之一,发表于2017年的NIPS。该模型开创了自MLP(多层感知机)、CNN(卷…...
Vue 3中ref和reactive的区别
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
oracle19c adg搭建
一、环境搭建 主机IPora19192.168.232.111ora19std192.168.232.112 本文结合:https://blog.csdn.net/weixin_63131036/article/details/136635553 1.配置网络yum源 1.删除redhat7.0系统自带的yum软件包; rpm -qa|grep yum >oldyum.pkg 备份原信息 …...
关闭Elasticsearch built-in security features are not enabled
禁用Kibana安全提示(Elasticsearch built-in security features are not enabled) Kibana提示#! Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.e…...
MC0248 密码判断器(判断强弱密码)
原题链接<---- islower 小写字母判断 isupper 大写字母判断 isdigit 数字判断 题目: 小码哥在是一位密码领域的初学者,有一天他的老师给他了一串密码,要他判断这个密码是否是强密码,老师和他说强密码就是需要同时达到以下要求࿱…...
vue3+threejs新手从零开发卡牌游戏(十六):初始化对方手牌
添加对方手牌区时注意位置调整,以及手牌应该是背面朝上,加个rotateX翻转即可,其他代码和p1.vue代码一致,game/hand/p2.vue代码如下: <template><div></div> </template><script setup lan…...
网页无插件视频播放器,支持录像、截图、音视频播放,多路播放等,提供源码下载
前言 本播放器内部采用jessibuca插件接口,支持录像、截图、音视频播放等功能。播放器播放基于ws流,分屏操作支持1分屏、4分屏、6分屏、9分屏方式。 jessibuca工作原理是通过Emscripten将音视频解码库编译成Js(WebAssembly,简称was…...
Openstack创建和操作实例,实现与外部网络通信
一、熟悉OpenStack图形界面操作 1、了解Horizon项目 Horizon项目 各OpenStack服务的图形界面都是由Horizon提供的。Horizon提供基于Web的模块化用户界面。Horizon为云管理员提供一个整体的视图。Horizon为终端用户提供一个自主服务的门户。Horizon由云管理员进行管理与控制&a…...
dubbo 源码系列之-集群三板斧---负载均衡(二)
在上一课时我们了解了 LoadBalance 接口定义以及 AbstractLoadBalance 抽象类的内容,还详细介绍了 ConsistentHashLoadBalance 以及 RandomLoadBalance 这两个实现类的核心原理和大致实现。本课时我们将继续介绍 LoadBalance 的剩余三个实现。 LeastActiveLoadBala…...
【一周一篇小题解】洛谷P1035级数求和
还是很简单的…… 首先,输入k,再定义一个双精度浮点数s,不停的循环 for(i1;;i) 每次循环加上1.0/i s1.0/i; 如果大于k就停止循环,并输出,也可以输出后直接结束程序 写法一: if(s>k) { printf("%…...
2024-03-26 AIGC-大模型学习路线
摘要: 2024-03-26 AIGC-大模型学习路线 大模型学习路线 建议先从主流的Llama开始,然后选用中文的Qwen/Baichuan/ChatGLM,先快速上手体验prompt工程,然后再学习其架构,跑微调脚本 如果要深入学习,建议再按以下步骤&am…...
QGraphicsView的使用,view坐标,scene坐标,item坐标
Graphics View绘图构架 QGraphicsScene(场景):可以管理多个图形项QGraphicsItem(图形项):也就是图元,支持鼠标事件响应。QGraphicsView(视图):关联场景可以让…...
from_pretrained 做了啥
transformers的三个核心抽象类是Config, Tokenizer和Model,这些类根据模型种类的不同,派生出一系列的子类。构造这些派生类的对象也很简单,transformers为这三个类都提供了自动类型,即AutoConfig, AutoTokenizer和AutoModel。三个…...
2024/03/27(C++·day3)
一、思维导图 二、完成下面类 代码 #include <cstring> #include <iostream>using namespace std;class myString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 无参构造函数myString() : size(10){str new char[si…...
Multimodal Chain-of-Thought Reasoning in Language Models阅读笔记
论文(2023年)链接:https://arxiv.org/pdf/2302.00923.pdf GitHub项目链接:GitHub - amazon-science/mm-cot: Official implementation for "Multimodal Chain-of-Thought Reasoning in Language Models" (stay tuned a…...
C语言例4-15:从键盘输入一个整数,求其绝对值并输出。
代码如下: //从键盘输入一个整数,求其绝对值并输出。 #include<stdio.h> int main(void) {int n;printf("输出一个整数: \n");scanf("%d",&n); //从键盘输入一个整数保存至变量nif(n<0) //…...
【Linux】调试器-gdb的使用说明(调试器的配置,指令说明,调试过程说明)
目录 00.背景 01.安装 02.生成调试信息 03.调试过程 00.背景 在软件开发中,通常会为程序构建两种不同的版本:Debug模式和Release模式。它们之间的区别主要在于优化级别、调试信息、错误检查等方面: 1.Debug 模式: 优化级别低…...
Oracle AI Vector Search Multi-Vector Similarity Search 即多向量相似度检索学习笔记
Oracle AI Vector Search Multi-Vector Similarity Search 即多向量相似度检索学习笔记 0. 什么是多向量相似度检索1. 多向量相似度检索的示例 SQL2. 执行多向量相似度检索3. 分区行限制子句的完整语法 0. 什么是多向量相似度检索 多向量相似度检索涉及通过使用称为分区的分组…...
白板手推公式性质 AR模型 时间序列分析
白板手推公式性质 AR模型 时间序列分析 视频讲解:https://www.bilibili.com/video/BV1D1421S76v/?spm_id_from.dynamic.content.click&vd_source6e452cd7908a2d9b382932f345476fd1 B站对应视频讲解(白板手推公式性质 AR模型 时间序列分析)...
零基础学python之高级编程(6)---Python中进程的Queue 和进程锁,以及进程池的创建 (包含详细注释代码)
Python中进程的Queue 和进程锁,以及进程池的创建 文章目录 Python中进程的Queue 和进程锁,以及进程池的创建前言一、进程间同步通信(Queue)二、进程锁(Lock)三、创建进程池Poorpool 类方法: End! 前言 大家好,上一篇文章,我们初步接触了进程的概念及其应…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
