1.激活函数的作用
单纯的神经网络只能够处理线性数据,而激活函数所起到的作用就是在神经网络中加入了非线性因素,使得神经网络可以拟合各种曲线,进而能够对非线性的数据进行处理,用来解决线性模型表达能力不足的问题,进一步提高神经网络的拟合能力,能够适应更多不同场景的应用。
2.如何解决过拟合?
导致过拟合的原因有训练数据量少,模型过于复杂。常见解决方法有:
- 增加训练数据量
- Batch Normalization
- Dropout
- Early Stopping
- L1/L2正则化
3.常见的正则化方法
正则化的本质是针对某一问题加以先验限制条件或约束以达到某种目的的一种手段。
常见的正则化方法有L1正则化和L2正则化,它们是在损失函数中添加一个正则项。
- L1正则项是指权值向量中各个元素的平均值之和。
- L2正则项是指权值向量中各个元素的平方和然后再求平方根。
4.批量归一化的作用
神经网络的训练过程本质上就是学习数据分布,如果训练数据与测试数据分布不同将大大降低网络的泛化能力,因此需要在训练开始前对所有的输入数据进行归一化处理。
在训练过程中进入网络结构的一般都是一个mini batch数据,而对应的数据之间可能存在较大的差异,因此需要模型的参数不断的进行调整以便能够适应对应的数据,这就会给模型训练带来极大不便,使得模型难以收敛,而对数据进行归一化操作以后就使得数据变得稳定,参数的变化也会比较稳定,从而有助于加快模型的收敛速度。
批量归一化是针对每一批数据,在网络的每一层输入之前增加归一化处理(均值为0,方差为1),将所有批数据强制在统一的数据分布下。可以看作在每一层输入和上一层输出之间加入了一个新的计算层,对数据的分布进行额外的约束,从而增强模型的泛化能力。但批量归一化层同时也降低了模型的拟合能力,归一化之后的输入分布被强制为0均值和1标准差。
5.常见的优化方法
梯度下降法是深度学习领域内目前最为常见的优化方法,梯度下降是利用函数一阶梯度信息寻找函数局部最优解的方法。常见的梯度下降算法有:
- SGD(stochastic gradient descent,随机梯度下降)在计算过程中,每次随机抽取部分样本进行更新,可以大大加快更新速度。
- Momentum方法是通过指数加权平均法,累计历史梯度值,进行参数更新,这样会朝着更有利于收敛的方向进行更新,收敛速度较快。
- AdaGrad方法通过对不同的参数分量使用不同的学习率,总体的学习率会逐渐较小,在离最优目标较远时采用较大的学习率,加快训练的速度;随着迭代次数的增加,学习率逐渐下降。
- RMSProp方法是对AdaGrad的一个改进算法,解决了AdaGrad激进的学习率缩减问题,将学习率除以了一个指数衰减的衰减均值,控制历史梯度对历史梯度信息获取的多少,可以更加稳定的反应梯度变化的情况。
- Adam方法借鉴了AdaGrad自适应学习率和动量梯度下降法的优点,使用动量和自适应学习率来加快收敛速度,既能适应系数梯度,又能缓解梯度震荡。
6.如何解决梯度消失和梯度爆炸
导致梯度消失和梯度爆炸的原因本质上是一致的,都是因为在反向传播过程中进行进行权重的更新时,导致梯度出现了不合理的变化。
梯度消失是由于采用了不合理的激活函数,因此想要解决梯度消失问题可采用合适的激活函数,或者采用Batch Normalization方法。
梯度爆炸是由于初始化权重不合理,权重值太大, 常见的解决方法可对相应的梯度进行裁剪,即设置一个阈值,在进行梯度更新时如果梯度超过阈值就将其限制在该范围内从而防止梯度爆炸,或采用更合理的激活方法等。
7.如何理解反向传播
模型训练的本质是最小化损失函数,在训练过程中通常是采用的方法是梯度下降算法,对网络中所有权重计算损失函数的梯度,利用梯度值来对权重进行更新以便能够使损失函数最小化。为了降低损失函数的值,可以从后往前依次求对应参数的偏导,这个过程就是反向传播。
8.CNN的网络结构以及各层的作用
CNN的网络结构包含以下几个部分:
- 卷积层:对输入层输入进来的数据进行特征的提取
- 池化层:又称为降采样层,作用是对感受域内的特征进行筛选,降低输出特征的尺寸,减少模型的参数量, 常见的池化方法有最大池化和平均池化
- 输出层:对卷积神经网络提取到的特征进行汇总分类并输出。