共计 2036 个字符,预计需要花费 6 分钟才能阅读完成。
传统编程与概率统计模型的根本差异
传统编程是确定性的:输入固定时输出必然相同,就像菜谱严格规定步骤。而生成式 AI 更像厨师根据经验(概率)即兴发挥——相同输入可能产生不同但合理的输出,核心差异在于:

- 决策依据 :
if-else规则 vs 概率分布 - 输出特性:精确解 vs 可能性空间内的采样
- 适应能力:硬编码逻辑 vs 从数据中学习模式
举个现实例子:用传统方法写诗歌生成器需要手动定义押韵规则和词汇库,而 AI 模型通过分析大量诗歌自动掌握平仄规律和意象组合概率。
生成式模型的概率基石
贝叶斯定理:逆向概率的魔法
公式看起来吓人:P(A|B) = [P(B|A)*P(A)]/P(B),其实可以理解为:
- 先验概率 P(A):看到数据前的初始认知(比如『下雨概率 20%』)
- 似然度 P(B|A):假设成立时观察到数据的概率(『乌云密布时下雨概率 80%』)
- 后验概率 P(A|B):考虑新证据后的修正判断(『现在乌云密布,实际下雨概率变为 …』)
在 AI 生成文本时,模型不断计算『在当前上下文后接某个词的概率』,本质上是在做贝叶斯更新。
马尔可夫链:记忆有限的概率舞步
假设下一个状态只依赖当前状态(一阶马尔可夫性),就像你写句子时主要考虑前一个词的影响。虽然现代 Transformer 有更长记忆,但核心思想仍延续这种局部依赖的建模方式。
动手实现微型文本生成器
用 PyTorch 搭建基于字符的 LSTM 模型(代码已简化,完整版需处理数据加载等细节):
import torch
import torch.nn as nn
class CharGenerator(nn.Module):
def __init__(self, vocab_size, hidden_size=128):
super().__init__()
self.embed = nn.Embedding(vocab_size, 16) # 字符转向量
self.lstm = nn.LSTM(16, hidden_size, batch_first=True)
self.head = nn.Linear(hidden_size, vocab_size)
def forward(self, x, hidden=None):
x = self.embed(x) # (batch, seq_len) -> (batch, seq_len, 16)
x, hidden = self.lstm(x, hidden) # 通过 LSTM 处理序列
return self.head(x), hidden # 输出每个位置的下字符概率
# 训练伪代码示例(实际需要准备数据加载和训练循环)model = CharGenerator(len(vocab))
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters())
for epoch in range(100):
hidden = None
for batch in dataloader:
inputs, targets = batch
optimizer.zero_grad()
outputs, hidden = model(inputs, hidden)
loss = criterion(outputs.view(-1, len(vocab)), targets.view(-1))
loss.backward()
optimizer.step()
关键点说明:
- 模型学习的是每个时间步的 字符出现概率分布
- 生成时通过
torch.multinomial()按概率采样 - 温度参数控制采样随机性(后文详述)
质量与复杂度的平衡术
模型表现通常呈现这样的规律:
- 参数量级:1 万参数可能只能生成单词片段,1 亿参数能写连贯段落
- 数据需求:每增加 10 倍参数,通常需要 100 倍训练数据
- 收益递减:超过临界点后,参数增长带来的提升逐渐放缓
实践中需要权衡:
- 手机端应用可能选择轻量级模型
- 创意写作可使用更大模型获得多样性
新手避坑指南
数据预处理
- 陷阱:直接使用原始文本导致标点符号混乱
- 解法:统一全 / 半角,处理特殊符号
超参数设置
- 学习率:太大(如 0.1)导致震荡,太小(如 1e-6)收敛慢
- 批量大小:GPU 显存决定上限,一般从 64 开始尝试
生成控制
- 重复生成:忘记重置 LSTM 的 hidden state
- 生僻词泛滥:未正确设置 temperature 参数
进阶改进方向
- 架构升级:
- 用 Transformer 替代 LSTM
-
尝试 Mixture of Experts 结构
-
训练技巧:
- 课程学习(先学简单样本)
-
对抗训练提高鲁棒性
-
解码策略:
- Beam Search 增加连贯性
- Top- p 采样控制多样性
实践任务建议
- 在示例代码基础上尝试:
- 调整 temperature 参数(0.3~1.5 范围)观察生成效果
-
改用单词级 (token) 代替字符级建模
-
可视化分析:
- 绘制训练过程中的 loss 曲线
- 用 PCA 降维展示字符向量的空间分布
生成式 AI 就像用概率积木搭建创意城堡——理解统计本质后,你会发现所谓『智能涌现』不过是精心设计的概率游戏。建议从 Kaggle 的入门竞赛开始实战,逐步体会模型调参的微妙艺术。
正文完
