GPT(Generative Pre-trained Transformer)模型架构与损失函数介绍

目录

一、核心架构:Transformer Decoder

1. 核心组件:仅解码器(Decoder-Only)的堆叠

2. 输入表示:Token + 位置

3. 输出

二、训练过程:两阶段范式

阶段一:预训练(Pre-training) - 海量数据“读书”

阶段二:微调(Fine-tuning) - 特定任务“辅导”

三、损失函数

1. 数学定义和公式

2. 一个具体的计算例子

3. 为什么这个损失函数如此有效?

4. 在训练流程中的位置

四、总结与特点


GPT(Generative Pre-trained Transformer)的架构和训练过程。是一个非常核心的现代人工智能主题,尤其在大语言模型(LLM)领域。

首先,要明确一点:“GPT”已经成为一个系列,从最初的GPT-1到现在的GPT-4,其核心架构思想一脉相承,但规模和能力天差地别。下面的介绍将以经典的GPT-3的架构和训练为蓝本,因为它奠定了当前范式的基础。

与Deepseek的对比:

DeepSeek模型架构和损失函数介绍-CSDN博客https://blog.csdn.net/qq_54708219/article/details/151335530?sharetype=blogdetail&sharerId=151335530&sharerefer=PC&sharesource=qq_54708219&spm=1011.2480.3001.8118

一、核心架构:Transformer Decoder

GPT的架构基于Transformer模型,但它只使用了Transformer的Decoder部分,并进行了一些修改。这与使用整个Encoder-Decoder结构的模型(如T5)或使用Encoder的模型(如BERT)有显著区别。以下是其架构的核心组成部分:

1. 核心组件:仅解码器(Decoder-Only)的堆叠

GPT由N个(对于GPT-3,N=96)完全相同的Transformer Decoder块堆叠而成。每个块包含两个核心子层:

  • 掩码自注意力层(Masked Self-Attention):

    • 自注意力(Self-Attention): 允许序列中的每个位置(单词)同时关注到序列中的所有其他位置,从而捕获丰富的上下文信息。

    • 掩码(Masking): 这是关键!为了确保模型在生成文本时只能“看到”当前位置之前的信息(即过去的词),而不能“偷看”未来的词,在计算注意力时会将未来位置的信息屏蔽掉(通常设置为负无穷,经Softmax后变为0)。这保证了模型的自回归(Autoregressive) 特性,即一个一个地生成下一个词。

  • 前馈神经网络层(Feed-Forward Network, FFN):

    • 一个简单的多层感知机(通常包含一个隐藏层和激活函数,如GELU),对每个位置的表示进行独立处理和非线性变换。

  • 残差连接(Residual Connection)和层归一化(Layer Normalization):

    • 每个子层(注意力、FFN)都被一个残差连接所包裹,并进行层归一化。这有助于稳定深度网络的训练,防止梯度消失。

2. 输入表示:Token + 位置

模型接收一串单词(或子词,即Token)作为输入,例如 ["The", "robot", "ate", "the"]。这些Token被转换为模型可以处理的数值形式:

  • Token嵌入(Token Embedding): 一个可学习的查找表,将每个Token映射为一个高维向量(例如,GPT-3是12288维)。

  • 位置嵌入(Positional Embedding): 由于自注意力机制本身没有位置信息,需要额外添加可学习的位置编码向量,告诉模型每个词在序列中的位置。

Token嵌入向量 + 位置嵌入向量 = 模型的输入表示。

3. 输出

序列经过所有Decoder层后,会为序列中的每个位置输出一个高维向量。最终,这个向量会通过一个线性投影层(Vocabulary Projection) 和一个Softmax层,转换为整个词表上的概率分布。

  • 例如,在输入 ["The", "robot", "ate", "the"] 后,模型会输出下一个词的概率分布("apple"的概率可能是0.6,"banana"的概率是0.3,等等)。

  • 模型根据这个概率分布选择下一个词(通过采样或选择概率最高的词),并将其追加到输入中,继续生成下一个词,如此循环。


二、训练过程:两阶段范式

GPT的训练遵循一个非常成功的两阶段范式:1. 预训练(Pre-training) 和 2. 微调(Fine-tuning)。这也被称为“自监督学习”。

阶段一:预训练(Pre-training) - 海量数据“读书”

