独家|AI技术干货!从头开始图解大语言模型

共 10287字,需浏览 21分钟

 ·

2023-07-30 06:56




在阅读本文前,有几个热身的问题,您尝试回答一下。

1. 什么是大语言模型(LLM)?

2. 大语言模型开发与传统机器学习开发有什么区别?

3. 什么是任务特定模型?

4. 什么是大语言模型的微调和参数有效调整?

5. 如何理解大语言模型的一体多用特性?

下面就让我们开启探讨大语言模型奥秘之旅。



引言

深度学习的子领域中有两个重要的概念:大型语言模型(LLMs)和生成式人工智能(Generative AI)。这两者在许多方面都有交集,并且都属于深度学习的研究范畴。如果您对生成式人工智能感兴趣,建议您阅读金博士的《科普|AI技术干货——生成式人工智能详解》一文。
在过去的几年中,生成式人工智能发展迅速,吸引了大量的关注。这种类型的人工智能能够生成全新的内容,包括文本、图像、音频和合成数据。
本文我们探讨一下什么是大型语言模型。这类模型预先通过大量的文本数据进行训练,通常是从互联网或其他公开可获取的书籍中提取的。预训练期间,模型学习并理解文本数据的模式和结构。之后,在微调阶段,模型会根据特定的任务进行优化,这些任务可能包括机器翻译、文本生成、情感分析等。

下面我们通过几个通俗易懂的示例,逐步对大模型的工作机理展开进行讲解,希望能够让更多的读者掌握相关的背景知识。


根据使用频率进行字词的推荐

首先,让我们以平时使用手机时的场景作为起点,相信大家一定会对手机输入法的自动补全功能有所了解。不知你有没有想过它到底是如何工作的呢?举例来说,当输入"我“之后,系统会提供一些后续词语建议,比如”在“、”的“、”现在“等。为什么会推荐这几个字或词组呢?因为,这些组合是我们经常用到的,在日常生活中,使用频率极高。

图 1 手机输入“我”之后的推荐
当我们继续输入或选择“现在”之后,系统会进一步给出以“我现在...”开头的字、词和句子的组合建议。

图 2 手机输入“我现在”之后的推荐
我们可以从候选列表中,根据自己的需要进行选择,比如:“我现在过来”等。
上述示例虽然简单,却揭示了大语言模型如何通过预测和建议下一个可能的词汇来帮助我们更高效地进行输入和生成内容的机理。
注:由于存在使用习惯不同以及使用时间长短等因素,每个人在自己手机上输入相同字或词组之后,系统给出的推荐选项可能会不同。

字词使用频率是动态变化的

在社会的发展和演进过程中,词汇的使用频率会随着时间的推移而变化。在这个过程中,有些词汇可能会逐渐被淘汰,而一些新的词汇又会出现。举个例子,英文单词"tye"在19世纪初期的使用频率相当高,然而在今天,你可能需要阅读几千万字才能偶然遇到一次。再比如,中文的“先生”一词,随着社会的变化和语言的发展,这个词在不同的时期,其使用的场景和频率也会有很大差别。另外,在科技发展迅速的今天,许多科技相关的新词汇被创造出来,并被广泛使用,比如“互联网”,“智能手机”,“人工智能”和“类脑计算”等等。

图 3 在 1825 年先生一词的使用频率

图 4 2012 年先生一词的使用频率
我们可能没有注意到,当我们在使用搜索引擎进行查询时,存在同样的过程。搜索引擎会对每一个查询进行评分,这个评分基于它的使用频率,也就是看这个查询被多少人使用过。
同样的,语言模型也会通过类似的方法预测你接下来可能要输入的词汇或者短语。这一切,都是大语言模型工作的一部分。目前很多AI工具都有当语句补全功能,比如,当我们要求 ChatGPT 对输入“我在上海参加 2023 年世界人工智能大会...”时,工具会按照一定的规则,给出建议的多个句子,我们可以根据自己的需要,进行选用,这极大地方便了我们的日常工作。

