彩票网站制作商,企业网站的建立主要用于企业内部发布信息,网站备案 取名资讯通不过,做装修网站好赚钱吗以下内容有任何不理解可以翻看我之前的博客哦#xff1a;吴恩达deeplearning.ai专栏 学习曲线是一种图形表示方法#xff0c;用于展示模型在训练过程中的学习表现#xff0c;即模型的训练集和验证集上的性能如何随着训练时间的增加而变化。可以帮助我们了解模型的学习进度。…以下内容有任何不理解可以翻看我之前的博客哦吴恩达deeplearning.ai专栏 学习曲线是一种图形表示方法用于展示模型在训练过程中的学习表现即模型的训练集和验证集上的性能如何随着训练时间的增加而变化。可以帮助我们了解模型的学习进度。 文章目录 学习曲线线性回归方程为例一个理想的学习曲线高偏差时的学习曲线高方差时的学习曲线 决定下一步做什么大型神经网络带来对于偏方差的新解决方法解决神经网络过大问题代码实现 学习曲线
线性回归方程为例
我们以以下方程为例 f w , b ( x ) w 1 x w 2 x 2 b f_{w,b}(x)w_1xw_2x^2b fw,b(x)w1xw2x2b
一个理想的学习曲线
然后我们可以绘制其学习曲线横坐标为训练集的大小(也可以理解为epoch的次数纵坐标为training set以及validation set的价值函数值你拟合出来的图像很有可能是这样子的 可以看出随着training set的增大 J t r a i n J_{train} Jtrain逐渐上升而 J c v J_{cv} Jcv逐渐减小这其实是容易理解的。当数据的量很少时我们的拟合曲线很容易通过所有的点此时training set上的损失值就比较小甚至为0但是此时模型的泛化程度就肯定很低了因此在cv set上的损失就会很大。而随着数据量的增加拟合曲线就很难通过所有的点了因此此时的 J t r a i n J_{train} Jtrain 必然就会上升而因为模型接受的数据多了 J c v J_{cv} Jcv便渐渐减小直到数据量足够多时二者就都趋于稳定并且比较接近。
高偏差时的学习曲线
如果在你的算法的拟合下最后的结果是高偏差的那么它的学习曲线会具有一定的特点 J c v J_cv Jcv和 J t r a i n J_train Jtrain二者的关系是不太变化的但是于之前不同的是你的代价函数值会明显高于你的预期值如图所示而且随着数据量的增加最后的代价函数值仍然处于一个稳定的范围并不会随着数据量的增加而使得模型的效果变好。因此如果你的模型出现了高偏差的情况不要着急着去增加数据量此时更好的选择应该是优化你的算法。
高方差时的学习曲线
如果在定义你的代价函数的时候 λ \lambda λ设置得过小那么此时容易出现过拟合的现象此时容易出现的情况就是低偏差高方差难以泛化 在这种情形之下一开始的 J t r a i n J_{train} Jtrain会极小过拟合甚至比人类表现的代价还要小。而模型的泛化能力极弱最终会导致 J c v J_{cv} Jcv很大但这种情况有个好处就是随着数据量的增大最后 J c v J_{cv} Jcv会降低到合适的水平接近于人类水平虽然 J t r a i n J_{train} Jtrain上升但是也不会超过人类水平很多。 总之在训练神经模型的时候绘制其学习曲线能够很好地帮助你直到下一步该如何调整模型但是缺点就是你如果实验多个模型对算力是个很大的考验可能会非常昂贵。但即使你无法真实地绘制出这个曲线你也可以利用这种思想在脑海中形成一个虚拟图像帮助你提高模型效果。 决定下一步做什么
在了解了以上这些概念之后我们在模型遇到困难时应该了解了一些努力的方向了。现在我们还是用以前的例子看看如何综合利用之前的方法 你已经完成了一个关于房价预测的线性回归模型代价函数如上图但是预测的时候出现了一些错误的预测你下一步该做什么呢 以下是一些常见的选择 ——获得更多的训练数据 ——尝试使用更少的特征 ——尝试获得更多的特征 ——添加多项式特征 ——尝试增大 λ \lambda λ ——尝试减小 λ \lambda λ 事实上以上的六个方法都有可能减少偏差和方差这取决于你具体的应用场景我们来依次分析。 对于第一个方法如果你的算法具有高方差比如算法对于过小的数据集过度拟合那么确实可以通过添加更多训练数据对模型提供很大的帮助但是如果是高偏差那么这个方法帮助就很小了。 对于第二个方法如果你的算法具有很多的特征那么这将赋予算法很高的灵活性从而无法适应更加复杂的模型。如果你怀疑你的算法具有很多意义不明的特征或者冗余的特征可以尝试采用这种方法。从而可以降低过拟合的发生用于解决高方差的发生。 对于第三个方法这个就比较明显了可以用于解决高偏差的问题。 对于第四个方法如果你是线性函数三线可以很好地拟合训练集那么添加额外的多项式特征可以帮助你在训练集做得更好用于解决高偏差问题。 对于第五个方法以前的博客详细介绍过用于解决高偏差问题。 对于第六个方法同理解决高方差问题。 总结如下
大型神经网络带来对于偏方差的新解决方法
在上面我们提到了解决偏差与方差的一般方法但是大型神经网络与大数据为解决此类问题提供了新的思路。 在神经网络出现之前机器学习工程师经常需要考虑的问题就是偏差方差权衡因为模型简单就会导致高偏差而模型复杂就会导致高方差两者是矛盾的因此常常需要在二者之中找到一个平衡点 但是神经网络和大数据的出现改变了这种情况。 事实证明在小中规模的数据集上训练大型神经网络是低偏差机器即只要你的神经网络足够大那么就一定可以很好地拟合数据因此我们可以根据需要来增加或减小偏差方差水多加面面多加水法 即你先训练了一个神经网络如果在训练集表现不佳那么就构建更大的神经网络如果在cv表现不佳那么就加更多的数据直到达到你需要的平衡。这种方法的缺点就是对算力的要求很高因此随着近些年硬件的发展神经网络才能获得足够的算力从而长足发展。
解决神经网络过大问题
如果你感觉你的神经网络过大了担心会不会导致过度拟合,怎么办勒。 事实证明精心选择的大型正则化网络往往与较小的神经网络一样好甚至更好。因此如果模型大了那就好好正则化吧这样也能够达到你想要的效果。另一种说法是只要你好好正则化大型的神经网络几乎不会比小模型差。当然大型神经网络要求的算力必然很高会拖慢运算速度。
代码实现
之前我们创建神经网络的代码是这样的
layer_1 Dense(units25, activationrelu)
layer_2 Dense(units15, activationrelu)
layer_1 Dense(units1, activationsigmoid)
model Sequential([layer_1, layer_2, layer_3])如果要添加正则化项
layer_1 Dense(units25, activationrelu, kernel_regularizerL2(0.01))
layer_2 Dense(units15, activationrelu, kernel_regularizerL2(0.01))
layer_1 Dense(units1, activationsigmoid, kernel_regularizerL2(0.01))
model Sequential([layer_1, layer_2, layer_3])为了给读者你造成不必要的麻烦博主的所有视频都没开仅粉丝可见如果想要阅读我的其他博客可以点个小小的关注哦。