深度学习相关问题总结

前言:本篇博客主要记录我在深度学习过程中一些问题的总结,持续更新,希望能与大家一起交流看法。

一、过拟合相关问题

过拟合相关问题是最基础、最重要的一类问题,面试经常会碰到。

  1. 什么是过拟合?
    模型对于所提供的数据进行一致性假设而使得模型变得过度复杂称为过拟合。
    个人理解:模型过度拟合训练数据而导致在测试数据上泛化能力弱的现象。

  2. 过拟合的危害?
    输出的泛化能力弱。 --> 致命危害

  3. 如何降低过拟合?
    1)最本质的方法是增加数据集:模型在尽可能多的数据集上进行训练,可以更好的修正自己。实际中的操作方法是:对数据集随机添加噪声。这样训练集在重复多轮中也不会使用完全一样的数据。交叉验证、PCA特征提取本质上也是增加数据集。

    2)采用合适的模型:过于简单或过于复杂的模型都容易带来过拟合问题。对于模型设计,公认的一个深度学习规律是“Deeper is better”,但同时容易带来过拟合问题,并且耗费大量计算资源。所以模型的设计需要合理的取舍。

    3)使用Dropout:Dropout指模型在训练过程中每次按给定的几率关闭或者忽略某些层的节点。使得模型在使用相同的数据进行训练时相当于从不同的模型中随机选择一个进行训练。

    4)权重衰减(Weight-decay):又称正则化,具体做法是将权值的大小加入到损失函数中。神经网络的计算核心是反向传播,即增大的误差项会对每个神经元的发生影响。而正则化的加入通过对权重值在一定范围内的修正,使其不要偏离一个均值太大从而减少过拟合产生。(本人实际没有使用过此方法)

    5)Early Stopping:实际操作是人为设定一个范围,当连续10次准确率在此范围波动时就停止循环。很简单自然的方法。

    6)可变化的学习率:根据模型计算出的准确率进行调整。实际操作是在人为设定的准确率范围内,达到10次范围内的波动后,依次将学习率减半,直到最终的学习率降为原始的1/1024时就停止模型的训练。
    个人理解:第5条和第6条的原理,随着训练时间的延长,部分神经元已经达到拟合状态,对其继续训练会使得这些已经饱和的神经元继续增长从而使得模型过拟合。

    7)使用Batch Normalization:即数据在经过卷积层后,进入激励函数前对其进行一次Batch Normalization,分批对输入的数据求取均值和方差之后重新对数据进行归一化计算。

参考资料:《Tensorflow深度学习应用实践》–王晓华著

二、梯度相关问题

  1. 为什么使用梯度下降来优化神经网络参数?
    深度网络由许多线性层和非线性层堆叠而来,整个深度网络可以视为是一个复合的非线性多元函数。我们最终目的是希望这个非线性函数很好的完成输入到输出之间的映射,即找到让损失函数取得最小值。所以问题就变成寻找函数最小值,在数学上,很自然的就会想到使用梯度下降来解决。

  2. 什么是梯度消失?产生的原因是什么?
    梯度是一个矢量,函数在该点处沿着该方向变化最快,变化率最大。很容易理解梯度消失即找不到这样一个矢量了。
    对于传统神经网络,Sigmod是常用的激励函数,Sigmoid导数的取值范围在0~0.25之间,而我们初始化的网络权值|w|通常都小于1,因此,当层数增多时,小于0的值不断相乘,最后就导致梯度消失的情况出现。

  3. 什么是梯度爆炸?产生的原因是什么?
    梯度爆炸就是由于初始化权值过大,网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长。

  4. 梯度下降和梯度爆炸的解决办法有哪些?
    梯度消失和梯度爆炸本质上是一样的,都是因为网络层数太深而引发的梯度反向传播中的连乘效应。

    1)换用Relu、LeakyRelu、Elu等激活函数:
    ReLu:让激活函数的导数为1
    LeakyReLu:包含了ReLu的几乎所有有点,同时解决了ReLu中0区间带来的影响
    ELU:和LeakyReLu一样,都是为了解决0区间问题,相对于来,elu计算更耗时一些。
    (激励函数相关可参考深度学习常用激活函数

    2)Batch Normalization:
    BN本质上是解决传播过程中的梯度问题

    3)ResNet残差结构

    4)LSTM结构:
    LSTM不太容易发生梯度消失,主要原因在于LSTM内部复杂的“门(gates)”

    5)预训练加finetunning
    现在实际操作基本都是直接拿imagenet的预训练模型直接进行finetunning。
    也可称为‘迁移学习’。

    6)梯度剪切、正则
    这个方案主要是针对梯度爆炸提出的,其思想是设置一个剪切阈值,如果更新梯度时,梯度超过了这个阈值,那么就将其强制限制在这个范围内。这样可以防止梯度爆炸。
    另一种防止梯度爆炸的手段是采用权重正则化,正则化主要是通过对网络权重做正则来限制过拟合,但是根据正则项在损失函数中的形式可以看出,如果发生梯度爆炸,那么权值的范数就会变的非常大,反过来,通过限制正则化项的大小,也可以在一定程度上限制梯度爆炸的发生。

参考资料:梯度消失和梯度爆炸问题详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阁不鸽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值