大模型系列(四)--- GPT2: Language Models are Unsupervised Multitask Learners​

news2025/5/10 7:40:05

论文链接: Language Models are Unsupervised Multitask Learners

点评: GPT-2采用了与GPT-1类似的架构,将参数规模增加到了15亿,并使用大规模的网页数据集WebText 进行训练。正如GPT-2 的论文所述,它旨在通过无监督语言建模来执行任务,而无需使用标记数据进行显式微调。(无监督的多任务学习器)同时模型为了适应大规模数据和多任务进行了对应修改。

GPT系列: 

GPT1预训练+微调,
创新点在于Task-specific input transformations。
GPT215亿参数预训练+Prompt+Predict,
创新点在于Zero-shot
Zero-shot新颖度拉满,但模型性能拉胯
GPT31750亿参数预训练+Prompt+Predict,
创新点在于in-context learning
开创性提出in-context learning概念,是Prompting祖师爷(ICL)是Prompting范式发展的第一阶段。

基于GPT1和BERT的工作,发现GPT1这种上下文生成应用面更广以及BERT使用编码器和大规模数据集获得了更好的实验效果。一个使用了解码器,一个使用了编码器,换做作者是你,你是否还会继续打回去?GPT2的目的就是做这个事情,模型更大,数据更多,效果是否能干掉BERT。

作者收集了一个更大的数据集WebText,百万网页数据,同时将模型从1亿参数(110M)变成了15亿参数(1.5B)但存在一个问题,数据集上去了,效果真的有明显的优势吗?于是作者想到了zero-shot这个路子。

模型结构 (Model Construction)

  1. 数据: 多任务+大规模数据
  2. zero shot, 序列的改造使不同任务的输入序列与训练时见到的文本长得一样。
  3. 模型:在GPT-1上的调整
    1. 后置层归一化( post-norm )改为前置层归一化( pre-norm )
    2. 在模型最后一个自注意力层之后,额外增加一个层归一化;
    3. 调整参数的初始化方式,按残差层个数进行缩放,缩放比例为 1 : sqrt(n)
    4. 输入序列的最大长度从 512 扩充到 1024;
    5. 模型层数扩大

一、GPT-2 中 LayerNorm 位置调整的核心原因

GPT-2 将 Layer Normalization(层归一化)从传统的残差连接后(Post-LN)改为残差连接前(Pre-LN),这一调整主要基于以下技术考量:

  1. 梯度稳定性优化
    深层神经网络中,Post-LN 结构可能导致梯度传播路径过长,容易出现梯度消失或爆炸问题。Pre-LN 结构将归一化置于子层(如注意力或前馈网络)输入前,缩短了梯度传播路径,使反向传播时梯度更稳定23。例如,在 48 层的 GPT-2 中,这一调整显著缓解了深层模型训练的梯度异常现象。

  2. 训练收敛速度提升
    Pre-LN 通过对输入数据的标准化预处理,使得每个子层的输入分布更一致,降低了模型对初始权重的敏感性,从而加速收敛。实验表明,Pre-LN 结构的模型在相同训练步数下损失值下降更快6。

  3. 模型容量与性能平衡
    Post-LN 结构在残差连接后归一化会放大输出方差,尤其在多层叠加时可能破坏残差连接的特性(如恒等映射)。Pre-LN 通过先归一化再处理输入,保持了残差连接的核心优势(即输入与输出的直接叠加),更适应大规模模型的参数优化36。

二、在模型最后一个自注意力层之后,额外增加一个层归一化;

