Transformer知识梳理

Transformer知识梳理

文章目录

  • Transformer知识梳理
  • 什么是Transformer?
    • 语言模型
    • 迁移学习
  • Transformer结构
    • 注意力层
    • 原始结构
  • 总结

什么是Transformer?

语言模型

Transformer模型本质上都是预训练语言模型,大部分采用自监督学习(Self-supervised Learning)的方式在大量生语料上进行训练,也就是说,训练这些Transformer模型完全不需要人工标注数据。

自监督学习是一种训练目标可以根据模型的输入自动计算的训练方法。

例如下面两个常见的预训练任务:

  • 基于句子的前n个词来预测下一个词,因为输出依赖于过去和当前的输入,因此该任务被称为因果语言建模(causal language modeling);image-20250105222251983
  • 基于上下文(周围的词语)来预测句子中被遮盖掉的词语(masked word),因此该任务被称为遮盖语言建模(masked language modeling)。image-20250105222344876

这些语言模型虽然可以对训练过的语言产生统计意义上的理解,例如可以根据上下文预测被遮盖掉的词语,但是如果直接拿来完成特定任务,效果往往并不好。

因此,我们通常还会采用迁移学习(transfer learning)方法,使用特定任务的标注语料,以有监督学习的方法对预训练模型参数进行微调(fine-tune),以取得更好的性能。

迁移学习

预训练是一种从头开始训练模型的方式:所有的模型权重都被随机初始化,然后在没有任何先验知识的情况下开始训练:image-20250105222412771

这个过程不仅需要海量的训练数据,而且时间和经济成本都非常高。

基于此,绝大多数情况下,都不会从头开始训练模型,而是将别人预训练好的模型权重通过迁移学习应用到自己的模型中,即使用自己的任务语料对模型进行“二次训练”,通过微调参数使模型适用于新任务。

这种迁移学习的好处是:

  • 预训练时模型很可能已经见过与我们任务类似的数据集,通过微调可以激发出模型在预训练过程中获得的知识,将基于海量数据获得的统计理解能力应用于特定的任务;
  • 由于模型已经在大量数据上进行过预训练,微调时只需要很少的数据量就可以达到不错的性能;
  • 在特定任务上获得优秀性能所需的时间和计算成本都可以很小。

例如,可以选择一个在大规模英文浴帘上预训练好的模型,使用arXiv语料进行微调,以生成一个面向学术/研究领域的模型。这个微调的过程只需要很少的数据:我们相当于将预训练模型已经获得的知识“迁移“到了新的领域,因此被称为迁移学习。image-20250105222446199

与头从开始训练相比,微调模型所需的时间、数据、经济和环境成本都要低的多,并且与完整的预训练相比,微调训练的约束更少,因此迭代尝试不同的微调方案也更快、更容易。实践证明,即使是对于自定义任务,除非你有大量的语料,否则相比训练一个专门的模型,基于预训练模型进行微调会是一个更好的选择。

在绝大部分情况下,我们都应该尝试找到一个尽可能接近我们任务的预训练模型,然后微调它,也就是所谓的“站在巨人的肩膀上”。

Transformer结构

标准的Transformer模型主要由两个模块构成:

  • Encoder(左边):负责理解输入文本,为每个输入构造对应的语义表示(语义特征);

  • Decoder(右边):负责生成输出,使用Encoder输出的语义表示结合其他输入来生成目标序列。

这两个模块可以根据任务的需要而单独使用:

  • 纯Encoder模型:适用于只需要理解输入语义的任务,例如句子分类,命名实体识别;
  • 纯Decoder模型:适用于生成式任务,例如文本生成;
  • Encoder-Decoder模型或Seq2Seq模型:适用于需要基于输入的生成式任务,例如翻译、摘要等。

注意力层

Transformer模型的标志就是采用了注意力层(Attention Layers)的结构,提出Transformer结构的论文名字就是《Attention Is All You Need》。顾名思义,注意力层的作用就是让模型在处理文本时,将注意力只放在某些词语上。

例如要将英文“You like this course”翻译为法语,由于法语中“like”的变位方式因主语而异,因此需要同时关注相邻的词语“You”。同样地,在翻译“this”时还需要注意“course”,因为“this”的法语翻译会根据相关名字的极性而变化。对于复杂的句子,要正确翻译某个词语,甚至需要关注离这个词很远的词。

