从机器学习到Transformer

面向大模型应用开发岗的 12/13/14/16 四篇精华合并版:只保留高频考点——评估指标、过拟合、损失函数、优化器演进、词向量演进、序列建模演进、文本分类四种实现,每节附面试官追问

12-机器学习、13-深度学习与PyTorch、14-nlp、16-text 的精华合并版,按面试主线重组。张量操作、经典算法细节、完整项目代码等低频内容见原篇,本文不重复。

一、模型评估与泛化(必考)

混淆矩阵是底表,四个指标全从它算出来:

指标 含义 一句话
准确率 Accuracy 全部预测中对的比例 样本不均衡时失真(99% 负样本全猜负也有 99%)
精确率 Precision 预测为正中真为正的比例 报出来的有多准
召回率 Recall 真实正类被找出的比例 有没有漏
F1 精确率与召回率的调和平均 折中指标

泛化三件套:

  • 拟合:学到的规律与真实分布的接近程度

  • 过拟合:训练好、测试差 → 背了噪声;对策:更多数据、正则化、Dropout、早停

  • 欠拟合:训练测试都差 → 没学会;对策:加特征、加模型容量、训练更久

面试官追问:RAGAS 的 context_precision / context_recall 和这里什么关系?—— 思想同源,前者评估检索质量,后者评估生成质量(见 36 篇)

微调场景追问:小数据微调为什么选 LoRA 而不是全参?—— 低秩约束天然抑制过拟合,可训参数少(0.1% 量级),不易背噪声

二、损失函数与优化器(必考)

损失函数三兄弟:

损失 任务 要点
MSE 回归 平方差平均,看距离
交叉熵 多分类 softmax + 概率分布差异
BCE 二分类/多标签 交叉熵特例,sigmoid 输出
  • 样本不均衡 → focal loss(降低易分样本权重,聚焦难样本)

  • 一句话总结:回归看距离,分类看概率分布差异

面试官追问:SFT 微调用什么损失?—— 自回归下一词预测的交叉熵,且只对 response 部分计算(见 32 篇)

优化器演进链(讲清每一环解决什么问题):

SGD(快但震荡)
 → +Momentum(指数加权平均,平滑方向)
 → +自适应学习率(AdaGrad/RMSProp,按参数调步长)
 = Adam(动量 + 自适应,工程默认)
 → AdamW(解耦权重衰减,大模型标配)
  • AdamW 关键点:Adam 的自适应学习率会让 L2 正则失效;AdamW 把权重衰减从梯度里拆出来单独作用,正则真正生效,泛化更好 —— 当前大模型训练/微调的绝对标配

面试官追问:为什么 AdamW 替代 Adam 成为标配?—— 见上。

再追问学习率:LoRA 微调常用 1e-4 量级,比全参微调(1e-5 量级)大一个数量级

Dropout:训练时随机关掉部分神经元,强迫网络不依赖单点;预测时全开。Transformer 里的 attention dropout 是同一思想的延续。

三、文本表示演进(高频)

一条主线:稀疏 → 静态稠密 → 上下文动态

One-hot / BoW / TF-IDF    Word2Vec / GloVe / FastText    ELMo / BERT / GPT
高维稀疏、无语义           低维稠密、一词一向量             向量随上下文变化、解决一词多义
  • TF-IDF = 词频(这篇文档里多重要)× 逆文档频率(全语料越稀有越有区分度)—— BM25 是它的概率化改良,正是 RAG 混合检索的稀疏召回路(见 36 篇)

  • Word2Vec 两种模式:CBOW 两边预测中间;Skip-gram 中间预测两边。缺点:静态向量,多义词处理差

  • BERT/GPT:上下文嵌入,同一个词在不同语境向量不同

面试官追问:Word2Vec 和 BGE 这类 embedding 模型的区别?—— Word2Vec 是静态词向量;BGE 是 Transformer 编码的句子级语义向量,对比学习训练,直接服务于检索召回