GPT-2 在最后一个自注意力层后增加层归一化(Layer Normalization, LN)主要与其架构调整和训练稳定性优化密切相关,具体原因如下:

  1. 输出分布稳定性增强
    深层模型中,最后一层自注意力输出的激活值可能因参数累积出现分布偏移。额外添加的 LN 通过对输出的均值和方差进行归一化,使后续前馈层或生成阶段的输入分布更稳定,缓解梯度异常(如梯度爆炸),提升模型收敛效率24。

  2. 生成阶段的动态控制
    语言模型的生成过程具有自回归特性,各时间步的输出需具备可控的数值范围。末层 LN 能约束生成时隐藏状态的动态范围,避免因逐层累积的数值波动导致生成质量下降(如逻辑断裂或重复生成)26。

  3. 与 Pre-LN 架构的协同优化
    GPT-2 采用 Pre-LN(归一化置于残差连接前)取代 GPT-1 的 Post-LN 结构。Pre-LN 虽能加速收敛,但其残差路径可能残留未被归一化的信号。末层 LN 作为补充,可对整体输出的特征分布再做校准,确保模型最终输出的鲁棒性24。

三、为什么 调整参数的初始化方式,按残差层个数进行缩放,缩放比例为 1 : sqrt(n)?
  1. 梯度传播平衡
    深层模型中,残差路径的叠加会导致梯度在反向传播时随层数指数级放大或衰减。通过缩放参数初始化范围(如权重矩阵初始化为 N(0,1/n)N(0,1/n​)),可约束每层输出的梯度幅值,避免梯度爆炸或消失问题,确保反向传播时各层梯度贡献均衡57。

  2. 激活值方差控制
    前向传播过程中,未经缩放的参数初始化会导致每层输出的激活值方差随层数增加而累积。按 1/n1/n​ 缩放初始化权重,可使残差分支输出的方差与主干输入保持同一量级,维持网络整体的数值稳定性5。

四、GPT-2 扩大上下文窗口与批次大小的技术动因

一、‌上下文窗口(Context Size)从 512 扩展至 1024 tokens

  1. 捕捉更长距离的依赖关系
    语言模型的生成质量高度依赖对长距离语义关联的捕捉。将上下文窗口从 512 扩展至 1024 tokens,使模型能够处理更长的历史输入序列,提升对复杂上下文逻辑的理解能力26。例如,在生成段落或对话时,更大的窗口可避免关键信息的截断,增强生成文本的连贯性。

  2. 适应多样化任务的泛化需求
    GPT-2 的设计目标是实现无监督多任务学习,而不同任务(如翻译、问答)对上下文长度的需求差异显著。扩展后的窗口能兼容更广泛的任务类型,减少因输入长度限制导致的任务适配瓶颈6。

  3. 与模型规模的协同优化
    GPT-2 的参数规模显著增大(如 1.5B 版本),更大的上下文窗口可充分利用参数容量,挖掘深层语义模式。实验表明,扩展窗口后,模型在长文本生成任务中的困惑度(Perplexity)降低约 12%2。


二、‌批次大小(Batch Size)增至 512

  1. 训练效率优化
    大规模数据并行需要更大的批次以充分利用硬件算力。批次扩大至 512 减少了单步训练的计算冗余,使 GPU/TPU 利用率提升 20%~30%,加速收敛过程24。

  2. 梯度估计稳定性增强
    大批次训练可提供更平滑的梯度信号,降低参数更新方向的方差。对于 GPT-2 这类超深模型(如 48 层),这一改进显著缓解了梯度噪声对优化过程的干扰46。

  3. 模型泛化能力提升
    大批次训练可通过隐式正则化效应抑制过拟合。在 GPT-2 的无监督预训练中,更大的批次使模型在未见任务上的零样本(Zero-shot)性能提升约 8%6。

五、多任务学习

        

现在的语言模型泛化能力比较差,在一个训练集、一个训练任务上训练出来的参数很难直接用到下一个模型里。因此,目前大多数模型都是Narrow Expert,而不是Competent Generalists。OpenAI希望朝着能够执行许多任务的更通用的系统发展--最终不需要为每个任务手动创建和标记训练数据集。

多任务学习的定义:
多任务学习(Multi-Task Learning, MTL)是一种机器学习方法,它可以通过同时学习多个相关的任务来提高模型的性能和泛化能力。与单任务学习只针对单个任务进行模型训练不同,多任务学习通过共享模型的部分参数来同时学习多个任务,从而可以更有效地利用数据,提高模型的预测能力和效率。

