大模型简介
人工智能
人工智能(AI, Artificial Inteligence)通常用于描述致力于执行接近人类智能任务(如语音识别、语音翻译和视觉感知)的计算机系统。它是指软件产生的智能,而不是人类的智能。
目标是研究、设计和构建具备智能、学习、推理和行动能力的计算机和机器。
例如: 2016年Alphago击败李世石围棋。
生成式人工智能
GAI (Generative Aritificial Interligence)
目标是让机器能够产生复杂有结构的物件。 例如chatGPT、deepseek。
机器学习
ML(Machine Learning): 简单说就是从数据中获取规律,来了一个新的数据,产生一个新的预测。
提到机器学习,追根溯源,我们需要先知道什么是“学习”。著名学者、1975年图灵奖获得者、1978年诺贝尔经济学奖获得者,赫伯特·西蒙(Herbert Simon)教授曾对“学习”下过一个定义:
如果一个系统,能够通过执行某个过程,就此改进它的性能,那么这个过程就是学习。
在西蒙看来,学习的核心目的就是改善性能。
其实对于人而言,这个定义也是适用的。如果我们仅仅进行低层次的重复性学习,而没有达到认知升级的目的,那么即使表面看起来非常勤奋,其实也仅仅是一个“伪学习者”,因为我们的性能并没有得到改善。
西蒙认为,对于计算机系统而言,通过运用数据及某种特定的方法(比如统计方法或推理方法)来提升机器系统的性能,就是机器学习(Machine Learning,简称ML)。
所谓机器学习,在形式上可近似等同于,在数据对象中通过统计或推理的方法,寻找一个有关特定输入和预期输出的功能函数f
所有的监督学习(Supervised Learning),基本上都是分类(Classification)的代名词。
它从有标签的训练数据中学习模型,然后对某个给定的新数据利用模型预测它的标签。
比如,小时候父母告诉我们某个动物是猫、狗或猪,然后在我们的大脑里就会形成或猫或狗或猪的印象(相当于模型构建),当面前来了一只“新”小狗时,如果你能叫出“这是一只小狗”,那么恭喜你,标签分类成功!
但如果你回答说“这是一头小猪”,这时你的父母就会纠正你的偏差:“乖,不对,这是一只小狗。”这样一来二去地进行训练,不断更新你大脑的认知体系,当下次再遇到这类新的猫、狗、猪时,你就会在很大概率上做出正确的“预测”分类。
监督学习,就是先利用有标签的训练数据学习得到一个模型,然后使用这个模型对新样本进行预测。在本质上,监督学习的目标在于,构建一个由输入到输出的映射,该映射用模型来表示。
监督学习
- 样本(sample): 一行数据就是一个样本,多个样本组成数据集,有时一条样本也被叫做一条记录
- 特征(feature): 一列数据一个特征,有时也被称为属性,例如房子的位置、房子的面积
-
标签(lable): 模型要预测的那一列数据,例如房价
-
监督学习: 输入数据是由输入特征值和目标值所组成,即输入的训练数据是有标签的。
- 无监督学习:输入数据没有被标记,即样本数据类别位置,没有标签,根据样本间的相似性,对样本集聚类,以发现事物内部结构及相互关系
- 半监督学习:部分样本有目标值,部分数据无目标值。
- 强化学习: 输入动态的数据,决策+回报函数(每个状态目标值是变化的)。目的是能获得更多奖励,进行一系列决策过程。
机器学习建模流程
- 获取数据
- 数据基本处理
- 特征工程(特征提取、特征预处理、特征降维、特征选择、特征组合)
- 机器学习(模型训练)
- 模型评估
拟合
用在机器学习领域,用来表示模型对样本点的拟合情况。
- 拟合(fitting)
- 欠拟合(under-fitting): 模型在训练集上表现很差,在测试集表现也很差
- 过拟合(over-fitting):模型在训练集上表现很好,在测试集表现很差
深度学习
传统机器学习算法依赖人工设计特征,并进行特征提取。
而深度学习不需要人工,而是依赖算法自动提取特征。
深度学习通过模仿人脑的神经网络来处理和分析复杂的数据,从大量数据中自动提取复杂特征,这也是深度学习被看做黑盒子,可解释性查的原因。 深度学习尤其擅长处理高维数据,如图像、语音和文本。
DL(Deep Learning): 深度学习算法试图模拟人类大脑的工作方式,其灵感来源于神经生物学,它通过对大量数据的学习,自动提取出数据的高层次特征和模式,从而实现图像识别、语音识别、自然 语言处理等任务。
按照架构的不同,神经网络可以分为:
- 卷积神经网络(CNNS)
- 循环神经网络(RNNS)
- Transformer网络等
同样是区分不同水果,这次你带孩子去了超市,那里有各种不同的水果,你没有解释每种水果的特点,只是给孩子指出了哪些是苹果、哪些是香蕉,他通过观察和比较,慢慢学会了辨认各种水果。
在这个过程中,孩子的大脑(在这里比喻为深度学习模型)自动从复杂的视觉、嗅觉等信号中提取层次化的特征。比如圆形、条纹、颜色深浅、气味等,从而达到识别水果的目的。
深度学习特点:
-
多层非线性变换: 深度学习模型由多个层次组成,每一层都引用非线性激活函数对输入数据进行变换。
较低的层级通常捕捉到简单的特征(如边缘、颜色等),而更高的层级则可以识别更复杂的模式(如物体或面部识别) -
自动特征提取: 与传统机器学习算法不同,深度学习能够自动从原始数据中学习到有用的特征,而不需要人工特征工程,这使得深度学习在许多领域中表现出色。
-
大数据和计算能力: 深度学习模型通常需要大量的标注数据和强大的计算资源(如GPU)来进行训练。大数据和高性能计算使得深度学习在图像识别、自然语言处理等领域取得了显著突破。
-
可解释性查: 深度学习模型内部的运作机制相对不透明,被称为“黑箱”,这意味着理解模型为什么做出特定决策可能会比较困难。这对某些应用场景来说是一个挑战。
LoRA
低秩自适应(Low-Rank Adaptation,LoRA)是一种针对大型预训练语言模型(如GPT-3)的微调技术。
LoRA的核心思想是通过对模型权重进行低秩更新,以实现有效的参数适应,而无须重新训练模型的全部参数。这种技术在保留预训练模型的泛化能力的同时,允许模型快速适应特定任务。
多模态
提及LLM时,我们通常不会第一时间联想到多模态。毕竟,LLM本质上是语言模型。但我们很快会发现,若能处理文本之外的数据类型,其应用价值将大幅提升。例如,当语言模型可“看到”图像并回答相关问题时,其效用将显著增强。这种能够处理文本与图像(每种数据类型称为一种模态)的模型,即被称为多模态(multimodal)模型
能处理多种数据模态(如图像、音频、视频或传感器数据)的模型称为多模态模型。模型接收某种模态作为输入,但不一定能生成对应模态的输出
什么是大模型
大模型定义: 大模型(Large Models)是指参数量巨大(通常超过10亿)的深度学习模型,能够处理复杂的任务,如自然语言处理(NLP)、计算机视觉(CV)和多模态任务。
核心特征:
- 大规模参数: 模型参数量巨大,通常达到数十亿甚至数千亿。
- 预训练与微调: 通过海量数据进行预训练,然后在特定任务上进行微调。
- 通用能力: 具备强大的泛化能力,能够处理多种任务。
大语言模型(large language model,LLM),简称大模型。
是一种基于深度学习技术训练出来的人工智能系统,主要用于处理和生成人类语言。
基本市面上所有的大模型都是基于Transformer架构训练出来的。
大模型已经对世界产生了深远的影响。通过使机器更好地理解和生成人类语言,LLM在人工智能(artificial inteligence,AI)领域开创了新的可能性,并影响了众多行业。
大预言模型(LLM) = 一个超强的文字接龙函数:给它一段文字,它预测接下来最可能出现的文字。
就这么简单,它不是数据库,不是搜索引擎,不是知道答案 --- 它是根据海量文本训练出来的概率预测器,一个词一个词的往后接。
用Android类比: 你可以把它想象成一个见过全世界几乎所有文本的、超级强大的自动补全(就像输入法的联想,但强了几亿倍)。
你打【今天天气真】,它接【好】 --- 大模型只是把这件事做到了能写代码、能推理、能对话的程度。
理解这个本质,能帮你想通后面很多事:
- 为什么它会【幻觉】(一本正经胡说)?因为它在预测最像答案的文字,而不是在查真相。
- 为什么同样的问题它每次回答略有不同?因为预测下一个词是随机性的。
- 为什么要给它清晰的指令和离子?因为你是在引导它的预测方向。
模型规模: 通常包含数十亿到数千亿个参数,这些参数就像是模型的"大脑神经元"。
训练数据: 使用海量文本数据进行训练,包括书籍、文章、网页等各种形式的文字内容。
在深度学习和像GPT这样的大语言模型中,“参数”指的是模型的可训练权重。这些权重本质上是模型的内部变量,在训练过程中通过调整和优化来最小化特定的损失函数。
语言模型演进过程
语言模型 (Language Model, LM) 是自然语言处理的核心,其根本任务是计算一个词序列(即一个句子)出现的概率。一个好的语言模型能够告诉我们什么样的句子是通顺的、自然的。在多智能体系统中,语言模型是智能体理解人类指令、生成回应的基础。
统计语言模型与N-gram的思想
在深度学习兴起之前,统计方法是语言模型的主流。其核心思想是,一个句子出现的概率,等于该句子中每个词出现的条件概率的连乘。
这个公式被称为概率的链式法则。然后,这个计算方式几乎是不可能的,因为如果后面是一个从没出现的词,那这样的概率太难 从语料库中估计了,因为它可能从未在训练数据中出现过。
为了解决这个问题,研究者引入了马尔可夫假设 (Markov Assumption) 。其核心思想是:我们不必回溯一个词的全部历史,可以近似地认为,一个词的出现概率只与它前面有限的 n−1 个词有关,基于这个假设建立的语言模型,我们称之为 N-gram模型。这里的 "N" 代表我们考虑的上下文窗口大小。
N-gram 模型:只看前面 N-1 个词,查表选出现频率最高的下一个词。它的死穴一眼可见:
- 看不远:N 一般只有 2~5,"我出生在法国,……(此处省略50字)……所以我说一口流利的___"——答案"法语"藏在 50 个字之前,N-gram 根本看不到;
- 表存不下:词的组合是天文数字,大部分组合在训练文本里一次都没出现过,一查就是零。
神经网络语言模型与词嵌入
N-gram 模型的根本缺陷在于它将词视为孤立、离散的符号。为了克服这个问题,研究者们转向了神经网络,并提出了一种思想:用连续的向量来表示词。2003年,Bengio 等人提出的前馈神经网络语言模型 (Feedforward Neural Network Language Model) 是这一领域的里程碑[1]。
其核心思想可以分为两步:
- 构建一个语义空间:创建一个高维的连续向量空间,然后将词汇表中的每个词都映射为该空间中的一个点。这个点(即向量)就被称为词嵌入 (Word Embedding) 或词向量。在这个空间里,语义上相近的词,它们对应的向量在空间中的位置也相近。例如,agent 和 robot 的向量会靠得很近,而 agent 和 apple 的向量会离得很远。
- 学习从上下文到下一个词的映射:利用神经网络的强大拟合能力,来学习一个函数。这个函数的输入是前 n−1 个词的词向量,输出是词汇表中每个词在当前上下文后出现的概率分布。
在这个架构中,词嵌入是在模型训练过程中自动学习得到的。模型为了完成“预测下一个词”这个任务,会不断调整每个词的向量位置,最终使这些向量能够蕴含丰富的语义信息。一旦我们将词转换成了向量,我们就可以用数学工具来度量它们之间的关系。最常用的方法是余弦相似度 (Cosine Similarity) ,它通过计算两个向量夹角的余弦值来衡量它们的相似性。
循环神经网络 (RNN) 与长短时记忆网络 (LSTM)
经网络语言模型虽然引入了词嵌入解决了泛化问题,但它和 N-gram 模型一样,上下文窗口是固定大小的。为了预测下一个词,它只能看到前 n−1 个词,再早的历史信息就被丢弃了。这显然不符合我们人类理解语言的方式。为了打破固定窗口的限制,循环神经网络 (Recurrent Neural Network, RNN) 应运而生,其核心思想非常直观:为网络增加“记忆”能力。
RNN 的设计引入了一个隐藏状态 (hidden state) 向量,我们可以将其理解为网络的短期记忆。在处理序列的每一步,网络都会读取当前的输入词,并结合它上一刻的记忆(即上一个时间步的隐藏状态),然后生成一个新的记忆(即当前时间步的隐藏状态)传递给下一刻。这个循环往复的过程,使得信息可以在序列中不断向后传递。
简单说就是循环神经网络(RNN)换了一个思路: 一个词一个词的读句子,每读一个词就更新一下"脑中的印象"(术语叫隐藏状态),读到最后,这个印象里理论上浓缩了整句话的信息。
打个比方:玩传话游戏,每个人听到上一个人的话,加上自己看到的新词,揉成一句话传给下一个人。问题也出在这:传话传多了会失真。句子一长,开头的信息传到结尾就模糊了(术语叫梯度消失,可以理解为"记忆随距离衰减")。而且它必须一个词一个词按顺序处理,没法并行,训练极慢。
后面就是Transformer架构,一举来解决上面的问题。
大模型的工作流程
大多数人与语言模型交互的方式是通过网页平台,它提供用户与语言模型之间的聊天界面。你可能会注意到,模型并不是一次性生成所有输出,而是一次生成一个词元。 词元不仅是模型的输出单位,也是模型查看输入的方式。发送给模型的提示词首先被分解成词元。
对计算机来说,语言是一个复杂的概念。
文本本质上是非结构化的,当用0和1(单个字符)表示时就会失去其含义。因此,在语言人工智能的发展历史中,人们一直非常关注如何以结构化的方式标识语言,使计算机能够更容易的使用。
语言人工智能历史始于一种名为词袋(bag of words)的技术,这是一种表示非结构化文本的方法。
词袋模式的工作原理如下: 假设我们有两个句子需要创建数值表示。
词袋模型的第一步是分词(tokenization),即将句子拆分为单个词或子词(词元(token))。
Token是大模型处理文本的最基本单元.
Token和词并不是一一对应的,Token是模型自己学会的一套文本切分规则,切出来的每一块就是它一次能够处理的最小单位,一般来说一个token对应1.5 ~ 2个汉字或0.75个英文单词。
)
用户和大模型的沟通过程:
-
用户输入内容后,需要经过编码环节
- 切分
- 映射
-
将编码之后的token id传输给大模型
- 大模型基础计算预测后输出tokenid
- tokenid再经过解码环节,解码环节会将tokenid映射成对应的字
- 将字显示给用户
- 然后一直循环处理吐token直到结束
最常见的分词方法是通过空格分割来把句子分割成词。
然而,这种方法也有其缺点,因为某些语言(如汉语)的词之间没有空格。
在分词之后,我们将每个句子中所有不同的词组合起来,创建一个可用于表示句子的词表(vocabulary)。
使用词表,我们只需计算每个句子中词出现的次数,就创建了一个词袋。
因此,词袋模型旨在以数字形式创建文本的表示(representation),也称为向量或向量的标识。我们将这类模型称为表示模型(representation model)
通过计算单个词出现的次数创建词袋,这些值被称为向量表示。
词袋虽然是一种优雅的方法,但存在一个明显的缺陷。它仅仅把语言视为一个几乎字面意义上的"词袋",而忽略了文本的语音特性和含义。
这是因为词袋模型就像把一段话拆成一堆词,装进袋子里,只数数量,不看顺序,不懂意思,不管谁和谁有关系。这让它在理解句子真正含义时,显的很呆。
比如狗追猫和猫追狗。 词袋模型看不出来到底谁追谁。
word2vec(词向量)于2013年发布,是首批成功利用嵌入(embeding)这个概念来捕捉文本含义的技术之一。
嵌入是数据的向量表示,试图捕捉数据的含义。为此word2vec通过在大量文本数据(如整个维基百科)上训练来学习词的语义表示。
为了生成这些语义表示,word2vec利用了神经网络(neural network)技术。
神经网络由处理信息的多层互连节点组成。神经网络可以有多个分层,每个连接有一定的权重,这些权重通常被称为模型的参数。
在训练过程中,word2vec会学习词与词之间的关系,并将这些信息提炼到词嵌入中。如果两个词各自的相邻词集合有更大的交集,它们的词嵌入向量就会更接近,反之亦然。
词嵌入可以用多种属性来表示一个词的含义。由于嵌入向量的大小是固定的,这些属性需要经过精心选择,以构建用来代表词的“心智表征”的抽象标识。
在实践中,这些属性通常相当抽象,很少与单一实体或人类可识别的概念相关。然而,这些属性组合在一起对计算机来说是有意义的,是将人类语言转换为计算机语言行之有效的方式。
词嵌入非常有用,因为它使我们能够衡量两个词的语义相似度。
上面word2vec的训练过程会创建静态的、可下载的词标识。例如,bank这个词无论在什么上下文中使用,都会有相同的词嵌入。
然而,bank既可以指银行,也可以指河岸。它的含义应该根据上下文而变化,因此它的嵌入也应该根据上下文而变化。
使用RNN(Recurrent Neural Network,循环神经网络),可以实现文本编码的一个步骤。这些神经网络的变体可以将序列作为补充输入进行建模。
为此,这些RNN被用于两个任务:
- 编码: 也就是表示输入句子
- 解码: 也就是输出句子
该架构中的每个步骤都是自回归(auto - regressvie)的,在生成下一个词时,该架构需要使用所有先前生成的词作为输入。
然而,这种上下文嵌入方式存在局限性,因为它仅用一个嵌入向量来表示整个输入,使得处理较长的句子变得困难。
在2014年,研究人员提出了注意力(attention)解决方案,大大改善了原始架构。
注意力云讯模型关注输入序列中彼此相关(相互注意)的部分,并放大它们的信号,注意力机制通过选择性地聚焦于句子中最关键的词,来突出其重要性。
Transformer
在2017年著名论文"Attention is All You Need"首次探讨了注意力机制的真正威力,并提出了一种被称为Transformer的网络架构。核心是把注意力机制引入了NLP中。
核心创新叫自注意力机制(Self - Attention):
处理每个词的时候,让它直接"看一眼"句子里所有其他词,并给每个词打一个"相关度分数",按分数加权吸收信息。
用大白话说:理解"苹果发布了新手机"里的"苹果"时,注意力机制会发现"发布""手机"和它高度相关,于是明白这是公司不是水果。距离不再是问题——第 1 个词和第 1000 个词可以直接建立联系,不用像 RNN 那样传话 999 次。而且所有词的注意力计算可以同时进行,完美利用 GPU 并行算力,训练速度起飞。
注意力里的 Q/K/V:面试常问,用"图书馆检索"打比方即可。每个词会生成三样东西:Q(Query,查询)="我想找什么"、K(Key,键)="我是关于什么的标签"、V(Value,值)="我实际装着的内容"。每个词拿自己的 Q 去跟所有词的 K 算匹配度,匹配度高的词,它的 V 就被多吸收一点。所谓"多头注意力(Multi-Head)"就是同时开好几组 Q/K/V,有的组关注语法关系、有的组关注语义关系,各看各的再汇总。
Transformer完全基于注意力机制,摒弃了此前提到的RNN。与RNN相比,Transformer支持并行训练,这大大加快了训练速度。
在Transformer中,编码和解码组件相互堆叠。这种架构仍然是自回归的,每个新生成的词都被模型用于生成下一个词。
核心模块包括:
- 输入部分
- 位置编码
- 多头注意力机制
- 掩码注意力机制
- 交叉注意力机制
- 层归一化
- 前缀网络层
Transformer由堆叠的编码器和解码器块组合而成,输入依次轮流经每个编码器和解码器.
-
编码器(Encoder): 任务是理解输入的整个句子,它会读取所有输入的词元,最终为每个词元生成一个富含上下文信息的向量表示。
-
解码器(Decoder): 热舞是生成目标句子。它会参考自己已经生成的前文,并咨询编码器的理解结果,来生成下一个词。
要理解Transformer LLM的行为,最常见的方式是将其视为一个接收文本输入并生成响应文本的软件系统。
通过分词后大模型会生成一个个的新词元的概率列表,然后从生成的词元列表中选择某一个词元的过程就叫做解码策略。
每次都选择概率分数最高的词元的策略被称为贪心解码。这就是在LLM中将温度(temperature)参数设为零时会发生的情况。
· Transformer LLM 每次生成一个词元。
· 生成的词元会被追加到提示词中,然后,这个更新后的提示词会再次被输入模型进行下一次前向传播,以生成下一个词元。
· Transformer LLM的三个主要组件是分词器、一系列Transformer块和语言建模头。
· 分词器包含模型的词元词表。模型中包含与这些词元相关联的词元嵌入。将文本分解成词元,然后使用这些词元的嵌入向量,是词元生成过程的第一步。
· 前向传播会依次经过所有阶段。
· 在处理接近尾声时,语言建模头会对下一个可能的词元进行概率评分。解码策略决定了在这一生成步骤中选择哪个实际词元作为输出(有时是概率最高的下一个词元,但并非总是如此)。
· Transformer表现出色的原因之一是它能够并行处理词元。每个输入词元都流入其独立的计算流(也称为处理路径)。这些流的数量就是模型的“上下文长度”,代表模型可以处理的最大词元数量。
· 由于Transformer LLM通过循环来一次生成一个词元的文本,因此缓存每个步骤的处理结果是一种很好的策略,这样可以避免重复处理工作(这些结果以各种矩阵的形式存储在层中)。
· 大部分处理发生在Transformer块中。这些块由两个组件组成,其中一个是前馈神经网络,它能够存储信息,并根据训练数据进行预测和插值。
· Transformer块的另一个主要组件是自注意力。自注意力整合了上下文信息,使模型能够更好地捕捉语言的细微差别。
· 注意力过程分为两个主要步骤:相关性评分;信息组合。
· Transformer的自注意力层并行执行多个注意力操作,每个操作都发生在注意力头内,它们的输出被聚合成自注意力层的输出。
· 通过在所有注意力头或一组注意力头(分组查询注意力)之间共享键矩阵和值矩阵,可以加速注意力计算。
· Flash Attention等方法通过优化在GPU不同显存系统上的操作方式来加速注意力计算。
相比之前占领市场的LSTM和GRU模型,Transformer有两个显著的优势:
1、Transformer能够利用分布式GPU进行并行训练,提升模型训练效率.
2、在分析预测更长的文本时, 捕捉间隔较长的语义关联效果更好.
从自注意力到多头注意力
想象一下我们阅读这个句子:“The agent learns because it is intelligent.”。当我们读到加粗的 "it" 时,为了理解它的指代,我们的大脑会不自觉地将更多的注意力放在前面的 "agent" 这个词上。自注意力 (Self-Attention) 机制就是对这种现象的数学建模。它允许模型在处理序列中的每一个词时,都能兼顾句子中的所有其他词,并为这些词分配不同的“注意力权重”。权重越高的词,代表其与当前词的关联性越强,其信息也应该在当前词的表示中占据更大的比重。
为了实现上述过程,自注意力机制为每个输入的词元向量引入了三个可学习的角色:
- 查询 (Query, Q):代表当前词元,它正在主动地“查询”其他词元以获取信息。
- 键 (Key, K):代表句子中可被查询的词元“标签”或“索引”。
- 值 (Value, V):代表词元本身所携带的“内容”或“信息”。
尽管多头注意力机制在早期模型中表现很好,但是随着模型规模不断扩大,其结构逐渐暴露出明显的工程瓶颈。 要理解多头注意力机制的限制,需要先明确推理阶段的一个关键概念 -- KV Cache。
在自回归生成过程中,模型需要逐 token 地生成输出。对于每一个新 token,模型都会与所有历史 token 进行注意力计算。如果每一步都从头计算历史序列的 Key 和 Value,这将造成巨大的重复计算开销。
为了避免这种重复计算,模型都会在推理阶段将历史 token 的 Key 和 Value 缓存下来,供后续步骤直接使用。这一机制就是 KV Cache。通过缓存 K/V,模型在生成下一个 token 时只需计算当前 token 的 Q、K、V,再与缓存的 K/V 做一次注意力匹配即可,大幅减少了不必要的计算量。
KV Cache 的引入,虽然减少了重复计算,但需要持续保存过往 token 的 Key 和 Value。随着序列变长、模型层数增加,缓存量本身就会不断累积。并且在多头注意力(MHA)中,每个注意力头都会独立生成并存储一组 Key 和 Value,使得缓存规模在原有基础上进一步放大。这也构成了 MHA 在大模型推理中的主要问题。
MQA(Multi-Query Attention)
MQA(Multi-Query Attention,多查询注意力)是一种优化注意力机制的方案,旨在减少推理阶段 KV Cache 的存储与内存带宽开销。由Google于 2019 年 11 月发表在论文《Fast Transformer Decoding: One Write-Head is All You Need》。 MQA 的核心思想是让多个注意力头共享同一套 Key 和 Value,而不是像传统 MHA 那样为每个头分别维护独立的 K/V。 这种共享方式大幅减少了需要缓存和读取的 K/V 张量量级,显著降低存储需求与内存带宽压力,从而大幅提升了推理速度。
但这种共享机制会略微削弱注意力头的表达能力,使其精度略逊于传统 MHA,但整体损失非常小。
位置编码
Transformer 的核心是自注意力机制,它通过计算序列中任意两个词元之间的关系来捕捉依赖。然而,这种计算方式有一个固有的问题:它本身不包含任何关于词元顺序或位置的信息。对于自注意力来说,“agent learns” 和 “learns agent” 这两个序列是完全等价的,因为它只关心词元之间的关系,而忽略了它们的排列。为了解决这个问题,Transformer 引入了位置编码 (Positional Encoding) 。
位置编码的核心思想是,为输入序列中的每一个词元嵌入向量,都额外加上一个能代表其绝对位置和相对位置信息的“位置向量”。这个位置向量不是通过学习得到的,而是通过一个固定的数学公式直接计算得出。这样一来,即使两个词元(例如,两个都叫 agent 的词元)自身的嵌入是相同的,但由于它们在句子中的位置不同,它们最终输入到 Transformer 模型中的向量就会因为加上了不同的位置编码而变得独一无二。
Decoder - Only架构
Transformer的设计哲学是“先理解,再生成”。编码器负责深入理解输入的整个句子,形成一个包含全局信息的上下文记忆,然后解码器基于这份记忆来生成翻译。但 OpenAI 在开发 GPT (Generative Pre-trained Transformer) 时,提出了一个更简单的思想:语言的核心任务,不就是预测下一个最有可能出现的词吗?
无论是回答问题、写故事还是生成代码,本质上都是在一个已有的文本序列后面,一个词一个词地添加最合理的内容。基于这个思想,GPT 做了一个大胆的简化:它完全抛弃了编码器,只保留了解码器部分。 这就是 Decoder-Only 架构的由来。
Decoder-Only 架构的工作模式被称为自回归 (Autoregressive) 。这个听起来很专业的术语,其实描述了一个非常简单的过程:
- 给模型一个起始文本(例如 “Datawhale Agent is”)。
- 模型预测出下一个最有可能的词(例如 “a”)。
- 模型将自己刚刚生成的词 “a” 添加到输入文本的末尾,形成新的输入(“Datawhale Agent is a”)。
- 模型基于这个新输入,再次预测下一个词(例如 “powerful”)。
- 不断重复这个过程,直到生成完整的句子或达到停止条件。
- 模型就像一个在玩“文字接龙”的游戏,它不断地“回顾”自己已经写下的内容,然后思考下一个字该写什么。
你可能会问,在训练时模型通常会一次性拿到完整文本,那么它是如何保证学习预测第 t+1 个词时,不去“偷看”更后面的答案呢?
答案就是掩码自注意力 (Masked Self-Attention) 。
在 Decoder-Only 架构中,这个机制变得至关重要。它的工作原理非常巧妙:
在训练阶段,虽然一段文本可以被并行送入模型,但在自注意力机制计算出注意力分数矩阵(即每个词对其他所有词的关注度得分)之后、进行 Softmax 归一化之前,模型会应用一个“因果掩码”。这个掩码会将所有位于当前位置之后的词元对应的分数替换为一个非常大的负数。当这个带有负无穷分数的矩阵经过 Softmax 函数时,这些位置的概率就会变为 0。这样一来,模型在计算任意位置的表示时,都从数学上被阻止了去关注它后面的信息。
在生成阶段则更直接:未来的词元还没有生成出来,模型只能把已经生成的内容作为上下文输入,并一步步预测下一个词。掩码自注意力保证了训练时的学习方式与生成时的自回归使用方式保持一致,从而让模型始终只依赖当前位置之前的信息。
Decoder-Only 架构的优势
这种看似简单的架构,却带来了巨大的成功,其优势在于:
- 训练目标统一:模型的唯一任务就是“预测下一个词”,这个简单的目标非常适合在海量的无标注文本数据上进行预训练。
- 结构简单,易于扩展:更少的组件意味着更容易进行规模化扩展。今天的 GPT-4、Llama 等拥有数千亿甚至万亿参数的巨型模型,都是基于这种简洁的架构。
- 天然适合生成任务:其自回归的工作模式与所有生成式任务(对话、写作、代码生成等)完美契合,这也是它能成为构建通用智能体基础的核心原因。 总而言之,从 Transformer 的解码器演变而来的 Decoder-Only 架构,通过“预测下一个词”这一简单的范式,开启了我们今天所处的大语言模型时代。
1. 分词化与词表映射
分词化(Tokenization)是自然语言处理(NLP)中的重要概念,它是将段落和句子分割成更小的分词(Token)的过程。
举一个实际的例子,以下是一个英文句子:
I want to study LLM.
为了让机器理解这个句子,对字符串执行分词化,将其分解为独立的单元。使用分词化,我们会得到这样的结果:
["I", "want", "to", "study", "LLM", "."]
将一个句子分解成更小的、独立的部分可以帮助计算机理解句子的各个部分,以及它们在上下文中的作用,这对于进行大量上下文的分析尤其重要。
每一个分词(token)都会通过预先设置好的词表,映射为一个tokenid,这是token的身份证,这样一句话最终会被表示为一个元素为tokenid的列表,供给计算机进行下一步处理。
2. 文本生成过程
大模型的工作概括来说是根据给定的文本预测下一个token。
对于我们来说,看似像在对大模型提问,但实际上是给了大模型一串提示文本,让它可以对后续的文本进行推理。
大模型的推理过程不是一步到位的,当大模型进行推理时,它会基于现有的token,根据概率最大原则预测出下一个最有可能的token,然后将该预测的token加入到输入序列中,并将更新 后的输入序列继续输入大模型预测下一个token。 这个概率则是我们用很多的文本,分词为token以后训练大模型得来的。
LLM
LLM大模型训练流程:
提示工程
提示工程(Prompt Engineering)是一项通过优化提示词(Prompt)和生成策略,从而获得更好的模型返回结果的工程技术。
提示词(Prompt) --> 大语言模型(LLM) --> 返回结果(Completion)
- 好的Prompt需要不断优化
- 说清楚自己到底想要什么,要具体
- 不要让机器去猜测太多,为了不让机器去猜测,我们就需要告诉细节
- 提示工程有一些技巧,灵活掌握,事半功倍。
一个包含多个组件的复杂提示词示例:
系统提示
提示工程:把"说明书"写清楚的手艺
模型能力是固定的,但你问的方式决定它发挥几成功力。几个被反复验证有效的技巧:
- 给角色:"你是一位资深法律顾问"比裸问效果好——相当于把模型脑中庞大知识库先翻到对应章节;
- 给示例(Few-Shot):直接在提示词里放两三个"输入→期望输出"的例子,模型照葫芦画瓢,格式和风格立刻稳定;
- 让它打草稿(思维链,Chain-of-Thought):加一句"请一步步思考",让它把推理过程写出来再给答案,复杂题正确率大幅上升——原理是每一步生成的文字又成了下一步的输入,相当于给它草稿纸;
- 给格式和边界:"用 JSON 输出""不超过100字""如果不知道就回答'不知道'"——把输出关进笼子。
System Prompt(系统提示),给模型设定角色和规则。
对话通常分三种角色:
-
system: 设定模型的身份、风格、规则。比如【你是一个严谨的Kotlin代码审查专家,只回答技术问题】
-
user: 你(用户)说的话
-
assistant: 模型的回复
System Prompt相当于给模型【立人设 + 定规矩】,它会显著影响整个对话的风格和边界。
可以跳过原理细节,只需记住以下三条核心结论: 1. 系统提示词和工具定义一旦确定就不要改。 任何改动,哪怕多一个空格,都可能改变 token 序列,使首个 不同 token 及其后的缓存无法复用;改动越靠前,延迟和成本影响通常越大(具体幅度视模型与配置而 定)。 2. 动态信息永远追加到末尾——时间戳、用户状态等变化的内容,作为新消息追加到对话末尾,而不是修改 已有的系统提示词。 3. 使用标准 API 格式,不要自行拼接消息:结构化消息会被 Chat Template 翻译成模型训练时见过的固定 token 序列;自行用字符串拼成 "USER: ... ASSISTANT: ..." 的根本问题是偏离了这种训练格式,会 削弱模型的多步思考能力。至于缓存,它只认 token 字节序列,只要拼出的前缀字节级稳定,照样能命中; 但若拼接方式不稳定(如每次向前缀注入动态内容),缓存也会随之失效。
这三条结论背后的直觉其实很简单:大模型在处理上下文时,会把前面已经处理过的内容缓存起来,下次只需 要处理新增的部分。 记住这三条原则,即使跳过下面的技术细节,也能正确设计 Agent 的上下文结构。
GPU
计算资源通常是指系统中可用的GPU(graphics processing unit,图形处理单元,通常称显卡)资源。
强大的GPU可以加速LLM的训练和使用。在选择GPU时,一个重要的因素是可用的VRAM(video random access memory,视频随机存储器,通常称显存)容量,即GPU上可用的内存量。实践中,显存越大越好。原因是如果没有足够的显存,某些模型根本无法使用。
大模型分类
自然语言处理模型
自然语言大模型(Large Language Models, LLMs)是基于深度学习的模型,旨在理解和生成人类语言。它通过大规模文本数据的训练,能够执行多种自然语言处理(NLP)任务。如专注于文本生成、理解、翻译等任务。
举例: GPT系列(OpenAI)、BERT(GOOGLE)
计算机视觉(CV)模型
视觉大模型(Large Visual Models)核心是通过大规模数据和复杂模型架构,实现对图像和视频的深度理解和生成,与传统计算机视觉模型相比,视觉大模型具有更强的泛化能力和多任务适应性,能够处理复杂的视觉任务,如图像分类、目标检测、语义分割、图像生成等。
举例: Stable Diffusion、Vision Transformers(ViT)、DALL.E(OpenAI)、CLIP(OpenAI)
语音大模型
语音大模型是基于深度学习技术构建的人工智能模型,主要用于处理语音相关的任务,如语音识别(ASR)、语音合成(TTS)、语音翻译等。
近年来,随着深度学习和大规模数据训练的发展,语音大模型在性能和功能上取得了显著进展,能够支持多语言、多场景的复杂任务。
举例: Whisper(OpenAI)、WaveNet(DeepMind)、讯飞星火
多模态大模型
多模态模型是一种能够同时处理多种数据模态(如文本、图像、音频、视频等)的人工智能模型。
它的核心在于跨模态融合,即将不同模态的数据表示映射到同一空间,以便模型能够理解和生成跨模态的内容。
举例: GPT-4(支持多模态)、Flamingo(DeepMind)、KOSMOS(微软)
模型蒸馏
大模型的运行需要极高的硬件资源,通常都是服务器集群并挂载数量众多的GPU(显卡)。 为了满足低性能设备的运行,可以对大模型进行蒸馏。
例如deepseek r1的 7b模型、70b模型。
模型蒸馏: 对模型进行简化,在尽量保证模型性能的前提下,尽可能减少对硬件资源的需求。
简单理解就是假设你有一个超强的老师(大模型),他能讲解很复杂的知识。 你想把这些知识传授给一群学生(小模型)。为了让学生能在不需要过多时间和资源的情况下,快速掌握老师的知识。你可以通过“蒸馏的方式”,让学生只学习精华、最重要的部分。 这样,学生虽然没有老师那么强大,单依然能做出优秀表现。
大模型训练
大模型整体的训练主要分为三个阶段:
- 预训练: 注入领域知识
- SFT(监督微调):
- RLHF(基于人类反馈的强化学习)
模型部署
ollama
ollama是一款旨在简化大型语言模型本地部署和运行过程的开源软件。
- 本地部署(ollama)
- 后端和模型部署(例如ollama本地部署千问模型)
- 前端部署(交互界面,例如chatbox ai、Stremlit)
- 用户使用
LangChain
LangChain是一个用于构建和管理基于语言模型(Language Models,LM)的应用程序框架。
它提供了一系列工具和组件,帮助开发者更高效的构建、训练、部署和管理语言模型应用。
LangChain的设计目标是简化语言模型的使用过程,使其更加容易被集成到各种应用场景中。
它本质上是一个Python框架
LangChain的名称源自其核心方法之一——链(chain)。虽然我们可以独立运行LLM,但链的真正威力在与其他组件协同工作,甚至在多条链相互配合时才能充分展现。这种架构不仅能拓展LLM的能力,还能实现链与链之间的无缝衔接。
LangChain主要组件:
- Prompts: 提示,包括提示管理、提示优化和提示序列化
- Models: 模型,各种类型的模型和模型集成,比如gpt-4、deepseek
- Memory: 记忆,用来保存和模型交互时的上下文状态
- Indexes: 索引,用来结构化文档,以便和模型交互
- Chains: 链,一系列对各种组件的调用
-
Agents: 代理,决定模型采取哪些行动,执行并且观察流程,直到完成为止
-
云端部署(LangChain)
- 后端部署(例如阿里云百炼平台部署千问模型)
- 前端部署(例如Stremlit)
- 用户使用
模型部署总结:
Ollama是本地模型运行的入门工具。
LangChain是覆盖入门 + 进阶的全功能框架。
除了Ollama的功能外,LangChain额外多出了:
- 记忆能力: 基于ConversationBufferMemory等组件完成多轮对话历史记录
- 文档对接能力: 可实现PDF/Word等本地文档对打,构建私有知识库
- 工具调用与智能体能力: 通过Tool、Agent组件让模型自动调用工具
- 流程编排能力: SequentialChain、LCEL等实现任务自动化与并行模型
以及,针对云平台的API调用支持(如阿里云的通义千问百炼平台、腾讯云的混元等)
端模型
不是所有模型都奔着“更大更强”去才有价值。
相反,像Qwen3-0.6b这种小模型才是真正能在实际场景中跑起来、用得起的模型。
Qwen3-0.6b的表现:
- 推理速度快、延迟低:典型场景延迟在几十毫秒,适合边缘设备部署。
- 资源占用小: 内存带宽压力低,功耗控制出色,支持长时间稳定运行。
- 兼容性强: 广泛适用于query改写、文本匹配、语义检索等任务。
很多人认为Qwen3-0.6b不如7b、13b强大,因此没用。但现实是,在高并发、低延迟、受限资源的实际业务场景中,大模型往往根本上不了场。
总结: 轻、小、稳,才是能落地的关键。
举个例子:
普通小货车的运载能力相比较那些拉上十几吨、几十吨的大货车相差太多,难道它就没用用处吗?
当然不是,因为它的定位就是面对相对狭小的场景、相对少的货物做出更敏捷的选择。
Qwen3-0.6b的定位,从来也不是生成长文本或复杂推理,而是在多模态系统中提供“一点点启发性的信号”,用于放大系统整体效能。
这“一点点信号”在推荐、搜索、识别系统重,往往正是决定点击、转化、留存的关键。
我们选择部署Qwen3-0.6b,不是"凑合",而是精准选择--它足够快、足够轻、足够稳,也足够使用。
在生产环境中,能跑、能稳、能提效的模型,才是真正有价值的模型。