Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task2

1.2.2    模型变形

其实还可以对模型做更多的变形,不一定要把 Hard Sigmoid 换成 Soft Sigmoid Hard Sigmoid 可以看作是两个修正线性单元Rectified Linear UnitReLU的加总,ReLU  图像有一个水平的线,走到某个地方有一个转折的点,变成一个斜坡,其对应的公式为

c * max(0, b + wx1 )                                                       

 (1.29)

max(0, b + wx1 ) 是指看 0  b + wx1  谁比较大,比较大的会被当做输出;如果 b + wx1  < 0 输出是 0;如果 b + wx1   > 0,输出是 b + wx1。通过 w, b, c 可以挪动其位置和斜率。把两  ReLU 叠起来就可以变成 Hard Sigmoid,想要用 ReLU,就把 Sigmoid 的地方,换成  max(0, bi  + wij xj )

如图 1.19 所示,2  ReLU 才能够合成一个 Hard Sigmoid。要合成 i  Hard Sigmoid 需要 i  Sigmoid,如果 ReLU 要做到一样的事情,则需要 2i  ReLU,因为 2  ReLU   起来才是一个 Hard Sigmoid。因此表示一个 Hard  Sigmoid 不是只有一种做法。在机器学  习里面,Sigmoid  ReLU 称为激活函数activation  function

当然还有其他常见的激活函数,但 Sigmoid  ReLU 是最常见的激活函数,接下来的实 验都选择用了 ReLU,显然 ReLU 比较好,实验结果如图 1.20 所示。如果是线性模型, 考虑 56 天,训练数据上面的损失是 320,没看过的数据 2021 年数据是 460。连续使用 10  ReLU 作为模型,跟用线性模型的结果是差不多的,

但连续使用 100  ReLU 作为模型,结果就有显著差别了,100  ReLU 在训练数据上 的损失就可以从 320 降到 280 ,有 100  ReLU 就可以制造比较复杂的曲线,本来线性就是 一直线,但 100  ReLU 就可以产生 100 个折线的函数,在测试数据上也好了一些. 接下来

 1.18   ReLU 函数

 1.19   激活函数

使用 1000  ReLU 作为模型,在训练数据上损失更低了一些,但是在没看过的数据上,损失 没有变化。

接下来可以继续改模型,如图 1.21 所示,从 x 变成 a,就是把 x 乘上 w b,再通过  Sigmoid 函数。不一定要通过 Sigmoid 函数,通过 ReLU 也可以得到 a,同样的事情再反复地  多做几次。 所以可以把 x 做这一连串的运算产生 a,接下来把 a 做这一连串的运算产生 a 反复地多做的次数又是另外一个超参数。注意, w, b  w, b  不是同一个参数,是增加了更多  的未知的参数。

每次都加 100  ReLU,输入特征,就 56 天前的数据。如图 1.22 所示,如果做两次, 损失降低很多,280 降到 180。如果做 3 次,损失从 180 降到 140,通过 3  ReLU,从 280   降到 140,在训练数据上,在没看过的数据上,从 430 降到了 380

通过 3  ReLU 的实验结果如图 1.23 所示。横轴就是时间, 纵轴是观看次数。红色的线 是真实的数据,蓝色的线是预测出来的数据在这种低点的地方啊,看红色的数据是每隔一段 时间,就会有两天的低点,在低点的地方,机器的预测还算是蛮准确的,机器高估了真实的观看人次,尤其是在红圈标注的这一天,这一天有一个很明显的低谷,但是机器没有预测到这一 天有明显的低谷,它是晚一天才预测出低谷。这天最低点就是除夕。但机器只知道看前 56  的值,来预测下一天会发生什么事,所以它不知道那一天是除夕。

1.20   激活函数实验结果

1.21   改进模型 

1.22   使用 ReLU 的实验结果

1.23   使用 3  ReLU 的实验结果

1.24   深度学习的结构

如图 1.24 所示,Sigmoid ReLU 称为神经元(neuron),很多的神经元称为神经网络  neural network。人脑中就是有很多神经元,很多神经元串起来就是一个神经网络,跟人  脑是一样的。人工智能就是在模拟人脑。神经网络不是新的技术, 8090 年代就已经用过了, 后来为了要重振神经网络的雄风, 所以需要新的名字。每一排称为一层,称为隐藏层hidden    layer很多的隐藏层就“深”,这套技术称为深度学习。

