政安晨:【深度学习神经网络基础】(五)—— 霍普菲尔德神经网络和玻尔兹曼机

news2024/11/28 16:49:17

目录

简述

霍普菲尔德神经网络

训练霍普菲尔德神经网络

Hopfield-Tank神经网络

玻尔兹曼机

总之


政安晨的个人主页政安晨

欢迎 👍点赞✍评论⭐收藏

收录专栏政安晨的机器学习笔记

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

简述

这两种经典神经网络虽然都没有在现代AI应用程序中广泛使用,但两者都是现代算法的基础。

玻尔兹曼机构成了深度信念神经网络(Deep Belief Neural Network,DBNN)的基础,它是深度学习的基本算法之一。

霍普菲尔德神经网络是一种非常简单的神经网络,它具备许多特性,这些特性也是更复杂的前馈神经网络所具有的。

霍普菲尔德神经网络(Hopfield Neural Network)是一种反馈神经网络模型,于1982年由物理学家约翰·霍普菲尔德(John Hopfield)提出。它是一种无监督学习算法,用于解决模式识别和优化问题。

霍普菲尔德神经网络由一组神经元组成,这些神经元之间通过权重相连。它采用离散的时间步骤模拟神经元之间的交互。通过迭代更新神经元的状态,网络可以从给定的输入模式中恢复出对应的输出模式,并具有自组织和容错能力。

相比传统的神经网络,霍普菲尔德神经网络的训练过程非常简单,它只需要将训练模式作为网络的权重进行初始化即可。然后,通过多次迭代更新神经元的状态,网络就可以从输入模式中恢复出相应的输出模式。这一过程被称为能量最小化,通过最小化网络的能量函数来达到模式恢复的目标。

玻尔兹曼机(Boltzmann Machine)是一种随机生成的神经网络模型,于1983年由物理学家吉尔伯特·玻尔兹曼(Geoffrey Hinton)和特里·塞杰沃斯基(Terry Sejnowski)提出。它是一种无监督学习算法,通过学习数据模式来提取特征并生成新的数据。

玻尔兹曼机由一组可见层和一组隐层神经元组成,这些神经元之间的连接是全连接的。它使用了随机状态和马尔可夫链的概念,通过马尔可夫链Monte Carlo方法进行参数估计和模式生成。

玻尔兹曼机的训练过程包括两个阶段:构造阶段和学习阶段

在构造阶段,网络通过随机设置神经元的活跃状态来生成样本数据。

在学习阶段,网络使用对比散度算法(Contrastive Divergence)进行参数的更新和学习。

玻尔兹曼机在深度学习中起到了重要的作用,它可以用于特征提取、生成模型和无监督预训练等任务。然而,由于玻尔兹曼机的训练过程相对复杂,难以在大规模数据集上进行训练,因此在实际应用中被一些更高效的模型如深度信念网络(Deep Belief Network)所取代。

(注:看本篇文章您只要有个概念即可

霍普菲尔德神经网络

霍普菲尔德神经网络也许是最简单的神经网络,因为它是一个完全连接的单层自动关联神经网络。换言之,它只有一层,其中每个神经元都彼此相连。此外,术语“自动关联”是指神经网络在识别出模式后会返回整个模式,神经网络将补全不完整模式或失真模式。

下图展示了只有4个神经元的霍普菲尔德神经网络。四神经元网络非常方便,因为它足够小,方便可视化,且可以识别一些模式。

具有12个连接的霍普菲尔德神经网络

因为霍普菲尔德神经网络中的每个神经元都彼此相连,所以你可能会假设四神经元网络将包含4×4的矩阵,即16个连接。但是,16个连接要求每个神经元与其自身和每个其他神经元都连接。在霍普菲尔德神经网络中,不会有16个连接,其实际的连接数为12。

这些连接被加权并存储在矩阵中。4×4的矩阵将存储上图所示的网络。实际上,这个矩阵的对角线是0,因为没有自连接。本书中的所有神经网络示例都将使用某种形式的矩阵来存储其权重。

霍普菲尔德神经网络中的每个神经元的状态为真(1)或假(−1)。这些状态最初是霍普菲尔德神经网络的输入,最终成为神经网络的输出。

要确定霍普菲尔德神经元的状态是−1还是1,请使用如下公式:

上面公式计算神经元[插图]的状态。

给定神经元的状态很大程度上取决于其他神经元的状态。该公式将其他神经元(j)的权重(w)和状态(s])相乘并进行累加。本质上,如果此总和大于阈值(θ),则当前神经元(i)的状态为+1,否则为−1。阈值通常为0。

