参考资料:https://github.com/datawhalechina/happy-llm 

Decoder-Only是当前大型语言模型(LLM)的基础架构,如 GPT 系列。GPT 是 Decoder-Only 架构的代表,而开源 LLM 如 LLaMA 也是在 GPT 架构基础上发展而来的。

3.3.1 GPT

GPT(Generative Pre-Training Transformer)是由 OpenAI 团队于 2018 年发布的预训练语言模型。虽然 BERT 通常被认为是预训练语言模型时代的代表,但 GPT 实际上是首个明确提出预训练-微调思想的模型。GPT 提出了通用预训练的概念,即在海量无监督语料上进行预训练,然后在每个特定任务上进行微调,从而实现这些任务的巨大收益。

尽管 GPT 在发布之初由于性能略逊于随后发布的 BERT,并未取得轰动性成果,也没有让其使用的 Decoder-Only 架构成为学界研究的主流,但 OpenAI 团队坚定地选择了不断扩大预训练数据和增加模型参数,在 GPT 架构上不断优化。最终在 2020 年发布的 GPT-3 成就了 LLM(Large Language Model)时代的基础,并以 GPT-3 为基座模型的 ChatGPT 成功打开了新时代的大门,成为 LLM 时代的最强竞争者和目前的最大赢家。

(1) 模型架构——Decoder Only

  1. 整体结构

    • GPT 的整体结构与 BERT 类似,但使用 Decoder 进行堆叠,而不是 Encoder。

    • 更适合文本生成(NLG)和序列到序列(Seq2Seq)任务。

  2. 输入处理

    • 输入文本通过 tokenizer 分词,转化为 input_ids。

    • input_ids 经过 Embedding 层和 Positional Embedding 层编码成 hidden_states。

    • GPT 使用经典的 Sinusoidal 位置编码,与 BERT 的可训练全连接层位置编码不同。

  3. 解码器(Decoder)

    • 第一代 GPT 模型包含 12 层解码器层。

    • 每层的结构更接近 Transformer 的 Encoder 层,包含一个带掩码的自注意力层和一个 MLP 层。

    • LayerNorm 层在注意力层之前,与 Transformer 的设计不同。

  4. 掩码自注意力

    • Decoder 层中的掩码自注意力限制每个 token 只能关注之前的 token。

    • 通过掩码矩阵遮蔽未来 token 的注意力权重。

  5. MLP 层

    • GPT 的 MLP 层使用两个一维卷积核,而不是线性矩阵,但效果类似。

  6. 输出生成

    • 经过 N 个 Decoder 层后的 hidden_states 通过线性矩阵映射到词表维度。

    • 最终生成目标序列的 token。

(2)预训练任务——CLM

CLM 是基于一个自然语言序列的前面所有 token 来预测下一个 token 的任务。输入一个部分完成的文本序列,模型预测下一个 token。通过不断重复该过程,生成完整的文本序列。例如:

input: 今天天气
output: 今天天气很input: 今天天气很
output:今天天气很好
  • 生成过程

    • 对于输入序列长度为 256,期望输出序列长度为 256 的任务,模型会根据前 256 个 token、257 个 token(输入 + 预测的第一个 token)等,进行 256 次计算,最终生成长度为 512 的输出文本。

    • 输出文本的前 256 个 token 为输入,后 256 个 token 为模型的输出。

CLM 的优势
  • 与人类书写习惯契合:CLM 与人类书写自然语言文本的习惯相契合,也与下游任务直接匹配。

  • 直接性:相对于 BERT 的 MLM 任务,CLM 更直接,可以在任何自然语言文本上直接应用。

  • 预训练:CLM 可以使用海量的自然语言语料进行大规模的预训练,无需额外标注数据。

(3)GPT 系列模型的发展 

GPT-1
  • 模型结构:12 层 Decoder Block,隐藏层维度 768,12 个注意力头,每个头的维度 64。

  • 参数量:1.17 亿(0.12B)。

  • 预训练数据:5GB 的 BooksCorpus 数据集。

  • 特点:第一个使用 Decoder-Only 的预训练模型,模型体量和预训练数据较少,性能略逊于 BERT。