目标: 让模型学习语言的通用知识、语法、事实和推理能力。这是最耗时、最耗费计算资源的阶段。

  • 数据: 使用极其庞大的、来自互联网的文本数据集(如CommonCrawl, WebText, 书籍、期刊等)。GPT-3的训练数据高达近5000亿个Token。

  • 任务: 自回归语言建模 或 下一个Token预测

  • 过程

    1. 从数据集中随机抽取一段文本(例如:“人工智能是未来的趋势。”)。

    2. 输入模型的是这段文本的前N个词(例如:“人工智能是未来的”)。

    3. 要求模型预测下一个词(目标是“趋势”)。

    4. 将模型的预测(一个概率分布)与真实的下一个词(“趋势”的one-hot编码)进行对比,计算交叉熵损失(Cross-Entropy Loss)

    5. 通过反向传播和优化器(如AdamW)更新模型的所有参数,让模型在下一次预测时更准确。

  • 本质: 这是一个无监督学习过程,不需要人工标注。数据本身(下一个词是什么)就是标签。通过这个过程,模型学会了语言的统计规律、世界知识以及强大的上下文表示能力。

阶段二:微调(Fine-tuning) - 特定任务“辅导”

目标: 让预训练好的通用模型适应特定的下游任务(如问答、翻译、摘要、情感分析等)。

  • 数据: 相对小得多的、高质量人工标注的数据集。例如,对于“情感分析”任务,数据集可能是 {句子:情感标签} 的配对,如 (“这部电影太精彩了”, “正面”)。

  • 过程

    1. 取预训练好的GPT模型。

    2. 在其输出层之上添加一个任务特定的头(例如,对于分类任务,添加一个线性分类器)。

    3. 使用标注数据,以比预训练小得多的学习率对整个模型(或部分层)进行继续训练。

    4. 此时的目标函数仍然是交叉熵损失,但标签是任务特定的(如正面/负面)。

  • 创新(Instruction Tuning & RLHF):

    • 对于ChatGPT这样的对话模型,微调过程更加精细。它采用了指令微调(Instruction Tuning) 和基于人类反馈的强化学习(RLHF)

    • 指令微调: 使用大量(指令,期望回复)的数据对来训练模型,教会它如何理解和遵循人类的指令。

    • RLHF

      1. 收集人类标注者对于模型多个回复的偏好排序(哪个回复更好)。

      2. 训练一个奖励模型(Reward Model) 来学习人类的偏好。

      3. 使用强化学习(如PPO算法)以奖励模型为指引,进一步优化语言模型的策略,使其生成更符合人类喜好的、更有帮助、更安全的回复。

三、损失函数

GPT训练的损失函数是标准的交叉熵损失(Cross-Entropy Loss),更具体地说,是用于自回归语言建模的交叉熵损失。它的核心思想非常简单:惩罚模型在预测下一个词时犯的错误。模型预测的分布与真实分布差异越大,损失值就越高。

1. 数学定义和公式

对于一个给定的序列(例如一句话)\mathbf{x} = (x_1, x_2, ..., x_T),其中 x_t 是序列中的第 t 个词元(token)。

训练目标: 基于之前的所有词元 x_1, x_2, ..., x_{t-1},最大化真实下一个词元 x_t 出现的概率。

损失函数 是这个目标的负数对数似然(Negative Log-Likelihood)。

对于单个时间步 t 的损失是:

L_t = -\log P(x_t | x_{1}, x_{2}, ..., x_{t-1}; \Theta)

其中:

  • P(x_t | ...) 是模型在时间步 t 根据上文计算出的、对于词元 x_t预测概率

  • \Theta 代表模型的所有参数。

  • \log 是自然对数。取对数是数学上的标准做法,可以将连乘转化为求和,并且惩罚模型对其预测的“不确定性”(即概率很低时,-\log 值会很大)。

整个序列的总损失是所有这些时间步损失的平均值:

L = \frac{1}{T} \sum_{t=1}^{T} L_t = -\frac{1}{T} \sum_{t=1}^{T} \log P(x_t | x_{<t}; \Theta)

这里 x_{<t} 是 x_1, x_{2}, ..., x_{t-1} 的简写。

重要提示: 在计算时,模型是并行地处理整个序列,并通过掩码(Mask)确保在计算位置 t 的注意力时,只能看到 t 之前的位置。因此,虽然计算是并行的,但其数学原理与上述自回归公式完全等价。

2. 一个具体的计算例子

