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

论文链接: 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.mzph.cn/web/79127.shtml

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

相关文章

数字孪生[IOC]常用10个技术栈(总括)

1. 什么是数字孪生? 数字孪生(Digital Twin) 是通过数字化技术对物理实体(如设备、系统或环境)进行高精度建模和实时映射的虚拟副本。其核心是通过 数据驱动 实现物理世界与虚拟世界的双向交互,支持实时监控…

cnas软件检测实验室质量管理体系文件思维导图,快速理清全部文件

软件检测实验室在申请CNAS资质时,需要根据认可文件的要求,建立实验室质量管理体系,明晰地展示组织架构、合理地安排人员岗位职责和能力要求、全面地覆盖认可文件要求的质量要素。这是一项非常庞大的工作,涉及到的文件类型非常多&a…

[Windows] 东芝存储诊断工具1.30.8920(20170601)

[Windows] 东芝存储诊断工具 链接:https://pan.xunlei.com/s/VOPpMjGdWZOLceIjxLNiIsIEA1?pwduute# 适用型号 东芝消费类存储产品: 外置硬盘:Canvio 系列 内置硬盘:HDW****(E300 / N300 / P300 / S300 / V300 / X30…

C++ learning day 01

目录 1. iostream : 2.第一个C++程序 3. 执行过程以及以上例子详解(以上例子为参考) 1. iostream : 全称: input/output stream library 作用: 用于处理输入输出操作 2.第一个C++程序 #include <iostream>int main() {std::cout << "Hello World! &qu…

单位代码签名证书是什么?如何申请?

软件安全已成为企业不可忽视的核心话题&#xff0c;当用户下载企业级软件时&#xff0c;若遇到“未知发布者”的警告弹窗&#xff0c;很可能是由于软件未进行数字签名所致。这种看似简单的提示背后&#xff0c;隐藏着巨大的安全隐患与信任危机。而单位代码签名证书&#xff0c;…

《Zabbix Proxy分布式监控实战:从安装到配置全解析》

注意&#xff1a;实验所需的zabbix服务器的搭建可参考博客 zabbix 的docker安装_docker安装zabbix-CSDN博客 1.1 实验介绍 1.1.1 实验目的 本实验旨在搭建一个基于Zabbix的监控系统&#xff0c;通过安装和配置Zabbix Proxy、MySQL数据库以及Zabbix Agent&#xff0c;实现分…

泛型设计模式实践

学海无涯&#xff0c;志当存远。燃心砺志&#xff0c;奋进不辍。 愿诸君得此鸡汤&#xff0c;如沐春风&#xff0c;事业有成。 若觉此言甚善&#xff0c;烦请赐赞一枚&#xff0c;共励学途&#xff0c;同铸辉煌&#xff01; 为解决在设计框架或库时遇到的类型安全问题&#xff…

【kafla扫盲】FROM GPT

Kafka 扫盲指南&#xff1a;分布式流处理利器 Apache Kafka 是一个分布式流处理平台&#xff0c;最早由 LinkedIn 开发&#xff0c;后来开源并捐赠给 Apache 基金会。Kafka 专为高吞吐量、低延迟的实时数据流处理而设计&#xff0c;广泛用于日志收集、实时分析、消息队列、流处…

每天五分钟深度学习框架pytorch:视觉工具包torchvison

本文重点 在pytorch深度学习框架中,torchvision是一个非常优秀的视觉工具包,我们可以使用它加载一些著名的数据集,然后我们可以使用它来加载网络模型,比如vgg,resnet等等,还可以使用它来预处理一些图片数据,本节课程我们将学习一下它的使用方式。 torchvision的四部分…

操作系统 第2章节 进程,线程和作业

一:多道程序设计 1-多道程设计的目的 for:提高吞吐量(作业道数/处理时间),我们可以从提高资源的利用率出发 2-单道程序设计缺点: 设备的利用率低,内存的利用率低,处理机的利用率低 比如CPU去访问内存,CPU空转.内存等待CPU访问也是没有任何操作的.要是有多个东西要去访问不冲…