同样的概念也适用于其他NLP任务:虽然词语本身就有语义,但是其深受上下文的影响,同一个词语出现在不同上下文中可能会有完全不同的语义(例如“我买了一个苹果”和“我买了一个苹果手机”中的“苹果)

原始结构

Transformer模型本来是为了翻译任务而设计的。在训练过程中,Encoder接受源语言的句子作为输入,而Decoder则接受目标语言的翻译作为输入。在Encoder中,由于翻译一个词语需要依赖于上下文,因此注意力层可以访问句子中的所有词语;而Decoder是顺序地进行解码,在生成每个词语时,注意力层只能访问前面已经生成的单词。

例如,假设翻译模型当前已经预测了三个词语,模型会把这三个词语作为输入送入Decoder,然后Decoder结合Encoder所有的源语言输入来预测第四个词语。

实际训练中为了加快速度,会将整个目标序列都送入Decoder,然后在注意力层中通过Mask遮盖掉未来的词语来防止信息泄露。例如我们在预测第三个词语时,应该只能访问到已生成的前两个词语,如果Decoder能够访问到序列中的第三个(甚至是后面的)词语,就相当于作弊了。

原始的Transformer模型结构如下图所示,Encoder在左,Decoder在右:

其中,Decoder中的第一个注意力层关注Decoder过去所有的输入,而第二个注意力层则是使用Encoder的输出,因此Decoder可以基于整个输入句子来预测当前词语。这对于翻译任务非常有用,因为同一句话在不同语言下的词语顺序可能并不一致(不能逐词翻译),所以出现在源语言句子后部的词语反而可能对目标语言句子前部词语的预测非常重要。

在Encoder/Decoder的注意力层中,还会使用Attention Mask遮盖掉某些词语来防止模型关注它们,例如为了将数据处理为相同长度而向序列中添加的填充(padding)字符。

总结

以上就是关于Transformer的基本知识以及Transformer模型结构的介绍,后续我们将继续带来Transformer的深入探索。

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

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

相关文章

计算机缺失x3daudio1 7.dll怎么修复?

电脑运行时常见问题解析与修复策略:以“x3daudio1_7.dll缺失”为例 在软件开发与日常电脑维护的广阔领域中,我们时常会遇到各种系统报错和文件问题。这些问题不仅影响我们的工作效率,还可能对数据安全构成潜在威胁。作为一位经验丰富的软件开…

mysql找回误删除数据

查看binlog日志是否开启以及日志文件位置 SHOW VARIABLES LIKE %log_bin%; log_bin 为 ON表示开启状态 /var/mysql/data/ 为binlog日志文件位置 查看正在使用的binlog日志文件 show master status; 通过第一步和第二步可以确定文件位置 将二进制文件转为txt或者sql文件 m…

第五届神经网络、信息与通信工程国际学术会议(NNICE 2025)

在线投稿:学术会议-学术交流征稿-学术会议在线-艾思科蓝 征稿主题: 神经网络 机器人控制 优化组合 知识工程 人工智能 逻辑程序设计 人机交互 深度学习 信号处理 信息提取 自然语言推论 信号与信息处理 信息管理与集成 实时信号处理与应用、 DSP应用 图…

JVM对象内存结构

1对象内存结构说明 注意: 如果对象为数组对象,在对象头后面有4字节存储数组长度; 1.1对象头 对象头分为Mark Word和Class Pointer两部分; Mark Word:对象基础信息 32位操作系统中占4字节,64位操作系统中占8…

创建并配置华为云虚拟私有云

目录 私有云 创建虚拟私有云 私有云 私有云是一种云计算模式,它将云服务部署在企业或组织内部的私有基础设施上,仅供该企业或组织内部使用,不对外提供服务.私有云的主要特点包括: 私密性:私有云的资源(如…

【FlutterDart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100)