假设我们有一个非常简单的序列:["猫", "吃", "鱼"],对应的 token ID 是 [231, 792, 583]

  1. 输入 (Input): 模型接收整个序列 [231, 792, 583]

  2. 目标 (Target): 训练时,我们希望模型能正确地将输入序列“偏移一位”进行预测。即:

    • 当输入是 [231] 时,应预测下一个词是 792 (吃)。

    • 当输入是 [231, 792] 时,应预测下一个词是 583 (鱼)。

    • 初始 token 没有上一个 token,所以从 t=2 开始计算损失。

  3. 模型输出:

    • 在经过最后的 Linear 层和 Softmax 后,模型会在整个词表(例如 50,257 个词)上为每个位置输出一个概率分布。

    • 假设在位置 t=2(即需要预测“鱼”的时刻),模型对正确 token 583 (“鱼”) 预测的概率是 P(\text{fish}) = 0.85,而对某个错误 token(例如“肉”)的概率是 P(\text{meat}) = 0.05

  4. 计算该时间步的损失:

    L_3 = -\log(P(\text{fish})) = -\log(0.85) \approx 0.1625

    这个损失值很小,因为模型做出了一个高置信度的正确预测。

  5. 如果预测错误:如果模型在 t=2 时预测 P(\text{fish}) = 0.1,而 P(\text{meat}) = 0.7,那么损失会是:L_3 = -\log(0.1) \approx 2.3026。这个损失值很大,因为模型做出了一个高置信度的错误预测。

  6. 整个序列的损失:
    我们需要计算 t=2(预测“吃”)和 t=3(预测“鱼”)两个时间步的损失,然后求平均。

    • L_2 = -\log(P(\text{eat}))

    • L_3 = -\log(P(\text{fish}))

    • L = \frac{L_2 + L_3}{2}

3. 为什么这个损失函数如此有效?
  1. 直接的代理目标: 能够准确预测下一个词,需要模型掌握语法、句法、常识、逻辑推理甚至风格模仿等几乎所有语言能力。因此,最小化这个损失函数间接地迫使模型学习到了这些丰富的知识。

  2. 可微性(Differentiability): 整个计算过程——从嵌入层到多个Transformer块,再到最后的线性投影和Softmax——都是完全可微的。这意味着可以通过反向传播(Backpropagation) 算法,精确地计算出损失函数对模型中每一个参数的梯度,从而通过梯度下降来有效地更新参数。

  3. 信息密集的梯度: 每一次预测错误都会产生一个较大的损失信号,这个信号会通过反向传播有效地分配给了模型中那些导致预测错误的参数。这种“责任分配”机制非常高效。

4. 在训练流程中的位置

这个损失函数是GPT 预训练(Pre-training) 阶段的核心驱动力。它的流程可以概括为:

  1. 从海量文本语料库中采样一个批次(batch)的序列。

  2. 将序列输入模型,获得模型对所有位置下一个词的预测分布。

  3. 将模型的预测分布与真实的下一个词(即目标序列)进行比较,计算整个批次的平均交叉熵损失

  4. 通过反向传播计算损失相对于所有模型参数的梯度。

  5. 使用优化器(如AdamW)根据梯度更新模型参数。

  6. 重复这个过程数百万乃至数十亿次,直到模型收敛。

微调(Fine-tuning) 阶段同样使用交叉熵损失,但目标不同。例如,在指令微调中,输入是指令,目标是期望的回复,损失函数计算的是模型生成“回复”部分每个词时的交叉熵,而“指令”部分的损失通常会被掩码掉,不参与计算。

特性描述
名称交叉熵损失(Cross-Entropy Loss)
类型自回归语言建模损失
核心思想最小化模型预测的下一个词概率分布与真实分布(一个one-hot向量)之间的差异。
数学公式L = -\frac{1}{T} \sum_{t=1}^{T} \log P(x_t \mid x_{<t}; \Theta)
为何有效是学习语言知识的完美代理任务;完全可微,便于梯度下降优化。
阶段主要驱动预训练,也用于监督微调

总而言之,GPT的损失函数是一个简洁、优雅而强大的目标,它通过“猜下一个词”这个简单游戏,驱动模型学习并掌握了人类语言的复杂规律。

四、总结与特点

