传统知识
自动分词
- 词是自然语言处理的基本单位
- 通过空格或者词形变化来进行分割
- 不同的分词方法可能语意不同
自动分词方法一: 最大匹配法
- FMM(正向): 从左往右
- BMM(逆向): 从右往左 核心思路:
- 选择字符序列
- 在词典中进行查找 3.1 找到了: 切割(加上分词符),继续扫描文本 3.2 没找到: 去掉最右边的词语
自动分词方法二:基于语言模型的分词方法
[!NOTE] 马尔科夫链的思路,第 K 个词只跟前 K-1 个词有关
核心思路:
- 建立 n 元语言模型,计算每一个词在给定上下文出现的条件概率
- 构建 n 元的切分词图,图中的节点表示可能的词候选,边表示路径,计算词在当前位置的前 n-1 个词的下的条件概率为边的权重
- 利用相关搜索算法(要求动态规划,因为这个词与前 n-1 个词都有关)找出 图中代价最小的路径 作为分词结果
自动分词方法三:基于最短路径的分词方法
与 "基于语言模型的分词方法" 不同的就是,节点之间的权重并非基于条件概率,其实要不就是权重为1找最短路,就是不满足于"因为这个词与前 n-1 个词都有关"这条件,每一次相对独立。
[!NOTE] 相关一些指标:
召回率(R): 系统认为的正确结果 / 所有正确的答案个数 准确率(P): 系统输出的正确结果 / 系统所有输出结果个数 测度值F1: 2 * PR / (P+R)
命名实体识别(NER)
其实就是句子中一些特定的实体名词:人名,地名,组织机构,数字日期
BIO 标注
B 表示实体的开头,I表示实体的中后部分,O表示不属于实体的词 核心思路: 给定一个字符序列,预测每一个字符的BIO标签
词性标注
词性是词汇基本的语法属性 相关标注方法:
- 基于规则的方法: 相关语法规则
- 基于统计模型的方法: 从大量数据中学习得到的结果
- 基于规则与统计的结合
句法分析
分析句子的语法结构,来确定句子中每个词语之间的语法关系 有两种类型:
- 短语结构分析
- 依存句法分析
上下文无关文法
常见的短语类型:
- NP 名词短语
- VP 动词短语
- PP 介词短语
- ADJP 形容词短语
- ADVP 副词短语
- S/IP 句子
- Det 限定词 常见的 VP 还可以分成 V NP(所以可以通过这样不断拆分,从 S 开始,形成一个句法树)
句法分析方法
分析句子中的词语的依存关系: 支配者为发出端,被支配者为箭头端 其实就是画一个二维表格,观察先给每一个词定性,然后再观察他能不能和前面或者后面连接变成新的,比如: Det + N = NP, V + N = VP 可以将 这个二维表格 理解成一个 动态规划表格DP[i][j],表示 i 到 j 能构成一个什么。
语义分析
其实就是再分析句子的结构的基础上,去推理句子的意思,比如
Love You and I don't like your swear。 可以变成 Love(I,You) ^ ~Love(I,your swear)词义消歧算法:
- 简单最近邻算法: 找意思最相近的句子中的词义
- 基于特征的WSD算法:将上下文拆成很多线索,学习这些线序和词义之间的关系
- Lesk算法:选择词义(字典注释)和上下文交集更大的意思
词向量
概述
将文本元素转化为数值数据,我们将这些表示称为词向量,词嵌入,词表示,其实就是将文本转化为向量形式
文本的表示方法
- 独热表示(One-hot) 将每一个词汇都变成一个唯一的向量,相当于有多少个词就有多少维度,每一个词仅有一个地方是1,其他都是 0 1.1 存在的问题:
- 维度灾难: 随着特征空间的维度增加,数据的分布变得更为稀疏,需要更长维度的向量去表示词汇
- 无法度量语义的相关性: 任意两个词之间的距离都是
- 分布式表示 通过训练将语言中的每个词汇都映射到一个固定长度的实数向量上 2.1 存在的问题:
- 不能体现句子的语义结构信息:在不同的句子中,词向量都是一样的
补充背景知识: MLP
相关的参数计算: 每一层的参数:
Word2Vec模型
Word2Vec 模型中包括了 CBOW模型 和 Skip-gram 模型
CBOW 模型(多词上下文模型)
其目标是根据 来预测W_t 其中应用的 Softmax 函数,是一个归一化取平均的函数
模型架构
-
输入层 以 作为中心词的上下文作为输入,每个词通过独热编码向量 来表示
-
投影层 上下文中的每个词 经过相同的词向量矩阵W( )[这个很重要,W 表示预选词矩阵],得到 向量, 然后将词向量累加平均(聚合上下文信息):
-
输出层 然后将聚合的 通过参数矩阵 W'变化,再经过 softmax 得到 概率向量,得到每一个预选词的概率
-
损失函数 常用的度量方式为 交叉熵
-
CBOW 的优化目标:
-
CBOW 的时间复杂度为:
层次Softmax
将所以预选词汇作为叶子节点构建一颗二叉树(决策树)-- 哈夫曼树 每一个预选词的概率是 并且使用 sigmod 进行建模:
sigmod 函数:
Skip-gram模型
以单个单词作为输入,以预测其上下文环境出现的多个词
模型架构
-
输入层: 输入X是单词的独热表示
-
投影层:
-
输出层: 通过 得到 2m 个输出向量,并且通过 softmax 的得到真是输出的概率分布
-
训练复杂度:
-
优化目标:
GloVe模型
结合了Word2Vec模型的Skip-gram优势,同时利用了全局词频统计信息,通过矩阵分解技术可以有效地获取单词向量表示。它可以把一个单词表达成一个由实数组成的向量,用于捕捉单词之间的语义特性,比如相似性、类比性。
比如 官人 - 文人 + 武功 武将 实现步骤:
-
构建共现矩阵 表示 i 和 j 再一定的上下文窗口内共同出现的次数
-
构建词向量与共现矩阵的关系
-
构建损失函数: 一般的损失函数构建都有一个原则,就是最小化预测值和实际值之间的误差来学习词向量
ELMo模型
特点:生成的词向量是 上下文相关的,综合前向和后向信息
- 预训练: 无监督预训练,结合双向长短时记忆网络的神经网络结构
- 微调: 特定的监督学习任务
统计语言模型
语言模型: 用于计算词序列概率分布的模型,用于评估词序列的合理性
N-gram 模型(N 元文法模型)
当前词的出现概率与其前 N-1 个连续的词相关,其实就是这个词的概率与前 N - 1个词相关,形成条件概率分布 缺陷: 数据稀疏问题: 训练数据中某些词从未出现,导致上下文信息不足,导致模型在估计这些词概率的时候出现 0 概率
平滑技术
- 加一平滑: 避免概率为1,每一种情况出现次数 加1
- 加 K 平滑: 给每一个统计单元的频数增加一个常数 K
- 插值平滑: 利用不同阶数的 N-gram 模型来估算概率,取线数平均(每一个阶加一个参数控制)
- 绝对值平滑: 给每一个频数 减去固定的 d 取平均值
神经语言模型(参数计算[Important])
[!NOTE] 解决了 N-gram 什么问题?
- 泛化能力差 2. 性能依赖语料库 3. 处理相似上下文信息表现不佳 (维度灾难)
神经概率语言模型
基于神经网络的参数化建模方式 需要满足的条件是:
概率约束条件
为了确保模型输出是一个有效的概率分布,需要满足如下要求:
- 概率归一性约束: 所以条件概率和为1
- 非零概率约束: 每个可能的词的条件概率大于0
模型架构
-
词向量学习(词嵌入层): 将离散的词转化为 连续的向量(能够不中词之间的语义关系) ,将词汇表V中的每个词映射成 m 维度的向量
-
隐藏层: 利用神经网络将词向量进行非线性变化,最终输出一个 符合条件的分布,常见隐藏层框架:
其中 H 是参数矩阵
-
输出层:
-
总架构:
注意其中的 x 是拼接后的 X (),为什么有一个维度是1,因为这个词向量是从 C 中选取出词向量的
-
参数规模
具体实现过程
目标函数
梯度更新规则
采用随机梯度上升法
基于循环神经网络的语言模型(RNNLM)
解决了全连接神经网络的什么问题?
- 缺乏时序结构 2. 缺乏记忆能力
通俗来说,就是语言预测,由于窗口有限,有可能这句话跟很前面的话有关,加入循环神经网络,让模型有了记忆力 优点:
- 具有层间反馈连接
- 可维护隐状态序列来捕捉上下文依赖
- 输入序列长度可变(处理任意长序列)
我可以理解的就是如果预测 ,我可以加入的信息,用来保存过去信息
循环神经网络
网络结构
-
输入:一段时序数据{ }
-
隐藏状态
-
网络输出:
-
常见架构
- 多对一结构:用于情感分析,文档分类,总结类工作
- 一对多结构: 文本生成,图像生成
- 多对多结构: 词性标注,机器翻译,视频帧预测
RNNLM 模型原理结构
-
输入层 在 t 时刻的输入向量 x(t) 是由 t 时刻的词向量 w(t) 和 t-1时刻的隐藏状态s(t-1)进行计算
-
隐藏层
-
输出层
-
罕见词处理 如果出现次数小于阈值,会引入一个 罕见词类别,将所有罕见词的概率归为一类
-
训练方式
- 截断的时间反向传播:在固定长度的时间窗口内进行梯度计算和反向传播
- 批量梯度下降法: 使用一小批训练样本来计算梯度和更新权重: (1) 加速训练 (2) 梯度更平稳,避免陷入局部最优解
- 梯度裁剪: 当梯度范数超过阈值,对梯度进行裁剪,保证模型训练的稳定性
预训练语言模型
通过在大规模未标记文本数据上自监督学习,训练通用的语言表示
Seq2Seq 模型
[!NOTE] RNN: 存在的限制,由于输入输出的长度固定,不适用处理输入和输出长度不固定的任务
Seq2Seq由**编码器(Encoder) 和 解码器(Decoder)**两个部分组成,适用于 的模型输出 结构: 将输入序列转化为一个 固定长度的上下文向量 C
编码器(Encoder)
核心公式为:
- 接受长度为 N 的输入序列
- 通过 RNN生成一系列隐藏状态
- 生成上下文向量 C
- 常用的C选择:
解码器(Decoder)
核心公式为:
- 更新状态 初始状态: 其中的 是上一个时间步的输出(这里引出了 Free-running 的缺陷)
- 计算概率:
模型训练与使用技巧
-
Free-running Free-runing 是 RNN 等模型的常见训练方法,将上个时间步的输出作为下个时间步的输入 问题: 训练初期,参数没有充分优化,可能将错误的输出作为后续时间步的输入,进而影响后续的参数调整,导致模型难以正确学习序列的长距离依赖
-
Teacher Forcing 思想 在训练过程中,模型中的每一步输入使用真实的目标序列,就是 Free-running 是将上一步预测的输出作为下一步的输入,但是 Teacher Forcing 是将上一步的真实标签(不是预测的,预测的可能不正确)作为下一步的输入
-
束搜索(Beam Search) 推理阶段无法使用 Teaching Forcing 在每一个时间步保留多个概率大的输出选项,然后基于这些输出再去进行扩展(下一步的输出与上一步有关),时间复杂度
-
穷举搜索 穷举所有可能的输出序列,时间复杂度
-
贪心搜索 在每个时间步 t 选择概率最高的单词作为输出
注意力机制
其实就是 编码器将输入序列编码成一个固定长度的向量,将信息取平均这个想法不合理,会存在重要信息丢失,所以能不能只关注输入序列中最重要的信息?
定义
输入不是被编码成单一的上下文向量,根据输出的每个时间步,根据"注意力"重新计算关于输入序列的上下文向量C
核心思想: 从全局信息中筛选出局部且关键的信息
核心公式
每一个时间步的上下文向量
其中 表示注意力系数,解码器中 前面时间步的隐藏层向量, 表示输出
Transformer 模型
前置知识
-
上下文嵌入 词向量不是一成不变的,会结合当前词向量的上下文中向量(注意力机制)进行聚合
-
因果自注意力机制 就是 我在当前时间步的时候,我看不到我后面时间步的输入信息,只能看到前面的
注意力头(Q,K,V) -- 单个向量
-
相关计算
我的理解: Q 表示 我的特征,K 表示他的特征, V 表示他的核心特征(这个 都有特征提取的功能,一般会进行降维操作)
-
核心(i, j)向量的关联程度
其中 是向量维度
-
算权重
-
加权求和
-
输出投影 调整维度
多头注意力机制
认为单个自注意力被认为是关注输入数据的某个方面,所以叠加实现多个头并行
-
输入 将文本通过分词算法得到长度为 N 的词元,再进一步得到向量序列(Embedding): 由两部分组成: 词元嵌入 + 位置嵌入(相加计算),维度为
-
位置嵌入: 位置嵌入是用来表示词元再序列中的绝对/相对位置,赋予模型有顺序感知的能力 位置向量的第i个特征维度:
d 是特征维度
-
编码 通过 编码(Encoder) 操作得到编码矩阵 C
-
解码 解码过程有一个重要的特色,就是为了防止模型看到"未来的信息",所以使用了 掩码机制来遮盖当前位置之后的信息
模型细节
其中的 Inputs(原始数据), Output(答案) 是 Teaching Forcing的体现
单头注意力
首先我们先计算 矩阵
其中的 Q 我可以理解成自己的特征,K表示他的特征,V 表示他的核心特征 Q表示查询,K表示教材中的索引(标签),V 表示教材中的实际内容 然后:
其中的 Softmax: 是针对于 一个词向量来进行的 Softmax 归一化
多头注意力
其实就是 将单头注意力的矩阵进行 拼接,然后通过一个 的矩阵输出 其中的参数矩阵:
其中的
相加 & 归一化
层归一化是一种正则化技术,被映射成 ,以及存在残差连接的形式:
关于层归一化的标准实现:
但是我们还是根据映射成 ,所以我们要学会计算 u 和
以及,
前馈神经网络
其实就是卷积神经网络的架构,
这个 b 是 XW 的每一层都需要加的
解码过程
编码中的输出作为 解码器中的第二个多头注意力中的 K,V(前面我说过这个是作为别人的特征),然后 Q(我的特征) 来自解码器模块中的第一个(掩码)多头注意力机制的输出
-
掩码多头注意力机制: 为了生成任务只能关于当前位置以及其之前的词元,采用了因果自注意力 简单的理解就是:
其中 M 就是掩码矩阵要将矩阵的右上角盖住,一般采用的是一个右上角全部为负无穷的矩阵
-
交叉注意力机制 其实就是 第二次多头注意力模块前面的输入有一部分是 编码器中的(K, V [ ] ), 有一部分是掩码多注意力机制的(Q[]),但是经过这个 多注意力模块的输出维度是
-
预测: 通过 Softmax 进行概率预测
训练推理
Decoder 的输入序列是将正确答案放入其中的(采用 Teacher Forcing),他并不依赖于前面的结构,所以可以进行并行计算
训练复杂度
针对于 RNN 结构: 时间复杂度是 ,不能够并行 针对于自注意力结构: 时间复杂度是 ,能够并行,不适合 长序列
预训练语言模型
Bert模型(Encoder-Only)
其中设计了两个预训练任务:
- 掩码语言模型(MLM):将词元遮盖住,猜遮盖住的部分是什么?(被Mask的就是训练的标签)
- 下一句预测(NSP):推理句子之间的关联性
GPT 模型(Decoder-only)
GPT—1 是 由 12层的 Transformer 解码器构建而成(decoder-only)
GPT Vs BERT
- GPT 是单向语境, BERT 是考虑了上下文信息
- GPT 是根据给定的上下文预测下一个值(因果语言模型),BERT 是类似填空
BERT:
- 双向
- 仅编码器
- 掩码语言模型(自编码)
- 面向理解任务
GPT:
- 单向(仅关注上文)
- 仅解码器
- 因果语言模型(自回归:根据已经说过的话去预测下一个字)
- 面向生成任务
大语言模型架构
基于 Transformer 的模型架构
首先Transformer 的核心部分有编码器,解码器 所以主流架构有:
编码(Encoder)大语言模型
基本特征:
- 也被称作表示模型(句子分类, Token 分类,问答任务)
- 使用 编码器提取文本特征和语义信息,使用掩码技术进行训练
ALBERT 模型
参数矩阵大小从 降低到 其中 是词汇表大小,H 是隐藏层维度
- 做法: 将单词映射到一个小的 E,然后在通过全连接映射到一个 大的H
- 跨层参数共享: BERT 有12个自注意力层,每一层的参数不同,ALBERT 的12层采用相同的参数进行训练(参数共享)
- SOP(句子顺序预测),让模型真正读懂句子之间的因果关系
RoBERTa
- 移除 NSP(句子关联性) 任务
- 引入动态掩码机制: 将训练数据复制多份,随机改变 训练数据中的 Mask 位置
- 调整数据规模,调整训练batch
- 字节对编码
解码(Decoder)大语言模型
基本特征:
- 也被称为生成模型
- 解码器处理输入的上下文信息,采用自回归生成方式逐步生成输出序列
典型模型1 GPT:
- GPT-1: 生成式预训练(无监督) + 判别式任务精调(有监督)
- GPT-2
- 核心思想: 当模型规模足够大,数据充分,可以直接用模型学习完成其他任务,无需进行微调
- 单向 Transformer(GPT-1 也用)
- 零样本学习:预训练的模型可以直接应用于多种下游任务没无需进行训练微调
- 多任务学习框架: 设计了一个多任务学习框架,减少对特定任务的依赖
- GPT-3
- 增加词向量长度
- 增加上下文窗口
- 引入新的注意力机制(局部带状稀疏注意力: 将注意力限制在一个局部区域内)
- 使用局部敏感哈希技术
典型模型2 LLaMA 模型
- 基于公开数据集进行训练
- 引入 RMSNorm 归一化处理: 增强训练稳定性
- 采用 ROPE策略: 有效处理不同长度的文本序列
- 使用 SwiGLU 激活函数: 提升模型的表达能力
编解码大语言模型
使用编码器对输入序列进行编码,提供文本序列中的特征和语义信息,然后在通过解码器,生成相应的输出序列 缺陷: 模型复杂度高,训练时间和计算资源消耗大
典型模型1: GLM 模型
非 Transformer 的模型架构
FAT模型
Transformer的弊端: 注意力机制的时间复杂度为 其实就是
以前是: 现在改成了 但是这样不能直接用 softmax,所以引入了 核函数来近似Softmax(替代 Softmax)
AFT模型
不再计算 Q,K 的相似度了,直接对 V 进行加权处理,加入了一个 可学习的位置偏差矩阵 w来弥补空间信息的缺失
RWKV模型
训练的时候是 类似于 AFT 的并行形式(可以并行计算) 推理的时候是 类似于 RNN 的递归形式,显存恒定,速度很快(不需要去回头看所有词,只需要上一个状态)
大模型架构配置
层归一化技术
- 典型技术
- 层后归一化: 加速神经网络的训练收敛速度
- 层前归一化: 防止梯度爆炸或梯度小时
- 夹心归一化: 有时候不能稳定大语言模型训练
- 相关计算:
- 计算均值:
- 计算方差:
- 归一化:
RMSNorm 归一化
- 计算均方根:
- 归一化:
激活函数
- RELU:
- GELU:
- GLU:
- Swish:
- SwiGLU:
[!TIP] 符号说明: : Sigmoid 函数 : 高斯误差函数 : 逐元素相乘 (Hadamard product) : 可学习的权重矩阵
位置编码
- 绝对位置编码
- 缺乏动态性
- 处理长距离依赖和长序列的能力有限
- 旋转位置编码:
注意力与偏置
- 双向注意力机制 结合正向和反向的上下文信息(BERT)
- 单向注意力机制 只考虑一个方向上的上下文信息(GPT)
控制模型输出随机性的两个方法:
- top-p(控制候选词,既要保证模型语言丰富性,又要保证逻辑性)
- 温度(温度高,概率压缩,所以选择的变化大)
多模态大模型架构
处理和整合多种模型和数据类型(文本,图像,音频等)
ViT(Vision Transformer)模型
利用Transformer 架构处理图像识别问题的深度学习模型
核心架构
-
图像嵌入模块 其实就是将图像分成图像块(可以理解成是字),然后再拼接(Concat)成一行 然后再通过 线性映射层 转化成 N(分成了多少个词) D 的矩阵,即图块嵌入
[!WARNING] 注意: 再图块嵌入的开头加入了一个 D 维嵌入 用来总结图像的整体信息 然后再加入位置编码: 图块嵌入 + 位置编码 图特征向量
-
编码 Vit 堆叠了若干个 Transformer 编码器来进行图像中的特征提取
-
分类 将 的编码器输出 作为图像表示,这个向量包含了图像的全局信息,实现图像分类, 其中: 在预训练阶段,使用具有一层隐藏层的多层感知机作为分类头, 在微调过程中,使用单层线性映射作为分类。
CLIP模型
基于 对比学习的多模态模型(通过对比正反两方面的实例来提取有意义的表征) 目标: 通过对比学习,模型学习到 文本-图像的匹配关系
- 可以实现零样本分类: CLIP 通过对比学习,学习到图像和文本之间的丰富语义关系(利用在训练过程中学到的通用知识和类别来描述)
模型架构
- 文本编码器 提取文本特征,常用面向文本的 Transformer 模型,一般是 隐藏状态为512维度,有 12层网络结构,每层配8个注意力头
- 图像编码器 提取图像特征,用于CNN模型或者 Vit 模型
训练过程
- 数据特征提取
-
文本编码器对N个文本进行编码,得到的训练批次文本数据输出的特征矩阵为: T = [],其中 T:,
-
图像编码器对这 N 个图像进行编码,特征维度和文本的特征维度一致
- 相似度计算 将每一个图像特征向量和文本特征进行组合(二维矩阵,构成 个特征对)
- 在 个特征对中,将 N个完成匹配的图像-文本对记作正样本,其他是负样本
- 使用余弦相似度来计算每对特征之间的相似度
- 对比学习 得到正负样本之间的相似度之后,在使用对比损失函数(如 InfoNCE) 来计算损失 优化目标: 最大化对角线(正确匹配)的数值,最小化其他的数值,目标函数写作
核心特点
- 图像检索: 通过相似性计算,来找到最配的图像
- 将文本和图像转化到统一嵌入空间,实现了无需训练新类别的零样本检测
BLIP模型
既能理解图像和文字,又能解释图片(用文本解释) 反复从样本集中抽取(有放回的),产生大量虚拟的数据集
- 数据清晰功能(CapFilt)(训练了一个 基础模型,用来给网络上的模型打标签和过滤)
- 多模态编码器-解码器混合(MED):图像文本对比学习,图像文本匹配(ITM 二分类任务),基于图像的语言建模(LM,训练模型以自回归的方式来生成相应的文本描述)
主要组件
视觉编码器 文本编码器 视觉文本编码器 视觉文本解码器
- ITC 图文对比目标函数:图文对比学习
- ITM 图文匹配目标函数: 预测图像文本匹配
- LM: 训练模型通过自回归来生成相应的文本描述
CapFilt 算法
Web数据 MED(多模态编解混合) Filter(根据 ITC 和 ITM 进行微调) 和 Captioner(LM微调) Captioner的文本和Filter 的图像进行匹配
BLIP-2模型概述
BLIP:
- 大量的数据和复杂的模型,导致重新端到端训练成本高
- 单模态模型并入多模态模型联合训练,可能会导致灾难性遗忘
BLIP2: 预训练阶段冻结 单模态模型参数(视觉编码和文本编码)
- 显著降低训练成本
- 避免了单模态模型的遗忘问题。
大模型预训练
预训练数据工程
预训练数据源
大模型预训练性能高度依赖:
- 预训练语料库质量与规模
- 数据预处理的策略和方法
多模态数据可以存进大模型预训练,让模型具备更强的泛化能力
数据处理
主要剔除数据集中的噪声,冗余信息,无关数据,以及有害内容
- 质量过滤
- 分类器法:训练一个小型分类器来判断文本质量
- 规则判断:认为设置规则过滤
- 指标阈值:设置特定指标筛选
- 聚类方法:筛选指定类别数据
- 去重效果
- 提高训练效率
- 减少训练集和测试集的重叠
- 防止数据导致过拟合
- 隐私删除
- 分类器法
- 规则判断
- 分词化
- 基于单词,字符,字词
数据与模型性能的关系
- 噪声数据:对模型训练和性能产生负面影响
- 有毒内容:识别毒性能力提高,影响模型
- 重复内容: 影响模型对有效信息的抽取能力
预训练方法
只要学到的知识足够多,任何有监督任务都可以通过无监督的方式来完成,即任何任务都能视作生成任务4
- 去噪自编码: 加入噪声,提高模型的鲁棒性
优化参数设计
- 批量训练 大批量可以减少梯度噪声,训练过程更为稳定,加速收敛
- 学习率 采用动态学习率调整策略,平衡训练速度和稳定性
- 优化器
- SGD计算效率高,收敛速度较慢
- RMSprop: 收敛速度快,稳定性高
- Adam: 动态调整每个参数的学习率
- AdamW: 收敛快,对超参数不敏感
- 稳定训练
- 权重衰减 通过在损失函数中添加与模型权重平方成正比的项,减少模型复杂度并防止过拟合,鼓励模型在训练过程中保持较小的权重
- 梯度裁剪 由于训练过程中的梯度累积,设计一个阈值来限制梯度大小,防止训练中的不稳定线性
可扩展训练技术
- 3D 并行
- 数据并行
- ZeRO-1: 训练过程中需要维护的大量中间变量,这些状态通常会占用大量内存 方案:通过将优化器参数分布式存储在多个设备, 使得单设备只保存一部分参数,从而显著减少了内存的使用
- ZeRO-2 梯度计算作为反向传播算法的核心,其数据规模非常庞大,会占用大量内存 方案:梯度也进行拆分,并将其分布到多个 GPU 上。每个 GPU 只需存储和处理一部分梯度
- ZeRO-3 拆分模型参数来优化内存效率
- 混合精度训练
大模型微调
指令微调
构建方法:
- 手动创建
- 模型生成
- 基于开源数据集扩展
关键点:
- 平衡数据分布: 确保个任务相关数据之间均衡
- 融合指令微调和预训练: 两个功能相互结合,促进微调过程稳健性和效率
对LLMSs的影响:
- 解锁LLMs的性能潜力(小模型经过微调性能也能很好)
- 提升任务泛化能力
核心架构
-
模态编码器 是对多种模态(图片、音频、视频)的数据进行特征提取和编码,将原始输入转换为高维特征表示 作用: 特征提取:不同模态数据使用不同网络架构进行特征提取。 嵌入层:每种模态的特征经过处理后,都会被映射到一个统一的嵌入空间中,这样不同模态的特征可以在同一空间内进行比较和融合
-
模态连接器 将模态编码器转换的中间表达,通过模态连接器模块,将中间表达转换为与大语言模型相同的表达
-
模态生成器 可选组件,它可以附加到LLM上,用于生成除文本之外的其他模态,如:图片、音频、视频等
对齐微调
要求数据要: 有用,诚实,无害,将大语言模型的行为与人类的价值观或者偏好对齐
RLHF算法
基于人类反馈对语言模型进行强化学习训练(奖励惩罚机制)
微调算法
-
LoRA: 大模型加速微调和训练算法
-
LISA 分层重要性采样微调算法
提示工程
提示词组成:角色,指令/任务,问题,上下文,实例
提示工程方法
- 零样本提示(Zero-Shot)
- 少样本提示(Few-Shot Prompting)
- 思维链提示(Chain-of-Thought)
RAG(检索增强生成): 给大模型加一个知识库
涌现
涌现是指系统中简单个体通过相互作用,产生出超出单个个体能力和行为的新属性或复杂模式的现象。 如果一个能力在较小的模型中不存在但在较大的语言模型中存在,则该能力即为“涌现能力”。 大语言模型一些典型的涌现能力:
- 上下文学习
- 指令遵循
- 多步推理
- 知识获取
- 自然语言理解
- 小模型在某些下游任务中具备随机性能,到达临界规模时才具备涌现能力,且涌现能力似乎是瞬间出现的。
- 涌现能力无法简单地通过推断较小模型的性能来预测大模型的性能。
- 涌现能力产生时的临界阈值无法确定,甚至在不同的语言模型或数据集上存在极大差异。
缩放法则
缩放法则利用幂律关系来描述大语言模型的性能随模型规模(参数数量、训练数据量和计算资源)的变化规律。
相关问题解答:
- 为什么使用 哈夫曼树
- 高频词路径短
- 期望高度为 log(V)
-
为什么不用平衡二叉树,用哈夫曼树 二叉树结构: 强制树的左右深度平衡。 哈夫曼: 基于词频构建。频率高的词靠近根节点,频率低的词远离根节点。
-
如何简化 P(S) 的计算 马尔可夫假设: 假设当前词的出现的概率与其前 N − 1 个连续的词相关
-
回退平滑,绝对值平滑应用场景
- 回退: 数据量相对充分,上下文敏感性
- 绝对值: 处理稀疏数据,更好的长尾处理
- 神经网络语言模型 (NNLM) 的作用与优势
- 解决稀疏性问题:遇到没有出现过的词,通过向量空间的相似性
- 泛化能力强:语义相似的词在向量空间中距离相近,模型能自动捕捉这种相似性,从而更好地泛化
- 参数更高效: 参数量不随上下文长度呈指数级增长
- RNN 及其与前馈神经网络的区别
- 信息流向:前馈网络的信号是单向流动的,各输入样本之间是独立的。RNN在隐藏层之间存在循环连接,当前时刻的输出不仅取决于当前输入,还取决于上一时刻的隐藏状态。
- 处理序列的能力: 前馈网络难以处理变长的序列数据且无法捕捉时间依赖性;RNN 天生适合捕捉序列中的上下文信息和时序依赖
- RNN 中的权重共享及其作用
- 减少参数量
- 处理变长序列
- 特征的平移不变性
- RNN 的基本更新公式 核心公式:
输出:
-
推理阶段无法使用Teacher Forcing,如何避免错误传递? 束搜索(选择概率最高的词,采用相关递归搜索策略)
-
解码器在训练和推理时区别?
- 训练阶段是 Teaching Forcing 机制(使用真实答案作为 Output 输入),推理阶段是 自回归(用自己的输出作为 Output输入)
- 训练阶段是 并行计算,推理阶段是 串行计算,但是可以缓存(K,V 编码部分可以并行得到 K,V)
- 训练阶段采用 Causal Mask,推理阶段天生 Mask
-
BERT模型在输入时如何区分两个句子? 有 [CLS] 和 [SEP] 分割符
-
位置编码的必要性
- 位置编码的必要性在于弥补模型对“顺序”感知的缺失。
- 增强序列处理能力
- 请比较 Transformer 模型中的多头自注意力机制与多头编码器-解码器注意力机制
多头自注意力机制
- 应用与来源:位于编码器和解码器内部。Q、K、V 全部来自同一个序列(即自己关注自己)。
- 效果:旨在捕捉序列内部的依赖关系。例如,在处理代词“it”时,模型通过自注意力机制将其与上下文中的名词关联起来。
- 多头的作用:允许模型同时从不同的“子空间”关注信息,丰富了特征表示。
多头编码器-解码器注意力机制
- 应用与来源: 位于解码器中间层。Q 来自解码器(当前生成的内容),K 和 V 来自编码器(源输入序列)。
- 效果: 旨在实现对齐(Alignment)。它让解码器在生成每一个词时,能够“回头看”源输入中最相关的部分
- 对性能的影响: 它是连接输入与输出的桥梁,直接决定了生成内容是否忠实于源输入。
- 比较Transformer框架 和 非 Transformer框架的语言模型 Transformer: 适用场景: 通用任务(翻译、问答、摘要)、需要快速落地、依赖现有开源生态(成熟生态)。
非 Transformer: 超长文本处理(如整本书分析、基因序列)、端侧设备部署、对推理延迟极其敏感的场景,计算复杂度更优,推理效率高
- 解释为什么目前的主流大模型是解码大语言模型?
- 训练效率与工程实现的简洁性:结构简单
- 推理阶段的缓存优化(KV Cache)
- 零样本泛化(少样本环境下的泛化能力强)
-
CLIP 模型非常适合用于零样本分类任务的原因? 它将图像分类问题降维打击成了一个图文匹配问题,
-
ViT 模型中 Patch 到 Token 的转化过程
在 Vision Transformer (ViT) 中,将二维图像转化为 Transformer 可处理的 Token 序列主要经历以下四个步骤:
- 图像分块:将输入图像 切分成 个固定大小的图块(Patch)
- 展平:将每个 2D 图块展平成一个 1D 向量
- 线性投影:通过一个可学习的线性层,将展平后的 Patch 向量映射到模型的固定维度 。此时,每个 Patch 正式变为一个 Token Embedding。
- 添加位置与类别标记:
- [CLS] Token:在序列头部插入一个可学习的分类 Token,用于汇总全局图像信息。
- 位置编码:将可学习的位置向量加到每个 Token 上,以保留图像的空间位置信息。
- CLIP 模型相对于传统图像分类模型的创新特点
CLIP 的核心创新在于打破了固定类别的限制,具体体现在:
-
监督方式变革:
- 传统模型:依赖人工标注的离散标签(如 "类别 ID: 345"),信息量有限且难以扩展。
- CLIP:直接从互联网上爬取的 4 亿对(图像-文本)数据中学习,利用自然语言作为监督信号,学习到的语义更丰富、更连贯。
-
学习范式创新(对比学习): CLIP 不进行分类预测,而是学习将图像和对应的文本描述映射到同一个特征空间,并拉近匹配对的距离,推远不匹配对的距离。
-
零样本迁移能力:
- 传统模型:只能识别训练集中固定的 个类别,遇到新类别需重新训练。
- CLIP:支持开放词汇分类。推理时,只需将类别名称填入提示模板,模型即可计算图像与文本的相似度,无需微调即可识别从未见过的类别。
-
BLIP 与 CLIP 模型的异同对比 模型架构
- CLIP:单纯的双塔结构。一个图像编码器和一个文本编码器,两者独立,仅在最后计算余弦相似度。
- BLIP:混合编码器-解码器结构。它包含三个部分:
- 单模态编码器。
- 基于图像的文本编码器。
- 基于图像的文本解码器。
训练目标
- CLIP:仅使用图文对比损失 (ITC),关注全局对齐。
- BLIP:联合优化三个目标:
- ITC:图文对齐。
- ITM:二分类任务,判断图文是否匹配,学习更细粒度的交互。
- LM:生成任务,给定图片生成文本描述。
数据处理(模型优化)
- CLIP:直接使用网络爬取的噪声数据,依靠巨大的数据量(4亿)弥补噪音影响。
- BLIP:引入 CapFilt 策略。利用一个微调后的 Captioner 生成合成字幕,再用 Filter 过滤掉噪声数据。
实际应用
- CLIP:擅长检索(以文搜图、以图搜文)和分类任务,但不具备文本生成能力。
- BLIP:是全能型选手。既擅长理解任务(检索、VQA),也擅长生成任务(图像描述生成),应用范围更广。
- 如何以较小的代价修正大语言模型存储的知识?
- 检索增强生成(RAG)
- 参数高效微调
- 提示工程
- 讨论在大规模语言模型预训练中常用的优化技巧
- 学习率调度
- 混合精度训练
- 分布式训练
- 梯度裁剪
- 梯度累积
-
指令微调的作用 预训练侧重于知识注入(学习世界是什么样的);指令微调侧重于能力激发(学习如何按照特定格式和要求回答问题)。
-
PPO 和 DPO 的缺陷
- PPO (近端策略优化): 训练极不稳定,对超参数敏感,且需要同时维护多个模型,显存开销巨大,训练慢。
- DPO (直接偏好优化): 虽然去掉了奖励模型更简单,但容易对偏好数据过拟合,且对数据质量极其敏感(如果数据中有噪音,效果下降明显)
- RLHF 的其他应用领域
- 机器人控制: 通过人类反馈教机器人做动作。
- 代码生成: 优化代码的可编译性和执行效率。
- AI 智能体 (Agents): 训练游戏中的NPC或自动驾驶决策系统。
- 生物化学: 如优化蛋白质结构预测。
- 如何优化减小大语言模型的训练成本
- 随机尝试
- 穷举搜索
- 查找最佳的超参数规则
- 提示工程与提示学习的区别
- 提示工程本质: 是人工设计的“硬提示”(Hard Prompt)。
- 提示学习本质:是机器自动优化的“软提示”(Soft Prompt)。