由于单个神经元的状态取决于其他神经元的状态,因此该公式计算神经元的顺序非常重要。

程序员经常采用以下两种策略来计算霍普菲尔德神经网络中所有神经元的状态。

● 异步:这种策略一次仅更新一个神经元。它随机选择神经元。

● 同步:它同时更新所有神经元。该方法不太符合现实世界,因为生物有机体缺乏使神经元同步的全局时钟。

通常,你应该运行一个霍普菲尔德神经网络,直到所有神经元的状态稳定下来。尽管每个神经元的状态都依赖于其他神经元的状态,但神经网络通常会收敛到稳定状态。

重要的是要对神经网络收敛到稳定状态的距离有一些指标。你可以计算霍普菲尔德神经网络的能量值。随着霍普菲尔德神经网络转向更稳定的状态,该值逐步减小。

要评估神经网络的稳定性,可以使用能量函数。下面公式展示了能量函数:

咱们后面要讨论的玻尔兹曼机也利用了这种能量函数。玻尔兹曼机与霍普菲尔德神经网络具有许多相似之处。当阈值为0时,上面公式中等号右边的第二项就会消失。下面代码清单包含实现上述公式的代码。

def energy(weights,state,threshold):
  # First term
  a = 0
  for i in range(neuron_count):
    for j in range(neuron_count):
      a = a + weight[i][j] * state[i] * state[j]

  a = a * -0.5
  # Second term
  b = 0
  for i in range(neuron_count):
    b = b + state[i] * threshold[i]

  # Result
  return a + b

训练霍普菲尔德神经网络

你可以训练霍普菲尔德神经网络安排其权重,使得该神经网络收敛到所需模式(也称为训练集)。这些期望的模式是一个模式列表,对于构成玻尔兹曼机的每个神经元有一个布尔值。以下数据可能代表具有8个神经元的霍普菲尔德神经网络的一个训练集,包含4个模式:

以上数据完全是任意的。但是,它们确实代表了训练霍普菲尔德神经网络的实际模式。

训练后,类似于下面的模式应该与训练集中的一个近似的模式匹配:

1 1 1 0 0 0 0 0

因此,霍普菲尔德神经网络的状态应变更为以下模式:

1 1 0 0 0 0 0 0

你可以通过Hebbian或Storkey学习来训练霍普菲尔德神经网络。

Hebbian学习过程在生物学上是合理的,通常表示为“细胞如果一起激活,就连接在一起”。换言之,如果两个神经元经常对相同的输入刺激做出反应,则它们将被连接起来。下面公式从数学上总结了这种行为:

常数\pi代表训练集元素ε(epsilon)的数量。权重矩阵是方阵,包含等于神经元数量的行和列。对角线元素总是0,因为神经元未与其自身连接。矩阵中的其他位置将包含一些值,指定训练模式中两个值是+1或−1的概率。

如下是实现上面公式的代码:

霍普菲尔德的Hebbian训练

def add_pattern(weights,pattern,n):
  for i in range(neuron_count):
    for j in range(neuron_count):
      if i==j:
        weights[i][j] = 0
      else:
        weights[i][j] = weights[i][j]
           +((pattern[i] * pattern[j])/n)

我们应用add_pattern方法来添加每个训练元素。参数weights指定权重矩阵,参数pattern指定每个单独的训练元素,参数n指定训练集中的元素数量。

