热门标签 | 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



推荐阅读
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ... [详细]
  • 本文介绍了如何在 Spring 3.0.5 中使用 JdbcTemplate 插入数据并获取 MySQL 表中的自增主键。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 深入理解Select、Poll和Epoll
    本文详细介绍了三种常用的I/O多路复用技术:Select、Poll和Epoll。通过对比它们的工作原理和性能特点,帮助读者更好地选择适合的I/O模型。 ... [详细]
  • 阿里云OSS访问权限错误:AccessDenied
    在使用阿里云对象存储服务(OSS)时,遇到AccessDenied错误,提示您无权访问指定对象,原因可能与Bucket的ACL设置有关。 ... [详细]
  • QSplitter 使用详解
    阅读《C++ GUI Programming with Qt 4, 2nd Edition》第六章布局管理器中的第三节关于 Splitters 的内容,并尝试实现书中的示例,发现实际效果与书中描述存在差异,尤其是分界线部分。 ... [详细]
  • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 高效重装Windows 10系统指南
    如何快速地为您的电脑重装Windows 10系统?本文将详细介绍从下载系统镜像到安装完成的每一步操作。 ... [详细]
  • LeetCode 312. 戳气球 【动态规划】【Java】【困难】
    本文将详细介绍 LeetCode 312. 戳气球 问题的背景、解题思路及实现方法,包括题目描述、解题策略、代码实现及解题过程。 ... [详细]
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社区 版权所有