再追问:词向量 ≠ 语义向量 —— 前者是词级别的静态表示,后者是深层模型对整段文本的上下文表示

四、序列建模演进(高频)

一条主线:RNN → LSTM/GRU → Seq2Seq+Attention → Transformer

模型 核心机制 解决/遗留问题
RNN $h\_t$ 依赖 $h\_{t-1}$ 传递历史 梯度消失、记不住长依赖
LSTM 三门(遗忘/输入/输出)+ 细胞状态 缓解长期依赖,但串行慢
GRU 两门(更新/重置),合并细胞/隐藏状态 LSTM 简化版,参数更少
Seq2Seq Encoder-Decoder 架构 长序列压缩成固定向量,信息丢失
+Attention 解码时对输入加权关注 缓解信息丢失 → 引出 Transformer
  • 门的本质:用可学习的开关控制信息流动,记住关键、遗忘无关

  • Bi-LSTM / Bi-GRU:双向处理,同时看前文和后文

面试官追问:Transformer 为什么取代 RNN 系?—— ① 自注意力完全并行,训练快;② 任意两个位置直连,长程依赖一步到位;③ RNN 的时序依赖无法并行。

五、Transformer 架构(核心必考)

1. 核心思想

完全基于自注意力机制,实现并行计算与长距离依赖建模。

关键对比:RNN/LSTM 是"按顺序读"(串行),Transformer 是"全文同时看"(并行)——训练效率大幅提升。

2. 三大核心机制

自注意力(Self-Attention):理解某个词时,动态判断句中哪些词更值得关注。比如解析指代关系时,自动给相关词更高权重。

多头注意力(Multi-Head):从多个角度同时捕捉依赖——有的关注主谓关系,有的关注长距离指代,有的捕捉局部结构。多视角组合,表示更丰富。

位置编码(Positional Encoding):自注意力本身无序(输入排列后结果不变),需用正弦余弦波为每个位置注入顺序信息,支持相对位置学习和长度泛化。

残差连接作用:梯度"短路"直通浅层,缓解梯度消失;保留原始信息,模型学新特征又不丢底层细节,收敛更快。

3. 完整结构

Encoder(编码器):N 层堆叠 → 多头自注意力 + 前馈网络(FFN),每层带残差连接 + 归一化

Decoder(解码器):N 层堆叠 → 掩码自注意力(防偷看未来)+ 交叉注意力(关联 Encoder 输出)+ FFN,同样带残差与归一化

关键技术点:

  • 纯注意力机制,摒弃 RNN/CNN
  • 并行计算:所有 token 一次性算完
  • 长依赖建模:任意两位置直连,一步到位

4. 衍生架构定位

BERT 用 Encoder 双向理解(适合分类、匹配等理解任务),GPT 用 Decoder 单向生成(适合对话、写作等生成任务),T5 统一成文本转换框架。

面试记住:Transformer 是底座,理解类选 BERT,生成类选 GPT。

5. 快速自测

考点 答案
Transformer 核心 自注意力 + 并行计算 + 长依赖
为什么需要位置编码 自注意力无序,需注入顺序
Encoder vs Decoder Encoder 双向理解,Decoder 单向生成
BERT/GPT定位 理解类/BERT,生成类/GPT
残差连接作用 梯度直通、缓解退化、保留原信息
Mask 自注意力用途 防止解码器偷看未来 token

面试官追问:为什么微调常用 LoRA?—— 低秩分解减少参数(0.1% 量级),降低过拟合,节省显存,效率高。(详见 32 篇)

六、文本分类项目实战(高频)

四种实现方式选型:

方式 核心特点 适用场景
随机森林 + TF-IDF 多树投票,开发简单、速度快 短时间内快速验证效果
FastText 词向量平均后分类,训练极快 要深度学习方式且追求速度
BERT 双向预训练模型,结构复杂、可调空间大 追求高准确率、时间充裕
LLM 大模型 零训练成本,提示词直接分类 只想写 Prompt 快速实现

