Transformer 论文阅读笔记

文章目录

    • 前言
    • 论文阅读
      • 研究现状
      • 工作内容
      • 模型架构
      • 训练过程
      • 实验结果
      • 模型代码
    • 其他评价

前言

Transformer可以说是深度学习领域最重要的,里程碑式的工作之一,发表于2017年的NIPS。该模型开创了自MLP(多层感知机)、CNN(卷积神经网络)和RNN(循环神经网络)之后的第四种基础模型。这项工作也成为当前AIGC盛行的最重要的基础,是Google公司对人工智能领域的卓越贡献。

Transformer论文中的所有作者都是共同一作,这种情况一般是比较少见的。但是,这篇文章中也详细介绍了每一名作者对文章所做的贡献是什么,而非只是给每个作者的贡献用几个很虚的词进行描述。反观当今学术界的共同一作挂名现象,不得不说有些论文的共同一作已经失去了原本的意义,可悲可叹。

论文阅读

研究现状

  • 目前的主流序列转录模型:主流的序列转录模型使用复杂的循环神经网络或卷积神经网络,包含一个编码器和一个解码器。性能最好的模型中,会在编码器和解码器之间增加一种注意力机制。对于自然语言处理中的主流序列转录任务,目前最好的方法都是基于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模块中。

其他评价

由于注意力机制对整个模型的归纳偏置更少,因此往往需要更多的数据和更大的模型才能达到很好的效果。

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

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

相关文章

U盘插入电脑没有显示怎么办?

U盘可以备份/转移数据,还可以作为启动盘重装系统,但很多用户在使用u盘的时候,都遇到过这样的问题,就是u盘插入电脑没有反应,在电脑上找不到u盘设备。那么今天就跟大家等下U盘插入电脑没有显示怎么办。 原因/解决方法一…

html5cssjs代码 036 CSS默认值

html5&css&js代码 036 CSS默认值 一、代码二、解释 CSS默认值(也称为浏览器默认样式)是指当HTML元素没有应用任何外部CSS样式时,浏览器自动为这些元素赋予的一组基本样式。这些样式是由浏览器的默认样式表(User Agent sty…

【最新测试函数】智能优化算法的CEC2022测试函数

(多种智能优化算法跑多次运行结果的最优值,平均值,标准差,最差值以及箱型图) 智能优化算法测试函数简介 智能优化算法测试函数是为了在优化算法研究和开发中测试算法性能的规范问题集合。这些测试函数模拟了真实世界优化问题的不同方面,包括局部最小值、最大值、全局最…

几种常用的用于视频读取、写入和处理的库和函数

在Python中,有几种常用的用于视频读取、写入和处理的库和函数。其中最流行的包括OpenCV、MoviePy和imageio。以下是这些包的简要介绍和示例用法: opencv OpenCV是一个广泛用于计算机视觉任务的开源库,它也可以用来处理视频。你可以使用cv2.…

关系型数据库mysql(3)索引

目录 一.索引的概念 二.索引的作用 三.创建索引的原则依据 四.索引的分类 五.索引的创建 5.1 普通索引 5.1.1 直接创建索引 5.1.2 修改表方式创建 5.1.3 创建表的时候指定索引 5.2 唯一索引 5.2.1 直接创建唯一索引 5.2.2 修改表方式创建 5.2.3 创建表的时候指…

机器学习——决策树(三)预剪枝

观前提示:这是本人机器学习决策树内容的第三篇博客,沿用了之前相关的代码,包括信息增益计算函数、结点类、预测函数和分类精度计算函数 完整代码指路 DrawPixel/decisionTree.ipynb at main ndsoi/DrawPixel (github.com) 前两篇博客详见…

【项目实践day08】Mybatis向数据库中插入数据的时候返回主键值id

应用场景 创建一个实体类(订单),现在需要将这个订单插入进数据库。但是在后续的业务逻辑中,需要用到这个订单的id(主键值) 由于订单id一般都是自增的,且是插入数据库的时候才会给到的值所以需要…

Linux学习-进程

目录 进程基本概念 进程相关命令 进程的创建 进程的调度 进程相关函数接口 进程的消亡 实例:创建九个子进程 目录 进程基本概念 进程相关命令 进程的创建 进程的调度 进程相关函数接口 进程的消亡 实例:创建九个子进程 exec函数…

Java设计模式之单例设计模式

单例设计模式就是保证整个软件系统中,某个类只能存在一个对象实例,并且该类只提供一个取得该对象的方法。 单例设计模式包括两种:饿汉式和懒汉式。 饿汉式: 含义: 在类加载时就创建并初始化单例对象。这种方式确保了…

人脸表情识别系统项目完整实现详解——(三)训练MobileNet深度神经网络识别表情

摘要:之前的表情识别系统升级到v3.0版本,本篇博客详细介绍使用PyTorch框架来构建并训练MobileNet V3模型以进行实现表情识别,给出了完整实现代码和数据集可供下载。从构建数据集、搭建深度学习模型、数据增强、早停等多种技术,到模…

计算联合体union的大小

一:联合类型的定义 联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体) 比如:共用了 i 这个较大的空间 二: 联合的特点 …

