深度学习的一些基础问题及学习总结

1.为什么深层的神经网络难以训练?

原因一:梯度消失
梯度消失指前面层的学习显著慢于后面层的学习。
消失原因也有多种,比如学习率(learning_rate)的大小,网络参数的初始化,激活函数的边缘效应等等。

梯度消失解决办法:

  1. 用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数;
  2. 用Batch Normalization;

原因二:梯度爆炸
梯度爆炸比较常发生在深度网络或循环神经网络(RNN)中,梯度在网络更新中可不断累积,变成非常大的梯度,导致网络权重值的大幅更新,使得网络不稳定,在极端的情况下,权重值甚至会溢出,变成 N a N NaN NaN值,再也无法更新。

梯度爆炸解决办法:

  1. 预训练+微调;
  2. 梯度剪切、权重正则;
  3. 使用不同的激活函数;
  4. 使用残差结构,为模型增加了一个shortcut;

原因三:权重矩阵的退化导致模型的有效自由度减少
详细解释就是:参数空间中学习的退化速度减慢,导致减少模型的有效维数,网络的可用自由度对学习中梯度范数的贡献不均衡,随着网络深度的增加,退化速度会越来越快,网络也变得很敏感。

解决办法之一:
这篇论文提出正交初始化完全移除了线性网络中的退化问题;
此外,Skip connections(ResNet 中采用的重要方法)帮助深度神经网络实现高精度的训练同样是一种打破退化的方法 。(参考论文

2.如何找出超参数的最优值?

常见设置超参数的方法有:

  1. 猜测和检查:根据经验或直觉,选择参数,一直迭代;
  2. 网格搜索:让计算机尝试在一定范围内均匀分布的一组值,网格搜索实现参考https://www.jianshu.com/p/18b043f10690
  3. 随机搜索:让计算机随机挑选一组值,比网格搜索快,但结果没法保证,实现可参考:https://www.jianshu.com/p/5378ef009cae
  4. 贝叶斯优化:即使用贝叶斯优化超参数,实现参考:https://www.cnblogs.com/wmx24/p/10025600.html
  5. MITIE方法:使用BOBYQA算法寻找局部最优解;
  6. 新提出的LIPO的全局优化方法:该法没有参数,而且比随机搜索方法好,论文参考:https://arxiv.org/abs/1703.02628,参考博文:http://blog.dlib.net/2017/12/a-global-optimization-algorithm-worth.html

3.非线性激活函数的重要性与性质?

重要性:

  1. 如果网络中都是线性部件,那线性组合还是线性,与单独的一个线性分类器无异;
  2. 非线性可逼近任意函数,使网络更加强大,增加它的能力;

性质:

  1. 可微性:当优化方法是基于梯度的时候,就体现了该性质;
  2. 单调性:当激活函数是单调的时候,单层网络能够保证是凸函数;
  3. 输出值的范围:当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的 Learning Rate;

4.常见的激活函数与常见选择?

常见的激活函数(参考:https://www.cnblogs.com/XDU-Lakers/p/10557496.html):

图有空再补
sigmoid激活函数:
f ( x ) = 1 1 + e − x , 值 域 ( 0 , 1 ) f(x) = \frac{1}{1 + e^{-x}} ,值域(0,1) f(x)=1+ex1,(0,1)

tanh激活函数:
f ( x ) = t a n h ( x ) = e x − e − x e x + e − x , 值 域 ( − 1 , 1 ) f(x) = tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}},值域(-1,1) f(x)=tanh(x)=ex+exexex,(1,1)

Relu激活函数:
f ( x ) = m a x ( 0 , x ) , 值 域 [ 0 , + ∞ ] f(x) = max(0, x),值域[0,+∞] f(x)=max(0,x),[0,+]