如何做到多任务学习呢:

把所有的任务都归结为上下文的问题回答。具体的,应该满足如下的条件:

1. 必须对所有任务一视同仁,也就是喂给模型的数据不能包含这条数据具体是哪个任务,不能告诉模型这条数据是要做NMT,另一条数据要做情感分类。

2. 模型也不能包含针对不同任务的特殊模块。给模型输入一段词序列,模型必须学会自己辨别这段词序列要求的不同的任务类型,并且进行内部切换,执行不同的操作。

3. 此外,模型还应具备执行这10个任务之外的任务的能力,即zero shot learning。

Multitask Question Answering Network, MQAN这篇文章中提出了一个新的在没有任何特定任务模块或参数的情况下联合学习decaNLP的所有任务。把各种下游子任务都转换为QA任务,并且让模型通过我们告诉他的自然语言(Prompt)去自动执行不同的操作,从而完成任务的想法也是GPT-2的关键。这就是为什么提出GPT-2的论文的标题叫:Language Models are Unsupervised Multitask Learners

Zero-shot的含义:

我们用预训练模型做下游任务时,不需要任何额外的标注信息,也不去改模型参数

GPT1过度到GPT2的zero-shot:

GPT1中,我们的模型在自然语言上进行预训练,到了给下游任务做微调的时候,我们是引入了很多模型之前从来没有见过的特殊符号,这个符号是针对具体的任务专门设计的,即给GPT的输入进行了特殊的构造,加入了开始符、结束符、分割符。这些符号,模型要在微调的过程中慢慢认识。

如果想要做Zero-short Learning,即不做任何额外的下游任务训练的话,就没办法让模型去临时学习这些针对特定任务的构造了。因此,我们在构造下游任务的输入的时候,就不能引入特殊的符号,而是要让整个下游任务的输入和之前在预训练的时候看到的文本形式一样。即要使得输入的形式应该更像自然语言。

既然输入的形式也要更像自然语言,那么就应该让模型通过我们的自然语言,去知道现在要去执行什么任务。

要如何做:实现Zero-shot learning的前提就是,我们得能够做到不需要针对下游的任务,给模型的输入结构做专门的设计;而是只需要给模型指示,也就是提示词(Prompt)就好了。

为什么prompt能够实现下游任务的预测:

Our speculation is that a language model with sufficient capacity will begin to learn to infer and perform the tasks demonstrated in natural language sequences in order to better predict them, regardless of their method of procurement. ——OpenAI

当数据量足够大、模型能力足够强的时候,语言模型会学会推测并执行用自然语言提出的任务,因为这样可以更好的实现下一词预测。(ICL的雏形)

六、为什么prompt可以实现zero shot learning? 
  1. 自监督预训练的通用表征学习
    大模型通过海量无标注文本的预训练(如 GPT 系列的因果语言建模任务),学习到语言的多层次抽象模式,包括语义关联、逻辑推理和领域知识46。这种通用表征能力使模型在面对新任务时,无需显式调整参数即可通过自然语言指令(Prompt)激活相关知识。

  2. 任务形式与预训练目标的同构性
    Zero-Shot 依赖将下游任务“翻译”为预训练任务的形式。例如,分类任务可构造为填空题(如“情感分析:这部电影很棒。总体评价是 [MASK]。”),直接复用模型在 MLM(掩码预测)任务中的能力15。这种对齐无需修改网络结构,仅需设计合适的 Prompt。

结论:  conclusion

GPT-2的最大贡献是验证了通过海量数据和大量参数训练出来的词向量模型有迁移到其它类别任务中而不需要额外的训练,即zero-shot learning的能力。但是效果其实很一般。

GPT-2表明随着模型容量和数据量的增大,其潜能还有进一步开发的空间,基于这个思想,促使了GPT3的出现。