所以人们把神经网络越叠越多越叠越深,2012 年的 AlexNet  8 层它的错误率是 16.4% 两年之后 VGG 19 层,错误率在图像识别上进步到 7.3 %。这都是在图像识别上一个基准  的数据库(ImageNet)上面的结果,后来 GoogleNet  22 层,错误率降到 6.7%。而残差网  Residual NetworkResNet 152 层,错误率降到 3.57%

刚才只做到 3 层,应该要做得更深,现在网络都是叠几百层的,深度学习就要做更深。但  4 层在训练数据上,损失是 100,在没有看过 2021 年的数据上,损失是 440。在训练数据上,3 层比 4 层差,但是在没看过的数据上,4 层比较差,3 层比较好,如图 1.25所示。在训练数 据和测试数据上的结果是不一致的,这种情况称为拟合overfitting

但是做到目前为止,还没有真的发挥这个模型的力量,2021 年的数据到 2 14 之前 的数据是已知的。要预测未知的数据,  3 层的网络还是 4 层的网络呢?假设今天是 2  26 日,今天的观看次数是未知的,如果用已经训练出来的神经网络预测今天的观看次数。要选 3 层的,虽然 4 层在训练数据上的结果比较好,但在没有看过的数据的结果更重要。应该选一 个在训练的时候,没有看过的数据上表现会好的模型,所以应该选 3 层的网络。深度学习的 训练会用到反向传播BackPropagationBP其实它就是比较有效率、算梯度的方法。

1.2.3    机器学习框架

我们会有一堆训练的数据以及测试数据如式 (1.30) 所示,测试集就是只有 x 没有 y

训练数据: {(x1 , y1 ) , (x2 , y2 ) , . . . , (xN , yN )}

测试数据: {xN+1, xN+2, . . . , xN+M}

(1.30)

训练集就要拿来训练模型,训练的过程是 3 个步骤。

1. 先写出一个有未知数 θ 的函数,θ 代表一个模型里面所有的未知参数。fθ (x) 的意思就 是函数叫 fθ (x),输入的特征为 x,;

2. 定义损失,损失是一个函数,其输入就是一组参数,去判断这一组参数的好坏;

3. 解一个优化的问题,找一个 θ,  θ 可以让损失的值越小越好。让损失的值最小的 θ  θ * ,即θ *  = arg

(1.31)

有了 θ *   以后,就把它拿来用在测试集上,也就是把 θ *  带入这些未知的参数,本来 fθ (x) 里面有一些未知的参数,现在 θ θ *  来取代,输入是测试集,输出的结果存起来,上传到 Kaggle 就结束了。

1.25   模型有过拟合问题

 2   实践方法论

在应用机器学习算法时,实践方法论能够帮助我们更好地训练模型。如果在 Kaggle 上的 结果不太好,虽然 Kaggle 上呈现的是测试数据的结果,但要先检查训练数据的损失。看看模 型在训练数据上面,有没有学起来,再去看测试的结果,如果训练数据的损失很大,显然它在 训练集上面也没有训练好。接下来再分析一下在训练集上面没有学好的原因。

2.1    模型偏差

模型偏差可能会影响模型训练。举个例子, 假设模型过于简单,一个有未知参数的函数代 θ 1  得到一个函数 fθ 1 (x),同理可得到另一个函数 fθ2 (x),把所有的函数集合起来得到一个函 数的集合。但是该函数的集合太小了, 没有包含任何一个函数,可以让损失变低的函数不在模 型可以描述的范围内。在这种情况下,就算找出了一个 θ * ,虽然它是这些蓝色的函数里面最 好的一个,但损失还是不够低。这种情况就是想要在大海里面捞针(一个损失低的函数), 果针根本就不在海里。

 2.1   模型太简单的问题

这个时候重新设计一个模型,给模型更大的灵活性。以第一章的预测未来观看人数为例, 可以增加输入的特征,本来输入的特征只有前一天的信息,假设要预测接下来的观看人数,用  前一天的信息不够多,用 56 天前的信息,模型的灵活性就比较大了。也可以用深度学习,   加更多的灵活性。所以如果模型的灵活性不够大,可以增加更多特征,可以设一个更大的模  型,可以用深度学习来增加模型的灵活性,这是第一个可以的解法。但是并不是训练的时候, 损失大就代表一定是模型偏差,可能会遇到另外一个问题:优化做得不好。

2.2    优化问题

一般只会用到梯度下降进行优化,这种优化的方法很多的问题。比如可能会卡在局部最

