Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • 前置篇

  • 基础篇

    • LLM概述
      • 大模型 AI 应用全栈开发知识体系
      • 大模型学习路线
      • 1.1 什么是语言模型
        • 1.1.1 自回归语言模型(Autoregressive language models)
        • 1.1.2 总结
      • 1.2 大模型相关历史回顾
        • 1.2.1 信息理论、英语的熵、n-gram模型
        • 1.2.1.1英语的熵
        • 1.2.1.2 用于下游应用的N-gram模型
        • 1.2.1.3 神经语言模型
        • 1.2.2 总结
    • 分词
    • 词嵌入
    • LLM术语
  • 架构篇

  • 训练篇

  • 微调篇

  • 常见模型篇

  • 大模型持续学习

  • 实战篇

  • 智能体
  • Scaling Law
  • temp
  • 大模型
  • 基础篇
Geeks_Z
2023-12-10
目录

LLM概述

大模型 AI 应用全栈开发知识体系

大模型学习路线

1.1 什么是语言模型

这里我们最开始从统计或者说统计学习的角度切入来讲这件事情,我们期望实现的是基于给定的文本信息输入,给出对应的新的文本/符号输出(可以是文本翻译、文本分类、文本扩写)。 要实现这样一个任务要解决两个问题: 1)输入序列问题:由于这里输入的是文本信号,而计算机能进入神经网络处理和计算的是数值,所以我们需要讲字符通过一定方式转化为数值。 2)输出序列问题:由于所需要输出的部分也是文本,而神经网络的输出是数值类型的(分类问题:二分类问题对应01输出,多分类对应多个01输出;回归问题:对应数值类型输出),所以需要建立神经网络的数值类型输出和最终字符输出的映射关系。

针对于第一个问题,其处理方式其实有很多种,比如最简单的,我们可以将输入序列进行编码,从而把字符转化为数值。

示例:

假设整个符号体系只有'a','b'两个小写字母和'.'一个句号。
输入序列是:'ab.b'
这里采用最简易的独热编码(可以搜索对应概念),总共3个字符,再加入'<begin>'和'<end>'两个字符串的起始和终止字符,其对应关系为
'<begin>':[0,0,0,0]; 'a':[1,0,0,0]; 'b':[0,1,0,0]; '.':[0,0,1,0]; '<end>':[0,0,0,1]
则输入序列可以编码为:
\[[0,0,0,0],[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,1,0,0],[0,0,0,1]]
然后此序列编码可以进入神经网络进行计算啦。

针对于第二个问题,同第一个问题类似,其处理方式其实有很多种,我们可以将输入序列进行编码,从而把数值转化为字符。

示例:
假设整个符号体系只有'a','b'两个小写字母和'.'一个句号。
输入序列是:'ab.b',期望输出序列是'b.'
这里同样采用最简易的独热编码(可以搜索对应概念),总共4个字符,其对应关系为
[0,0,0,0]:'<begin>'; [1,0,0,0]:'a'; [0,1,0,0]:'b';  [0,0,1,0]:'.';  [0,0,0,1]:'<end>'; 
可以构建神经网络的输出是四分类,假设模型输出为\[0,0,1,0],通过映射关系得到其输出字符'b',将预测得到的结果传入模型,得到下一个输出 \[0,0,0,1],通过映射关系得到其输出字符'.', 再将预测得到的结果传入模型,得到下一个输出 \[0,0,0,1],通过映射关系得到其输出字符'<end>',从而结束整个输出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

语言模型(LM)的经典定义是一种对词元序列(token)的概率分布。假设我们有一个词元集的词汇表 V 。语言模型p为每个词元序列 x1,...,xL ∈ V 分配一个概率(介于0和1之间的数字):

p(x1,…,xL)

概率直观地告诉我们一个标记序列有多“好(good)”。例如,如果词汇表为{ate, ball, cheese, mouse, the},语言模型可能会分配以下概率(演示):

p(the, mouse, ate, the, cheese)=0.02,p(the, cheese ate, the, mouse)=0.01,p(mouse, the, the, cheese, ate)=0.0001,

从数学上讲,语言模型是一个非常简单而又美妙的对象。但是这种简单是具有欺骗性的:赋予所有序列以(有意义的)概率的能力,该能力要求语言模型具有非凡的(但是隐含的)语言能力和世界知识。