图 5 ChatGPT 句子补全功能示例
不过,语言建模绝不是给每个句子分配一个概率值这么简单,固然,使用频率是一种测量句子出现可能性的方法。但是,只依赖于频率来预测就会遇到一个问题,那就是无法给未出现过的新句子打分。
以"金博士在月球上买了一公顷地修了一座禅院用于招待外星人"为例,这是一个合理且通顺的句子,但可能在到目前为止的所有历史文本中从未出现过。在这种情况下,如何为该句子分配一个概率值?也许,你会好奇:真的有那么多新的句子可以生成吗?考虑到每天互联网上的帖子数量之巨,我们是否已经穷尽了所有可能的词汇组合呢?
我们可以进行一个简单的计算:英语中有超过十万个词汇,一个典型的句子通常包含超过10个词,那么总的组合数将达到10的50次方,这是一个非常大的数字,远超我们的想象。
实际上,大部分的句子可能永远不会被人所看到或使用。因此,要真正地建模语言,我们需要做的不仅仅是统计已经存在的句子。我们还需要通过某种方式来模拟语言的各种规则,包括语法、风格等等。这就需要我们的模型能够理解和生成语言,而不仅仅是对历史数据进行统计。这是大语言模型的一个重要任务,也是它的核心挑战。

深入剖析文本生成的机理

下面是一段来自诺贝尔奖得主鲍勃·迪伦的歌曲《Tangled Up In Blue》中的一段歌词,我们将以这段歌词为例,讨论大语言模型(LLM)生成内容的工作机理。

“Early one morning the sun was shining I was laying in bed wondering if she'd changed at all if her hair was still red”
假设我们尝试构建一个可以写出像鲍勃·迪伦那样的语言模型,我们首先把这段文字看作是一个时间序列,每个单词都依赖于前一个单词。
注意到单词“was”出现了三次。我们把这三个实例合并成一个,这样我们的序列就变成了如下的一个图。

图 6 合并单词was之后的图示
歌词中另一个重复的词是`if`,我们也把这两个合并一下。

图 7 准备合并单词if
单词"was"和单词“if”合并之后的图如下所示。

图 8 单词was和 if 合并和的图
把文本视为时间序列是理解语言模型如何工作的一个关键概念。在这个视角下,每个单词都可以视为受到它前面单词影响的结果。通过这种方式,模型可以学习词序列的统计规律,预测接下来可能出现的词。如果我们在这些边上添加概率,它就成为了一个语言模型,你可以使用它来生成像鲍勃·迪伦那样的文字。

图 9 单词was和 if合并后不同从句的概率分布图
举例来说,如果从单词"early"开始,可以按照图中红点从左至右逐字地遵循正确的分支序列,我们将逐步还原鲍勃原始的歌词,“Early one ...”。

图 10 根据概率分布在线鲍勃迪伦的歌词一
当红点依次移动时,如果没有分叉就把当前的单词作为预测的单词生成出来。“Early one morning the ...”。

图 11 根据概率分布在线鲍勃迪伦的歌词二
当遇到多路径的分叉口时,可以根据后续路径可能出现的概率进行选着生成,这里我们选择原歌词的路径,如此类推... 。“Early one morning the sun was shining I was laying in ...”。

图 12 根据概率分布在线鲍勃迪伦的歌词三
在实际应用中,大语言模型会提供一个模型参数供用户进行配置,是单纯地按照概率选在下个路径中的内容,还是增加一定的随机性,后续文章会有更多的介绍。

生成全新的词句

下面,我们尝试生成一个在歌曲中没有出现过的全新的短语。我们将从"the"开始,然后沿着图中的分支走。

图 13 从中间开始根据概率分布生成新的类似鲍勃迪伦风格的歌词一
这次我们选择第三个分支,形成新的短语“the sun was still red”。

图 14 从中间开始根据概率分布生成新的类似鲍勃迪伦风格的歌词二
因为我们是根据鲍勃迪伦的歌词模型生成的新短语,虽然是全新的短语,但听起来就像是鲍勃·迪伦的作品。
但是,如果随机地尝试其它的路径,则可能会产生奇怪的结果,其中大部分都是些无意义的内容。例如:“I was shing ...”, "I was still red"等短语。

图 15 从中间开始根据概率分布生成新的类似鲍勃迪伦风格的歌词三
我们将在下面讨论如何改善上述简单随机方法产生垃圾或无用短语的情形。