小值的地方,无法找到一个真的可以让损失很低的参数,如图 2.3(a) 所示。如图 2.3(b) 所示  蓝色部分是模型可以表示的函数所形成的集合,可以把 θ 代入不同的数值,形成不同的函数, 把所有的函数通通集合在一起,得到这个蓝色的集合。这个蓝色的集合里面, 确实包含了一些  函数,这些函数它的损失是低的。但问题是梯度下降这一个算法无法找出损失低的函数,梯度  下降是解一个优化的问题,找到 θ *  就结束了。但 θ *   的损失不够低。这个模型里面存在者某一个函数的损失是够低的,梯度下降没有给这一个函数。这就像是想大海捞针,针确实在海 里,但是无法把针捞起来。训练数据的损失不够低的时候, 到底是模型偏差,还是优化的问题 呢。找不到一个损失低的函数,到底是因为模型的灵活性不够,海里面没有针。还是模型的灵 活性已经够了,只是优化梯度下降不给力,它没办法把针捞出来 到底是哪一个。到底模型已 经够大了,还是它不够大,怎么判断这件事呢?

 2.2   增加模型的灵活性

 2.3   优化方法的问题

一个建议判断的方法,通过比较不同的模型来判断模型现在到底够不够大。举个例子,这 一个实验是从残差网络的论文“Deep Residual Learning for Image Recognition[1]  里面节录出 来的。这篇论文在测试集上测试两个网络,一个网络有 20 层,一个网络有 56 层。 2.4(a) 横轴指的是训练的过程,就是参数更新的过程,随着参数的更新,损失会越来越低,但是结果 20 层的损失比较低,56 层的损失还比较高。残差网络是比较早期的论文,2015 年的论文。很 多人看到这张图认为这个代表过拟合,深度学习不奏效,56 层太深了不奏效,根本就不需要 这么深。但 这个不是过拟合,并不是所有的结果不好,都叫做过拟合。在训练集上, 20 层的 网络损失其实是比较低的,56 层的网络损失是比较高的,如图 2.4(b) 所示,这代表 56 层的 网络的优化没有做好,它的优化不给力。

  

                                  

 2.4   残差网络的例子

Q:如何知道是 56 层的优化不给力,搞不好是模型偏差,搞不好是 56 层的网络的模 型灵活性还不够大,它要 156 层才好,56 层也许灵活性还不够大?

A:但是比较 56 层跟 20 层,20 层的损失都已经可以做到这样了,56 层的灵活性一定  20 层更大。如果 56 层的网络要做到 20 层的网络可以做到的事情,对它来说是轻  而易举的。它只要前 20 层的参数,跟这个 20 层的网络一样,剩下 36 层就什么事都不  做,复制前一层的输出就好了。如果优化成功, 56 层的网络应该要比 20 层的网络可以  得到更低的损失。但结果在训练集上面没有,这个不是过拟合,这个也不是模型偏差, 因为 56 层网络灵活性是够的,这个问题是优化不给力,优化做得不够好。

这边给大家的建议是看到一个从来没有做过的问题,可以先跑一些比较小的、比较浅的网  络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机Support Vector Machine SVMSVM 可能是比较容易做优化的,它们比较不会有优化失败的问题。也就是这些模型  它会竭尽全力的,在它们的能力范围之内,找出一组最好的参数,它们比较不会有失败的问  题。因此可以先训练一些比较浅的模型,或者是一些比较简单的模型,先知道这些简单的模  型,到底可以得到什么样的损失。

接下来还缺一个深的模型,如果深的模型跟浅的模型比起来,深的模型明明灵活性比较 大,但损失却没有办法比浅的模型压得更低代表说优化有问题,梯度下降不给力,因此要有一 些其它的方法来更好地进行优化。

举个观看人数预测的例子,如图 2.5 所示,在训练集上面,2017 年到 2020 年的数据是  训练集,1 层的网络的损失是 280 2 层就降到 1803 层就降到 1404 层就降到 100。但是  5 层的时候结果变成 340。损失很大显然不是模型偏差的问题,因为 4 层都可以做到 100   了,5 层应该可以做得更低。这个是优化的问题,优化做得不好才会导致造成这样子的问题。 如果训练损失大,可以先判断是模型偏差还是优化。如果是模型偏差, 就把模型变大。假设经  过努力可以让训练数据的损失变小,接下来可以来看测试数据损失;如果测试数据损失也小, 比这个较强的基线模型还要小,就结束了。

但如果训练数据上面的损失小,测试数据上的损失大,可能是真的过拟合。在测试上的结 果不好,不一定是过拟合。要把训练数据损失记下来, 先确定优化没有问题,模型够大了。接 下来才看看是不是测试的问题,如果是训练损失小,测试损失大,这个有可能是过拟合。

 2.5   层数越深,损失反而变大

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值