C. 深度学习 — 基础组件概述(一) — 参数调优
概述
- Local minima/Local maxima
- 如何识别 Local minima/Local maxima 和 Saddle point
- 步骤
- 给出当前点的泰勒级数公式
- 计算当前点的周围点的值
- Local minima:周边的点都大于当前点
- Local maxima:周边的点都小于当前点
- Saddle point:周边的点有些大于当前点,有些小于当前点
- 优化点
- 通过证明 是否是正定/负定矩阵 或其他,来判断
- 步骤
- 优化思路
- Momentum:添加动量参数
- 实际运行中,saddle point一般不会出现
- 如何识别 Local minima/Local maxima 和 Saddle point
- 调参思路
- 遗传算法:对学习率、动量、噪音、Bias进行调整
- 在单个基因:针对学习率、动量、噪音、Bias再进一步进行随机调整
- 神经网络本身:对各个权重进行随机调整
- 泛化误差:添加噪音
- Lookahead:往前走n不,往后退一步
Batch
- Big Batch(所有的数据都是一般batch)
- 优点
- One Epoch Time:更快
- Gradient:更稳定
- 优点
- Small Batch(一条数据一个batch)
- 优点
- Performance 更好
- Generalization(Test?):更好
- 优点
Normalization
- 数据 Normalizaiton
- 思路一
- 对一批数据,相同维度的数据标准化,使得每个维度的数据,都落在同一个范围
- min-max
- 正态分布
- 等等
- 对一批数据,相同维度的数据标准化,使得每个维度的数据,都落在同一个范围
- 思路一
- Batch Normalization
- 来源
- 有之前的工作说明对图像的像素值分布变换为以0为均值,单位方差的正态分布数值时(这种操作被称为whiten),可以加速网络收敛。现在换作深度神经网络每一隐藏层的输入也可以做whiten吧?这样BN出现了。
- 详情
- 基本思想
- 对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。因为梯度一直都能保持比较大的状态,所以很明显对神经网络的参数调整效率比较高,就是变动大,就是说向损失函数最优值迈动的步子大,也就是说收敛地快。BN说到底就是这么个机制,方法很简单,道理很深刻。
- 具体实现
- train
- 针对每一批的数据做 标准化,全部数据的话,内存抗不下
- test
- 在训练的时候,会计算 均值 和方差 的移动平均值,在测试的时候可以使用
- train
- 优化方法
- 基本思想
- 优点
- 不仅仅极大提升了训练速度,收敛过程大大加快
- 还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果
- 另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等
- 缺点
- 需要计算均值与方差,不适合动态网络或者RNN。计算均值方差依赖每批次,因此数据最好足够打乱。
- 来源
- Instance Normalization
- Group Normalization
- Layer Normalization
- Positional Normalization
激活函数
- ReLU 激活函数
- ReLU
- 优点
- 解决了gradient vanishing问题 (在正区间)
- 计算速度非常快,只需要判断输入是否大于0
- 收敛速度远快于sigmoid和tanh
- 缺点
- ReLU的输出不是zero-centered
- Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生:
- (1) 非常不幸的参数初始化,这种情况比较少见
- (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
- 优点
- Leaky ReLU函数
- 人们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为而非0。另外一种直观的想法是基于参数的方法,即Parametric ReLU:,其中可由back propagation学出来。理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。
- ELU (Exponential Linear Units) 函数
- 优点
- 不会有Deal ReLU问题
- 输出的均值接近0,zero-centered
- 优点
- ReLU
- Softmax
- 概述
- Softmax 将多分类的输出数值转化为相对概率,更容易理解和比较。
- 损失函数
- 概述
- Adaptive learning rate
- Adagrad
- RMSProp
- Adam
- AMSGrad
- AdaBound
- Learning rate scheduling
- RAdam
- Nadam
其他 激活函数
- Sigmoid函数
- 优点
- 便于求导的平滑函数
- 缺点
- 容易出现gradient vanishing
- 函数输出并不是zero-centered
- 幂运算相对来讲比较耗时
- 采用 sigmoid 激活函数的时候,层次越深,训练结果越差
- 梯度消失:靠近input的地方,受输入影响大,靠近output的地方,受输入影响小
- 优化法相
- 采用ReLU激活函数
- 计算快
- Biological Reason
- Infinite sigmoid with different biases
- 能够处理 vanishing gradient problem
- 采用ReLU激活函数
- 优点
- tanh函数
- 它解决了zero-centered的输出问题,然而,gradient vanishing的问题和幂运算的问题仍然存在。
- Maxout
- SGD
- SGD
- SGD with Momentum(SGDM)