简单模型的问题

通过上述方法构建了一个简单的语言模型,该模型也被称为马尔科夫模型。这种模型的基本思想是,给定当前的单词,下一个单词的概率只取决于当前的单词。这种模型非常有效,因为它可以生成新的、在原始数据中未出现过的句子,而且这些句子在语法和风格上往往都是合理的。

然而,仅仅使用马尔科夫模型来生成文本也存在一些问题。例如,这种模型无法很好地处理长距离的依赖关系。也就是说,如果一个句子中的某个词依赖于很早之前的词,那么这种依赖关系在马尔科夫模型中无法得到很好的处理。另外,由于马尔科夫模型仅仅关注单词的频率,而没有考虑深层的语言结构,所以它生成的文本可能在语义上存在问题,甚至可能生成一些无意义的句子。
因此,尽管马尔科夫模型可以在一定程度上模拟鲍勃·迪伦的写作风格,但要生成真正具有深度和感情的文本,我们还需要更复杂的语言模型。这些模型需要能够理解和生成语言的深层结构,包括语法、语义,甚至是隐含的情感和语境。对于这段鲍勃·迪伦的诗句来说,如果我们只是简单地关注单词的频率和顺序,就无法捕捉到它的旋律、情感和含义。这就需要我们的模型具有更高级的语言理解能力,这是语言模型的一个重要目标,也是它的核心挑战。

改进方案

如何使我们的模型更加完善呢?首先,我们可以使用更多的文本来构建我们的模型。如果你使用整首歌来建立模型,结果可能会有所改善。但是,这些生成的句子还是有点奇怪。真正的问题在于,我们的模型过于简化。它假设每个单词仅取决于前一个单词。我们可以把这种关系写成条件概率的形式。

P(Xn | Xn-1)
这是当前单词Xn在前一个单词是 Xn-1时出现的概率。如果不仅仅考虑两个单词之间的关系,还考虑三个单词连续出现的情形,那么,我们可能会得到更好的结果。下面先建立一个所有连续的三元组(trigrams)表格。

图 16 歌词三元组的例子
我们可以使用这些trigrams来定义在前两个单词同时出现的情况下的,当前单词紧跟其后出现的概率。
P(Xn|Xn-1,Xn-2)
通过三元组概率生成文本,其结果比二元组要稍微好一些,但还是不够好。问题在于,这些单词之间可能存在相当长距离的依赖关系。例如,单词 red不但与三个单词之前的 hair有关,而且也与13个单词之前的bed押韵。如果忽略了这些押韵的要求,生成的歌曲就没有原来的味道了。

图 17 超过三元组关联的例子
当然我们还是可以通过采用更长的条件概率函数来进行下一个单词的预测,比如采用如下的条件概率函数,即当前单词出现的概率和其前面 13 个单词都一起出现的情形有关系。下图给出了这种组合的可能情形,由图可以看出,这种组合的可能性太多了,为此我们需要寻求更好的解决方案。

图 18 基于前面 13 个单词的条件概率及其组合的可能性
为了解决上述问题,我们需要构建一个更复杂的模型,这个模型能够考虑更长距离的依赖关系。这就需要使用更高级的模型,比如递归神经网络(RNN)或者变换器(Transformer)模型。这些模型可以记住之前的信息,从而处理长距离的依赖关系。
例如,递归神经网络(RNN)通过将前一个时间步的隐藏状态作为输入来处理长距离的依赖关系。这意味着,模型在生成下一个单词时,会考虑到所有之前的单词,而不仅仅是前一个或前两个单词。
而变换器(Transformer)模型则通过自注意力机制来处理长距离的依赖关系。自注意力机制允许模型在生成下一个单词时,注意到所有之前的单词,并根据这些单词的重要性赋予它们不同的权重。
通过使用这些更复杂的模型,我们可以更好地模拟像鲍勃·迪伦那样的语言风格,处理长距离的依赖关系,甚至模拟诗歌的押韵和节奏。
下面我们将从神经网络的角度继续探讨上述文本生成的例子。

神经网络方法


函数近似的方法

