文章目录
1.为什么深层的神经网络难以训练?
原因一:梯度消失
梯度消失指前面层的学习显著慢于后面层的学习。
消失原因也有多种,比如学习率(learning_rate)的大小,网络参数的初始化,激活函数的边缘效应等等。
梯度消失解决办法:
- 用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数;
- 用Batch Normalization;
原因二:梯度爆炸
梯度爆炸比较常发生在深度网络或循环神经网络(RNN)中,梯度在网络更新中可不断累积,变成非常大的梯度,导致网络权重值的大幅更新,使得网络不稳定,在极端的情况下,权重值甚至会溢出,变成
N
a
N
NaN
NaN值,再也无法更新。
梯度爆炸解决办法:
- 预训练+微调;
- 梯度剪切、权重正则;
- 使用不同的激活函数;
- 使用残差结构,为模型增加了一个shortcut;
原因三:权重矩阵的退化导致模型的有效自由度减少
详细解释就是:参数空间中学习的退化速度减慢,导致减少模型的有效维数,网络的可用自由度对学习中梯度范数的贡献不均衡,随着网络深度的增加,退化速度会越来越快,网络也变得很敏感。
解决办法之一:
这篇论文提出正交初始化完全移除了线性网络中的退化问题;
此外,Skip connections(ResNet 中采用的重要方法)帮助深度神经网络实现高精度的训练同样是一种打破退化的方法 。(参考论文)
2.如何找出超参数的最优值?
常见设置超参数的方法有:
- 猜测和检查:根据经验或直觉,选择参数,一直迭代;
- 网格搜索:让计算机尝试在一定范围内均匀分布的一组值,网格搜索实现参考https://www.jianshu.com/p/18b043f10690;
- 随机搜索:让计算机随机挑选一组值,比网格搜索快,但结果没法保证,实现可参考:https://www.jianshu.com/p/5378ef009cae;
- 贝叶斯优化:即使用贝叶斯优化超参数,实现参考:https://www.cnblogs.com/wmx24/p/10025600.html
- MITIE方法:使用BOBYQA算法寻找局部最优解;
- 新提出的LIPO的全局优化方法:该法没有参数,而且比随机搜索方法好,论文参考:https://arxiv.org/abs/1703.02628,参考博文:http://blog.dlib.net/2017/12/a-global-optimization-algorithm-worth.html
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+e−x1,值域(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+e−xex−e−x,值域(−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
激活函数的常见选择:
- 如果是二分类问题,输出层选sigmoid函数,其他层选择Relu函数;
- 如果是多分类问题,输出层选softmax函数;
- 如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数,有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当是负值的时候,导数等于 0;
- tanh 激活函数:tanh 是非常优秀的,几乎适合所有场合;
- ReLu 激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLu 或者 Leaky ReLu,再去尝试其他的激活函数;
- 如果遇到了一些死的神经元,我们可以使用 Leaky ReLU 函数;
5.Batch_Size值的选择?
- 适当增大Batch_Size可以提高内存利用率,大矩阵乘法的并行化效率提高;
- 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小;
- 但盲目增大Batch_Size,内存容量可能撑不住;
- 而且Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化;
6.归一化与批归一化?
![](https://i-blog.csdnimg.cn/blog_migrate/53102d1e4e8c13895f035cbf04c4b6b2.png)
归一化的好处:
- 为了后续数据处理的方便,归一化的确可以避免一些不必要的数值问题;
- 为了程序运行时更加快速收敛(如上图);
- 同一量纲,样本数据的评价标准不一样,需要对其量纲化,统一评价标准;
- 避免神经元饱和:就是当神经元的激活在接近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)x−min(x)
比较适用在数值比较集中的情况;但如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定;
2.标准差标准化
x
′
=
x
−
μ
σ
x^{\prime} = \frac{x-\mu}{\sigma}
x′=σx−μ
这个很好理解,就是把数据标准处理后,均值变为0,方差变为1,服从标准正态分布;
3.非线性归一化
这种归一化,比较适用在数据分析较大的场景,有些数值很大,有些很小,通过一些数字函数,比如log,正切,指数等,将原始值进行映射;
批归一化(Batch Normalization,BN):
简单来说,相对于只在输入层对数据进行归一化处理,在神经网络的中间层也进行归一化处理,使得训练效果更好的方法,就是批归一化(BN);
进一步了解批归一化参考:
7.为什么要dropout正则化?
![](https://i-blog.csdnimg.cn/blog_migrate/79982e9fa8bb3b046b73809ae962d477.png)
- 机器学习和深度学习可能存在过拟合的问题–高方差(上图左图是高偏差,右图是高方差,清楚地记得吴恩达机器学习课程学过这些),解决这种问题,一个是正则化,一个是准备更多的数据,但有时没法快速准备更多的数据,如工业的机器故障问题,所以正则化通常有助于避免过拟合;
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:类别不平衡数据的增广;
未完待续。。。