例如,语言模型应该隐含地赋予"𝗆𝗈𝗎𝗌𝖾 𝗍𝗁𝖾 𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾 𝖺𝗍𝖾"一个非常低的概率,因为它在语法上是不正确的(句法知识)。由于世界知识的存在,语言模型应该隐含地赋予"𝗍𝗁𝖾 𝗆𝗈𝗎𝗌𝖾 𝖺𝗍𝖾 𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾"比"𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾 𝖺𝗍𝖾 𝗍𝗁𝖾 𝗆𝗈𝗎𝗌𝖾"更高的概率。这是因为两个句子在句法上是相同的,但在语义上却存在差异,而语言模型需要具备卓越的语言能力和世界知识,才能准确评估序列的概率。

语言模型也可以做生成任务。如定义所示,语言模型p接受一个序列并返回一个概率来评估其好坏。我们也可以根据语言模型生成一个序列。最纯粹的方法是从语言模型p 以概率p(x1:L) 行采样,表示为:

x1:L∼p.

如何在计算上高效地实现这一点取决于语言模型p的形式。实际上,我们通常不直接从语言模型中进行采样,这既因为真实语言模型的限制,也因为我们有时希望获得的不是一个“平均”的序列,而是更接近“最佳”序列的结果。

1.1.1 自回归语言模型(Autoregressive language models)

将序列 x1:L 的联合分布 p(x1:L) 的常见写法是使用概率的链式法则:

p(x1:L)=p(x1)p(x2∣x1)p(x3∣x1,x2)⋯p(xL∣x1:L−1)=∏i=1Lp(xi∣x1:i−1).

这里有一个基于文本的例子:

p(the,mouse,ate,the,cheese)=p(the)p(mouse∣the)p(ate∣the,mouse)p(the∣the,mouse,ate)p(cheese∣the,mouse,ate,the).

特别地,我们需要理解 p(xi∣x1:i−1) 是一个给定前面的记号 x1:i−1 后,下一个记号 xi 的条件概率分布。在数学上,任何联合概率分布都可以通过这种方式表示。然而,自回归语言模型的特点是它可以利用例如前馈神经网络等方法有效计算出每个条件概率分布 p(xi∣x1:i−1) 。在自回归语言模型 p 中生成整个序列 x1:L ,我们需要一次生成一个词元(token),该词元基于之前以生成的词元进行计算获得:

 for i=1,…,L:xi∼p(xi∣x1:i−1)1/T,

其中 T≥0 是一个控制我们希望从语言模型中得到多少随机性的温度参数:

  • T=0:确定性地在每个位置 i 选择最可能的词元 xi
  • T=1:从纯语言模型“正常(normally)”采样
  • T=∞:从整个词汇表上的均匀分布中采样 然而,如果我们仅将概率提高到 1/T 的次方,概率分布可能不会加和到 1。我们可以通过重新标准化分布来解决这个问题。我们将标准化版本 pT(xi∣x1:i−1)∝p(xi∣x1:i−1)1/T 称为退火条件概率分布。例如:
p( cheese )=0.4,p( mouse )=0.6pT=0.5( cheese )=0.31,pT=0.5 (mouse )=0.69pT=0.2 (cheese )=0.12,pT=0.2 (mouse) =0.88pT=0 (cheese )=0,pT=0 (mouse )=1

具体来说,这个温度参数会应用于每一步的条件概率分布 p(xi∣x1:i−1) ,将其幂变为 1/T 。这意味着当 T 值较高时,我们会获得更平均的概率分布,生成的结果更具随机性;反之,当 T 值较低时,模型会更倾向于生成概率较高的词元。

然而,有一个重要的注意事项:对于每一步的条件概率分布应用温度参数 T ,并进行迭代采样,这种方法并不等同于(除非 T=1 )从整个长度为 L 的序列的"退火"分布中一次性采样。换句话说,这两种方法在 T≠1 时会产生不同的结果。

"退火"这个术语来源于冶金学,其中热的金属会逐渐冷却以改变其物理性质。在这里,它类比的是对概率分布进行调整的过程。"退火"分布是通过将原始概率分布的每个元素都取幂 1/T ,然后重新标准化得到的新分布。当 T≠1 时,这个过程会改变原始概率分布,因此从"退火"分布中采样得到的结果可能与对每一步的条件分布应用 T 并进行迭代采样的结果不同。

对于非自回归的条件生成,更一般地,我们可以通过指定某个前缀序列 x1:i (称为提示)并采样其余的 xi+1:L (称为补全)来进行条件生成。例如,生成 T=0 的产生的:

