组队学习李宏毅的深度学习-4

这篇博客探讨了误差的来源,包括bias和variance,以及它们在模型选择中的作用。介绍了欠拟合和过拟合的概念,并提出了通过交叉验证来平衡bias和variance。此外,还详细讲解了梯度下降法,讨论了学习速率的重要性,并引入了随机梯度下降作为加速训练的手段。博主强调了模型选择和参数调整的策略,以达到最佳的预测性能。
摘要由CSDN通过智能技术生成

一、学习任务

 二、完成任务

Task03:误差和梯度下降

 Part1:任务综述

     通过2天观看视频5-8,主要学习了误差和梯度下降两个方面的内容。第一个方面了解了误差的来源,估测以及如何判断,关于模型的选择问题。另一方面的梯度下降,学习相关定义,关于Adagrad算法,以及其存在的矛盾,随机梯度下降法的理论基础,特征缩放,最后还有关于它的局限性。这次任务的学习内容繁重。

Part2: 主要内容笔记

  1. 误差从哪里来?

        Average error随着模型复杂增加呈指数上升趋势。更加复杂的模型并不能给测试集带来更好的效果,主要原因是bias和variance
Error = Bias + Variance

那么bias、variance、error是什么呢?-查阅于知乎

         举一个例子,一次打靶实验,目标是为了打到10环,但是实际上只打到了7环,那么这里面的Error就是3。具体分析打到7环的原因,可能有两方面:一是瞄准出了问题,比如实际上射击瞄准的是9环而不是10环;二是枪本身的稳定性有问题,虽然瞄准的是9环,但是只打到了7环。那么在上面一次射击实验中,Bias就是1,反应的是模型期望与真实目标的差距,而在这次试验中,由于Variance所带来的误差就是2,即虽然瞄准的是9环,但由于本身模型缺乏稳定性,造成了实际结果与模型期望之间的差距。

     在一个实际系统中,Bias与Variance往往是不能兼得的。如果要降低模型的Bias,就一定程度上会提高模型的Variance,反之亦然。造成这种现象的根本原因是,我们总是希望试图用有限训练样本去估计无限的真实数据。当我们更加相信这些数据的真实性,而忽视对模型的先验知识,就会尽量保证模型在训练样本上的准确度,这样可以减少模型的Bias。但是,这样学习到的模型,很可能会失去一定的泛化能力,从而造成过拟合,降低模型在真实数据上的表现,增加模型的不确定性。相反,如果更加相信我们对于模型的先验知识,在学习模型的过程中对模型增加更多的限制,就可以降低模型的variance,提高模型的稳定性,但也会使模型的Bias增大。Bias与Variance两者之间的trade-off是机器学习的基本主题之一,机会可以在各种机器模型中发现它的影子。

      具体到K-fold Cross Validation的场景,其实是很好的理解的。首先看Variance的变化,还是举打靶的例子。假设我把抢瞄准在10环,虽然每一次射击都有偏差,但是这个偏差的方向是随机的,也就是有可能向上,也有可能向下。那么试验次数越多,应该上下的次数越接近,那么我们把所有射击的目标取一个平均值,也应该离中心更加接近。更加微观的分析,模型的预测值与期望产生较大偏差,在模型固定的情况下,原因还是出在数据上,比如说产生了某一些异常点。在最极端情况下,我们假设只有一个点是异常的,如果只训练一个模型,那么这个点会对整个模型带来影响,使得学习出的模型具有很大的variance。但是如果采用k-fold Cross Validation进行训练,只有1个模型会受到这个异常数据的影响,而其余k-1个模型都是正常的。在平均之后,这个异常数据的影响就大大减少了。相比之下,模型的bias是可以直接建模的,只需要保证模型在训练样本上训练误差最小就可以保证bias比较小,而要达到这个目的,就必须是用所有数据一起训练,才能达到模型的最优解。因此,k-fold Cross Validation的目标函数破坏了前面的情形,所以模型的Bias必然要会增大。