考虑将以下数据用于训练霍普菲尔德神经网络:

[1, 0, 0, 1]
[0, 1, 1, 0]

上述数据可以是如下的权重矩阵:

要计算上述矩阵,用1除以训练集元素的数量,结果是1/2,即0.5。值0.5放置在训练集中包含1的每个行列位置上。如第一个训练元素在神经元#0和#3中的值为1,则将0.5添加到第0行第3列和第3行第0列。对于其他训练集元素,继续执行相同的过程。

霍普菲尔德神经网络的另一种常见训练算法是Storkey算法。与刚刚描述的Hebbian算法相比,由Storkey算法训练的霍普菲尔德神经网络的模式能力更强。Storkey算法比Hebbian算法更复杂。

Hopfield-Tank神经网络

Hopfield和Tank(1984)引入了一种特殊的变体,即Hopfield-Tank神经网络,用于寻找优化问题的解。

Hopfield-Tank神经网络的结构与标准霍普菲尔德神经网络有所不同。常规霍普菲尔德神经网络中,神经元只能保存两个离散值(0或1),但是,Hopfield-Tank神经元可以保存0~1的任何数字。Hopfield-Tank神经网络可保存一个范围内的连续值。另一个重要的区别是Hopfield-Tank神经网络使用S型激活函数。

要使用Hopfield-Tank神经网络,必须创建专门的能量函数来表达要解决的每个问题的参数,但是,创建这种能量函数是一项耗时的任务。Hopfield和Tank(2008)演示了如何为旅行商问题构建能量函数。其他优化算法,如模拟退火和Nelder-Mead,不需要创建复杂的能量函数。这些通用优化算法通常比旧的Hopfield-Tank优化算法表现更好。

玻尔兹曼机

Hinton和Sejnowski(1985)首次引入了玻尔兹曼机,但是这种神经网络直到最近才得到广泛使用。受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)是一种特殊的玻尔兹曼机,是深度学习和深度信念神经网络的基础技术之一。

玻尔兹曼机本质上是一个完全连接的两层神经网络。我们将这些层称为可视层和隐藏层。可视层类似于前馈神经网络中的输入层。事实上,尽管玻尔兹曼机具有隐藏层,但它更多地充当了输出层。隐藏层含义的这种差异,通常是玻尔兹曼机与前馈神经网络之间产生混淆的根源。玻尔兹曼机在输入层和输出层之间没有隐藏层。

下图展示了玻尔兹曼机的非常简单的结构。

上图所示的玻尔兹曼机有3个隐藏神经元和4个可视神经元。

玻尔兹曼机是完全连接的,因为每个神经元都与其他每个神经元有连接,但是,没有神经元与其自身连接。这种连接性区分了玻尔兹曼机与受限玻尔兹曼机,如下图所示。

受限玻尔兹曼机

下图所示的受限玻尔兹曼机不是完全连接的。

所有隐藏神经元都连接到每个可视神经元,但是,隐藏神经元之间没有连接,可视神经元之间也没有连接。

与霍普菲尔德神经网络一样,玻尔兹曼机的神经元只能取0或1的二元值。尽管有一些关于连续玻尔兹曼机的研究,它们能够为神经元分配十进制数,但几乎所有的研究都集中在二元值的玻尔兹曼机上。

玻尔兹曼机也称为生成模型。换言之,玻尔兹曼机不会产生恒定不变的输出。提供给玻尔兹曼机的可视神经元的值,在考虑到权重后,指定了隐藏神经元将取值为1(而不是0)的概率。

尽管玻尔兹曼机和霍普菲尔德神经网络具有一些共同的特征,但仍存在一些重要差异。

● 霍普菲尔德神经网络受到识别某些错误模式的困扰;

● 玻尔兹曼机的存储模式容量可以比霍普菲尔德神经网络更大;

● 霍普菲尔德神经网络要求输入模式不相关;

● 玻尔兹曼机可以堆叠形成多层。

总之