GPT-2
  • 模型结构:48 层 Decoder Block,隐藏层维度 1600,25 个注意力头,每个头的维度 64。

  • 参数量:15 亿(1.5B)。

  • 预训练数据:40GB 的 WebText 数据集。

  • 特点:大幅增加了预训练数据集和模型体量,引入了 Pre-Norm(先进行 LayerNorm 计算,再进入注意力层计算)以优化梯度稳定性。提出了 zero-shot(零样本学习)的概念,但效果有限。

GPT-3
  • 模型结构:96 层 Decoder Block,隐藏层维度 12288,96 个注意力头,每个头的维度 128。

  • 参数量:1750 亿(175B)。

  • 预训练数据:570GB 的数据,包括 CC、WebText、维基百科等。

  • 特点:进一步增大了模型体量和预训练数据量,使用了稀疏注意力机制来优化计算效率。提出了 few-shot(少样本学习)的概念,通过提供少量示例显著提升了模型的性能。

GPT-3 的影响
  • 涌现能力:GPT-3 展示了大型语言模型的涌现能力,即模型在达到一定规模后能够展现出之前未被发现的能力。

  • few-shot 学习:通过提供少量示例,模型可以取得远好于 zero-shot 的表现,为 NLP 的突破带来了重要进展。

  • 上下文学习:few-shot 也被称为上下文学习,即让模型从提供的上下文中的示例里学习问题的解决方法。

ChatGPT
  • 训练方法:引入了预训练-指令微调-人类反馈强化学习的三阶段训练。

  • 特点:在 GPT-3 的基础上,通过指令微调和人类反馈强化学习,进一步提升了模型的性能和适应性。

3.3.2 LLaMA

LLaMA模型是由Meta(前Facebook)开发的一系列大型预训练语言模型。从LLaMA-1到LLaMA-3,LLaMA系列模型展示了大规模预训练语言模型的演进及其在实际应用中的显著潜力。

(1) 模型架构——Decoder Only

LLaMA模型的整体结构与GPT系列模型类似,只是在模型规模和预训练数据集上有所不同。

  1. 输入编码

    • 输入文本通过 tokenizer 编码,转化为 input_ids。

    • Input_ids 经过 Embedding 层,每个 input_id 被映射为词向量。

    • 位置信息通过 Positional Embedding 层编码,确保模型理解词序上下文信息。

  2. Hidden States 形成

    • Input_ids 经过 Embedding 层和 Positional Embedding 层的结合,形成 hidden_states。

    • Hidden_states 包含输入文本的语义和位置信息,是后续处理的基础。

  3. Decoder 层处理

    • Hidden_states 输入 Decoder 层,由多个 Decoder Block 组成。

    • 每个 Decoder Block 包括:

      • Masked Self-Attention 层

        • 计算 query、key 和 value 向量。

        • 使用 softmax 函数计算 attention score,反映不同位置之间的关联强度。

        • 将 value 向量与 attention score 相乘,得到加权后的 value,即 attention 结果。

      • MLP 层

        • 通过两个全连接层对 hidden_states 进行特征提取。

        • 第一个全连接层映射到中间维度,通过激活函数进行非线性变换。

        • 第二个全连接层将特征映射回原始 hidden_states 维度。

  4. 最终输出

    • 经过多个 Decoder Block 处理后的 hidden_states 通过线性层映射到词表维度。

    • 生成目标序列的概率分布,通过采样或贪婪解码等方法生成最终输出序列。

(2) LLaMA模型的发展历程

LLaMA-1 系列

  • Meta于2023年2月发布了LLaMA-1,包括7B、13B、30B和65B四个参数量版本。
  • 这些模型在超过1T token的语料上进行了预训练,其中最大的65B参数模型在2,048张A100 80G GPU上训练了近21天。
  • LLaMA-1因其开源性和优异性能迅速成为开源社区中最受欢迎的大模型之一。

LLaMA-2 系列

  • 2023年7月,Meta发布了LLaMA-2,包含7B、13B、34B和70B四个参数量版本,除了34B模型外,其他均已开源。
  • LLaMA-2将预训练的语料扩充到了2T token,并将模型的上下文长度从2,048翻倍到了4,096。
  • 引入了分组查询注意力机制(Grouped-Query Attention, GQA)等技术。