the,mouse,ate⏟prompt⇝T=0the,cheese⏟completion.

如果我们将温度改为 T=1 ,我们可以得到更多的多样性,例如,"its house" 和 "my homework"。我们将很快看到,条件生成解锁了语言模型通过简单地更改提示就能解决各种任务的能力。

1.1.2 总结

  • 语言模型是序列 x1:L 的概率分布 p。
  • 直观上,一个好的语言模型应具有语言能力和世界知识。
  • 自回归语言模型允许有效地生成给定提示 x1:i 的补全 xi+1:L。
  • 温度可以用来控制生成中的变异量。

1.2 大模型相关历史回顾

1.2.1 信息理论、英语的熵、n-gram模型

语言模型的发展可以追溯到克劳德·香农,他在1948年的具有里程碑意义的论文《通信的数学理论》中奠定了信息理论的基础。在这篇论文中,他引入了用于度量概率分布的熵(Entropy)的概念:

H(p)=∑xp(x)log⁡1p(x).

熵实际上是一个衡量将样本x∼p 编码(即压缩)成比特串所需要的预期比特数的度量。举例来说,"the mouse ate the cheese" 可能会被编码成 "0001110101"。

熵的值越小,表明序列的结构性越强,编码的长度就越短。直观地理解, log⁡1p(x) 可以视为用于表示出现概率为 p(x) 的元素 x 的编码的长度。

例如,如果 p(x)=1/8 ,我们就需要分配 log2(8)=3 个比特(或等价地, log(8)=2.08 个自然单位)。

需要注意的是,实际上达到香农极限(Shannon limit)是非常具有挑战性的(例如,低密度奇偶校验码),这也是编码理论研究的主题之一。

1.2.1.1英语的熵

香农特别对测量英语的熵感兴趣,将其表示为一系列的字母。这意味着我们想象存在一个“真实”的分布p(这种存在是有问题的,但它仍然是一个有用的数学抽象),它能产生英语文本样本x∼p。

香农还定义了交叉熵:

H(p,q)=−∑xp(x)log⁡q(x)

这测量了需要多少比特(nats)来编码样本x∼p,使用由模型q给出的压缩方案(用长度为1/q(x)的代码表示x)。

通过语言模型估计熵。一个关键的属性是,交叉熵H(p,q)上界是熵H(p):

H(p,q)=∑xp(x)log⁡1q(x).

这意味着我们可以通过构建一个只有来自真实数据分布p 样本的(语言)模型q 估计H(p,q),而H(p) 常无法访问,如果p 英语的话。

所以我们可以通过构建更好的模型q来得到熵H(p)的更好的估计,由H(p,q)衡量。

香农游戏(人类语言模型)。香农首先在1948年使用n-gram模型作为q,但在他1951年的论文《打印英语的预测和熵》中,他引入了一个巧妙的方案(称为香农游戏),其中q是由人提供的:

"the mouse ate my ho_"
1

人们不擅长提供任意文本的校准概率,所以在香农游戏中,人类语言模型会反复尝试猜测下一个字母,然后我们会记录猜测的次数。

1.2.1.2 用于下游应用的N-gram模型

语言模型首先被用于需要生成文本的实践应用:

  • 1970年代的语音识别(输入:声音信号,输出:文本)
  • 1990年代的机器翻译(输入:源语言的文本,输出:目标语言的文本)

噪声信道模型。当时解决这些任务的主要模型是噪声信道模型。以语音识别为例:

  • 我们假设有一些从某个分布p中抽取的文本
  • 这些文本被转换为语音(声音信号)
  • 然后给定语音,我们希望恢复(最有可能的)文本。这可以通过贝叶斯定理实现:

p(text∣speech)∝p(text)⏟language modelp(speech∣text)⏟acoustic model.

语音识别和机器翻译系统使用了基于词的n-gram语言模型(最早由香农引入,但针对的是字符)。

N-gram模型。在一个n-gram模型中,关于xi 预测只依赖于最后的 n−1 个字符 xi−(n−1):i−1 ,而不是整个历史:

p(xi∣x1:i−1)=p(xi∣xi−(n−1):i−1).

例如,一个trigram(n=3)模型会定义:

。p(𝖼𝗁𝖾𝖾𝗌𝖾∣𝗍𝗁𝖾,𝗆𝗈𝗎𝗌𝖾,𝖺𝗍𝖾,𝗍𝗁𝖾)=p(𝖼𝗁𝖾𝖾𝗌𝖾∣𝖺𝗍𝖾,𝗍𝗁𝖾)。