霍普菲尔德神经网络是一种简单的神经网络,可以识别模式和解决优化问题。你必须为每种需要霍普菲尔德神经网络解决的优化问题创建特殊的能量函数。

基于这种特点,程序员会选择Nelder-Mead或模拟退火之类的算法,而不是霍普菲尔德神经网络的优化版本。

玻尔兹曼机是一种神经网络架构,它与霍普菲尔德神经网络有许多共同的特征。但是,与霍普菲尔德神经网络不同,你可以利用玻尔兹曼机堆叠深度信念神经网络。

这种堆叠能力使玻尔兹曼机在实现深度信念神经网络方面发挥了核心作用,这是深度学习的基础。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1581775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习笔记10 - 程序的组织结构

1. if 语句 2. pass语句 3. 内置函数range() 4. while 循环语句 5. for-in 循环语句 6. 流程控制语句 break 7. 流程控制语句 continue 8. else 语句 9. 嵌套循环

申请GeoTrust证书

GeoTrust是全球知名的数字证书颁发机构(CA)和安全解决方案提供商。它成立于1999年,后来成为DigiCert旗下的一部分。GeoTrust专注于提供SSL证书和其他安全产品,以保护网站流量、电子邮件通信和企业身份的安全。 GeoTrust的SSL证书在…

Vue+node.js蔬菜水果农产品网上商城管理系统

用户能够及时掌握最新的数据,并能有效地提升用户的服务水平。本制度的优势在于: (1)该系统将蔬菜信息及时地提供给使用者。使用者可以在任何时候登陆该网站查询相关资讯,所有资讯均真实可信,并严肃处理各项…

test4102

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

YUDAO源码中的正序倒序表格ElmentUI的实现,与后端的配合?

前端展示和实现&#xff1a; 1. elmentUI表格的定义 2. JS请求参数改造 <!-- 列表 --><el-table v-loading"loading" :data"list" sort-change"handleSortChange"><el-table-column label"Expiry Date" prop"…

人体跟随小车(旭日x3派、yolov5、目标检测)

人体跟随小车&#xff08;yolov5、目标检测&#xff09; 前言最终结果接线实现注意 前言 上板运行的后处理使用cython封装了&#xff0c;由于每个版本的yolo输出的形状不一样&#xff0c;这里只能用yolov5-6.2这个版本。 ①训练自己的模型并部署于旭日x3派参考&#xff1a; ht…

直播系统的短视频直播源码,带有多功能后台系统的直播短视频平台 APP 源码。

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 此源码是一个直播系统&#xff0c;集直播、短视频等功能&#xff0c;根据市场趋势开发并推出思乐直播APP&#xff0c;APP功能丰富且可在后台管理系统进行配置&#xff0c;做到按需求来…

【算法一则】贪心加双指针-盛水最多的容器

目录 题目题解贪心算法双指针解题思路暴力破解法双指针 总结 题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器…

设计模式学习笔记 - 设计模式与范式 -行为型:7.责任链模式(下):框架中常用的过滤器、拦截器是如何实现的?

概述 上篇文章《6.责任链模式&#xff08;上&#xff09;&#xff1a;原理与实现》&#xff0c;学习了职责链模式的原理与实现&#xff0c;并且通过一个敏感词过滤框架的例子&#xff0c;展示了职责链模式的设计意图。本质上来说&#xff0c;它跟大部分设计模式一样&#xff0…

不到6毛钱的I2C总线实时时钟日历芯片LK8563

前言 8563实时时钟芯片&#xff0c;国内外均有多家生产&#xff0c;今推荐一个性价比极高的RTC芯片&#xff0c;LK8563&#xff0c;一片不到6毛钱. 特点 基于32.768kHz晶体的秒&#xff0c;分&#xff0c;小时&#xff0c;星期&#xff0c;天&#xff0c;月和年的计时 带有世…

【堡垒机】堡垒机的介绍

