0
点赞
收藏
分享

微信扫一扫

分享几个.NET开源的AI和LLM相关项目框架

河南妞 2024-05-10 阅读 31

文章目录

文章目录

1.1 训练集、验证集和测试集

1.2 偏差和方差

 1.4 正则化


1.1 训练集、验证集和测试集

本周开始的第二门课我们将学习如何有效运行神经网络,内容涉及超参数调优,如何构建数据集,以及如何确保优化算法快速运行,从而使学习算法在合理时间内完成自学。

应用深度学习是一个典型的迭代过程,需要多次循环往复,才能为应用程序找到一个称心的神经网络,因此循环该过程的效率是决定项目进展的一个关键因素,而创建高质量的训练集、验证集和测试集也有助于提高循环效率。

 在机器学习中,我们通常将数据样本划分成训练集、验证集和测试集三部分,传统的划分比例是6 :2 :2,对于规模较大的数据集,验证集和测试集要小于数据总量的20%或10%。

1.2 偏差和方差

如果训练出一个网络,首先可以观察一下网络在训练集上的正确率,如果在训练集上表现很差,说明神经网络陷入欠拟合(高偏差),这就需要考虑更换网络结构,比如使用更深层的网络或者增长训练时间等,来解决高偏差问题;

在实现了训练集上的高正确率以后,就可以检测网络在测试集上的性能,如果网络在测试集上表现不好,说明网络陷入过拟合(高方差问题),此时可以考虑使用更多的数据集或加入正则化来解决,不过有时候也可以考虑更换网络结构。

以下三张图分别为欠拟合、适度拟合和过拟合:

其实欠拟合就是高偏差,过拟合就是高方差,可以通过以下智谱生成的内容来进一步了解:

 1.4 正则化

神经网络陷入过拟合,可以通过加入正则化来解决,下面是关于正则化的介绍:

 常见的正则化分为L2正则化和L1正则化,前者使用的是参数的二范数而后者使用的是一范数:

L1 正则化会导致参数的稀疏化(就是存在比较多的0),因此现在越来越多会使用 L2 正则化。而在描述矩阵的时候这个范数则被称为 Frobenius 范数,描述的是矩阵中每个元素的平方和。

加入正则化项以后的代价函数可以被写作:

还有一种比较实用的正则化方法是 Dropout(随机失活)正则化方法,整体思路就是对网络中的节点随机分配概率,按照分配的概率随机地将网络中部分节点进行失活从而得到一个规模更小的网络来降低过拟合可能性。这里介绍一种比较常用的部署方法——反向随机失活(Inverted dropout):

比如现在需要有一个3层网络,那么在每一轮训练过程(一次前向传播+一次反向传播)中,分别给三层神经网络的每个神经元计算一个是否丢弃的随机数,这里以第二层为例来说明,比如第二层共有5个神经元,那么就可以随机5个在[0,1]之间均匀分布的随机数,然后给定一个keep_prob对刚刚的随机数组进行0-1二值化,此时得到的0-1数组就作为该层神经元的“掩码”,0对应的神经元在本次训练中就不起作用。不过为了补偿神经元数量衰减造成的网络输出均值的改变,这里会手动给该层神经元剩余网络的输出除以**keep_prob**。每次训练的时候都会对每个层重新计算这个随机数组,使得每次参与训练的神经元数目都不会特别多,神经网络“更加简单”,以此来降低过拟合可能性。

不过要注意的就是上述正则化方法只在训练的时候有用,不要在测试的使用启用随机失活正则化。从直观上来理解,随机失活机制的存在强迫神经元不能过分信任上一级任何一个神经元的输出,而是应该更加平均地“多听取各方意见”从而起到缩减范数的效果,这一点和 F 范数正则化在思路上其实是比较类似的。

在进行随机失活正则化的时候,每一层神经网络的keep_prob可以选择得不一样,这一点相较于范数正则化更加灵活。一般而言不会对输入层神经元进行随机失活

不过随机失活正则化会带来的问题就是代价函数的定义就显得不是很明确,所以调试神经网络性能的时候就会比较痛苦()。

还有一些其他的正则化方法,比如数据增强其实也是一种正则化手段:

还有一种正则化方法是在训练过程中寻找合适的实际提早结束训练(Early stopping),这种时机的查找一般通过观测验证集表现来实现,当发现验证集误差开始上升的时候就说明网络已经逐渐开始过拟合了所以可以停止训练了。

为了加快训练速度还需要做的一步就是对输入数据进行归一化,这里主要做的就是平移(零均值)和缩放(同方差),这在机器学习中提及过,也就不再赘述。

举报

相关推荐

0 条评论