标题:深度神经网络的改进:超参数调节(一些思想和策略)、正则化(提升泛化性能,应对过拟合)和最优化(加快训练速度,更好的收敛)
课程2的内容偏重于实践,也有好几个作业,程序看着和写的还是比较爽的感觉。总结一些理论上介绍的东西:
- 不同的初始化过程对结果影响很大,所以复杂神经网络的初始化也是很重要的环节,有一些方法(he/xavier)适用于不同的场景,总的来说不希望过大也不能过小,参数个数(层中神经元个数)应该和单个参数的大小成反比例(趋势,非数学公式)。
- 一般通过训练集和测试集的精度结果来分析需要从哪方面调优(bias/variance)。
- 应对过拟合:l2/dropout及实现。此外还有data augment(获取更多数据)、early stop等方法。early stop是一种简单粗暴的方法,但它不具备正交性(虽然看上去成本较低),可能会对后续的系统性分析和调参造成困难,不是特别推荐(可以尝试,用来对比)。
- 梯度检查的实现(保证反向传播的正确性,但不能和dropout一起工作)。
- 实践结果表明dropout的效果比较理想(实践中可以和l2一起工作)。
- 梯度爆炸和梯度消失的问题,可以通过好的初始化大大改善;local optima实际上在多维空间几乎不会遇到,但另外一个问题是鞍状点问题,下降非常的慢,这种情况下需要更好的方法。
- mini-batch是实践中常用的训练方法。momentum/rmsprops/adam是改进最优化性能的方法,目的就是为了加快训练速度,更好的收敛。其核心是引入了指数加权平均(之所以指数加权是因为实现上的资源消耗,性能很好,近似的效果也够用),momentum是合并了最近n次的向量,垂直方向的噪音被抵消剩下的就是冲量了(可能选择的参数是0.9)。rmsprops我个人的理解是对向量进行了收敛的处理(指数加权平均并且平方),使其更接近于45度(可能有偏差),所以这里的参数beta非常接近于1,可能是0.999。而adam结合了两者,取得了一个非常好的结果(虽然计算上麻烦了一些)。
- 可以引入一个超参数让学习速率缓慢降低。
关于超参数的调节方法:
- 随机比固定的选择更好!这样在单个维度上尝试的次数就会更多
- 有些参数的分布是要通过log来进行映射,而不是简单的区域里进行随机
- 资源有限时,采用panda法(手动调节,持续关注);资源比较充分时可以并行训练并比较,挑选出最好的,然后再进行尝试。
对z/a的正则化可以让其固定在一个均值/方差上,这样做的意义是下一层接收到的输入范围也会相对固定,从而可以获得一个比较稳定的结果(训练和最终的判别),还有一定的正则化效果(副作用)。需要注意正则化的实现,在训练阶段/测试阶段的差异。
softmax用于多结果的分类(相对于1 0 0 0的hardmax),有现成的函数供调用。
tensorflow框架介绍:简单理解,tensorflow的结构就像一个大的支持向量和矩阵的计算器,所有的操作和数据都被存储了。只有按下=(调用session.run)那一刻才开始真正的计算。数据/操作/session是它主要的概念。