所以:来源一:bias(一般见于underfitting)
在训练集上loss就很大 —> model bias
来源二:variance(一般见于overfitting)
在训练集上可能表现很好loss很小(比如把输入特征很多,模型参数很多,将模型建得很复杂),在测试集上效果反而变差 —> overfitting

       简单的模型受到不同训练集的影响比较小,所以简单的模型一般Variance比较小,Bias比较大。复杂的模型对训练集敏感,Variance一般比较大,散布比较开。
如何判断是否Bias过大:如果模型没有很好的训练训练集,就是偏差过大,也就是欠拟合
如何判断是否Variance过大:如果模型很好的拟合训练集,即在训练集上得到很小的错误,但在测试集上得到大的错误,这意味着模型可能是方差比较大,也就是过拟合
如何解决Bias过大:
    应重新设计模型,考虑更多的特征或者更多的参数、更复杂的模型
    ps:此时没必要找更多的训练数据
如何解决Variance过大:
   最直接的做法是收集更多的数据,但一般很难做到。
   可以对数据做数据增广,或者构造虚拟的数据。比如将图片旋转、平移
   融合多个模型,可以减小方差。
   多次实验,取average。

 2.模型的选择

 为什么会有很多模型呢?

       利用不同训练集训练得到的模型是不一样的。model的复杂程度不同,一次的五次的是不一样的。比较简单的模型,方差是比较小的(就像设计每次射击都设置集中在一个比较小的区域捏),偏差大,简单的模型受到训练集的影响也比较小;比较复杂的模型,方差就较大,偏差小。
分析
     欠拟合:模型没有得到很好的训练,偏差过大
     过拟合:模型训练过渡,训练集上得到很小的error,但是测试集上的error较大,也就是模型的方差可能比较大

     那么,如何选择一个好的模型呢?

       可以平衡bias和variance带来的error,使得总error最小:
      Not recommend:不推荐上面的做法!即根据已有的public的测试集上的表现去回调模型参数,因为private的测试集是没有的,这样可能会导致在真实的测试集中效果更差!
通过交叉验证选择模型,即从训练集中随机拆分一部分作为验证集。如果担心拆分的效果比较差,使用更effective的N折交叉验证。
K折交叉验证
       由于验证数据集不参与模型训练,当训练数据不够用 时,预留大量的验证数据过于奢侈。K折交叉验证中,把原始训练集分割成K个不重合的子数据集,然后做K次模型训练和验证。每一次只使用一个子数据集验证模型,并使用其他K-1个子数据集来训练模型。最后,我们对这K次训练误差和验证误差分别求平均。
 

n折交叉验证

 3.梯度下降

        关于梯度下降,在前面的任务2中介绍Regression 回归:案例研究中有提到过。其中有个学习速率的概念。

η 叫做Learning rates(学习速率)

      lr是一个重要的超参数,lr太小,损失函数下降非常慢;lr太大,损失函数下降很快,但是很快就卡住不下降了。所以选择一个合适的学习率对于训练时间和效果都很重要。
因此可以通过一个自适应学习率来调整lr的大小。
通常刚开始,初始点会距离最低点比较远,所以使用大一点的学习率,update好几次参数之后呢,比较靠近最低点了,此时减少学习率。

 调整学习速率

 综上可以了解

  • 问题
    • 学习率太小 —> 参数调整太慢,时间过长;
    • 学习率太大 —> 在minima附近震荡,永远无法到达最低点
    • 学习率非常大 —> 损失函数发散

       那么我们知道恒定的学习率可能并不好,可以通过一些因子来调整学习率。刚开始可以使用大一点的学习率,比较靠近最低点时,减小学习率。
另一个问题:不同的参数更新快慢不同,每次只用一个学习率好吗?不同的参数用不同的学习率会不会更好?答案是肯定的

随机梯度下降法

      普通的梯度下降法在每次更新参数的时候,是需要处理训练集的所有数据。而随机梯度下降法每次更新只需要随机选择某一个样本进行损失函数计算并update梯度,这样速度会大大提高。整体前进的方向是对的。

笔记总结:本次笔记是结合开源笔记,视频同步学习后的总结笔记。有些内容还没有很深入,有些知识点需要进一步扩充才能理解透彻。后继会从其他笔记中扩展。主要是跟着李宏毅老师的学习视频的进度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值