这些概率是基于各种n-gram(例如,𝖺𝗍𝖾 𝗍𝗁𝖾 𝗆𝗈𝗎𝗌𝖾和𝖺𝗍𝖾 𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾)在大量文本中出现的次数计算的,并且适当地平滑以避免过拟合(例如,Kneser-Ney平滑)。

将n-gram模型拟合到数据上非常便宜且可扩展。因此,n-gram模型被训练在大量的文本上。例如,Brants等人(2007) (opens new window)在2万亿个tokens上训练了一个5-gram模型用于机器翻译。相比之下,GPT-3只在3000亿个tokens上进行了训练。然而,n-gram模型有其根本的限制。想象以下的前缀:

𝖲𝗍𝖺𝗇𝖿𝗈𝗋𝖽 𝗁𝖺𝗌 𝖺 𝗇𝖾𝗐 𝖼𝗈𝗎𝗋𝗌𝖾 𝗈𝗇 𝗅𝖺𝗋𝗀𝖾 𝗅𝖺𝗇𝗀𝗎𝖺𝗀𝖾 𝗆𝗈𝖽𝖾𝗅𝗌. 𝖨𝗍 𝗐𝗂𝗅𝗅 𝖻𝖾 𝗍𝖺𝗎𝗀𝗁𝗍 𝖻𝗒 ___
1

如果n太小,那么模型将无法捕获长距离的依赖关系,下一个词将无法依赖于𝖲𝗍𝖺𝗇𝖿𝗈𝗋𝖽。然而,如果n太大,统计上将无法得到概率的好估计(即使在“大”语料库中,几乎所有合理的长序列都出现0次):

。count(𝖲𝗍𝖺𝗇𝖿𝗈𝗋𝖽,𝗁𝖺𝗌,𝖺,𝗇𝖾𝗐,𝖼𝗈𝗎𝗋𝗌𝖾,𝗈𝗇,𝗅𝖺𝗋𝗀𝖾,𝗅𝖺𝗇𝗀𝗎𝖺𝗀𝖾,𝗆𝗈𝖽𝖾𝗅𝗌)=0。

因此,语言模型被限制在如语音识别和机器翻译等任务中,其中声音信号或源文本提供了足够的信息,只捕获局部依赖关系(而无法捕获长距离依赖关系)并不是一个大问题。

1.2.1.3 神经语言模型

语言模型的一个重要进步是神经网络的引入。Bengio等人 (opens new window)在2003年首次提出了神经语言模型,其中 p(xi∣xi−(n−1):i−1) 由神经网络给出:

。p(cheese∣ate,the)=some−neural−network(ate,the,cheese)。

注意,上下文长度仍然受到n的限制,但现在对更大的n值估计神经语言模型在统计上是可行的。

然而,主要的挑战是训练神经网络在计算上要昂贵得多。他们仅在1400万个词上训练了一个模型,并显示出它在相同数据量上优于n-gram模型。但由于n-gram模型的扩展性更好,且数据并非瓶颈,所以n-gram模型在至少接下来的十年中仍然占主导地位。

自2003年以来,神经语言建模的两个关键发展包括:

  • Recurrent Neural Networks(RNNs),包括长短期记忆(LSTMs),使得一个词元xi 条件分布可以依赖于整个上下文 x1:i−1 (有效地使 n=∞ ),但这些模型难以训练。
  • Transformers是一个较新的架构(于2017年为机器翻译开发),再次返回固定上下文长度n,但更易于训练(并利用了GPU的并行性)。此外,n可以对许多应用程序“足够大”(GPT-3使用的是n=2048)。

我们将在课程的后续部分深入探讨这些架构和训练方式。

1.2.2 总结

  • 语言模型最初是在信息理论的背景下研究的,可以用来估计英语的熵。
  • N-gram模型在计算上极其高效,但在统计上效率低下。
  • N-gram模型在短上下文长度中与另一个模型(用于语音识别的声学模型或用于机器翻译的翻译模型)联合使用是有用的。
  • 神经语言模型在统计上是高效的,但在计算上是低效的。
  • 随着时间的推移,训练大型神经网络已经变得足够可行,神经语言模型已经成为主导的模型范式。
#LLM
上次更新: 2025/06/25, 11:25:50
模型仓库介绍
分词

← 模型仓库介绍 分词→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式