深度神经网络优化

深度神经网络优化

  1. 学习地址

深度学习应用层面

应用型机器学习是一个高度迭代的过程,其不确定性在于:

  1. 隐藏层数
  2. 隐藏单元数
  3. 学习率
  4. 激活函数

最开始可以设计一个简单的模型,然后编码,最后实验,根据实验结果完善想法,改变策略;循环此过程找到称心如意的神经网络

关于数据集划分:

  1. 已知数据集作为待划分数据集
  2. 将数据集划分为训练集,交叉验证集和测试集;其中训练集用来训练模型,交叉验证集用来确定模型(调整模型),测试集用来评估模型
  3. 如果数据集较小,按传统比例:60% 、20%、20%
  4. 如果数据集较大,交叉验证集和测试集可以占较少比例,总共20%即可
  5. 经验法则:验证集和测试集的数据分布和来源需要保持一致
  6. 测试集只是为了模型的无偏评估,如果不需要无偏评估可以不设置测试集,只有训练集和验证集,这个时候验证集也可以称为测试集

偏差于方差问题:

  1. 一句话理解:偏差bias过大表示欠拟合,对训练集拟合不足;方差variance过大则是过拟合,而在测试集上表现不好。即偏差描述在训练集上的表现(训练误差),方差则描述在测试集上的表现
  2. 高偏差时可以尝试规模更大的网络;高方差时可以尝试更多的数据或者正则化
  3. 正则化问题中,L2范数比L1范数更常用,L1范数可能会使模型更稀疏。
  4. 当λ很大时,参数w会很小,很多隐藏单元趋于无效,神经网络接近逻辑回归,使用双曲正切函数作为激活函数时,z会很小,g(z)大致呈线形,不容易过拟合

另一种实用正则方法:dropout - 随机失活

  1. 原理:遍历神经网络每一层,随机删除一些节点,概率为0.5,简化网络防止过拟合
  2. 实现:反向随机失活(Inverted dropout):在某一层的激活函数值乘以一个随机矩阵
  3. 测试阶段不使用dropout
  4. 其他正则化方法:数据扩增(数据翻转、裁剪如猫图);Early Stopping,找到验证误差的拐点

归一化输入数据,有利于梯度下降。

深度神经网络在极端情况下会产生梯度消失或者梯度爆炸的现象:即若干个权重矩阵相乘,如果矩行列式大于1,那么会产生指数爆炸式增长,反之无限趋于0,这也曾是深度神经网络的阻碍;一个合理的解决方案是合理地初始化权重矩阵,避免梯度爆炸或者消失

第二周:优化算法

  1. Mini-batch梯度下降:参考早期吴恩达机器学习视频大规模机器学习。小批量梯度下降就是将大规模数据集分组,分组进行梯度下降,分组大小b任意。如果b=1,这种叫做随机梯度下降,噪声较多。
  2. 指数加权平均:系数之和为1,称之为偏差修正。指数加权简单来说就是将一个递推式展开,那么会变成前面若干项乘以不同系数之和,而且系数中包含指数形式,故称为指数加权’平均’
    指数加权
    在这里插入图片描述
  3. 动量梯度下降:以更快的速度向收敛半径靠拢,减少在竖直方向摆动
    实施细节
  4. RMSprop:类似动量梯度下降,加快水平方向收敛,减缓竖直方向收敛
    RMSprop

  5. Adam优化算法:自适应动量估计。以上两种方法的结合,学习率α需要调试,其他参数可以默认
    Adam

  6. 学习率衰减:随着收敛学习率动态减小。常用的有代数衰减和指数衰减
    epach-num是当前迭代次数

第三周:超参数调式

  1. 最常见的参数确定方法是网格搜索,但是如何参数空间纬度较大会非常耗时,可以采用随机法,在网格的基础上随机选择参数点(对),这样能够发现一些重要参数,同时快速找到效果比较好的参数范围,然后由粗到细,进一步方法这个范围,再重复上述步骤。
  2. Batch正则:将中间值 z = θTX 正则化,然后应用到神经网络中,通常和训练集的Mini-Batch一起使用,下式中m就是指那组样本的数量,ε是让正则更稳健。有利于训练深度神网
    Batch正则
    Batch正则
  3. Softmax回归:用神经网络做多分类,参考识别手写数字篇
  4. 深度学习常用开源框架:TensorFlow,待补充。