特性描述
架构Transformer Decoder-Only,使用掩码自注意力实现自回归生成。
核心能力生成(Generative),根据上文预测下一个词。
训练范式两阶段:1. 预训练(海量无标注数据,下一个词预测);2. 微调(少量标注数据,适应特定任务/对齐人类偏好)。
规模定律模型性能强烈依赖于模型参数量数据量计算量的同步 scaling up。GPT系列的进化史就是一部规模扩大史。
上下文学习GPT-3展现出的强大能力:在不更新参数的情况下,仅通过向模型提供几个示例(Few-shot)和任务描述,它就能完成新任务。

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

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

相关文章

GitHub 热榜项目 - 日榜(2025-09-10)

GitHub 热榜项目 - 日榜(2025-09-10) 生成于&#xff1a;2025-09-10 统计摘要 共发现热门项目&#xff1a;15 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜呈现三大技术热点&#xff1a;LLM智能体应用爆发&#xff08;如parlant、AutoAgent&#xff09;&a…

论文阅读:arxiv 2023 Large Language Models are Not Stable Recommender Systems

总目录 大模型相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2312.15746 速览 破解大语言模型在推荐系统中的不稳定性 该论文聚焦于大语言模型&#xff08;LLMs&#xff09;在推荐系统中的应用问题&#xff0c;指出…

Linux的使用——FinalShell下载使用及连接云服务器的教程

一、注册免费阿里云服务器 1. 进入阿里云服务器官网 阿里云-计算&#xff0c;为了无法计算的价值https://www.aliyun.com/?spm5176.ecscore_server.console-base_top-nav.dlogo.39144df5uvPLOm 2. 点击免费试用 这里我已经试用过了&#xff0c;大家选择合适的云服务器点击立…

如何清理 Docker 占用的巨大磁盘空间

我相信很多人在使用 Docker 一段时间后&#xff0c;都会遇到一个常见问题&#xff1a;磁盘空间被迅速吃光&#xff0c;尤其是在进行频繁的镜像构建、测试和运行容器时。以我自己为例&#xff0c;在 Ubuntu 24.04设备上&#xff0c;docker system df -v 一看&#xff0c;Docker …

【CMake】缓存变量

目录 一. 缓存变量 二.创建缓存变量 2.1.使用set()来创建缓存变量 2.2.使用FORCE参数来覆盖缓存变量 2.2.1.示例1——不带force的set是不能覆盖已经存在的缓存变量的 2.2.2.示例2——带force的set才能覆盖已经存在的缓存变量 2.2.3.对比示例 2.3.命令行 -D 创建/覆盖缓…

vue2使用若依框架动态新增tab页并存储之前的tab页的操作

1. 应用场景&#xff1a;点击历史记录&#xff0c;要比较两个tab页的内容时&#xff0c;需要做到切换tab页来回看左右对数据对比。2.开发难点若依项目正常是把路由配置到菜单管理里&#xff0c;都是设定好的。不过它也给我们写好了动态新增tab页的方&#xff0c;需要我们自己来…

论文阅读-SelectiveStereo

文章目录1 概述2 模块2.1 SelectiveIGEV和IGEV的差异2.2 上下文空间注意力2.2.1 通道注意力2.2.2 空间注意力2.3 SRU3 效果参考资料1 概述 本文主要结合代码对Selective的创新点进行针对性讲解&#xff0c;相关的背景知识可以参考我写的另两篇文章论文阅读-RaftStereo和论文阅…

深入分析神马 M56S+ 202T 矿机参数与性能特点

引言在比特币&#xff08;BTC&#xff09;和比特币现金&#xff08;BCH&#xff09;等主流加密货币的挖掘过程中&#xff0c;矿机的选择直接关系到挖矿的效率与收益。神马 M56S 202T矿机是SHA-256算法的矿机&#xff0c;凭借其强大的算力和高效的能效比&#xff0c;成为了矿工们…

36.2Linux单总线驱动DS18B20实验(详细讲解代码)_csdn

想必看过我很多次博客的同学&#xff0c;都知道了编写驱动的流程&#xff01; 这里我们还是按照以前的习惯来一步一步讲解&#xff01; 单总线驱动&#xff0c;在F103和51单片机的裸机开发中是经常见的。 linux驱动代码编写实际上就是&#xff0c;端对端的编程&#xff01; 就是…

【杂类】应对 MySQL 处理短时间高并发的请求:缓存预热

