【Agorans 征文】深度学习的调参技巧

一、权重初始化

不同的初始化权重决定了SGD在参数空间的初始位置。显然,不同的初始位置训练难度相差很大。一个过参数化的深层网络往往使得随机初始化权重特别靠近全局最优点。由于数据一般会进行归一化,因此权重初始化尺度也应该在合理的范围。随机初始化权重可以适当缩小,乘以 [公式] ,n表示上一层维度。

二、Batch_size的大小

不同的batch形成不同的具有一定相似度的参数空间(此时最优点不一定相同),因此这个超参数很重要。Batch_size小的时候有利于跳出局部最优点,如果训练后期不太稳定的话,可以考虑动态增大batch_size的大小(个人建议)。

三、跳层连接

众多文献表明,增加跳层连接可以让参数空间更加平滑,更容易收敛。网络层数越深,解空间越不平滑,越有必要增加跳层连接。

四、全连接层

双隐层的全连接网络在逼近非线性函数上更高效。

五、学习速率

对于SGD来说这是一个很重要的参数,最好的做法就是采用学习速率逐步衰减的方法训练,学习速率衰减可以有效提高模型收敛的稳定性。

六、过拟合

训练样本的数量对模型的精度影响很大,过拟合的产生很大可能是训练集并不能有效代表实际的样本空间。这种情况下,dropout并不能有效缓解过拟合。

七、个人技巧

对channel加权重约束(直接乘以一个可以学习的musk)很有效(是否可考虑用当前层特征跳层约束前面层)

八、归一化

对输入做归一化很重要,很多收敛性证明的前提是输入符合高斯分布。归一化以后随机初始化的权重更接近最优点。Batch_normalization同理,可能是对解空间的形状有影响,对解空间的坐标尺度有影响,防止空间被拉伸。

九、回归问题

神经网络逼近的效果很好,但是对于在取值范围之外的特征逼近并不好(外推不理想),回归结果的好坏严重取决于训练样本的数量。

十、对中间层约束是可解释性未来的方向

只是随手一搜,居然发现你还有很多库存:https://zhuanlan.zhihu.com/crwsr124 :joy: 关注一波