LLaMA-3 系列

  • 2024年4月,Meta发布了LLaMA-3,包括8B和70B两个参数量版本,同时透露400B的LLaMA-3还在训练中。
  • LLaMA-3支持8K长文本,并采用了编码效率更高的tokenizer,词表大小为128K。
  • 使用了超过15T token的预训练语料,是LLaMA-2的7倍多。

LLaMA 模型的核心特点

  • 技术创新:引入分组查询注意力机制(GQA)等新技术

  • 多参数版本:提供从7亿到数百亿不等的参数量,适应不同规模的应用需求

  • 大规模预训练:使用超过1T到15T token的庞大语料进行预训练

  • 高效架构设计:支持长文本输入,采用高效tokenizer

LLaMA 模型的影响

  • 开源性:LLaMA-1的开源性使其迅速受到社区欢迎

  • 性能提升:LLaMA-2和LLaMA-3通过技术创新和预训练语料的扩充,显著提升了模型性能和应用范围

  • 多语言和多任务处理:LLaMA-3在多语言和多任务处理上取得重大进步

  • 社区支持:Meta对模型安全性和社区支持的持续关注,推动了LLaMA作为AI技术发展的重要推动力,促进了全球范围内的技术应用和创新

3.3.3 GLM

GLM(General Language Model)系列模型是由智谱开发的主流中文 LLM 之一,包括 ChatGLM1、ChatGLM2、ChatGLM3 及 GLM-4 系列模型。这些模型覆盖了指令理解、代码生成等多种应用场景,并在多种中文评估集上达到了 SOTA(State Of The Art)性能。

(1)模型架构-相对于 GPT 的略微修正

GLM 的整体模型结构与 GPT 类似,均为 Decoder-Only 结构,但存在以下三点细微差异:

  1. 归一化方式

    • Post Norm:GLM 使用 Post Norm,即在进行残差连接计算时,先完成残差计算,再进行 LayerNorm 计算。这种方式对参数正则化的效果更强,增强模型的鲁棒性。

    • Pre Norm:GPT 和 LLaMA 等模型使用 Pre Norm,即先进行 LayerNorm 计算,再进行残差的计算。这种方式可以防止模型的梯度爆炸或梯度消失,对于更大体量的模型效果更好。尽管如此,GLM 论文提出使用 Post Norm 可以避免 LLM 的数值错误。

  2. 最终 token 预测

    • GLM 使用单个线性层实现最终 token 的预测,而不是使用 MLP。这种结构更加简单且鲁棒,减少了最终输出的参数量,将更大的参数量放在模型本身。

  3. 激活函数

    • GLM 使用 GeLU(Gaussian Error Linear Unit)作为激活函数,而不是传统的 ReLU(Rectified Linear Unit)。

    • ReLU:核心计算逻辑为去除小于 0 的传播,保留大于 0 的传播。

    • GeLU:对接近于 0 的正向传播进行非线性映射,保证激活函数后的非线性输出具有一定的连续性。

GLM的核心创新点是提出了一种结合自编码(MLM)和自回归(CLM)思想的预训练方法。它通过优化自回归空白填充任务,随机遮蔽连续的tokens,既利用上下文预测遮蔽部分,又在遮蔽部分内部按CLM方式预测tokens。这种结合使模型既适合逐token生成任务,又适合理解类任务,其预训练任务产出的模型性能优于同体量BERT系模型。

GLM预训练任务在预训练模型时代有一定优势,但进入LLM时代后,CLM在大规模预训练中表现更优,其生成模型在文本理解上也能超越MLM训练的模型。因此,ChatGLM系列从第二代开始回归CLM建模。尽管GLM预训练任务在LLM整体发展路径中看似失败,但其融合CLM与MLM的设计以及率先产出中文开源原生LLM的思路,仍具有借鉴意义。

(3)GLM 家族的发展

ChatGLM-6B(2023年3月)

  • 基础:基于原生GLM架构及预训练任务,参考ChatGPT技术思路进行SFT和RLHF。

  • 特点:首个中文开源LLM,1T语料预训练,支持2K上下文长度,为中文LLM研究提供起点。

ChatGLM2-6B(2023年6月)

  • 架构:回归LLaMA架构,引入MQA注意力机制。

  • 预训练任务:回归经典CLM,放弃GLM预训练尝试。

  • 性能提升:上下文长度扩展至32K,更大预训练规模带来性能大幅提升。