BERT vs FastText:BERT 上下文理解强、准确率高,但模型复杂、资源消耗大;FastText 轻量、训练快、效果稳定,适合资源受限或快速建基线。FastText 会将词拆成 n-gram 子词,处理生僻词和拼写变化更友好。

1. 随机森林:TF-IDF 特征 + 树投票

tfidf = TfidfVectorizer(stop_words=stop_word_list)   # 特征提取
model = RandomForestClassifier(n_jobs=-1)
model.fit(x_train, y_train)

为什么用 TF-IDF:决策树在每个节点上只选一个特征(某个词),通过权重阈值把样本分到不同类别。

2. FastText:标签格式 + 自动调优

数据格式:每行一个文档,类别标签以 __label__name 前缀放在最前面。

model = fasttext.train_supervised(
    input=config.process_char_train_datapath,
    autotuneValidationFile=config.process_char_dev_datapath,
    autotuneDuration=3*60,   # 自动调优持续 3 分钟
)

3. BERT:预训练模型 + 分类头(迁移学习)

self.bert_model = BertModel.from_pretrained(config.bert_path)
in_features = BertConfig.from_pretrained(config.bert_path).hidden_size
self.linear = nn.Linear(in_features, config.classname_len)

迁移学习:用在大量语料上训练的预训练模型迁移到自己的任务。两种方式——开箱即用(预训练任务与目标任务相似,直接使用)、微调(垂直领域数据继续训练)。微调时可更新全部或部分权重,也可冻结主干只训分类头;LoRA(低秩适配)/ QLoRA(量化 LoRA)详见 32 篇。

常见预训练模型:

模型 隐层数 隐藏层维度 注意力头数 参数量 训练语料
bert-base-uncased 12 768 12 110M 小写英文
bert-large-uncased 24 1024 16 340M 小写英文
bert-base-chinese 12 768 12 110M 简繁中文

面试高频:bert-base-chinese 有 12 个自注意力头。

BERT 改进方向:减少参数 ALBERT、改进训练策略 RoBERTa、修正预训练差异 MacBERT、改变遮掩单位 SpanBERT;其他常见预训练模型还有 GPT、T5。

4. Hugging Face Transformers:三个使用层级

提供 BERT、GPT、T5 等预训练模型和统一 API,无需从零训练。

层级 封装程度 适用场景
Pipeline 最高 几行代码完成任务,适合快速验证
AutoModel 中 平衡便利性和灵活性
SpecificModel 最细 定制网络或 LoRA 微调

5. LLM 大模型:提示词直接分类

零训练成本,调用 OpenAI 兼容接口(如 qwen-plus)。关键参数:temperature=0.1 低温度确保稳定输出;max_tokens=10 只需输出一个类别名。

提示词三要素:角色设定(专业新闻分类器)+ 规则约束(仅输出英文类别名、完全基于标题、拒绝解释)+ few-shot 示例。完整代码见原篇(16-text)。

面试官追问:生产环境四种方式怎么选?—— 先用 LLM 零成本跑通基线;有延迟/成本约束再下训小模型:速度优先 FastText,精度优先 BERT 微调。

附:快速自测

考点 一句话答案
精确率 vs 召回率 报的准不准 vs 漏没漏
F1 是什么 精确率和召回率的调和平均
过拟合对策 更多数据、正则化、Dropout、早停
三个损失函数 回归 MSE、多分类交叉熵、二分类 BCE
AdamW vs Adam 解耦权重衰减,让正则真正生效
Word2Vec 两种模式 CBOW 上下文预测中间词;Skip-gram 相反
词向量 vs 语义向量 静态词级表示 vs 上下文句子级表示
LSTM 三门 遗忘门、输入门、输出门
RNN 的死穴 梯度消失 + 无法并行
文本分类四种方式 随机森林快验证 / FastText 求速度 / BERT 求精度 / LLM 零训练
bert-base-chinese 头数 12 个自注意力头
HF 三个层级 Pipeline 快速验证 → AutoModel 平衡 → SpecificModel 定制