参考文献
详解GPT论文: https://zhuanlan.zhihu.com/p/680022511

GPT2 代码: GitHub - Morizeyao/GPT2-Chinese: Chinese version of GPT2 training code, using BERT tokenizer.

https://github.com/yangjianxin1/GPT2-chitchat?tab=readme-ov-file

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

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

相关文章

ABP vNext + EF Core 实战性能调优指南

ABP vNext EF Core 实战性能调优指南 🚀 目标 本文面向中大型 ABP vNext 项目,围绕查询性能、事务隔离、批量操作、缓存与诊断,系统性地给出优化策略和最佳实践,帮助读者快速定位性能瓶颈并落地改进。 📑 目录 ABP vN…

高品质办公楼成都国际数字影像产业园核心业务​

成都国际数字影像产业园的核心业务,围绕构建专业化的数字影像文创产业生态系统展开,旨在打造高品质、高效率的产业发展平台。 产业集群构建与生态运营 园区核心业务聚焦于吸引和培育数字影像及相关文创领域的企业,形成产业集聚效应。具体包…

MindSpore框架学习项目-ResNet药物分类-构建模型

目录 2.构建模型 2.1定义模型类 2.1.1 基础块ResidualBlockBase ResidualBlockBase代码解析 2.1.2 瓶颈块ResidualBlock ResidualBlock代码解释 2.1.3 构建层 构建层代码说明 2.1.4 定义不同组合(block,layer_nums)的ResNet网络实现 ResNet组建类代码解析…

【Spring Boot】Spring Boot + Thymeleaf搭建mvc项目

Spring Boot Thymeleaf搭建mvc项目 1. 创建Spring Boot项目2. 配置pom.xml3. 配置Thymeleaf4. 创建Controller5. 创建Thymeleaf页面6. 创建Main启动类7. 运行项目8. 测试结果扩展:添加静态资源 1. 创建Spring Boot项目 打开IntelliJ IDEA → New Project → 选择M…

学习spring boot-拦截器Interceptor,过滤器Filter

目录 拦截器Interceptor 过滤器Filter 关于过滤器的前置知识可以参考: 过滤器在springboot项目的应用 一,使用WebfilterServletComponentScan 注解 1 创建过滤器类实现Filter接口 2 在启动类中添加 ServletComponentScan 注解 二,创建…

雷赛伺服L7-EC

1电子齿轮比: 电机圈脉冲1万 (pa11的值 x 4倍频) 2电机刚性: pa003 或者 0x2003 // 立即生效的 3LED显示: PA5.28 1 电机速度 4精度: PA14 //默认30,超过3圈er18…

阅文集团C++面试题及参考答案

能否不使用锁保证多线程安全? 在多线程编程中,锁(如互斥锁、信号量)是实现线程同步的传统方式,但并非唯一方式。不使用锁保证多线程安全的核心思路是避免共享状态、使用原子操作或采用线程本地存储。以下从几个方面详…

AVL树:保持平衡的高效二叉搜索树

目录 一、AVL树的概念 1. 二叉搜索树的局限性 2. AVL树的定义 二、AVL树节点结构 三、AVL树的插入操作 1. 插入流程 2. 代码实现片段 四、AVL树的旋转调整 1. 左单旋(RR型) 2. 右单旋(LL型) 3. 左右双旋(LR型…

Webpack基本用法学习总结

Webpack 基本使用核心概念处理样式资源步骤: 处理图片资源修改图片输出文件目录 自动清空上次打包的内容EslintBabel处理HTML资源搭建开发服务器生产模式提取css文件为单独文件问题: Css压缩HTML压缩 小结1高级SourceMap开发模式生产模式 HMROneOfInclud…

阿里云服务器数据库故障排查指南?

阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器(如ECS自建数据库或阿里云RDS等托管数据库)的故障排查指南,涵盖常见问题的定位与解决方案: 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…

数图闪耀2025深圳CCFA中国零售博览会:AI+零售数字化解决方案引发现场热潮

展会时间:2025年5月8日—10日 地点:深圳国际会展中心(宝安新馆) 【深圳讯】5月8日,亚洲规模最大的零售行业盛会——2025 CCFA中国零售博览会在深圳盛大开幕。本届展会汇聚全球25个国家和地区的900余家参展商&#xff…

LeetCode 1722. 执行交换操作后的最小汉明距离 题解

示例: 输入:source [1,2,3,4], target [2,1,4,5], allowedSwaps [[0,1],[2,3]] 输出:1 解释:source 可以按下述方式转换: - 交换下标 0 和 1 指向的元素:source [2,1,3,4] - 交换下标 2 和 3 指向的元…

linux ptrace 图文详解(八) gdb跟踪被调试程序的子线程、子进程

目录 一、gdb跟踪被调试程序的fork、pthread_create操作 二、实现原理 三、代码实现 四、总结 (代码:linux 6.3.1,架构:arm64) One look is worth a thousand words. —— Tess Flanders 相关链接: …

游戏:用python写梦幻西游脚本(谢苏)

《梦幻西游》是一款受欢迎的网络游戏,许多玩家希望通过脚本来增强游戏体验,比如自动打怪、自动治疗等。本文将为您展示一个用Python编写简单《梦幻西游》自动打怪脚本的方案。 需求分析 1.1 具体问题 在《梦幻西游》中,玩家需要频繁与怪物进行…

Spring Boot 3.x集成SaToken使用swagger3+knife4j 4.X生成接口文档

说一说Spring Boot 3.X集成SaToken使用swagger3并使用第三方的knife4j踩过的坑&#xff0c;废话不多说直接上正题&#xff0c;SaToken的我就不贴了 第一步当然是要先导入相关的依赖&#xff0c;包括swagger和knife4j&#xff0c;如下 <dependency><groupId>com.gi…

用Python监控金价并实现自动提醒!附完整源码

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】&#x1f4bb;香港大宽带-4H4G 20M只要36/月&#x1f449; 点此查看详情 在日常投资中&#xff0c;很多朋友喜欢在一些平台买点黄金&#xff0c;低买高卖赚点小差价。但黄金价格实时波动频繁&#xf…

ChatTempMail - AI驱动的免费临时邮箱服务

在当今数字世界中&#xff0c;保护在线隐私的需求日益增长。ChatTempMail应运而生&#xff0c;作为一款融合人工智能技术的新一代临时邮箱服务&#xff0c;它不仅提供传统临时邮箱的基本功能&#xff0c;还通过AI技术大幅提升了用户体验。 核心功能与特性 1. AI驱动的智能邮件…

掌握单元测试:提升软件质量的关键步骤

介绍 测试&#xff1a;是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。 阶段划分&#xff1a;单元测试、集成测试、系统测试、验收测试。 测试方法&#xff1a;白盒测试、黑盒测试及灰盒测试。 单元测试&#xff1a;就是针对最小的功能单元&#xff08;方法&…

YOLOv1模型架构、损失值、NMS极大值抑制

文章目录 前言一、YOLO系列v11、核心思想2、流程解析 二、损失函数1、位置误差2、置信度误差3、类别概率损失 三、NMS&#xff08;非极大值抑制&#xff09;总结YOLOv1的优缺点 前言 YOLOv1&#xff08;You Only Look Once: Unified, Real-Time Object Detection&#xff09;由…

【论文阅读】——Articulate AnyMesh: Open-Vocabulary 3D Articulated Objects Modeling

文章目录 摘要一、介绍二、相关工作2.1. 铰接对象建模2.2. 部件感知3D生成 三、方法3.1. 概述3.2. 通过VLM助手进行可移动部件分割3.3. 通过几何感知视觉提示的发音估计3.4. 通过随机关节状态进行细化 四、实验4.1. 定量实验发音估计设置: 4.2. 应用程序 五、结论六、思考 摘要…