美文网首页
PART 2 - W1 改善DNN:超参数调试、正则化以及优化

PART 2 - W1 改善DNN:超参数调试、正则化以及优化

作者: 迪丽娜扎 | 来源:发表于2019-10-16 10:28 被阅读0次

    2019.10.14

    第一章  深度学习的实用层面

    1.1 训练/开发/测试

    建模时所用的超参的设定取决于诸多因素,如:(1)具体的场景,如图像识别、自然语言处理;(2)数据规模,包括样本的规模和特征的规模;等。因此,在模型开发过程中,通常较难一开始就会设定出一组合适的训练参数,而是通过不断地调试,找到最合适的参数。

    训练集/验证集/测试集 的划分:要保证验证集和测试集是同一分布。

    1.2 偏差/方差

    老生常谈的几点

    1. 欠拟合导致偏差,过拟合导致方差

    2. 观察训练集和测试集的误差,可以确定模型处于欠拟合还是过拟合的状态,从而确定当前的误差主要是方差还是偏差导致的。

    1.3 机器学习基础

    1. 调参首先要确认当前模型是偏差状态还是方差状态;

    2. 更复杂的网络降低偏差,更大的数据降低方差;

    3. 只要正则化合适,更大的网络基本没有坏处,除了需耗费更多的训练时间。

    1.4 正则化

    1.4.1 正则化项的概念

    1. 对于神经网络,有最常用的两种正则化方法:

    L1正则化:在损失函数里加入所有w的绝对值和b的绝对值之和(的平均值),其中b项有时候省略

    L2正则化:在损失函数里加入所有w的平方和b的平方之和(的平均值)

    2. 正则化项前面的系数:\lambda/2m表示了在整个损失函数中正则化项的权重

    1.4.2 正则化项与梯度下降

    L2正则:w的梯度会随着w本身不断减小(接近与0)而不断减小,因此其向0的逼近是逐渐减速的,会导致w成为比较小但不为0的数。结论:L2正则会导致最终训练出的参数都接近0,但大部分并不为0

    L1正则:w的梯度下降方向在大于0时为-1,小于0时为1,因此会迅速收敛到0。结论:L1正则会导致大部分w都为0,少部分不为0

    1.5 为什么正则化可以减少过拟合(减小方差)

    1. 正则可以弱化(L2)或去除(L1)部分神经元之间的连接,从而使整个网络结构变得简单。

    2. 正则化使得w变小,进而使得加权求和的值变小,进而使得喂入激活函数的值在零附近的“近似线性区域”,从而简化了整个网络的映射关系。

    1.6 dropout(随机失活)正则化

    dropout操作:在训练一个神经网络时(在喂入一组数据前),对各个隐藏层的神经元随机去除一部分。比如假设隐藏层本来全是4个神经元,设置去除比例为0.25,则每层变为3个神经元。然后在被简化的网络上进行FP和BP,并调整对应的w和b。

    作用:dropout把神经网络暂时进行了简化,比如dropout之前,层与层之间是4*4的参数矩阵,dropout后变成了3*3,有利于防止过拟合。

    注:=只是在训练时进行dropout,预测时使用完整的网络。

    1.7 理解dropout(直观)

    1. dropout使得网络不会只重视少量输入(最初的输入特征或上一层的输出),而是相对平等地对待所有特征。试想:假设把某个输入的w调得过大,结果下一轮时这个节点被drop掉了,使得网络的预测效果大打折扣。因此,网络会倾向于把每个w都调得不那么大(每个特征都发挥作用,但都不大),而不是少量特征的w很大,而其余的w很小(只有少数特征发挥决定性作用)。从这个角度看,dropout的作用很像L2正则化。

    2. 每层可以设置不同的keep_prob参数,一般经验是:输入层keep_prob保持为1,若层神经元数较多则把keep_prob参数设置的较小一些,反之则较大一些。

    3. dropout本质是正则化,因此其作用是为了防止过拟合。

    4. dropout正则化目前被广泛应用到计算机视觉领域,其它领域则鲜有使用。

    1.8 其它正则化方法

    1.8.1 扩充数据集

    以图像识别为例,把原始样本的图片进行左右反转、倾斜、裁边等操作,即可构造大量样本。更大的数据集可以降低过拟合(正则化方法就是指降低过拟合的方法)。但这类方法在其它领域不怎么好用。

    1.8.2 early stopping

    1. 概念:整个迭代训练过程中,训练集的误差持续下降,测试集或验证集的误差则先下降后增大,可以认为拐点就是开始过拟合的点。early stopping则是使用某种方式持续关注这种变化的趋势,并适时停止训练

    2. 优缺点(与L2正则化对比):

    优点:early stopping不涉及具体的罚项,因此也没有相应的参数lambda,少一个需要调的超参。相比较来说L2正则则要尝试大量的lambda来确定最优值,增大了训练成本。

    缺点:L2正则化每设定一个lambda值,就相当于确定了一个具体的带罚项的成本函数,接下来的训练则是一门心思减小成本函数。相当于防止过拟合和降低成本函数是分成前后两步干的。而early stopping则相当于把两步揉到一起干,在为了防止过拟合停止训练的时刻,也等于放弃了继续减小成本函数。

    1.9 标准化输入

    (原视频起名“正则化输入”,不是很合理)

    神经网络的输入特征一定要进行标准化处理,即减去均值、除以方差。

    若原始特征是正态分布,则标准化后为标准正太分布。

    若不进行标准化操作,不同的特征可能分布在不同量级,如年龄和收入。若以原始特征作为输入,则对应的合适的w也可能差了量级,从而导致迭代优(梯度下降等)化难以进行。

    1.10 梯度消失和梯度爆炸

    直观理解:假设一个非常非常深的DNN,假设中间的层不做非线性变换,则FP可以表示为

    \hat{y} = \sigma(W^{L}W^{L-1}...W^{2}W^{1}x) 暂时忽略b

    假设每层的W都是大于1的,很多相乘之后变大更加的大,则对每个参数而言,(损失函数的)梯度都会特别大,这叫梯度爆炸

    假设每层的W都是小于1的,则很多相乘后变得接近于0,对每个参数而言,梯度都会变得特别小,这叫梯度消失。

    为什么会有都大于1或都小于1这种事呢,取决于初始化。假设初始化的W都非常小,一直处于梯度消失区,则训练变得基本没有进展;假设W都初始化的很大,则上来就梯度爆炸,对应的可能是损失函数在震荡而迟迟不能收敛。这也是为什么参数初始化如此重要了。

    1.11  神经网络的权重初始化

    1. 激活函数为tanh时,令W的方差为 :(Xavier初始化)w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(1/n[l-1])

    2. 激活函数是ReLU,权重w的初始化一般令其方差为  :w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(2/n[l-1])

    3. 另一种初始化w的方法,令其方差为 2/(n[l-1]+n[l]):w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(2/(n[l-1]+n[l]))

     合适的初始化是为了避免梯度消失或梯度爆炸,更深的就不咋知道了。

    原文链接:https://blog.csdn.net/cherry_yu08/article/details/79116862

    1.12 梯度的数值逼近

    在求解f(x)\theta 处的导数时:

    数学的解法:先求出f(x)的导函数f'(x),再把\theta代入,求出f'(\theta)

    数值的解法:搞一个较小的值\varepsilon ,求出\frac{f(\theta+\varepsilon ) - f(\theta-\varepsilon )}{2\varepsilon},让\varepsilon 尽量的小就是所谓的数值逼近。

    计算机解决数学问题,本质都是用数值的方法。

    1.13 梯度检验

    对于一个神经网络,梯度检验的步骤如下

    (0)先有一组确定好的参数值(比如初始化值)

    (1)把所有的参数即所有的w和b整合成一个巨大的vector,表达为\vec{\theta} = [\theta_1,\theta_2,...] ,此时的损失也可以表示为J(\vec{\theta})

    (2)求出偏导构成的向量\frac{dJ}{d\vec{\theta}}=[\frac{dJ}{d\theta_1},\frac{dJ}{d\theta_2},...] (怎么事先求出来。。。)

    (3)循环执行 assert \lim\nolimits_{\varepsilon\to0} \frac{J(\theta_i+\varepsilon ) - J(\theta_i-\varepsilon )}{2\varepsilon}\approx \frac{dJ}{d\theta_i}

    1.14 关于梯度检验的注意事项

    1. 梯度检验是用来debug的,不是每轮梯度下降都进行梯度检验;

    2. 如果有正则化项,进行梯度检验时不要遗漏;

    3. 梯度检验时不应带dropout

    4. 初始化后应该进行梯度检验,训练一段时间后或许应该重新检验一下。

    (不会真正用到,毕竟都是调包侠)

    相关文章

      网友评论

          本文标题:PART 2 - W1 改善DNN:超参数调试、正则化以及优化

          本文链接:https://www.haomeiwen.com/subject/scgrmctx.html