zedu小语种网站建设,南昌网站建设博客,网站首页title怎么修改,如何安装网站程序来自机器学习成长之路公众号
在对模型进行训练时#xff0c;有可能遇到训练数据不够#xff0c;即训练数据无法对整个数据的分布进行估计的时候#xff0c;或者在对模型进行过度训练#xff08;overtraining#xff09;时#xff0c;常常会导致模型的过拟合#xff08;…来自机器学习成长之路公众号
在对模型进行训练时有可能遇到训练数据不够即训练数据无法对整个数据的分布进行估计的时候或者在对模型进行过度训练overtraining时常常会导致模型的过拟合overfitting。如下图所示 通过上图可以看出随着模型训练的进行模型的复杂度会增加此时模型在训练数据集上的训练误差会逐渐减小但是在模型的复杂度达到一定程度时模型在验证集上的误差反而随着模型的复杂度增加而增大。此时便发生了过拟合即模型的复杂度升高但是该模型在除训练集之外的数据集上却不work。
为了防止过拟合我们需要用到一些方法如early stopping、数据集扩增Data augmentation、正则化Regularization、Dropout。
Early stopping
对模型进行训练的过程即是对模型的参数进行学习更新的过程这个参数学习的过程往往会用到一些迭代方法如梯度下降Gradient descent学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
Early stopping方法的具体做法是在每一个Epoch结束时一个Epoch集为对所有的训练数据的一轮遍历计算validation data的accuracy当accuracy不再提高时就停止训练。这种做法很符合直观感受因为accurary都不再提高了在继续训练也是无益的只会提高训练的时间。
那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢并不是说validation accuracy一降下来便认为不再提高了因为可能经过这个Epoch后accuracy降低了但是随后的Epoch又让accuracy又上去了所以不能根据一两次的连续降低就判断不再提高。
一般的做法是在训练的过程中记录到目前为止最好的validation accuracy当连续10次Epoch或者更多次没达到最佳accuracy时则可以认为accuracy不再提高了。此时便可以停止迭代了Early Stopping。这种策略也称为“No-improvement-in-n”n即Epoch的次数可以根据实际情况取如10、20、30……
数据集扩增
在数据挖掘领域流行着这样的一句话“有时候往往拥有更多的数据胜过一个好的模型”。因为我们在使用训练数据训练模型通过这个模型对将来的数据进行拟合而在这之间又一个假设便是训练数据与将来的数据是独立同分布的。即使用当前的训练数据来对将来的数据进行估计与模拟而更多的数据往往估计与模拟地更准确。
因此更多的数据有时候更优秀。但是往往条件有限如人力物力财力的不足而不能收集到更多的数据如在进行分类的任务中需要对数据进行打标并且很多情况下都是人工得进行打标因此一旦需要打标的数据量过多就会导致效率低下以及可能出错的情况。所以往往在这时候需要采取一些计算的方式与策略在已有的数据集上进行手脚以得到更多的数据。
通俗得讲数据机扩增即需要得到更多的符合要求的数据即和已有的数据是独立同分布的或者近似独立同分布的。一般有以下方法
• 从数据源头采集更多数据
• 复制原有数据并加上随机噪声
• 重采样
• 根据当前数据集估计数据分布参数使用 该分布产生更多数据等
正则化方法
正则化方法是指在进行目标函数或代价函数优化时在目标函数或代价函数后面加上一个正则项一般有L1正则与L2正则等。 L1正则 L1正则是基于L1范数即在目标函数后面加上参数的L1范数和项即参数绝对值和与参数的积项即 其中C0代表原始的代价函数n是样本的个数λ就是正则项系数权衡正则项与C0项的比重。后面那一项即为L1正则项。 在计算梯度时w的梯度变为 其中sgn是符号函数那么便使用下式对参数进行更新 对于有些模型如线性回归中L1正则线性回归即为Lasso回归常数项b的更新方程不包括正则项即 其中梯度下降算法中α0,β0α0,β0而在梯度上升算法中则相反。
从上式可以看出当w为正时更新后w会变小当w为负时更新后w会变大因此L1正则项是为了使得那些原先处于零即|w|≈0|w|≈0附近的参数w往零移动使得部分参数为零从而降低模型的复杂度模型的复杂度由参数决定从而防止过拟合提高模型的泛化能力。
其中L1正则中有个问题便是L1范数在0处不可导即|w||w|在0处不可导因此在ww为0时使用原来的未经正则化的更新方程来对ww进行更新即令sgn(0)0这样即 L2正则 L2正则是基于L2范数即在目标函数后面加上参数的L2范数和项即参数的平方和与参数的积项即 其中C0代表原始的代价函数n是样本的个数与L1正则化项前面的参数不同的是L2项的参数乘了二分之一是为了便于计算以及公式的美感性因为平方项求导有个2λ就是正则项系数权衡正则项与C0项的比重。后面那一项即为L2正则项。
L2正则化中则使用下式对模型参数进行更新 对于有些模型如线性回归中L2正则线性回归即为Ridge回归岭回归常数项b的更新方程不包括正则项即 其中梯度下降算法中α0,β0α0,β0而在梯度上升算法中则相反。
从上式可以看出L2正则项起到使得参数w变小加剧的效果但是为什么可以防止过拟合呢一个通俗的理解便是更小的参数值w意味着模型的复杂度更低对训练数据的拟合刚刚好奥卡姆剃刀不会过分拟合训练数据从而使得不会过拟合以提高模型的泛化能力。
在这里需要提到的是在对模型参数进行更新学习的时候有两种更新方式mini-batch 部分增量更新与 full-batch全增量更新即在每一次更新学习的过程中一次迭代即一次epoch在mini-batch中进行分批处理先使用一部分样本进行更新然后再使用一部分样本进行更新。直到所有样本都使用了这次epoch的损失函数值则为所有mini batch的平均损失值。设每次mini batch中样本个数为m那么参数的更新方程中的正则项要改成 而full-batch即每一次epoch中使用全部的训练样本进行更新那么每次的损失函数值即为全部样本的误差之和。更新方程不变。
总结
正则项是为了降低模型的复杂度从而避免模型区过分拟合训练数据包括噪声与异常点outliers。从另一个角度上来讲正则化即是假设模型参数服从先验概率即为模型参数添加先验只是不同的正则化方式的先验分布是不一样的。这样就规定了参数的分布使得模型的复杂度降低试想一下限定条件多了是不是模型的复杂度降低了呢这样模型对于噪声与异常点的抗干扰性的能力增强从而提高模型的泛化能力。
还有个解释便是从贝叶斯学派来看加了先验在数据少的时候先验知识可以防止过拟合从频率学派来看正则项限定了参数的取值从而提高了模型的稳定性而稳定性强的模型不会过拟合即控制模型空间。
另外一个角度过拟合从直观上理解便是在对训练数据进行拟合时需要照顾到每个点从而使得拟合函数波动性非常大即方差大。在某些小区间里函数值的变化性很剧烈意味着函数在某些小区间里的导数值的绝对值非常大由于自变量的值在给定的训练数据集中的一定的因此只有系数足够大才能保证导数的绝对值足够大。如下图引用知乎 另外一个解释规则化项的引入在训练最小化cost的过程中当某一维的特征所对应的权重过大时而此时模型的预测和真实数据之间距离很小通过规则化项就可以使整体的cost取较大的值从而在训练的过程中避免了去选择那些某一维或几维特征的权重过大的情况即过分依赖某一维或几维的特征引用知乎。
L2与L1的区别在于L1正则是拉普拉斯先验而L2正则则是高斯先验。它们都是服从均值为0协方差为λ分之一。当λ0时即没有先验没有正则项则相当于先验分布具有无穷大的协方差那么这个先验约束则会非常弱模型为了拟合所有的训练集数据 参数w可以变得任意大从而使得模型不稳定即方差大而偏差小。λλ越大标明先验分布协方差越小偏差越大模型越稳定。即加入正则项是在偏差bias与方差variance之间做平衡tradeoff来自知乎。
下图即为L2与L1正则的区别 上图中的模型是线性回归有两个特征要优化的参数分别是w1和w2左图的正则化是L2右图是L1。蓝色线就是优化过程中遇到的等高线一圈代表一个目标函数值圆心就是样本观测值假设一个样本半径就是误差值受限条件就是红色边界就是正则化那部分二者相交处才是最优参数。可见右边的最优参数只可能在坐标轴上所以就会出现0权重参数使得模型稀疏。
其实拉普拉斯分布与高斯分布是数学家从实验中误差服从什么分布研究中得来的。一般直观上的认识是服从应该服从均值为0的对称分布并且误差大的频率低误差小的频率高因此拉普拉斯使用拉普拉斯分布对误差的分布进行拟合如下图 而拉普拉斯在最高点即自变量为0处不可导因为不便于计算于是高斯在这基础上使用高斯分布对其进行拟合如下图 Dropout
正则是通过在代价函数后面加上正则项来防止模型过拟合的。而在神经网络中有一种方法是通过修改神经网络本身结构来实现的其名为Dropout。该方法是在对网络进行训练时用一种技巧trick对于如下所示的三层人工神经网络 对于上图所示的网络在训练开始时随机得删除一些可以设定为一半也可以为1/31/4等隐藏层神经元即认为这些神经元不存在同时保持输入层与输出层神经元的个数不变这样便得到如下的ANN 然后按照BP学习算法对ANN中的参数进行学习更新虚线连接的单元不更新因为认为这些神经元被临时删除了。这样一次迭代更新便完成了。下一次迭代中同样随机删除一些神经元与上次不一样做随机选择。这样一直进行瑕疵直至训练结束。
Dropout方法是通过修改ANN中隐藏层的神经元个数来防止ANN的过拟合。