弄浪的鱼

深度学习优化篇

模型要想训得好,参数优化不可少。

激活函数

一个复杂的神经网络,是有许多层的,其中最基本的单位便是神经元。一个线性神经元不断堆叠下去,永远都是线性关系。这就无法解决非线性问题,而不同的非线性映射函数的选择,就是激活函数的研究课题了。

为了解决非线性的问题,在感知机的基础上发展出了多层神经网络的概念。多层神经网络由输入层、多个中间层,以及输出层组成。

激活函数

解决非线性问题的还可以使用非线性的激活函数,比如 sigmoid function。在 Logistic Regression 中,我们将一个线性函数输入到 sigmoid function 中,能够很好地解决二分类的问题,使用 Softmax 还能进一步解决多分类问题。

最常用激活函数主要有这样几种:

  1. sigmoid 和 tanh 激活函数。
  2. ReLU 激活函数
  3. ReLU 的一大堆变种(LReLU,PReLU,RReLU,ELU,SELU,GELU等等)

参数初始化

2006年Hinton等人在science期刊上发表了论文“Reducing the dimensionality of data with neural networks”,揭开了新的训练深层神经网络算法的序幕。

利用无监督的RBM网络来进行预训练,进行图像的降维,取得比PCA更好的结果,通常这被认为是深度学习兴起的开篇

这么看来,是因为好的初始化方法的出现,才有了深层神经网络工程化落地的可能性。

常用初始化的方法包括:

  • 随机初始化
  • 标准初始化
  • Xavier初始化
  • He初始化

归一化方法

数据经过归一化和标准化后可以加快梯度下降的求解速度,这就是Batch Normalization等技术非常流行的原因,它使得可以使用更大的学习率更稳定地进行梯度传播,甚至增加网络的泛化能力。常见的归一化的方法有:

  • Batch Normalization
  • Layer Normalization
  • Instance Normalization
  • Group Normalization
  • Weight Normalization

池化

最大池化与平均池化

  • 平均池化
  • 最大池化
  • 随机池化
  • 从数据中学习池化

正则化方法

正则化方法

  • L1/L2参数惩罚
  • Dropout与Drop Connect
  • 提前终止准则
  • 样本扩充

最优化方法

最优化方法

  • SGD 梯度下降法
  • Momentum 动量法
  • Nesterov 加速梯度下降法
  • Adagrad 算法
  • Adadelta/Rmsprop算法
  • Adam/Nadam/AdaMax算法
  • AMSgrad
  • Adafoctor
  • 牛顿法/拟牛顿法
  • 共轭梯度法

参考

【AI初识境】激活函数:从人工设计到自动搜索

【AI初识境】什么是深度学习成功的开始?参数初始化

【AI初识境】深度学习模型中的Normalization,你懂了多少?

【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?