本文共 1858 字,大约阅读时间需要 6 分钟。
模型调整
文章目录
前言
在的3.3部分,给大家贴了一幅图:
这幅图,很好的说明了模型调整的一个大致的框架。那么,具体怎么调整,其实在这幅图的左侧已经说明了。下面,我们就分别说一下这几个东西。一.学习率调整(Adaptive Learning Rate)
这个,其实我们已经有很详细的介绍,参考这篇文章:
二.提前停止(Early Stopping)
关于这个,一幅图就可以说明问题:
这里需要注意一下验证集,训练集,测试集的区别:- 训练集(training set): 用来训练模型
- 验证集(validation set) : 用来做模型选择(这个,正好对应SKlearn当中的model_selection)因此,所谓的验证集,其实是你从测试集当中切出来的。
- 测试集(test set) : 用来评估所选出来的模型的性能
三.正则化(Regularization)
这个,早些的时候也说过,比如我们说的Lasso回归,Ridge回归,Elastic-Net等(见)第三部分。以及借鉴正则化思想的AdamW(见6.3部分)等
四.构建Activiation function
之所以要这么做,跟一个问题有关:梯度消失。我们还是以老生常谈的逻辑回归为例:
在神经网络当中,我们是按照的方式,进行梯度下降。熟悉Sigmoid函数的,应该都知道一个事情。Sigmoid函数,越往两边,越平缓。越平缓,也就意味着其导数越来越接近0,导数一旦接近0,那么就“走不动”了。神经网络当中,随着深度的增加,往往就会导致属性值越来越往两边走(分类趋于准确),但同时也意味着,sigmoid函数的导数越发的趋近于0,整体模型的收敛速度越来越慢,甚至导致梯度消失。如何解决这个问题呢?最容易想到的就是:加权。而加的这个“权”就是Activiation function(甚至可以放弃使用Sigmoid,直接用Activiation function)
那么,经过不断探索和总结,人们发现:训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。
在这种前提下,最简单的Activiation Function就是ReLu函数,这个函数如下所示:
ReLu函数形式上简单,计算也容易。不过,这个函数在自变量小于0的时候,恒为0,也就意味着,如果一个模型当中,当算出来的线性方程z小于0的时候,ReLU是不起任何作用的。如果一个模型当中,碰巧就这么邪门,那么有它没它都一样。
于是,又有人提出了许多“变种”,比如:tanh函数,这个函数如下所示:
不过,这个图像是不是和Sigmoid函数高度相似呢?因此Sigmoid函数的问题,它也一样会出现。除了上述两个函数,基于ReLu的变种,还有Leaky ReLu,Parametric ReLU等
总的来说,Activiation function当中,建议使用ReLU函数,但是要注意初始化和learning rate的设置;可以尝试使用Leaky ReLU或ELU函数;不建议使用tanh。必要的时候,甚至可以放弃Sigmoid五.DropOut
英语好的,应该都知道Drop out这个词有“辍学,丢弃”的意思,DropOut的一个核心思想就是:丢弃。
之所以要丢弃,原因在于:过拟合。DropOut就是为了解决过拟合,尤其是对于那种模型参数太多,但训练集数据有不够的情况。
我们知道,在神经网络当中,没经过一个隐藏层(Hidden Layer),就会产生新的z值。而每一层的隐藏层都有若干个神经元。DropOut采用的方法是:每经过一个Layer,按照一定的概率p,让某些神经元不进行运算(也就是“丢弃”了这些神经元),如下所示(右侧为DropOut之后的结果):
曾经看到过一篇文章,拿识别杨幂来举例子,文章链接如下:杨幂的照片是这样子:
我构建的神经网络可以是这样子: 然后,我进行四次DropOut,如下图所示: 认人主要是看脸,最后这个图,把脸给drop out,于是训练的时候,很容易出现过拟合。如此一组合,其实不就相当于如下所示嘛:
这就相当于,明明是一个模型,但是却起到了四个模型的效果。虽然最后一个模型过拟合了,但是有另外三个制约,过拟合的风险大大缩小。这种方法颇有一种这样的感觉:练跑步的时候,我平时训练的时候把双脚绑上沙袋,但是在体育考试测试的时候,我把沙袋给卸掉,这样我就会跑的非常轻松。
转载地址:https://blog.csdn.net/johnny_love_1968/article/details/117619480 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!