深度学习面试79题:涵盖深度学习所有考点(66-79)( 二 )


深度学习面试79题:涵盖深度学习所有考点(66-79)
本文插图
深度学习流程简介
1)一次性设置(One time setup)
- 激活函数(Activation functions)
- 数据预处理(Data Preprocessing)
- 权重初始化(Weight Initialization)
- 正则化(Regularization:避免过拟合的一种技术)
- 梯度检查(Gradient checking)
2)动态训练(Training dynamics)
- 跟踪学习过程 (Babysitting the learning process)
- 参数更新 (Parameter updates)
- 超级参数优化(Hyperparameter optimization)
- 批量归一化(BN:Batch Normalization:解决在训练过程中 , 中间层数据分布发生改变的问题 , 以防止梯度消失或爆炸、加快训练速度)
3)评估(Evaluation)
- 模型组合(Model ensembles)
(训练多个独立的模型 , 测试时 , 取这些模型结果的平均值)
神经网络学习过程本质就是为了:学习数据分布 , 一旦训练数据与测试数据的分布不同 , 那么网络的泛化能力也大大降低 , 所以需要使用输入数据归一化方法 , 使训练数据与测试数据的分布相同 。
2. 激活函数(Activation Functions)
总结:
1)使用ReLU时 , 使Learning Rates尽量小
2)尝试使用Leaky ReLU/Maxout/ELU
3)可以使用tanh , 但期望不要太高
4)不要使用sigmoid
BN是由Google于2015年提出 , 这是一个深度神经网络训练的技巧 , 它不仅可以加快了模型的收敛速度 , 而且更重要的是在一定程度缓解了深层网络中“梯度弥散”的问题 , 从而使得训练深层网络模型更加容易和稳定 。 所以目前BN已经成为几乎所有卷积神经网络的标配技巧了 。
从字面意思看来Batch Normalization(简称BN)就是对每一批数据进行归一化 , 确实如此 , 对于训练中某一个batch的数据{x1,x2,...,xn} , 注意这个数据是可以输入也可以是网络中间的某一层输出 。 在BN出现之前 , 我们的归一化操作一般都在数据输入层 , 对输入的数据进行求均值以及求方差做归一化 , 但是BN的出现打破了这一个规定 , 我们可以在网络中任意一层进行归一化处理 , 因为我们现在所用的优化方法大多都是min-batch SGD , 所以我们的归一化操作就成为Batch Normalization 。
我们为什么需要BN?我们知道网络一旦train起来 , 那么参数就要发生更新 , 除了输入层的数据外(因为输入层数据 , 我们已经人为的为每个样本归一化) , 后面网络每一层的输入数据分布是一直在发生变化的 , 因为在训练的时候 , 前面层训练参数的更新将导致后面层输入数据分布的变化 。
以网络第二层为例:网络的第二层输入 , 是由第一层的参数和input计算得到的 , 而第一层的参数在整个训练过程中一直在变化 , 因此必然会引起后面每一层输入数据分布的改变 。 我们把网络中间层在训练过程中 , 数据分布的改变称之为:“Internal Covariate Shift” 。 BN的提出 , 就是要解决在训练过程中 , 中间层数据分布发生改变的情况 。