5、神经网络

  • 优点:分类的准确度高;并行分布处理能力强,分布存储及学习能力强,对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系;具备联想记忆的功能。

  • 缺点:神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;
    不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;
    学习时间过长,甚至可能达不到学习的目的。

  • 与机器学习的不同:机器学习的过程,就是通过训练输入输出数据而寻找到目标函数的过程。深度学习是机器学习的一种。在传统机器学习中,手动设计特征对学习效果是很重要的,但特征工程非常繁琐。二深度学习能够从大数据中自动学习特征,这是深度学习能够在大数据时代广受欢迎的一原因。

  • 优化类的参数:学习率(learning rates)、 batch_size、训练代数(epochs)
    模型类的参数:隐含层数(hidden layers)、模型结构的参数(如RNN)。

  • 调参

    • 参数初始化,一般使用服从的高斯分布(mean=0, stddev=1)或均匀分布的随机值作为权重的初始化参数;使用 0 作为偏置的初始化参数。随机正交矩阵(Orthogonal)
      截断高斯分布(Truncated normal distribution)
    • 学习率(LR),一般从0.01开始往下调节,即梯度下降的步长
    • 动量(momentum):在某个参数值附近,有一个局部极小点(local minimum):在这个点附近,向左移动和向右移动都会导致损失值增大。如果使用小学习率的 SGD 进行优化,那么优化过程可 能会陷入局部极小点,导致无法找到全局最小点。 动量方法的实现过程是每一步都移动小球,不仅要考虑当 前的斜率值(当前的加速度),还要考虑当前的速度(来自于之前的加速度)。这在实践中的是指,更新参数 w 不仅要考虑当前的梯度值,还要考虑上一次的参数更新。一般可以设置0.1或网络上的经验值。
      神经网络小总结
    • batch_size,不能将数据一次性通过神经网络的时候,就需要将数据集分成几个 batch,每个batch中的样本总数即为batch_size。推荐32比较常用。32、64、128、256都比较合适。
      • 如果数据集比较小,可采用全数据集的形式,由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
  • 在合理的范围内增大batch_size的好处:
    1.内存利用率提高了,大矩阵乘法的并行化效率提高。
    2.跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
    3.在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

  • 在盲目增大batch_size的坏处:
    1.内存利用率提高了,但是内存容量可能撑不住了。
    2.跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
    3.Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

ps:随着size的增大,处理相同数据量的速度越快,达到相同精度所需要的 epoch 数量越来越多。增大到某个合理的值时,理论上会达到收敛精度的最优。but,只是理论上~

  • iteration:1个iteration等于使用batchsize个样本训练一次;

  • epoch:一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个 epoch

  • 更新器:Adam、RMSProp、AdaGrad或momentum(Nesterovs)通常都是较好的选择。AdaGrad还能衰减学习速率,有时会有帮助

  • dropout ,用以防止过拟合

  • 隐含层单元数Hidden Units
    解决的问题的模型越复杂则用越多hidden units,但是要适度,因为太大的模型会导致过拟合
    可以增加Hidden Units数量直到validation error变差

过拟合时一般使用L2正则化,dropout

欠拟合时一般增加网络层数,增加神经元数,增加训练数据集等

  • 如何寻找超参数的最优值:

1.猜测和检查:根据经验或直觉,选择参数,一直迭代。
2.网格搜索:让计算机尝试在一定范围内均匀分布的一组值。
3.随机搜索:让计算机随机挑选一组值。
4.最新提出的 LIPO 的全局优化方法。这个方法没有参数,而且经验证比随机搜索方法好。
5.百度google别人的经验

  • 归一化 很重要。在深度学习中常用的为Batch Normalization,虽然我们对输入数据进行了归一化处理,但是输入数据经过 sigma(WX+b) 这样的矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大,所以我们在网络的中间层也进行归一化处理。
  • 优点:
    1.减少了人为选择参数。在某些情况下可以取消 dropout 和 L2 正则项参数,或者采取更小的 L2 正则项约束参数;
    2.减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛;
    3.可以不再使用局部响应归一化。BN 本身就是归一化网络。
    4.破坏原来的数据分布,一定程度上缓解过拟合。
    5.减少梯度消失,加快收敛速度,提高训练精度。

ps 何凯明团队提出的Group Normalization作为BN的替代方案,并取得还不错的成果。

LSTM网络对于时间序列数据处理效果好,用于自然语言处理、机器翻译,语音识别等

相关文章: