美文网首页
7. 神经网络训练细节part2

7. 神经网络训练细节part2

作者: 路小漫 | 来源:发表于2018-04-11 18:32 被阅读0次

这次课,小哥哥回来了,小姐姐走了
一、 更好的优化

  • 神经网络的训练,其实是一个优化的过程
  • 假设在二维的情况下,我们只要确定最优的W_1 和 W_2就可以了
  • 我们使用的最简单的优化方法是随机梯度下降,只有三行代码,如图:
优化

随机梯度下降在实际中的问题

问题1

  • 在二维情况下,当损失在一个方向上敏感,而在另一个方向不敏感时,随机梯度下降会成之字形变化,在水平方向上变化很慢
  • 在高纬度的情况下,这种情况会更严重
问题1

问题2

  • 局部极小值或鞍点
  • 在高纬度这种情况很严重
问题2

问题3

  • 梯度下降很曲折,很缓慢
问题3

SGD+Momentum

  • 在随机梯度下降中,加入一个动量项
  • 保持一个不随时间变化的速度,并且将梯度估计添加到这个速度上,在这个速度方向上步进,而不是在梯度反向
  • 我们还引入一个超参数,使用这个超参数来对速度进行衰减
  • 这种方法,解决了SGD的所有问题
SGD+Momentum
  • 当它下降的时候,会加速,这样就越过了局部极小值和鞍点(类似给了它惯性)
  • 右图中,黑色时SGD,蓝色是加了动量的,表现更好
解决了问题
  • 图中可以看到,我们实际的移动方向,是速度和梯度的综合
动量的作用
  • Nesterov Momentum,如图,我们根据速度,沿着一个方向移动,然后再计算出梯度
Nesterov Momentum
  • 通过变量的替换,我们可以使得公式更加优美
Nesterov Momentum公式
  • 图中比较了三中方式
比较

AdaGrad算法

  • 在训练中保持一个梯度平方项,一直累加梯度的平方到这个平方项
  • 更新参数时,除以这个平方项
AdaGrad
  • 这样会使不敏感的那个方向的速度变快
  • 使敏感的方向的速度变慢
  • 随着时间的推移,梯度会越来越小,参数更新会越来越慢,可能会困在局部最小值

RMSProp算法-AdaGrad的变体

  • 这种算法依然是保持一个平方项,但是会对它进行缩减
  • 会导致训练变慢
RMSProp 比较

Adam(almost)算法

  • 结合了上面两种优化方式的策略
  • 引入两个动量
  • 会导致第一步(前几步)的步长很大,因为第二个动量的初始值很小,除法后就会变得很大(这是我们不想看到的)
Adam(almost)

Adam(full form)算法

  • 引入第一动量和第二动量的无偏估计
  • 它在实际应用中表现良好的算法
Adam(full form)
  • 可以看到Adam表现很好
比较

学习率

  • 在任何的算法中,都会有学习率这个超参数,该如何选择超参数呢?
  • 可以随着训练的推进,减小学习率的值
学习率
  • 右图中,损失的阶段性递减,是由于使用了学习率递减
  • 那些骤降的节点,是由于学习率乘上了某个因子
递减

一阶优化算法

  • 用到一阶导数
  • 一阶泰勒逼近
一阶

二阶优化算法

  • 用到一阶导数和二阶导数
  • 二阶泰勒逼近
二阶
  • 这样的优点是没有超参数,没有学习率
优点
  • 对于深度学习,这个方法是不实际的,内存存不下
缺点
  • 人们会使用类牛顿算法,来减小内存的耗费
类牛顿算法

L_BFGS是一个二阶逼近算法

  • 有些实际中会用到
  • 但是一般不常用,不做深入研究
二阶逼近算法

实际中优化算法的选择

  • 实际中,Adam算法是很好的选择
  • 在某些情况下,L_BFGS也会是好的选择
实际

减小训练误差后的事

  • 在实际中,我们真正关心的不是训练误差,而是测试误差,以及训练误差与验证误差之间的差距

解决方法就是模型集成

  • 在随机的初始值上,进行不同的模型训练
  • 将不同模型的测试结果求平均
模型集成

使用多个学习率

学习率

Polyak

Polyak

后边很多没搞懂,以后遇到了再仔细研究吧

二、正则化

  • 如何提高单一模型的效果?——正则化
  • 防止模型的过拟合


    提高单一模型效果

在损失函数中加一项

add term to loss

Dropout

dropout
  • 向前传播时,在每一层,随机的将一些神经元置为0

  • 为什么Dropout有作用?

    • 避免了特征间的相互适应,某种程度上抑制了过拟合
    • dropout使一个单一的网络变成了多个子网络
  • 在测试时的情况:

    • dropout使得输出随机化,积分无法求
    • 使用局部逼近来求积分,为每个神经元乘以一个丢弃率
  • 批量归一化 ,数据增强 ,部分最大池化等都是类似的作用

三、迁移学习

  • 训练一个卷积网络需要大量的数据
  • 当你的数据不够的时候,可以使用迁移学习
tansfer learning transfer learning

相关文章

  • 7. 神经网络训练细节part2

    这次课,小哥哥回来了,小姐姐走了一、 更好的优化 神经网络的训练,其实是一个优化的过程 假设在二维的情况下,我们只...

  • 斯坦福cs231n学习笔记(10)------神经网络训练细节(

    神经网络训练细节系列笔记: 神经网络训练细节(激活函数) 神经网络训练细节(数据预处理、权重初始化) 神经网络训练...

  • 神经网络训练细节part2(上)

    回顾 训练神经网络的过程有四步组成,重复这四个步骤就可以得到完整的训练流程 需要有一个完整的数据集图像和标签,从数...

  • TF Girls修炼指南学习笔记(3)

    今天的笔记,将记录教程7-9:7.解密神经网络 -- 数据流图谱8.解密神经网络 -- 全连接神经网络9.训练并测...

  • 神经网络的一些细节

    今天,写下一篇文章记录神经网络训练的一些细节 话说,我接触神经网络也没有多久,自己用java来实现了一个全连接的神...

  • 7.循环神经网络(RNN) 基础讲解

    7.循环神经网络(RNN) 基础 7.1 RNN(recurrent neural network)原理 7.1....

  • 1.2 神经网络基础3

    续前一节 1.2 神经网络基础2 7. 计算图(Computation Graph) 神经网络的计算都是按照前向传...

  • 深度学习基础2

    Stochastic Gradient Descent 如何训练神经网络 训练神经网络就是调整权重。 这里介绍了损...

  • tensorflow教程(一)

    开始使用tensorflow 原文地址 训练首个神经网络:基本分类 对于初学者,即使不了细节也没关系,本次教程只是...

  • pytorch 入门 api

    张量操作 神经网络 训练图片分类器 多GPU训练 参考 张量神经网络训练图片分类器DataParallel多GPU示例

网友评论

      本文标题:7. 神经网络训练细节part2

      本文链接:https://www.haomeiwen.com/subject/jxdhqftx.html