Leak Relu激活函数:
f ( x ) = { a x , x < 0 x , x > 0 , 值 域 ( − ∞ , + ∞ ) f(x) = \left\{ \begin{aligned} ax, \quad x<0 \\ x, \quad x>0 \end{aligned} \right.,值域(-∞,+∞) f(x)={ax,x<0x,x>0,(,+)

SoftPlus激活函数:
f ( x ) = l n ( 1 + e x ) , 值 域 ( 0 , + ∞ ) f(x) = ln( 1 + e^x),值域(0,+∞) f(x)=ln(1+ex),(0,+)

softmax激活函数:
σ ( z ) j = e z j ∑ k = 1 K e z k \sigma(z)_j = \frac{e^{z_j}}{\sum_{k=1}^K e^{z_k}} σ(z)j=k=1Kezkezj

激活函数的常见选择:

  1. 如果是二分类问题,输出层选sigmoid函数,其他层选择Relu函数;
  2. 如果是多分类问题,输出层选softmax函数;
  3. 如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数,有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当是负值的时候,导数等于 0;
  4. tanh 激活函数:tanh 是非常优秀的,几乎适合所有场合;
  5. ReLu 激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLu 或者 Leaky ReLu,再去尝试其他的激活函数;
  6. 如果遇到了一些死的神经元,我们可以使用 Leaky ReLU 函数;

5.Batch_Size值的选择?

  1. 适当增大Batch_Size可以提高内存利用率,大矩阵乘法的并行化效率提高;
  2. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小;
  3. 但盲目增大Batch_Size,内存容量可能撑不住;
  4. 而且Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化;

6.归一化与批归一化?

归一化的好处:

  • 为了后续数据处理的方便,归一化的确可以避免一些不必要的数值问题;
  • 为了程序运行时更加快速收敛(如上图);
  • 同一量纲,样本数据的评价标准不一样,需要对其量纲化,统一评价标准;
  • 避免神经元饱和:就是当神经元的激活在接近0或1时会饱和,在这些区域,梯度几乎为0,这样,在反向传播过程中,局部梯度就会接近0,这会有效地“杀手”梯度;
  • 保证输出数据中数值小的不被吞食;

归一化类型:

1.线性归一化
x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x^{\prime} = \frac{x-min(x)}{max(x) - min(x)} x=max(x)min(x)xmin(x)
比较适用在数值比较集中的情况;但如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定;

2.标准差标准化
x ′ = x − μ σ x^{\prime} = \frac{x-\mu}{\sigma} x=σxμ
这个很好理解,就是把数据标准处理后,均值变为0,方差变为1,服从标准正态分布;

3.非线性归一化
这种归一化,比较适用在数据分析较大的场景,有些数值很大,有些很小,通过一些数字函数,比如log,正切,指数等,将原始值进行映射;

批归一化(Batch Normalization,BN):

简单来说,相对于只在输入层对数据进行归一化处理,在神经网络的中间层也进行归一化处理,使得训练效果更好的方法,就是批归一化(BN);

进一步了解批归一化参考:

7.为什么要dropout正则化?

  • 机器学习和深度学习可能存在过拟合的问题–高方差(上图左图是高偏差,右图是高方差,清楚地记得吴恩达机器学习课程学过这些),解决这种问题,一个是正则化,一个是准备更多的数据,但有时没法快速准备更多的数据,如工业的机器故障问题,所以正则化通常有助于避免过拟合;

8.常用的数据增强方法?

  • Color Jittering:对颜色的数据增强:图像亮度、饱和度、对比度变化;

  • PCA Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训练集上计算协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering;

  • Random Scale:尺度变换;

  • Random Crop:采用随机图像差值方式,对图像进行裁剪、缩放;包括Scale Jittering方法(VGG及ResNet模型使用)或者尺度和长宽比增强变换;

  • Horizontal/Vertical Flip:水平/垂直翻转;

  • Shift:平移变换;

  • Rotation/Reflection:旋转/仿射变换;

  • Noise:高斯噪声、模糊处理;

  • Label Shuffle:类别不平衡数据的增广;

未完待续。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZPILOTE

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

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

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

打赏作者

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

抵扣说明:

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

余额充值