热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

神经网络学习之玻尔兹曼机

退火退火是一种金属的热处理工艺,将金属加热到一定的温度,保持足够时间,然后以适宜速度缓慢冷却。退火可以改善材料性能,提升金属

退火

  退火是一种金属的热处理工艺,将金属加热到一定的温度,保持足够时间,然后以适宜速度缓慢冷却。

  退火可以改善材料性能,提升金属品质。

 模拟退火算法

  根据梯度下降算法考虑,梯度下降算法会使得我们的代价函数的值只会往梯度下降的方向走,比如左图(a),当它走到第一个凹坑里的时候它就在也出不来了。而不会到达全局的最小值,会陷入局部最小值出不来。

  模拟退火算法,也叫随机网络算法,如右图(b)。它和梯度下降法的能力就不一样,它具有“爬坡”或“跳跃”的能力,它会在局部最小值里面跳出来,使损失函数的值不断下降,最终达到全局最小值。

那么这是为什么呢?

  模拟退火算法会根据接受概率来判断要怎么走。假设前一状态为x(n),系统受到一定的扰动,状态变为x(n+1),相应地,系统能量由E(n)变为E(n+1)。定义系统由x(n)变为x(n+1)的接受概率为p:

  意思就是,当损失函数从能量高的地方走向能量低的地方时,其概率为1,表示以一定转移。当损失函数从能量低的地方走向能量高的地方时,比如从局部最小值跳出来,那么就就有一定概率来判断它是否跳出,这个概率就是一个能量和温度(T)之间关系的算式。

  当T越大,接收概率P就越大,小球跳跃的能力就越高,就更容易跳出这个局部最小值。

  当T越小,接收概率P就越小,小球跳跃的能力就越低,就不容易跳出这个局部最小值。

  E(n+1)-  E(n)越大,接收概率P就越小。

  E(n+1)-  E(n)越小,接收概率P就越大。

  所以,在一开始,温度的初始值T要选得足够高,使得所有可能的状态转移都能被接受。然后温度逐渐下降。

退火速率

  指数下降方式:T(n) = λT(0) n=1,2…,λ是一个小于1的正数,可以取0.8-0.99之间。

  其他下降方式:  

  

模拟退火算法过程

  1.初始化。随机选择一定的值作为变量的数值x(0),并设置初始温度T(0),终止温度T final 和温度的下降公式。

  2.以一定的规则(沿着梯度下降的方向走一段距离,或者在x点附近随机取一个点)在当前状态x(n)附近产生新的状态x(n+1)。如果能量减小则改变状态,如果能量变大则以一定的概率判断是否要改变状态。

  3.在一定的温度T下迭代一定的次数,或者判断代价函数是否趋于稳定。然后终止内循环(内循环中T不变,让状态自由改变)。

  4.调整T,判断T是否是小于等于T final 。没有小于等于T final 的话,则跳转到第二步继续执行。如果小于等于T final 的话,则终止算法。

随机神经网络(玻尔兹曼机BM)

  玻尔兹曼机分为两种:(a)自联想型BM网络,(b)异联想型BM网络

  一共分为两层,分为可见节点和隐节点。首先看(a)自联想型BM网络,它的可见节点既是输入节点又是输出节点。当我们输入测试数据时,从可见节点输入,也从可见节点输出结果。再看(b)异联想型BM网络,它的可见节点既是输入节点又是输出节点。当我们输入测试数据时,从一部分可见节点输入,从另一部分可见节点输出结果。

玻尔兹曼机的训练

正向学习阶段:
  ➢ 自联想型BM网络:向网络输入信号,钳制输入输出节点,让隐节点自由活动
  ➢ 异联想型BM网络:向网络输入信号,钳制输入输出节点,让隐节点自由活动
反向学习阶段:
  ➢ 自联想型BM网络:向网络输入信号,让输入输出节点和隐节点都自由活动
  ➢ 异联想型BM网络:向网络输入信号,钳制输入节点,让输出节点和隐节点自由活动

 

Boltzmann Machine

 

转:https://www.cnblogs.com/mengqimoli/p/11127133.html



推荐阅读
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了 JavaScript 中的条件判断(if-else 和 switch)以及循环控制(for、while 和 do-while)。我们将探讨这些结构的基本语法、使用场景及注意事项,并补充一些实用技巧。 ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • 本文介绍了一个用于 Android 开发的 Logcat 日志管理工具类,该类提供了默认和自定义标签的日志记录方法。通过这种方式,开发者可以更方便地管理和调试应用程序中的日志输出。 ... [详细]
  • 本文档旨在帮助开发者回顾游戏开发中的人工智能技术,涵盖移动算法、群聚行为、路径规划、脚本AI、有限状态机、模糊逻辑、规则式AI、概率论与贝叶斯技术、神经网络及遗传算法等内容。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
author-avatar
被爱的超萌baby
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有