一、什么是缓存预热&#xff1f;1. 核心概念​​缓存预热&#xff08;Cache Warm-up&#xff09;​​ 是指在系统​​正式对外提供服务之前​​&#xff0c;或​​某个高并发场景来临之前​​&#xff0c;​​主动​​将后续极有可能被访问的热点数据从数据库&#xff08;MySQL…

点评项目(Redis中间件)第三部分短信登录,查询缓存

可以直接看后面Redis实现功能的部分基于session实现短信登录发送短信验证码前端请求样式业务层代码Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {Overridepublic Result sendCode(String phone, HttpSession se…

线性方程求解器的矩阵分裂

大概思路是对的&#xff0c;但是查老师可能会出现幻觉&#xff0c;小心食用 &#x1f603;这段代码是在初始化迭代法求解器&#xff0c;构建迭代矩阵和分裂矩阵。以下是详细解释&#xff1a; if init_from_func or init_from_input:# 1. 存储刚度矩阵self.stiff_p stiff_p# 2.…

【Beetle RP2350】雷达模块 CEM5861G-M11 开发使用指南

一、硬件介绍 1、产品特点 Beetle RP2350【RP2350A_QFN60】是一款基于RP2350微控制器的高性能迷你开发板&#xff0c;双核双架构设计&#xff08;支持 Arm Cortex-M33或Hazard3 RISC-V内核&#xff09;为开发者提供灵活的性能配置。 双核双架构&#xff0c;性能自由切换 采…

高通Android 13 开机黑屏问题深度剖析与解决方案

1. 问题概述 在 Android 13 系统定制化开发过程中&#xff0c;开机流程的调试与优化颇具挑战性。一个典型问题是&#xff1a;当开机动画播放完毕后&#xff0c;设备会先出现数秒黑屏&#xff0c;然后才进入锁屏界面。本文基于开机日志分析&#xff0c;结合实际项目经验&#x…

腾讯推出AI CLI工具CodeBuddy,国内首家同时支持插件、IDE和CLI三种形态的AI编程工具厂商

2025年9月9日&#xff0c;腾讯正式推出自研AI CLI工具CodeBuddy code&#xff0c;成为国内首家同时支持插件、IDE和CLI三种形态的AI编程工具厂商。这一创新不仅填补了国内市场在全形态AI编程工具领域的空白&#xff0c;更以编码时间缩短40%、AI生成代码占比超50%的硬核数据&…

零基础学习QT的第二天-组件基础知识

组件声明以及设置属性 所有的组件的基类为&#xff1a;QtObject&#xff0c;在c中名称为&#xff1a;QObject。 在qml和c名称有所区别&#xff0c;例如在Qml中QtObject&#xff0c;在C会省略一个t(QObject) 声明组件的方式&#xff1a; 组件名 {属性名:值}在实际应用中&#xf…

像素图生成小程序开发全解析:从图片上传到Excel图纸

像素图生成小程序开发全解析&#xff1a;从图片上传到Excel图纸 前言 在数字化创作和工艺设计领域&#xff0c;像素图生成工具具有广泛的应用价值&#xff0c;无论是十字绣设计、LED灯阵布置还是复古游戏美术创作。本文将详细解析一个功能完整的像素图生成小程序的开发过程&…

mac-intel操作系统go-stock项目(股票分析工具)安装与配置指南

1. 项目基础介绍 go-stock 是一个基于Wails和NaiveUI开发的AI赋能股票分析工具。旨在为用户提供自选股行情获取、成本盈亏展示、涨跌报警推送等功能。它支持A股、港股、美股等市场&#xff0c;能够进行市场整体或个股的情绪分析、K线技术指标分析等功能。所有数据均保存在本地…

spring-单例bean是线程安全的吗

其中可修改的成员变量有线程不安全问题&#xff0c;不可修改的无状态的 userService是没有线程安全问题的 spring框架中有一个 Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。 不是线程安全的&#xff0c;一般来说&#xff0c;我们在bean中注入的对象都是无状…

CM1033系列 3串锂电池保护IC - 高精度±25mV 内置延时 多型号可选(含铁锂)

1. 核心亮点 高精度多重保护&#xff1a;专为3串电池组设计&#xff0c;提供过充、过放、三级过流&#xff08;含短路&#xff09;、充电过流及断线检测等全方位保护&#xff0c;电压检测精度高达25mV。超低功耗&#xff1a;工作电流典型值仅7μA&#xff0c;休眠电流低至4μA&…