位移监测仪,精准测量,专业守护

地质灾害如滑坡、泥石流、地面沉降等具有突发性强、破坏性大的特点&#xff0c;传统人工巡查方式存在效率低、时效性差等缺陷。对人类生命财产构成严重威胁&#xff0c;因此需要实时、精准的位移监测手段。地质灾害监测预警系统集成了多种传感器&#xff0c;对地表及地下形变进…

dropout层

从你提供的图片来看&#xff0c;里面讨论了 Dropout 层&#xff0c;让我为你解释一下它的工作原理和作用。 Dropout 层是什么&#xff1f; Dropout 是一种常用的正则化技术&#xff0c;用于避免神经网络的 过拟合&#xff08;overfitting&#xff09;。过拟合是指模型在训练数…

C++八股 —— vector底层

vector底层为动态数组 类构成 class vector : protected _Vector_base_Vector_base: _M_start&#xff1a;容器元素开始的位置_M_finish&#xff1a;容器元素结束的位置_M_end_of_storage&#xff1a;动态内存最后一个元素的下一个位置 构造函数 无参构造 根据性能优先规则&a…

LLM量化方法:ZeroQuant、LLM.int8()、SmoothQuant、GPTQ、AWQ

文章目录 TLDR;量化分类量化时机量化粒度ZeroQuant: Efficient and Affordable Post-Training Quantization for Large-Scale Transformers细粒度硬件感知量化低成本逐层知识蒸馏&#xff08;Layer-by-layer Knowledge Distillation, LKD&#xff09; LLM.int8(): 8-bit Matrix…

SIGIR 2025端到端生成式推荐ETEGRec

文章目录 1. 背景2. 方法2.1 框架图2.2 问题定义2.3 Item Tokenizer2.4 Generative Recommender2.5 ⭐️Sequence-Item Alignment2.6 ⭐️Preference-Semantic Alignment2.7 交替优化 3. 总结 现阶段 GRM 大多是两阶段的模型&#xff0c;第一阶段进行内容理解-行为语义对齐&…

STM32CubeMX安装及使用分享

说是教程&#xff0c;属实是不敢当&#xff0c;只是把自己觉得较为正式的方式分享给各位&#xff0c;如有问题请提出大家一起讨论。 文章目录 软件下载软件安装软件使用开发板工程单片机工程单片机工程创建单片机工程配置界面单片机工程具体配置引脚功能配置系统时钟配置工程配…

MySQL报错解决过程

我在调试datagrip的时候&#xff0c;显示拒绝连接&#xff0c;开始的时候&#xff0c;我以为只是服务没有开启&#xff0c;结果到后来在网上搜索各种解决办法无果后&#xff0c;就选择卸载&#xff0c;卸载之后安装新的MySQL 以下就是我的解决过程。 如果只是在使用外置软件&…

动态规划-62.不同路径-力扣(LeetCode)

一、题目解析 机器人只能向下或向左&#xff0c;要从Start位置到Finish位置。 二、算法原理 1.状态表示 我们要求到Finish位置一共有多少种方法&#xff0c;记Finish为[i,j]&#xff0c;此时dp[i,j]表示&#xff1a;到[i,j]位置时&#xff0c;一共有多少种方法&#xff0c;满…

Qt开发:项目视图(Item Views)的介绍和使用

文章目录 一、清单视图&#xff08;List View&#xff09;1.1 基本概念1.2 使用示例&#xff08;文字列表&#xff09;1.3 图标文字&#xff08;图标模式&#xff09;1.4 常用设置1.5 完整示例 二、树视图&#xff08;Tree View&#xff09;2.1 基本概念2.2 常用类简介2.3 快速…

GoWeb开发(基础)

Go&#xff08;Golang&#xff09;是一种高效、简洁的编程语言&#xff0c;特别适合Web开发。以下是详细的Go Web开发指南&#xff0c;涵盖从基础到进阶的内容。 --- 一、Go Web开发基础 1. 标准库 net/http Go 内置 net/http 包&#xff0c;支持快速构建 Web 服务。 - 基本示…