本文翻译自: http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi

所有二阶技术都有同一个目标: 提高BP收敛的速度. 它们都使用同一种基本的方法 - 分别调整每个权值. 比如, 对于每个权值设置不同的学习速率.

在文章 Efficient BackProp, 中, LeCun博士提出了一种被称为"随机对角Levenberg-Marquardt方法"的二阶技术. 他把这种技术和一种"精确优化的随机梯度算法"进行了对比, 后者是一种不依赖于二阶技术的算法, 但对于每个权值都使用了不同的学习速率eta. 根据他的比较, "(随机对角LM)额外引入的误差是可以忽略的, 但训练速度上 - 凭感觉 - 却比随机梯度算法快了3倍." (文章的35页).

我们需要一种二阶方法来加速训练. 不使用这些方法的结果是我们的收敛会非常缓慢.

Simard博士, 在他的文章"Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis,"中提到, 由于想让算法尽量简洁, 所以没有使用二阶技术. 他同样承认他需要上百次循环才能收敛.(我个人认为接近1000)

我们再来看看MNIST数据库, 每一个循环需要60,000次BP过程, 在我的电脑上每个循环需要大概40分钟. 我没有耐心(也没有自信我的代码毫无错误)来等待上千次循环. 同样地, 不像LeCun博士, 我也没有能力去设计一个"精确优化的随机梯度算法". 所以, 由于随机对角LM方法会快3倍, 我的NN实现了这一方法.

我不会详细分析数学或这个算法的代码. 它本质上已经和标准的BP不太一样了. 使用这个技术, 我可以在20~25次循环内收敛到一个满意的结果. 这样有两个好处: 第一, 它证明了我的代码是正确的, 因为LeCun博士的收敛次数也是20左右; 第二, 40分钟一次循环的情况下, 我只需要14~16个小时即可, 这可以接受.

如果你想要仔细分析这一段的代码, 你可以查看CMNistDoc::CalculateHessian()和NeuralNetwork::BackpropagateSecondDervatives(). 另外, 应当注意NNWeight包含一个double成员, 这在前述的代码中没有显式注明. 这个成员名为diagHessian, 它存储的是根据LeCun博士的算法计算出的曲率. 基本上, 当调用CMNistDoc::CalculateHessian()时, 500个MNIST的模式就会被随机挑选出来. 对于每个模式, NeuralNetwork::BackpropagateSecondDervatives()会计算出每个权值的Hessian, 这个数字会被收集到diagHessian中. 在500个模式都运行结束后, diagHessian中的值都被除以500, 从而为每个权值赋予一个独特的diagHessian值. 在实际的BP过程中, diagHessian值被用来缩放当前的学习速率, 从而在曲率较高的区域, 学习速率降低, 反之升高.

转载于:https://www.cnblogs.com/lancelod/p/4062352.html

[CLPR] 用于加速训练神经网络的二阶方法相关推荐

  1. DL之BP:FFNN(前馈神经网络)结构与BP(一种训练神经网络的方法)算法的简介、训练神经网络的五大方法(RLS/GA/SA/PSO/BP)、FFNNLM对比BP之详细攻略

    DL之BP:FFNN(前馈神经网络)结构与BP(一种训练神经网络的方法)算法的简介.训练神经网络的五大方法(RLS/GA/SA/PSO/BP).FFNNLM对比BP之详细攻略 目录 FFNN(前馈神经 ...

  2. 利用gpu加速神经网络算法,外接gpu 训练神经网络

    神经网络做图像分类一定要用到gpu吗? GPU最大的价值一直是"accelerating"(加速),GPU不是取代CPU,而是利用GPU的并行计算架构,来将并行计算的负载放到GPU ...

  3. PyTorch:优化神经网络训练的17种方法

    点击上方"机器学习与生成对抗网络",关注星标 获取有趣.好玩的前沿干货! 选自efficientdl.com,作者:LORENZ KUHN 机器之心编译 本文介绍在使用 PyTor ...

  4. PyTorch | 优化神经网络训练的17种方法

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | LORENZ KUHN 来源 | 人工智能前沿讲习 编辑 ...

  5. 优化神经网络训练的17种方法

    作者 | LORENZ KUHN 来源 | 人工智能前沿讲习  导读 本文介绍在使用 PyTorch 训练深度模型时最省力.最有效的 17 种方法.该文所提方法,都是假设你在 GPU 环境下训练模型. ...

  6. AI学习笔记(九)从零开始训练神经网络、深度学习开源框架

    AI学习笔记之从零开始训练神经网络.深度学习开源框架 从零开始训练神经网络 构建网络的基本框架 启动训练网络并测试数据 深度学习开源框架 深度学习框架 组件--张量 组件--基于张量的各种操作 组件- ...

  7. 《预训练周刊》第16期:中科院推出全球首个图文音三模态预训练模型、顶会论文探索100层序列推荐模型的加速训练...

    No.16 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 超大规模预训练模型是当前人工智能领域研究的热点,为了帮助研究与工程人员了解这一领域的进展和资讯,智源社区整理了第16期&l ...

  8. 从零开始教你训练神经网络(附公式学习资源)

    来源:机器之心 作者:Vitaly Bushaev 本文长度为8900字,建议阅读15分钟 本文从神经网络简单的数学定义开始,沿着损失函数.激活函数和反向传播等方法进一步描述基本的优化算法. 作者从神 ...

  9. 使用TensorFlow训练神经网络进行价格预测

    Using Deep Neural Networks for regression problems might seem like overkill (and quite often is), bu ...

最新文章

  1. R语言plotly可视化:plotly可视化基本散点图(指定图像类型、模式)、plotly可视化散点图(为不同分组数据配置不同的色彩)、ggplotly使用plotly包呈现ggplot2的可视化结果
  2. SSH,telnet终端中文显示乱码解决办法
  3. java 21-13 合并
  4. java判断一个月间隔_如何检查间隔列表(Joda-Time)是否完全涵盖Java中的一个月
  5. MyBatis学习02
  6. 50多条mysql数据库优化建议
  7. java 加密使长度变短
  8. 单片机实现TM1620驱动 含完整程序源码
  9. 第八周助教工作总结——NWNU李泓毅
  10. android 按钮带图标 阴影_Android Material Design系列之FloatingActionButton和Snackbar
  11. reverse方法(自己实现)
  12. 01组团队项目-Alpha冲刺-1/6(wxy)
  13. SQL1084C Shared memory segments cannot be allocat
  14. OpenCV通过HSV颜色空间过滤图片及目标检测颜色空间范围确定
  15. android ip格式化输入法,Android设置默认输入法
  16. web前端期末大作业 html+css+javascript 全球私人定制旅游网页设计实例(6个页面)
  17. weblogic mysql 乱码_weblogic 11g+mysql 连接池出现错误
  18. 程序猿长时间面对电脑,眼睛着不住呀。给大家介绍一种软件,护眼的。
  19. linux postfix 日志,postfix的邮件log分析工具pflogsumm
  20. 线程的强制终止stop(),设置合理性终止

热门文章

  1. 【算法和数据结构】_13_小算法_双链表
  2. 使用Action启动/关闭Service
  3. 深入Linux PAM体系结构
  4. 常见非关系型数据库(NoSQL)推荐介绍
  5. Extjs中createDelegate的作用
  6. Java学习笔记(1)——基本数据类型
  7. 新版GNS3-安装及配置教程
  8. 使用vs2005遇到的两个错误!
  9. 发布一个定制的webpart:R***eader
  10. Windows10安装配置ChromeDriver