ChatGLM3-6B(2023年10月)

  • 性能表现:在语义、数学、推理、代码和知识方面达当时SOTA性能。

  • 架构:与二代相比架构无变化。

  • 优化来源:更多样化训练数据集、更充足训练步骤、更优化训练策略。

  • 新功能:支持函数调用与代码解释器,可实现Agent开发,应用价值更广泛。

GLM-4系列(2024年1月)

  • 性能表现:支持128K上下文,英文基准上达GPT-4水平。

  • 开源情况:未直接开源GLM-4,开源轻量级版本GLM-4-9B。

  • GLM-4-9B特点:1T token多语言语料预训练,上下文长度8K,使用与GLM-4相同管道和数据后训练,训练计算量少时超越Llama-3-8B,支持GLM-4所有工具功能。

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

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

相关文章

主流的Attention Backend介绍

Attention Backend 技术背景 注意力(Attention)机制在深度学习中扮演着关键角色,它帮助模型在处理序列数据时,有选择地关注输入中的重要信息。然而,传统的注意力计算往往受到内存访问和算力分配的双重制约&#xff0c…

Linux内存取证

我们先把linux取证文件放到kali中,然后这里的Ubuntu18.04-5.4.0-84-generic.zip需要不解压直接放到vol工具中 然后把Ubuntu18.04-5.4.0-84-generic放到vol工具中,然后开始去这个,使用vol工具查看linux的版本信息 这个LinuxUbuntu18_04-5_4_0-…

使用docx4j 实现word转pdf(linux乱码处理)

由于系统之前使用了是itext进行转换的&#xff0c;现在已经不是开源的工具了&#xff0c;需要收费&#xff0c;然后进行改造&#xff0c;具体处理如下。 <dependency><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId><version…

C++ - vector 的相关练习

目录 前言 1、题1 只出现一次的数字 &#xff1a; 解法一&#xff1a;遍历 参考代码&#xff1a; 解法二&#xff1a;按位异或 参考代码&#xff1a; 解法三&#xff1a;哈希表 参考代码&#xff1a; 2、题2 杨辉三角&#xff1a; 参考代码&#xff1a; 总结 前言 …

JDK 1.8 Stream API:集合流处理深度解析

JDK 1.8 Stream API&#xff1a;集合流处理深度解析 摘要&#xff1a;Stream API 是 JDK 1.8 的革命性特性&#xff0c;它将集合操作从传统迭代升级为声明式函数式处理。Stream API三个阶段&#xff08;创建→中间操作→终端操作&#xff09;详解流处理机制&#xff0c;辅以代…

2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(二)

2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷&#xff08;二&#xff09; 第一部分&#xff1a;第二部分&#xff1a;网络安全事件响应、数字取证调查、应用程序安全任务书任务 1&#xff1a;应急响应&#xff08;可以培训有答案&#xff09;任务 2&…

AiPy实战(5):效率革命!5分钟构建行业分析报告

在当今数字化时代&#xff0c;数据呈指数级增长&#xff0c;行业分析报告对于企业的决策制定愈发关键。传统上&#xff0c;撰写一份行业分析报告&#xff0c;需要分析师耗费大量时间从各类数据库、新闻资讯平台、行业报告中手动收集数据&#xff0c;再进行整理、分析和撰写&…

docker小白自存-windows系统通过docker安装n8n-nodes-puppeteer

n8n上直接在社区下载puppeteer节点&#xff0c;使用时会报错说没有chromium依赖。 找到了n8n-nodes-puppeteer的github试图解决 根据他的docker安装指南执行&#xff0c;运行容器时会报exec /docker-custom-entrypoint.sh: no such file or directory &#xff08;明明文件都有…

脚本shebang的作用与使用方法

#!&#xff08;称为 shebang 或 hashbang&#xff09;是脚本文件开头的前两个字符&#xff0c;用于告诉操作系统应该使用哪个解释器来执行该脚本。 核心作用&#xff1a; 指定解释器&#xff1a; 明确告诉系统运行这个脚本时应该调用哪个程序&#xff08;解释器&#xff09;来…

【大模型学习 | BERT 量化学习 (1)】

