人工智能同样也会读死书----“过拟合”

liftword4个月前 (01-11)技术文章28



上一篇:《“嵌入”在大语言模型中是解决把句子转换成向量表示的技术》

序言:我们常常会说某某人只会“读死书”,题目稍微变一点就不会做了。这其实是我们人类学习中很常见的现象。可是你知道吗?人工智能其实更容易“读死书”。不过在人工智能领域,我们有个听起来高大上的说法,叫“过拟合”。说白了,“过拟合”就是人工智能的“读死书”现象。在这个小节我们就来聊聊怎么让人工智能少“读死书”。注意,我说的是“少”,因为这个问题没办法完全消除,只能尽量降低。

减少语言模型中的过拟合

过拟合发生在网络对训练数据变得过于专注时,其中一个表现是它在训练集中“噪声”数据中的模式匹配上变得非常出色,而这些噪声在其他地方并不存在。由于这种特定的噪声在验证集中并不存在,网络越擅长匹配这些噪声,验证集上的损失就会越差。这就会导致你在图 6-3 中看到的验证损失不断上升的情况。在本节中,我们将探讨几种通用化模型并减少过拟合的方法。

调整学习率

导致过拟合的最大因素之一可能是优化器的学习率过高。这意味着网络学习得太快了。以下是用于编译模型的代码示例:

python

Copy code

model.compile(loss='binary_crossentropy',

optimizer='adam', metrics=['accuracy'])

这里的优化器简单地声明为 adam,这会调用带有默认参数的 Adam 优化器。然而,这个优化器支持多个参数,包括学习率。可以将代码更改为以下内容:

python

Copy code

adam = tf.keras.optimizers.Adam(learning_rate=0.0001,

beta_1=0.9, beta_2=0.999, amsgrad=False)

model.compile(loss='binary_crossentropy',

optimizer=adam, metrics=['accuracy'])

在这里,默认学习率值(通常为 0.001)被降低了 90%,变为 0.0001。beta_1 和 beta_2 的值保持默认值,amsgrad 也保持默认值。

? beta_1 和 beta_2 必须在 0 和 1 之间,通常两者都接近 1。

? Amsgrad 是 Adam 优化器的一种替代实现,首次在 Sashank Reddi、Satyen Kale 和 Sanjiv Kumar 的论文《On the Convergence of Adam and Beyond》中提出。

这个更低的学习率对网络产生了深远的影响。图 6-4 显示了网络在 100 个训练周期中的准确率。可以看到,在前 10 个周期左右,较低的学习率使得网络看起来像是“没有在学习”,但随后它“突破”了,并开始快速学习。



通过观察损失(如图 6-5 所示),我们可以看到,即使在前几个训练周期内准确率没有上升,损失却在下降。所以如果你逐周期观察训练过程,可以有信心相信网络最终会开始学习。



虽然损失开始呈现出与图 6-3 中类似的过拟合曲线,但请注意,这种现象发生得更晚,且程度也低得多。在第 30 个训练周期时,损失大约为 0.45,而在图 6-3 中使用较高学习率时,这一数值超过了两倍。尽管网络需要更长时间才能达到较高的准确率,但在损失更小的情况下完成,因此你可以对结果更有信心。

使用这些超参数时,验证集上的损失在大约第 60 个训练周期开始增加,此时训练集的准确率达到约 90%,而验证集的准确率约为 81%,这表明我们的网络是相当有效的。

当然,仅仅调整优化器参数然后宣称成功是比较简单的,但其实还有许多其他方法可以用来改进你的模型,这些方法会在接下来的几节中介绍。在这些部分中,我会恢复使用默认的 Adam 优化器来进行说明。因此,调整学习率的效果不会掩盖其他技术所带来的好处。

总结:本节我们介绍了如何通过调整学习速率来缓解语言模型“读死书”的现象。接下来的几节内容将更深入地带大家探索和分析训练数据集的特性,以及模型的架构设计、预设维度等因素是如何影响模型“读死书”问题的。

相关文章

【Python机器学习系列】拟合和回归傻傻分不清?一文带你彻底搞懂

一、拟合和回归的区别拟合并不特指某一种方法,指的是对一些数据,按其规律方程化,比如把平面(一元)上一系列的离散点,用一条直线(线性)或光滑的曲线(非线性)连接起来,而其方程化的方法有很多,回归分析(r...

用Python的numpy库进行线性拟合或者多项式拟合

在前文中,笔者使用最小二乘法矩阵计算进行数据的线性拟合其实有更简单的方法:用Python的numpy中的polyfit函数直接进行线性拟合或者用numpy中的polyfit和poly1d进行多项式拟合...

Python 数据分析——SciPy 拟合与优化-optimize

SciPy的optimize模块提供了许多数值优化算法,本节对其中的非线性方程组求解、数据拟合、函数最小值等进行简单介绍。一、非线性方程组求解fsolve( )可以对非线性方程组进行求解,它的基本调用...

Python 六西格玛管理 统计学 正态分布 正态性检验(二)

在前面的几篇文章,我们了解了有关正态分布的如下内容:影响正态分布的三大要素,分别是:样本量,概率密度函数pdf,和随机性。在六西格玛管理的体系中,正态分布对数据分析,有着重要的影响。在制造管理领域,可...

R数据分析:PLS结构方程模型介绍,论文报告方法和实际操作

前面给大家写的关于结构方程模型的文章都是基于变量的方差协方差矩阵来探讨变量间关系的,叫做covariance-based SEM,今天给大家介绍一下另外一个类型的SEM,叫做偏最小二乘结构方差模型。一...