深度学习篇:
神经网络 vs 物理/数学家P131:
物理/数学家 | 神经网络 | |
特点 | 从第一性原理出发,对一种现象进行功能性描述,然后从测量中估计未知的参数,从而得到一个精确的、真实世界的模型。 | 一组函数,近似出大范围的输入输出关系,不需要对某一现象构建解释模型。 |
缺点 | 有时缺乏能力、信息或计算资源来构建明确的模型。 | 利用数据驱动,放弃解释,以换取解决日益复杂问题的可能性。 |
神经网络单元机理【P126】:
在(深度)神经网络中,最简单的单元是线性运算(wx(缩放)+b(偏移)),然后是激活函数。
激活函数 | |
特点 | 1,非线性 2,可微 3,至少有一个敏感范围。在此范围内对输入的变化会导致输出变化。且包含许多不敏感(或饱和)的范围,在此范围内输入的变化导致输出很小或无变化。 |
作用 | 一、在模型内部,允许输出函数在不同值有不同的斜率,这是线性函数无法做到的。通过为许多输出设置不同斜率,神经网络才可以近似任意函数。 二、在网络的最后一层,将前面线性运算的输出集中到指定的范围内。 |
在一个由“线性”+“激活”单元构成的网络中,当不同的输入呈现给网络时,不同的单元会对相同的输入在不同范围内响应;与这些输入相关的loss将主要影响对应敏感区域工作的神经元,使其他单元不受学习过程的影响。
训练的机制(P98-101)
假设有两个旋钮(params参数)的游戏机,并且屏幕有一个小球L(损失函数值)。现在需要你调节两个旋钮w和b,让给定输入数据及labels后,小球L最低,这就是训练的过程。你在调节两个旋钮中,决定往哪个方向旋转,旋转多块会导致球快速下降,就是在找当前L的梯度。
假设我们有了神经网络的正向预测函数模型解析表达式,以及损失函数L=L(y,m)解析表达式。
那么观测L的梯度,在数学里的解析表达式为:
训练的欠拟合和过拟合:【P115】
我们训练的方法是从总数据集中取出一些点(验证集)作为“考试”,并用剩下的点进行“学习和训练”。我们要保证我们训练的题目里面不能含考试的题目。
我们一方面需要模型有足够的能力来拟合训练集,另一方面我们需要避免模型过拟合。因此,为神经网络模型选择合适的参数过程分为2步:
step1:增大参数直到拟合。
step2:缩小参数直到停止过拟合。
通过判断模型在训练集和验证集的损失函数值随着迭代轮数变化曲线,我们就可以判断是过拟合还是欠拟合。此处有判断过拟合和欠拟合的标准图,【P119】,我们的模型设计和修正是在拟合和过拟合之间寻求平衡。(注意,在训练过程中,验证集的计算需要开启不自动求导,以防“试卷”里的题目泄露到“训练册”里。这个很重要,一旦泄露混在一起,我们后续将很难评估模型的过拟合或欠拟合。)
出现的结果 | 可能原因——解决方法 |
欠拟合 | 1,网络模型参数数目太少,网络能够近似的函数形状太简单。——增加网络模型参数数目。 2,本身数据就没有相关性,比如温度和电场强度。——审视待拟合自变量和应变量是否相关。 |
过拟合 | 数据不够,例如从正弦曲线上定期低频率采样,我们就很难拟合一个模型。 假如我们有足够的数据,还是过拟合该怎么办? 一、在损失函数中添加惩罚项。 二、在输入样本中添加噪声 三、让我们的模型更简单。更简单的模型可能不能完美拟合训练数据,但在数据点之间可能更有规律。 |
反向传播:
通过链式规则反向传播导数。想一想当输入在响应范围内时,loss会通过激活函数更有效地向后传播,而不会对输入饱和的神经元产生很大的影响。(输出周围平坦,梯度接近于0)
基本要求——我们处理的所有函数是可微的。
因为神经网络是线性运算单元(wx+b)和激活函数单元的组合或嵌套,所以只需要“线性运算”和“激活函数”都是可微的(能轻易算出解析式),那么其组成的网络一定可微。
换句话说:即使我们有一个包含数百万参数的复杂模型,只要我们的基本模型单元是可微的,计算关于参数的损失梯度就是写出导数的解析表达式,并计算一次。
输入数据归一化:
当我们计算出来的和如果差别几十倍甚至上百倍,这意味着权重偏置存在于不同的比例空间。此时用适合w的学习率会导致b过量或不足。
有两种方案:
一、每个参数有单独自己的学习率,缺点是成千上万个参数,需要对应设置成千上万学习率。
二、改变输入数据都在-1~1之间,这样梯度差别不会太远。
通常,现有都是选择第二种,这被成为输入参数的归一化。
优化器:
利用计算出来的梯度,更新w,b的方法。都被封装成函数了,可按需调用。
比如SGD 优化器,可以随机梯度下降来更新w,b。
又如Adam优化器的学习率是自适应设置的。此外他对参数的缩放不敏感,这代表我们可以使用原始的(不用归一化输入),甚至可以将学习率提高到1e-1.
行业大模型篇
对于有些应用场景,我们不局限于从0构建自己模型,而是借助最好的十几个现有开源模型进行构建。这个领域也是非常有前景和潜力的。这里面介绍行业大模型的构建方法:
有四大关键技术:
一、增量预训练SFT——行业知识扩充和领域适配。
二、RLHF——行业标准的对齐优化
三、向量化知识库——知识增强的行业问答
四、toolformer--大模型行业插件。
【训练行业大模型】千帆ModelBuilder模型SFT精调教程_哔哩哔哩_bilibili
这里面分为:
post-pretrain——直接在大模型中注入领域知识: 数据量大、预算充足的场景。如金融、医疗、司法。大于10亿token的高质量语义库。
RLHF:强化学习方法,利用人类反馈信号优化语言模型。需要大量人工反馈。
SFT:有监督训练,少量数据集训练一个助手等。
激光器设计篇
to be continued