BERT 情感分析 一、 数据集加载与模型训练 from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments from datasets import load_dataset import torch import numpy as np from sklearn.metrics import accuracy_score mode_na…

用低通滤波优化串口或485 通信指示灯电路

常见的通信指示灯电路就是简单的把LED 连到TXD 和RXD 上&#xff0c;一有动静就闪一下。问题是&#xff0c;如果波特率很高&#xff0c;一次通信时间很短&#xff0c;相当于占空比很低&#xff0c;LED 闪烁的亮度就很弱&#xff0c;不容易观察。比如MODBUS 通信&#xff0c;波特…

【纯干货】调整word目录中的行距以及右对齐页码

1.问题展现 目录生成会遇到一些奇葩现象 所以到了展现技术力的时候了【doge】 2.解决word目录中的行距问题 选中目录中的文字-》段落 此时你可能勾选了图片中的一个以上&#xff0c;把他们都取消了&#xff0c; 由于一个目录的标题对应一个样式&#xff0c;第一个也可以取消 …

pandas 优雅处理值类型为list的列的csv读写问题

文章目录 直接存储join list 变成字符串存储json.dumps序列化存储以及json.loads反序列化读取总结 之所以分析这个问题,是因为读者在跟第三方数据供应商对接数据的时候,老是会遇到数据加载都会出错的问题,其中一个原因就是list类型数据没有正确储存,于是笔者在这篇文章里面详细…

一种解决 OpenWrt 安装 docker 之后局域网的设备之间无法互相访问通信的方法

文章目录 一、问题背景二、解决方案&#xff08;方法一&#xff09;修改全局设置的 转发&#xff08; forward&#xff09; 为 接受&#xff08;ACCEPT&#xff09;&#xff08;方法二&#xff09;设置 net.bridge.bridge-nf-call-iptables0 并将 docker 的容器网络设置为host …

Leetcode百题斩-贪心

贪心也是一个很有意思的专题&#xff0c;能遇到很多神奇的思路。 但这个专题&#xff0c;leetcode也没放Hard&#xff0c;果然是怕这种玄学专题上点难度大家罩不住。那就很快了&#xff0c;直接过 763. Partition Labels[Medium] 思路&#xff1a;将字母串分组&#xff0c;相…

基于多径信道的分集接收技术性能优化与仿真分析

基于多径信道的分集接收技术性能优化与仿真分析 一、多径信道建模与仿真 1. 多径信道建模(MATLAB实现) classdef MultipathChannel < handlepropertiesSampleRate = 1e6; % 采样率 (Hz)MaxDoppler = 100; % 最大多普勒频移 (Hz)DelayVector = [0

LeetCode 713.乘积小于K的子数组

给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。 示例 1&#xff1a; 输入&#xff1a;nums [10,5,2,6], k 100 输出&#xff1a;8 解释&#xff1a;8 个乘积小于 100 的子数组分别为&#xff1a;[10]、[5…

打破网络安全孤岛:实现防御数据协作

作者&#xff1a;来自 Elastic Crossley McEwen, Oksana Abramovych 现代网络战场不再受组织边界的限制。在各类防御网络中&#xff0c;关键的结构化、非结构化和半结构化数据分布在不同的专业环境中&#xff0c;形成孤岛 —— 从机密情报系统到作战指挥平台&#xff0c;再到战…

给定一个没有重复元素的数组,写出生成这个数组的MaxTree的函数

题目&#xff1a; 给定一个没有重复元素的数组arr&#xff0c;写出生成这个数组的MaxTree的 函数&#xff0c;要求如果数组长度为N&#xff0c;则时间复杂度为O(N)、额外空间复杂度 为O(N)。 一个数组的MaxTree定义如下。 ● 数组必须没有重复元素。 ● MaxTree是一棵二叉…

iOS 抓包实战:时间戳偏差导致的数据同步异常排查记录

“这条数据不是我填的”“我的更新被覆盖了”“两个设备显示不一致”——这些是产品上线后最令人头疼的反馈。 最近我们在一次用户同步问题排查中&#xff0c;发现表面是“数据丢失”问题&#xff0c;实则是多端数据提交时间戳处理不一致&#xff0c;导致后台认为老数据为新&a…