2021年9月29日 星期三

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

时间:2023-07-27 22:14:43来源 : 金博士

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

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


(资料图)

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

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

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

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

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

引言

深度学习的子领域中有两个重要的概念:大型语言模型(LLMs)和生成式人工智能(Generative AI)。这两者在许多方面都有交集,并且都属于深度学习的研究范畴。如果您对生成式人工智能感兴趣,建议您阅读金博士的《生成式人工智能简介》一文。

在过去的几年中,生成式人工智能发展迅速,吸引了大量的关注。这种类型的人工智能能够生成全新的内容,包括文本、图像、音频和合成数据。

本文我们探讨一下什么是大型语言模型。这类模型预先通过大量的文本数据进行训练,通常是从互联网或其他公开可获取的书籍中提取的。预训练期间,模型学习并理解文本数据的模式和结构。之后,在微调阶段,模型会根据特定的任务进行优化,这些任务可能包括机器翻译、文本生成、情感分析等。

前文回顾:

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

深度网络近似函数的深度讨论

神经网络被誉为通用近似器,理论上它们可以拟合任何函数。然而,在实际操作中,如果想要模拟一种复杂的函数,比如我们希望模拟的语言模型,我们需要一个具有足够"容量"的神经网络。所谓的"容量"可以理解为神经网络的复杂程度或者说是神经网络的大小。换句话说,如果一个神经网络的结构过于简单,那么它可能无法拟合一些复杂的函数。

为了更好地理解这个概念,我们可以做一个比喻。假设我们现在有一条蓝色的曲线,我们希望用一个神经网络去拟合它。但如果我们选择的神经网络过于简单,比如只有四个权重参数,那么这个神经网络可能就无法拟合蓝色曲线的第二个波峰,因为它的"容量"不足以表达这么复杂的结构。

此外,神经网络的设计决策也很重要,比如激活函数的选择。比如,ReLU(Rectified Linear Unit,修正线性单元)激活函数在神经网络中非常流行,但它们只能给出分段线性的结果,所以如果要拟合一个曲线函数,就需要更多的ReLU单元。

那么,我们如何设计一个能够模拟语言的神经网络呢?这需要我们进行更深入的探索和学习。在下一部分中,我们将创建一个强大的神经网络,它可以生成诗歌,翻译语言,甚至编写计算机代码。这样的网络,会给我们展示人工智能在语言处理上的潜力和魅力。

词嵌入(Word Embedding) 方法

对于一段给定的文本,“the hair was still ...", 我们想要预测下一个单词"red",这就需要使用某种类型的神经网络。首先,我们需要把单词转换成数字,这样神经网络才能理解。你可能会想到直接按照字母顺序给每个单词编码,但这样会有个问题,那就是一些语义相近的词,比如"apex"(顶点)和"zenith"(顶峰),就会被赋予非常不同的数字。

为了解决这个问题,我们更倾向于将语义相似的词映射到相似的数字,或者在这种情况下,是相似的向量。这种方法被称为词嵌入(Word Embeddings),这样做的好处是显著改善了词汇的表示,我们也可以在网络上轻易找到已经训练好的词嵌入模型。

拥有了词嵌入这个工具后,我们就可以开始设计我们的大型语言神经网络了。一个基础的设计可能看起来非常简单,你可能只需添加更多的层、神经元和权重,以增加网络的容量。

图 30 多层神经网络预测单词 red

然而,这种简单的增加并不能满足我们的需求,原因是这个问题的难度远超我们的想象,我们需要给神经网络提供更多的帮助。

那么,如何设计一个更强大、更准确的语言模型呢?我们需要挖掘更深层次的模型设计思路。比如,我们可以尝试使用更先进的模型架构,或者引入更多的上下文信息。甚至,我们可以尝试使用一些专门针对语言建模的先进技术,比如自注意力机制、变换器(Transformer)模型等。这些技术不仅能够帮助我们的模型更好地理解语义的深层次联系,还能够更准确地预测下一个单词。只有深入理解并巧妙利用这些先进技术,我们才能设计出真正强大的语言模型。

变换器(Transformer)

回顾我们前面提到的例子"the hair was still ...",如果把最后一个词 "red" 留在口中不说,估计大家也能猜出来。实际上,你可能只需要听到前四个词就能猜出,即和"bed"押韵一种发型或颜色。通过这个示例我们可以洞察到:在预测下一个词时,我们只需要关注到一部分词语。

图 31 变换器预测单词red 图一

那么,如果我们能训练一个神经网络来模拟这种注意力机制会怎么样呢?我们需要使用一种称为"注意力网络"的网络来解决这个问题。这种网络会接收输入词语,并为每一个词计算出一个介于0和1之间的注意力权重。然后,我们将这些权重与对应的词语相关联,并将结果输入到下一个单词预测网络中。

然而问题来了,如何训练这个注意力网络呢?你或许想到人工标注的方法,即可以雇佣人力在大量的文本中标注哪些词押韵,哪些词之间存在关联,然后使用这些信息作为训练数据。但是,这听起来就很繁琐且费力。其实,我们有一个更好的方法。

理解了上述内容后,我们可以开始讨论一种更有效的训练方式,那就是使用一种被称为"自监督学习"的方法。在这种方法中,我们不需要显式地标注训练数据。相反,我们可以让模型在大量的未标注文本中自我学习,这可以通过让模型预测被随机遮盖的单词,或者学习预测单词的顺序来实现。通过这种方式,模型可以在大量的数据中自我学习,无需我们花费巨大的努力去标注数据。

为了改善预测的精确性,我们可以同时训练这两个网络,也就是注意力网络和预测网络。在这种情况下,预测网络会指导注意力网络在何处需要进行学习以更好地预测下一个词。例如,假设网络预测出的词是“brown”而不是“red”。由于"brown"并不和"bed"押韵,因此反向传播算法可能会试图增加对"bed"的注意力,同时减少那些导致选择"brown"的权重。

图 32 变换器预测单词red图二

这种联合训练的方法效果显著,形成的这种组合网络被称为变换器(Transformer),变换器的整个架构相当复杂,我们这里只是做些基础性的介绍。注意力网络的实现方式与之前描述的有所不同,它并非是整体处理所有词语,而是一个词一个词地进行处理。例如,对于"still"这个词,网络会评估每个其他词与"still"的相关性,并将这些注意力得分编码为介于0和1之间的值。然后,我们会取这些词的加权和,将其编码为一个上下文向量"c"。

关键词:

(责任编辑:黄俊飞)

推荐内容

Back to Top