上效果 预期的是通过拖动一条边界线改变窗口大小,类似vscode里拖动效果。这个是简单的拖动实现 上代码: import package:flutter/material.dart;class MyDraggableViewDemo extends StatelessWidget {const MyDraggableViewDemo({super.key});override…

并发服务器框架——zinx

zinx框架 Zinx 是一个用 Go 语言编写的高性能、轻量级的 TCP 服务器框架,它被设计为简单、快速且易于使用。Zinx 提供了一系列的功能,包括但不限于连接管理、数据编解码、业务处理、负载均衡等,适用于构建各种 TCP 网络服务,如游戏…

前端(API)学习笔记(CLASS 4):进阶

1、日期对象 日期对象:用来表示事件的对象 作用:可以得到当前系统时间 1、实例化 在代码中发现了new关键字,一般将这个操作称为实例化 创建一个时间对象并获取时间 获得当前时间 const datenew Date() 使用日志查看,得到的…

LeetCode:98.验证二叉搜索树

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:98.验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 …

k8s基础(1)—Kubernetes-Pod

一、Pod简介 Pod是Kubernetes(k8s)系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型‌。Pod是由一个或多个容器组成的,这些容器共享存储和网络资源,可以看作是一个逻辑的主机‌。…

vue 项目集成 electron 和 electron 打包及环境配置

vue electron 开发桌面端应用 安装 electron npm i electron -D记得加上-D,electron 需添加到devDependencies,如果添加到dependencies后面运行可能会报错 根目录创建electron文件夹,在electron文件夹创建main.js(或者backgrou…

Rabbitmq追问1

如果消费端代码异常,未手动确认,那么这个消息去哪里 2024-12-31 21:19:12 如果消费端代码发生异常,未手动确认(ACK)的情况下,消息的处理行为取决于消息队列的实现和配置,以下是基于 RabbitMQ …

第二十八周机器学习笔记:PINN求正反解求PDE文献阅读——反问题、动手深度学习

第二十七周周报 一、文献阅读题目信息摘要Abstract网络架构实验——Data-driven discovery of partial differential equations(偏微分方程的数据驱动发现)1. Continuous time models(连续时间模型)例子:(Navier–Stok…

02-1堆的概念

2-1 堆的概念 开启实验步骤: 有两种创建工程的方式, 直接使用老师的文档, 然后进行调试 老师的工程 或者跳转我的步骤进行调试从零创建(ctrl 加鼠标左键,快速跳转) 视频观看地址: 韦东山freeRTOS快速入门视频教程 开始实验 (1) 我们定义一个空闲的数组heap_buf[1024], 它就…

【HarmonyOS之旅】ArkTS语法(四) -> 使用限制与扩展

目录 1 -> 在生成器函数中的使用限制 2 -> 变量的双向绑定 3 -> 自定义组件成员变量初始化的方式与约束 1 -> 在生成器函数中的使用限制 ArkTS语言的使用在生成器函数中存在一定的限制: 表达式仅允许在字符串(${expression})、if条件、ForEach的参…

大麦抢票科技狠活

仅供学习参考,切勿再令您所爱的人耗费高昂的价格去购置黄牛票 ⚠️核心内容参考: 据悉,于购票环节,大麦凭借恶意流量清洗技术,于网络层实时甄别并阻拦凭借自动化手段发起下单请求的流量,强化对刷票脚本、刷票软件以及…

【C++】B2106 矩阵转置

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目解析💯第一种实现方式:我的初始做法实现思路优缺点分析 💯第二种实现方式:我的优化做法实现思路优缺点分析 &#x1f4a…

五月天TV 1.1.0 | 频道丰富的娱乐向电视直播应用

五月天IPTV是一款提供多种频道的电视直播应用,包括体育、动漫、音乐等。虽然频道种类繁多,但正经频道较少,更适合追求娱乐和轻松内容的用户群体。软件在测试中发现存在一些小问题,频道质量参差不齐。 大小:15M 下载地…

高等数学 8.2 数量积 向量积 *混合积

文章目录 一、数量积二、向量积三、*混合积 一、数量积 对两个向量做运算 a \boldsymbol{a} a 和 b \boldsymbol{b} b ,运算结果是一个数,它等于 ∣ a ∣ |\boldsymbol{a}| ∣a∣ , ∣ b ∣ |\boldsymbol{b}| ∣b∣ 及它们的夹角 θ \th…

Crosslink-NX应用连载(12):如何复用特殊功能管脚

作者:Hello,Panda 大家早上好。 昨天有朋友私信我,如何复用Crosslink-NX的特殊功能引脚如PROGRAMN、DONE、INITN诸如这些。熊猫君在这里简单介绍下: 以LIFCL-33U-8CTG104C为例,我们建立一个简单的指示灯LED周期闪烁的工程&…