大语言模型(LLM)
大语言模型简述
LLM(large language model)也叫大语言模型,他是语言人工智能的一部分,而语言人工智能是人工智能的一个子领域,他们的关系就和下图一样。
!
AI就是让机器能得像人一样想,看,动的集合,语言AI就是AI里面专注于开发能够理解,处理人类语言的技术,大语言模型是语言AI最火,最新的技术路线——用大规模神经网络+超大量文本训练出的通用语言模型。
语言人工智能的发展历史
!
这张图片为我们简单展示了语言人工智能的发展。
词袋技术
在两千年以前,语言AI始于一种词袋技术,它将文本中的词看成一个独立的个体,不考虑它在句子中的位置,只关心它们出现的频次。它首先会将句子拆分成词(或词元),主要是通过空格来拆分的,之后将所有不同的词组合起来,创建一个可用于表示句子的词表,在计算每个词出现的次数,我们就得到了一个词袋。但是这就有一个很明显的缺陷,他只关心词出现的频次,却忽略了词本身的意义,所以在他眼里“猫追狗”和“狗追猫”是一样的。
词嵌入
为了解决这个问题,就引入了词向量,通常也叫做词嵌入(Word Embedding),是一种可以查找词与词之间相似性的NLP(自然语言处理)技术,他可以把词在各个维度上的特征用向量表示,利用这些相似性,就可以判断哪些词和哪些词语义相近。而最著名的是2013年发布的算法word2vec,它的核心思想就是利用周围的词推断出当前词的含义。不同的词在不同的维度上有不同的含义,将高维度的词嵌入压缩到二维时,你会发现,词意相近的词往往会更接近。
注意力
在2014年的时候研究人员就提出了注意力机制,在2017年发表的著名论文“Attention is All You Need”首次探讨了注意力机制的真正威力,以及驱动LLM展现的惊人能力核心所在。作者提出了一种被称为Transformer的网络架构。它完全基于注意力机制,摒弃了原始的RNN(循环神经网络)。通过引入注意力机制,模型可以关注输入序列中彼此相关的部分,并放大它们的信号,从而更好地扑捉上下文相关性,模型的性能也会因此提高。此后的语言模型基本都使用Transformer模型。它们有仅编码器模型,例如BERT,DistillBERT,RoBERTa等,仅解码器模型,例如GPT,GPT-2,GPT-3等,还有编码器-解码器模型,例如T5,Switch,FLAN-T5等。
Transformer
在Transformer中,它是由解码器和编码器堆叠而成的,Transformer中的编码器由两部分组成:自注意力和前馈神经网络。与编码器相比,解码器多了一个注意力层,用于关注编码器的输出。
仅编码器
2018年,研究人员提出了一种名为BERT(基于Transformer的双向编码器表示)的新架构,它采用一种名为掩码语言建模的技术来训练,该方法会掩码部分输入,让模型预测被掩码的部分。这种架构和训练过程使BERT和相关架构在表示依赖上下文方面表现出色,所以也被称为表示模型。
仅解码器
与BERT架构相似,2018年也出现了另一种仅解码器架构-GPT,它是由多个解码器堆叠而成,GPT-1主要是在大量图书和大型网页数据集上训练,最终的模型包含1.17亿个参数。他也是一种生成式模型,他的核心机制就是接收输入的文本并尝试自动补全。这些模型通过微调就能够回答问题。
自ChatGPT(GPT-3.5)发布开始,生成式AI开始大规模出现,2023年因此也被称为生成式AI元年。模型主要分为两种开源模型和闭源模型,开源模型指的是向公众共享其权重和架构的模型,闭源模型是指不像公众公开其权重和架构的模型,而专有模型属于闭源模型的一种,它是由特定的组织开发,其底层代码保密。
词元与嵌入
为了深入了解大语言模型的工作原理,我们得先了解词元和嵌入俩个概念。在我们向模型输入指令的时候,模型首先会将你的指令文本分解成更小的片段,也就是词元,然后再将词元转化为数值表示,这就是嵌入,而这整个过程就叫做分词。分词主要是通过分词器来完成的,分词器分解文本主要有三个因素影响,首先就是分词方法,其次是分词器的选择,最后就是分词器训练的数据集。
分词方法
分词方法有WordPiece,BPE,SentencePiece等,
BPE是在将单词分解为最小的字母,是通过字母组合出现的频率来合并成单词的,而WordPiece则是通过计算合并后是否让整个训练数据的预测更准确来合并,SentencePiece和BPE类似,但是他会将空格也算作一个词元,因为SentencePiece不需要预分词,词的边界感不明显,所以他可以应用于多语言场景。另外还有四种主要的分词方式,
词级分词就是将句子分解为词,但是训练文本里面没有的新词他就无法识别了,而子词级分词则是将句子分解成词和词的一部分,他可以表示一部分新词,字符级分词是将句子分解成单个字母,但也因此在有限的长度内,字符级分词能容纳的上下文长度更少了,最后是字节级分词它是用统一编码来表示单个词元。
分词器的比较
不同的分词器对分词也会有不同的影响
不同类型的分词器对大小写,英语以外的语言,表情符号,编程代码,数字,特殊词元有着不同的处理方法。
数据集的影响
最后是数据集,即使我们选择相同的分词方法和分词器,也会因为训练所用的数据集而不同。
了解了分词,接下来我们来看一下词元嵌入。
词嵌入
计算机会把所有输入进去的信息转化为它能看得懂的数字,也就是二进制,在机器语言中最简单的办法就是给每个单词进行编号,第一个单词是1,第二个是2…以此类推,但是这就有一个问题,它无法理解上下文和效率低下。词元嵌入只是另一种通过向量表示单词的方式,它通过某种方式抽象出每个单词的上下文或高层含义,词嵌入通过将词汇表中的每个单词表示为一个固定大小的向量(例如 150、300、500 维)来解决这些问题,这个向量称为嵌入,是在训练过程中学习到的。当我们将词义相近的词从高维度压缩到二维时,词义相近的词会聚集在一起。我们甚至还可以用单词的词元嵌入减去单词的词元嵌入,我们就会得到相近单词的词元嵌入。!
word2vec
最流行的词元嵌入就是word2vec。Word2Vec 的核心是浅层神经网络模型,其设计初衷是通过训练过程学习词语的分布式表示。该网络由输入层、隐藏层和输出层构成,结构简洁却能高效捕捉词语间的语义关联。
word2vec也是在文本上进行训练的,主要使用skip-gram(选择相邻词方法)和负采样。选择相邻词方法使用滑动窗口来生成训练样本,我们可以设置窗口的大小,假如设置为2,那就是一个中心词,和左右两边各两个相邻词。
当时识别到为相邻词时,输出1。但是数据集都是相邻词时,模型可能会偷懒一直输出1,所以我们需要一些非相邻词来训练,这些就被称为负例。skip-gram 和负采样是 word2vec 算法背后的两个主要思想,它们在许多可以表述为词元序列问题的问题中很有用。
Transformer 模型概述
Transformer模型由分词器,堆叠的Transformer块和语言建模头构成。因为模型是一次生成一个词,然后再将输出的词元加到输入的末尾一起来生成下一个词,每次生成都是模型的一次向前传播。而一个词元经过Transformer块由嵌入向量变为输出向量的计算过程称为计算流。对于文本生成来说,只有最后一条流才会用来生成下一个词,而前期词元的输出是最后的流所必须的,既然这样,如果能够缓存前期的计算流,那么就只需要计算最后一条流。这就是键-值缓存技术,他能显著加快模型的生成速度。
Transformer模型的核心就是堆叠的Transformer块,每个Transformer块都由两部分组成,自注意力层和前馈神经网络。
前馈神经网络
前馈神经网络层包含了模型的主要能力,它是一种最基本的网络神经结构,也被成为多层感知机。它由输入层,隐藏层和输出层组成每一层都包含多个神经元(或称为节点),每个神经元与上一层的所有神经元都有连接,连接上带有权重。每个连接上都有一个权重,表示连接的强度。
输入层(Input Layer): 接受输入特征的层,每个输入特征对应一个输入层神经元。
隐藏层(Hidden Layer): 在输入层和输出层之间的一层或多层神经元,负责学习输入数据中的复杂模式。
输出层(Output Layer): 提供网络的输出,输出的维度通常与任务的要求相匹配,例如,对于二分类任务,可以有一个输出神经元表示两个类别的概率。
自注意力详解
自注意力层是模型理解上下文的关键,注意力机制主要包括两个步骤,对当前处理的次元与之前输入词元的相关性评分,利用这些分数将不同位置的信息组合成单一的输出向量。为了赋予Transformer更强大的注意力机制,注意力机制被复制多份,并行执行。这些注意力机制执行的过程就叫做注意力头。那么单个注意力头内的注意力是如何计算的呢?在计算过程中,输入单词会被映射为查询(Query)、键(Key)和值(Value)三个向量,然后通过这些向量之间的相似度来计算注意力分数。查询向量(Query):用于从其他单词中“查询”信息。
键向量(Key):用于与查询向量进行匹配,计算它们之间的相关性。值向量(Value):是与键向量相关的实际信息,它将在后续步骤中根据注意力分数加权求和。
注意力是通过查询矩阵、键矩阵和值矩阵的交互来执行的。这些矩阵是将层的输入与投影 矩阵相乘得到的。大致步骤如下:
1.输入矩阵:将输入序列表示为矩阵 X
2.计算查询、键、值矩阵:通过权重矩阵将输入矩阵 X 转换为查询矩阵 Q、键矩阵 K 和值矩阵 V
3.计算注意力分数矩阵:通过查询矩阵与键矩阵的内积计算注意力分数矩阵 A
4.Softmax 归一化:对注意力分数矩阵 A 进行 Softmax 归一化
5.加权求和值矩阵:将归一化后的注意力分数矩阵与值矩阵 V 相乘,得到输出矩阵 Z
最终,矩阵 Z 将被传递到前馈神经网络中,进一步进行处理。
Transformer 块的改进
自Transformer架构发布以来,已经有大量工作致力于对其进行改进,以提升模型性能和效率,让我们简单进行一下了解。
更高效的注意力机制
稀疏注意力:通过观察少量的前序位置来提升性能。
- Multi-Head Attention(多头注意力)
特点:
高质量:每个 Query 都有专属的 Key 和 Value,用多个头同时去关注不同的内容。
计算量大,速度慢:因为每个 Query 都要单独计算。
类比:
想象你在图书馆做研究,所有学生(Query)都有各自的私人导师(Key 和 Value),导师会针对学生的需求去解答问题:
好处:每个学生得到的帮助都非常精准。
坏处:需要很多导师,每个导师只能关注一个学生,效率低下,图书馆的成本非常高。
总结: 多头注意力模型提供高质量的输出,但代价是计算速度慢。
- Multi-Query Attention(多查询注意力)
特点:
速度快:所有 Query 共用同一组 Key 和 Value,计算量最小。
质量下降:因为不同 Query 使用相同的 Key 和 Value,不能很好地区分个体需求。
类比:
想象同样的图书馆,所有学生(Query)只能共享一个导师(Key 和 Value):
好处:节省资源,每个人得到答案的速度非常快。
坏处:导师无法根据每个学生的需求单独解答,回答内容会非常通用,可能不够准确。
总结: 这种方法牺牲了质量来换取速度。
- Grouped Multi-Query Attention(分组多查询注意力)
特点:
折中方案:将 Query 分成若干组,每组共享一组 Key 和 Value。
质量与速度平衡:比 Multi-Query 更灵活,比 Multi-Head 更高效。
类比:
回到图书馆,这次把学生分成小组(Grouped Query),每组有一个导师(共享 Key 和 Value):
好处:同组的学生有类似需求,导师能给出更准确的答案,同时减少了需要的导师数量,效率提高了。
坏处:如果组内的需求差异较大,答案可能仍然不够精准。
总结: 分组注意力机制在计算效率和结果质量之间找到了一个平衡点。
位置嵌入:RoPE
RoPE也叫旋转位置嵌入,它的核心思想是通过在高维空间中旋转词向量来编码位置信息。旋转的幅度取决于单词或标记在序列中的位置。这种旋转具有一个很好的数学特性:任意两个单词之间的相对位置可以通过一个单词的向量相对于另一个单词的向量旋转了多少来轻松计算。因此,虽然每个单词根据其绝对位置获得唯一的旋转,但模型也可以很容易地确定相对位置。
旋转位置嵌入在自注意力中的相关性评分步骤之前,被添加到词元的表示中。
开发和使用负责任的LLM
LLM的广泛应用已经带来了深远的影响,在给我们带来便利的同时,也带来了一定的问题。例如:
偏见和公平性:LLM 在训练时使用了大量可能包含偏见的数据。模型可能会从这些偏见中学习,再现 乃至放大这些偏见。
有害内容:LLM 生成的内容不一定是真实的,且它们可能“自信地”输出错误的文本。此外,它 们还可能被用于生成假新闻、文章和其他具有误导性的信源。
知识产权:LLM 输出内容的知识产权应该归属于你,还是模型创造者?当输出与训练数据中的某个短语相似时,知识产权是否属于该短语的作者。