深度学习基础概念
偏差方差
泛化误差
模型的平方预测误差的期望
$$Err(\mathbf{x})=E\left[\left(y-f(\mathbf{x};D)\right)2\right]=\mathbb{E}_D\left[\left(f(\boldsymbol{x};D)-\bar{f}\left(\boldsymbol{x}\right)\right)2\right]+\left(\bar{f}(\boldsymbol{x})-y\right)2+\mathbb{E}_D\left[(y_D-y)2\right]$$
方差
方差是指模型对于不同训练集的预测结果的波动程度(即泛化能力),刻画了数据扰动所造成的影响。高方差意味着模型过于复杂,对训练数据中的噪声和细节过于敏感,表示模型过拟合
使用样本数相同的不同训练集产生的方差
$$\mathrm{var}(\mathbf{x})=\mathrm{E}_\mathrm{D}\left[\left(\mathrm{f}(\mathbf{x};\mathrm{D})-\overline{\mathrm{f}}(\mathbf{x})\right)^2\right]$$
其中,算法 𝑓 对测试样本 𝑥 的期望预测(不同训练集 𝐷 上模型 𝑓 对测试样本 𝑥 的预测输出的期望)$\overline{f}(\mathbf{x})=E_D[f\left(\mathbf{x};D\right)]$
偏差
偏差是指模型的预测值与真实值之间的差异,模型本身的拟合能力。高偏差意味着模型过于简单,无法捕捉到数据的复杂模式,表示模型欠拟合
期望预测与真实标记的误差
$$\mathrm{bias}2(\mathbf{x})=\left(\overline{\mathrm{f}}(\mathbf{x})-\mathrm{y}\right)2$$
噪声
表达了当前任务上任何模型所能达到的期望泛化误差的下界,刻画了学习问题本身的难度。
真实标记与数据集中的实际标记间的偏差
$$\varepsilon2=E_D\left[(y_D-y)2\right]$$
偏差-方差窘境
- 偏向左侧时,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导泛化误差,称为欠拟合现象
- 增加模型的迭代次数;更换描述能力更强的模型;生成更多特征供训练使用;降低正则化水平
- 偏向右侧时,模型的拟合能力非常强,数据轻微变化都能导致模型发生变化,如果过分学习训练数据的特点,则会发生过拟合现象
- 扩增训练集;减少训练使用的特征的数量;降低模型复杂度;提高正则化水平
为了解决“偏差和方差在一定程度上是有冲突的”的问题,可以采用K折交叉验证或正则化,它们分别从数据划分和模型复杂度两个角度入手,提升模型的泛化能力和稳健性:
- K折交叉验证通过多次划分和验证,减少因数据划分不当而导致的性能估计偏差
- 正则化在损失函数中加入一个与模型复杂度相关的惩罚项,以限制模型的复杂度并防止过拟合 参考文章
- L1正则化是指权值向量w中各个元素的绝对值之和,可以使得参数稀疏化,即得到的参数是一个稀疏矩阵,进而可以用于特征选择。二维平面图像:
- L2正则化是指权值向量w中各个元素的平方和然后再求平方根,让权值尽可能小,如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是抗扰动能力强。二维平面图像:
模型训练
优化器
Adam:自适应学习率,通过计算梯度的一阶矩(均值)和二阶矩(未中心化的方差)来调整学习率
AdamW:带有权重衰减和学习率预热的Adam优化器。改进了Adam,将权重衰退和梯度更新解耦,把L2正则化移到权重更新时而不是梯度计算时
训练方法
监督学习
训练数据既有特征(feature)又有标签(label),通过训练,让机器可以自己找到特征和标签之间的联系,在面对只有特征没有标签的数据时,可以判断出标签。
无监督学习
数据只有特征(feature)无标签(label),是一种机器学习的训练方式,它本质上是一个统计手段,在没有标签的数据里可以发现潜在的一些结构的一种训练方式。
半监督学习
利用同时包含有标签和无标签的数据来构建一个模型,使得模型能够在测试阶段更好地泛化到新的、未见过的数据。
强化学习
让一个智能体(agent)在环境(Enviroment)中通过尝试和错误来学习行为(Action)策略。智能体通过与环境进行交互,根据奖励信号来调整其行为策略,以达到最大化累积奖励的目标。
针对 PPO 算法的优化:
- 归一化奖励分数、将奖励分数做白化处理
RLHF
Reinforcement Learning from Human Feedback,以强化学习方式依据人类反馈优化语言模型,是 OpenAI 提出的生成领域(Decoder_only)的新训练范式
Policy Gradient
RM+PPO
步骤一、预训练语言模型
步骤二、训练奖励模型 RM
步骤三、用强化学习 PPO 微调
DPO
KTO
ORPO
损失函数
MSELoss 回归任务
CrossEntropyLoss 单标签分类
BCEWithLogitsLoss 多标签分类
Torch
torch.nn.Parameter()
将一个不可训练的 tensor 转换成可以训练的类型 parameter,并将这个 parameter 绑定到这个 module 里面