随着2022年底ChatGPT掀起的新一轮人工智能高潮,LLM,Transformer,强化学习等概念先后登顶热搜。人们在惊叹大语言模型展现出的泛化能力。对于其背后的底层原理也越发涌现出浓厚的兴趣。本篇博客立足于《深度学习基础与概念》一书,分享一些粗浅的理解,适合对AI技术感兴趣的小白,如有问题还望理解并指出。
我会结合《深度学习基础与概念》(以下简称新圣经)第一章深度学习革命的内容和自己的粗浅理解,介绍一些AI中的基础概念,帮助读者更好的理解深度学习底层框架,为进一步深入学习做好准备:
1.1、深度学习的影响:
新圣经在开篇第一节介绍了机器学习在医学诊断、蛋白质结构预测、图像合成和大语言模型四个领域的现实案例,以帮助读者能过更好的体会AI领域发生的深度变化,感兴趣的看官可以去原书阅读。
1.2、初入圣经:
为了降低新手在阅读时的困难,作者很贴心的放上了一个简单的教学案例,展示了机器学习领域中的基本概念,以便后续进行更深入学习。
1、数据:
如果对机器学习模型有一定了解的同学,必然知道数据的重要的性,很多时候决定一个模型能力上限就在于能不能给它提供足够优质的数据,去拟合数据的分布。书中给出了一个合成数据的例子:
用xxx表示输入变量,用ttt表示输出的目标变量,我们假设需要通过数据拟合的是一个简单的三角函数:sin(2πx)sin(2\pi x)sin(2πx),那么我们可以通过正弦函数采样多个输入-输出对,从而构建出一个训练数据集:NNN。如下图所示:
仔细观察会发现,书中采样的十个数据点并非完全符合sin(2πx)sin(2\pi x)sin(2πx),这是因为现实环境往往是复杂多变的,零噪声环境是不存在的!也就是说我们训练的模型会遇到各种各样的噪声,因此如果训练集中加入一些错误的噪点,有助于提高模型在真实环境中的泛化性。
2、自监督学习:
自监督学习(SSL)这一部分事实上只是在第一章介绍大语言模型时简单略过的一部分,但是为了后面学习的理解,我觉得还是有必要简单了解一下,并理解训练方法,模型架构,和生成策略之间的关系,高屋建瓴的开始学习。
**自监督学习的原理与目标:**模型通过学习文本中词语之间的上下文关系,理解语言的结构和语义。无需人工标注标签,而是利用文本数据本身的顺序性(时间或位置)生成监督信号。例如,输入一个词序列,模型的任务是预测下一个词。
**输入:**从文本中截取一段连续的词序列(例如,“I love to play [MASK] games”),但输入可能是完整的词序列(如“GPT”的自回归模型)或部分遮蔽的词序列(如“BERT”的掩码语言模型)。
**输出:**输入序列中下一个词(例如,“basketball”)或被遮蔽的词(例如,“soccer”)。
以下是一个简单的自回归学习案例:
import torch
import torch.nn as nn
# 定义自回归语言模型(单层Transformer解码器)
class AutoregressiveModel(nn.Module):
def __init__(self, vocab_size, embed_dim=128, hidden_dim=256):
super().__init__()
self.embedding = nn.Embedding(vocab_size, embed_dim)
self.transformer = nn.TransformerDecoderLayer(d_model=embed_dim, nhead=4)
self.fc = nn.Linear(embed_dim, vocab_size)
def forward(self, x):
x = self.embedding(x)
x = self.transformer(x)
return self.fc(x)
# 构造训练数据(假设输入为词的索引)
input_seq = torch.tensor([[1, 2, 3, 4]]) # 输入序列
target_seq = torch.tensor() # 目标词(下一个词)
# 模型初始化与训练
model = AutoregressiveModel(vocab_size=1000)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
# 前向传播与损失计算
output = model(input_seq)
loss = criterion(output[:, -1, :], target_seq.squeeze()) # 仅预测最后一个词
loss.backward()
optimizer.step()
3、线性模型:
回到我们采样得到的合成数据上,我们的目的是为了拟合sin(2πx)sin(2\pi x)sin(2πx)这个目标函数,但是,该采用什么样的形式来展开学习呢?书中这里给出了一个非正式的解决方式,通过多项式函数来进行曲线拟合:
y(x,w)=w0+w1x+w2x2+⋯+wmxm=∑j=0Mwjxj
y(x, \boldsymbol{w}) = w_0+w_1x+w_2x^2+ \cdots +w_mx^m = \sum_{j=0}^{M}w_jx^j
y(x,w)=w0+w1x+w2x2+⋯+wmxm=j=0∑Mwjxj
从这个公式上我们可以看到不管你是通过多少个多项式进行拟合,最后都可以通过线性变化整合成一个符合线性模型。这就是为什么我们在多神经网络的每一层都需要加入一个激活函数来进行训练。
4、自回归:
自回归(Autoregressive Model, AR)的定义与核心原理:
自回归是一种时间序列分析模型,其核心思想是用变量的历史观测值来预测当前值。具体而言,自回归模型假设某一时刻的变量值与它过去若干时刻的值存在线性关系,通过建立这种关系来捕捉时间序列的动态变化规律。
自回归属于模型的生成策略或者是模型范式,那么训练方法SSL,建模的结构是线性模型,AR是生成策略,三者的关系是什么呢?
以书法为例:
- 生成策略(AR) 确定书写顺序(先横后撇);
- 建模结构(线性模型) 用直线段描述每一笔的轨迹(如横画是 y=0.5 的水平线);
- 训练方法(SSL) 通过 “遮住前一笔,预测下一笔” 来练习(如只看第一横,猜第二横的位置)。
最后,书中还介绍了损失函数、模型复杂度的估计、正则化以及机器学习发展的历史,对于刚入门的小白却是非常友好,建议一读。