Batch_size
batch_size:一次训练所选取的样本数; batch_size的大小影响内存的使用情况,同时也影响模型的优化程度和速度。
batch_size设置合适时的优点:
- 并行化提高了内存的利用率,提高了训练速度
- 使得单个epoch的训练次数变少了,如果要达到相同的精度,需要增加epoch迭代次数
- 使得梯度下降的方向更加准确,batch_size=1,梯度变来变去,网络很难收敛;batch_size越大,其确定的下降方向越准;
- batch_size的选择决定了梯度下降的方向;如果数据量较小,可以选择全数据集的形式
激活函数
激活函数Sigmoid、Softmax、tanh、ReLU的区别
- 在输出层,一般会使用sigmoid函数,因为一般期望的输出结果概率在0~1之间,如二分类,sigmoid可作为输出层的激活函数,softmax多用于多分类。sigmoid函数计算量大反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
- 在隐藏层,tanh函数优于sigmoid函数。因为其取值范围介于-1 ~ 1之间,有类似数据中心化的效果。
- 但实际应用中,tanh和sigmoid会在端值趋于饱和,造成训练速度减慢,故一般的深层网络的激活函数默认大多采用ReLU函数,收敛速度快。
优化器
1、SGD-随机梯度下降法
SGD简单且容易实现,解决了随机小批量样本的问题,由于只对一个训练样本进行梯度下降,可以提高网络参数的更新速度;但其训练时下降速度慢、准确率下降、容易陷入局部最优以及不容易实现并行处理等问题
2、Momentum(动量法)
SGD每次都会在当前位置沿梯度负方向更新,不会考虑先前的梯度方向及大小;Momentum则是通过引入一个新的变量v去积累之前的梯度,从来可以加速网络的学习过程,也就是说如果当前时刻的梯度方向与之前时刻累计的梯度方向一致,那么梯度会加强,梯度下降的幅度更大,反之,梯度下降的幅度会降低。
3、AdaGrad
SGD与Momentum存在的问题,AdaGrad(Adaptive Gradient)是在SGD基础上引入二阶动量,能够对不同的参数使用不同的学习率进行更新,对于梯度较大的参数,那么学习率就会变得较小;而对于梯度较小的参数,那么学习率就会变得较大,这样就会使在陡峭的区域下降速度快,平缓的区域下降速度慢
4、RMSProp
RMSProp是对AdaGrad的一个扩展,在非凸情况下效果更好,能够在目标函数不稳定的情况下很好的收敛,且能够快速收敛。RMSProp能够避免梯度快速降低的问题,学习率自适应能力较强,且能够在目标函数不稳定的情况下快速的收敛,比上述三种优化器表现都好
5、Adam
Adam是将Momentum与RMSProp结合起来的一种算法,不仅使用动量作为参数更新方向,而且可以自适应调整学习率。效果最好。
实现简单,计算高效,对内存需求少;
参数的更新不受梯度的伸缩变换影响;
更新的步长能够被限制在大致的范围内
Resnet 残差网络
常见的Resnet 50、Resnet 101
- 将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入部分。
- 意味着后面的特征层的内容会有一部分由其前面的某一层线性贡献。
- 深度残差网络的设计是为了克服由于网络深度加深而产生的学习效率变低与准确率无法有效提升的问题