Userar vr和3d技术如何结合融合

在增强现实(AR)和虚拟现实(VR)领域,动作捕捉技术是一项关键技术,它可以捕捉人体的运动和动作,并将其应用到虚拟环境中,从而实现更加真实和沉浸式的用户体验。以下是常见的AR和VR动作…

MySQL--Buffer Pool

虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。为此,Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能。 有了缓冲池后: …

Eclipse For ABAP:安装依赖报错

1.安装好Eclipse后需要添加依赖,这里的地址: https://tools.hana.ondemand.com/latest 全部勾选等待安装结束; 重启后报错:ABAP communication layer is not configured properly. This might be caused by missing Microsoft Visual C++ 2013 (x64) Runtime DLLs. Consu…

小程序云开发实战:通用企业产品信息展示小程序

之前做小程序都是自己搭建数据管理后台,比如我之前做的小程序:一搜就学,就是使用java来做管理后台,小程序做前端展示。但是对于简单的小程序来说,做一套管理后台有点拿大炮打蚊子,所以使用云开发就是不错的…

【tensorflow_gpu】安装合集

tensorflow_gpu与CUDA、cuDNN、Python版本对应关系 版本对应列表 tensorflow的清华源wheel tensorflow的清华源wheel列表 tensorflow_gpu安装指令 使用conda安装指定版本的tensorflow_gpu conda install tensorflow-gpu1.2.0使用wheel安装指定版本的tensorflow_gpu pip …

【开源】SpringBoot框架开发知识图谱构建系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 知识图谱模块2.2 知识点模块2.3 学生测评模块2.4 学生成绩模块 三、系统展示四、核心代码4.1 查询知识点4.2 新增知识点4.3 查询知识图谱4.4 查询学生成绩4.5 查询学生成绩 五、免责说明 一、摘要 1.1 项目介绍 基于J…

Springboot vue elementui 停车场管理系统

Springboot vue elementui 停车场管理系统 点击获取全套源码

论文阅读:Forget-Me-Not: Learning to Forget in Text-to-Image Diffusion Models

Forget-Me-Not: Learning to Forget in Text-to-Image Diffusion Models 论文链接 代码链接 这篇文章提出了Forget-Me-Not (FMN),用来消除文生图扩散模型中的特定内容。FMN的流程图如下: 可以看到,FMN的损失函数是最小化要消除的概念对应的…

一文了解AI长文本工具:Kimi Chat;与ChatGPT比较对比

一文了解AI长文本工具:Kimi Chat;与ChatGPT比较对比 在人工智能领域,ChatGPT、Claude2.1和Kimi Chat都是备受关注的大型模型。它们在文本生成、理解和处理方面展现了强大的能力。本文将深入探讨这三个工具的核心功能、优劣势以及适用场景&am…