如前所述,为了精确对语言建模,需要引入更长或更复杂的条件概率函数。由于这些函数的复杂程度极高,我们无法对其进行精确模拟,不过,我们可以尝试对其进行近似。对某个函数的近似方法有许多,比如大家熟知的傅立叶级数,它通过正弦和余弦来近似一个函数,或者是泰勒级数,它由多项式的和组成。这两者都被认为是通用近似器,因为它们几乎能近似任何函数。

神经网络则是另一种通用的近似器,它的优势在于,不需要对要近似的函数有详细的了解,只需要知道输入和输出的对应数据即可。

图 19 三种函数近似的方法
我们来使用神经网络尝试一个函数近似的例子。这个函数的表达式为f(x) = sin(x) - x^2/2

图 20 函数 sin(x)-x^2/10
我们的目标是尝试用一个包含五个节点和八个权重的神经网络对其进行近似。

图 21 用神经网络来近似一个正弦函数
首先,我们选取图形上的一个x位置,并将这个值通过神经网络进行传递。在第一层中,神经网络将x复制多份,并将每个复制品乘以一个独立的权重。

图 22 对正弦函数近似图一
接下来,每个加权副本会通过一个名为sigmoid的S型曲线激活函数进行处理,然后乘以新的权重并加起来。这个结果,我们称之为y,是对函数f(x)的近似值。

图 23 对正弦函数近似图二
我们可以把y的值绘制出来,观察其与我们试图拟合的函数的差距。

图 24 对正弦函数近似图三
这个差距我们称之为误差。在开始时,可以看到误差相当大。这主要是由于我们随机生成的权重。为了减小这个误差,我们不仅仅处理一个数据点,而是向网络发送许多不同的x值,生成一系列的y 值,在下图中以红线表示。

图 25 对正弦函数近似图四
然后,我们定义一个误差函数,该函数的目标是累计所有这些红线和蓝线之间的差异。这些误差将被用来更新权重,这个过程我们称之为神经网络的训练。

图 26 对正弦函数近似图五
经过数千次乃至几万次的的重复更新后,我们将得到一条能够非常好地拟合原函数的曲线。

图 27 经过多次训练后神经网络可以拟合正弦函数的 gif 图示
上述函数近似过程,另外一种理解方法是,我们可以将误差函数看作是一种地形图,目标就是寻找最低点或者说是最低的盆地。如果我们能直接看到整个函数的图形,那么寻找最低点相对比较直接。但在实际情况中,我们往往无法直接看到整个函数,就像是在雾中寻找方向一样困难。

图 28 将误差优化视作从地形图下降
在这种情况下,我们通常会根据在当前位置的观察来决定下一步的移动。也就是说,我们会在当前的位置计算函数的梯度,这个梯度会指向函数值下降最快的方向。然后我们按照这个方向进行移动,这个过程就叫做梯度下降。

图 29 按照梯度下降进行误差优化的示意图
在优化神经网络的过程中,梯度下降是一种常见的方法。我们需要的是误差函数的梯度,这是一个向量,每个元素对应一个神经网络权重的偏导数。计算这些偏导数的过程对于神经网络来说并不复杂,我们可以在网络中反向传播过程中一次性计算完所有的偏导数,这个过程被称为反向传播。
反向传播在神经网络中有着至关重要的作用,它使得神经网络能够学习到从输入到输出的映射关系。经过大量的训练数据和反复的迭代,神经网络的权重将逐步优化,使得网络的输出与真实的目标值越来越接近。这也是神经网络能够在众多任务,如图像识别、自然语言处理等领域表现出色的重要原因。

关联 · 阅读

AI技术干货|从头开始图解大语言模型(上篇)

AI技术干货|从头开始图解大语言模型(中篇)

AI技术干货|从头开始图解大语言模型(下篇)

专题|金博士专栏——AI技术干货大盘点

读完该文,您是否对开头的热身问题有所答案?

期待您的回答
欢迎留言

报告推荐


推荐阅读

AI时代的数据建设,IPTV如何进行?

2023年广电颓势依旧,行业复苏要到何时?

留给电视直播的窗口期还有多长?

本文由「流媒体网」原创出品,

转载或内容合作请联系我们,违规转载必究

点分享
点收藏
点点赞
点在看

浏览 202
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报