目前&#xff0c;常用的堡垒机有收费和开源两类。 收费的有行云管家、纽盾堡垒机&#xff1b; 开源的有jumpserver&#xff1b; 这几种各有各的优缺点&#xff0c;如何选择&#xff0c;大家可以根据实际场景来判断 什么是堡垒机 堡垒机&#xff0c;即在一个特定的网络环境下&…

第十届蓝桥杯大赛个人赛省赛(软件类) CC++ 研究生组-RSA解密

先把p&#xff0c;q求出来 #include<iostream> #include<cmath> using namespace std; typedef long long ll; int main(){ll n 1001733993063167141LL, sqr sqrt(n);for(ll i 2; i < sqr; i){if(n % i 0){printf("%lld ", i);if(i * i ! n) pri…

Matlab|【防骗贴】【免费】基于主从博弈的主动配电网阻塞管理

目录 1 主要内容 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 《基于主从博弈的主动配电网阻塞管理》文献介绍&#xff1a;主要采用一种配电网节点边际电价统一出清的主从博弈双层调度框架。上层框架解决用户在负荷聚合商引导下的用电成本最小化问题&#xff0…

电脑更新到win11后不能上网,更新win11后无法上网

越来越多的用户升级了win11系统使用&#xff0c;然而有些用户发现电脑更新到win11后不能上网了&#xff0c;这是怎么回事呢?而且奇怪的是&#xff0c;网络状态显示已连接&#xff0c;但就是无法上网&#xff0c;原本以为重置网络就能搞定&#xff0c;但结果相反。针对这一情况…

DRF的认证、权限、限流、序列化、反序列化

DRF的认证、权限、限流、序列化、反序列化 一、认证1、直接用&#xff0c;用户授权2、认证组件源码 二、权限1. 直接使用&#xff0c;用户权限2.权限组件源码 三、序列化1. 序列化1.1 自定义Serailizer类序列化1.2 在视图APIView中使用1.3 自定义ModelSerializer类序列化1.4 不…

vue3 +Taro 页面实现scroll-view 分页功能

需求 现在分页列表 后端只给你一个分页的数据列表 没有总页数 没有当前的分页 页数 只有这么一个list 、、、 如何去分页 我这使用的是scroll-view 组件 滑动到底部的事件 根据你当前设定的每页的数据数量和后端返回给你的数据列表数量 当某一次分页 两个数量不相等了以后 就…

ActiveMQ介绍及linux下安装ActiveMQ

ActiveMQ介绍 概述 ActiveMQ是Apache软件基金下的一个开源软件&#xff0c;它遵循JMS1.1规范&#xff08;Java Message Service&#xff09;&#xff0c;是消息队列服务&#xff0c;是面向消息中间件&#xff08;MOM&#xff09;的最终实现&#xff0c;它为企业消息传递提供高…

目标检测——YOLO系列学习(一)YOLOv1

YOLO可以说是单阶段的目标检测方法的集大成之作&#xff0c;必学的经典论文&#xff0c;从准备面试的角度来学习一下yolo系列。 YOLOv1 1.RCNN系列回顾 RCNN系列&#xff0c;无论哪种算法&#xff0c;核心思路都是Region Proposal&#xff08;定位&#xff09; classifier&am…

DJI无人机二次开发:模拟航线飞行

1.下载大疆行业调参软件&#xff08;大疆官网下载&#xff0c;有mac系统和win系统&#xff09;。 2.安装软件以后用数据线连接电脑和无人机 3.识别无人机点击进去进入模拟器设置和遥控器相同的经纬坐标 4.在遥控器上载入航线 5.开始执行以后在上云api可以看到无人机在地图上移动…

目标检测——3D车道数据集

一、重要性及意义 3D车道检测在自动驾驶和智能交通领域具有极其重要的地位&#xff0c;其重要性和意义主要体现在以下几个方面&#xff1a; 首先&#xff0c;3D车道检测可以精确判断车辆在道路上的位置、方向和速度&#xff0c;从而预测潜在的危险情况并及时采取措施。这种能…