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

目录

简述

霍普菲尔德神经网络

训练霍普菲尔德神经网络

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或模拟退火之类的算法,而不是霍普菲尔德神经网络的优化版本。

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

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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux安装Oracle11g(无图形界面下的静默安装)

Oracle11g安装文档-Linux静默安装 环境准备安装数据库配置监听器创建数据库测试打开防火墙 环境准备 创建组和用户 [rootlocalhost ~]# groupadd oinstall #创建oinstall组 [rootlocalhost ~]# groupadd dba  #创建dba组 [rootlocalhost ~]# useradd -g oinstall -G dba -m…

【快捷部署】016_Ollama(CPU only版)

📣【快捷部署系列】016期信息 编号选型版本操作系统部署形式部署模式复检时间016Ollama(CPU only)latestCentOS 7.XDocker单机2024-04-10 注意事项: 1、目前镜像及大模型下载速度尚可,但由于容量较大,所以…

K8S:常用资源对象操作

文章目录 一、使用Replication Controller(RC)、Replica Set(RS) 管理Pod1 Replication Controller(RC)2 Replication Set(RS) 二、Deployment的使用1 创建2 滚动升级3 回滚Deployment三、 Pod 自动扩缩容HPA1 使用kubectl autosc…

thinkphp5关联预载入with指定字段属性查询

一、thinkphp5.0 如果要指定属性查询,可以使用: $list User::field(id,name)->with([profile>function($query){$query->field(email,phone);}])->select([1,2,3]); foreach($list as $user){// 获取用户关联的profile模型数据dump($user…

典型新能源汽车热管理系统方案分析

目前行业具有代表性的热管理系统有PTC电加热方案、热泵方案(特斯拉八通阀热泵、吉利直接式热泵)、威马的柴油加热方案以及以理想为代表的插电式混动车方案。 小鹏P7整车热管理方案分析(PTC电加热方案) 小鹏P7作为小鹏汽车的第2款…

NzN的数据结构--插入排序

排序排序我要Disney,今天我们先来看看经典排序算法里的插入排序,先三连后看才是好习惯!!! 目录 一、排序的概念及应用 1. 排序的概念 2. 排序的应用 3. 常见的排序算法 二、插入排序 1. 基本思想 2. 直接插入排…

pyside6的QSpinBox自定义特性初步研究(二)

当前的需求是,蓝色背景的画面,需要一个相对应色系的QSpinBox部件。已有的部件风格是这样的,需要新的部件与之般配。 首先新建一个QDoubleSpinBox,并定义其背景色和边框: QDoubleSpinBox { color: white; border:1px…

Vue3---基础1(认识,创建)

变化 相对于Vue2,Vue3的变化: 性能的提升 打包大小减少 41% 初次渲染快 55%,更新渲染快133% 内存减少54% 源码的升级 使用 proxy 代替 defineProperty 实现响应式 重写虚拟 DOM 的实现和 Tree-shaking TypeScript Vue3就可以更好的支持TypeSc…

Python:如何对FY3D TSHS的数据集进行重投影并输出为TIFF文件以及批量镶嵌插值?

完整代码见 Github:https://github.com/ChaoQiezi/read_fy3d_tshs,由于代码中注释较为详细,因此博客中部分操作一笔带过。 01 FY3D的HDF转TIFF 1.1 数据集说明 FY3D TSHS数据集是二级产品(TSHS即MWTS/MWHS 融合大气温湿度廓线/稳定度指数/…

ssm“最多跑一次”微信小程序

采用技术 ssm“最多跑一次”微信小程序的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 系统实现的功能 本次设计任务是要设计一个“最多跑一次”微信小程序,…

【攻防世界】php_rce (ThinkPHP5)

进入题目环境,查看页面信息: 页面提示 ThinkPHP V5,猜测存在ThinkPHP5 版本框架的漏洞,于是查找 ThinkPHP5 的攻击POC。 构造 payload: http://61.147.171.105:50126/?sindex/think\app/invokefunction&functioncall_user_f…

JVM-结合MAT工具分析OOM问题

JVM-结合MAT工具分析OOM问题 启动项目前配置VM参数 -XX:UseParNewGC -XX:UseConcMarkSweepGC -Xms1m #初始化大小 -Xmx1m #最大值 -XX:PrintGCDetails -Xloggc:gc_dandan.log -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./运行结果截图 使用MAT打开java_pid12164.hprof…

开源铱塔切换MySQL数据库启动报异常

1.错误日志: 铱塔切换数据库配置为MySQL之后,启动后报错如下: SqlExceptionHelper - Table iotkit.task_info doesnt exist SqlExceptionHelper - Table iotkit.rule_info doesnt exist SqlExceptionHelper - Table iotkit.device_info does…

【Java8新特性】二、函数式接口

这里写自定义目录标题 一、什么是函数式接口二、自定义函数式接口三、作为参数传递 Lambda 表达式四、四大内置核心函数式接口1、消费形接口2、供给形接口3、函数型接口4、断言形接口 一、什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口。你可以通过 L…

1、JVM相关知识点-类加载机制

JVM类加载机制 当我们用java命令运行某个类的main函数启动程序时,首先需要通过 类加载器 把主类加载到 JVM 通过Java命令执行代码的大体流程如下: 其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 &…

Nginx反向代理与Tomcat实现ssm项目前后端分离部署

Nginx nginx是一款http和支持反向代理的web服务器,以其优越的性能被广泛使用。以下是百度百科的介绍。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.…

解析大语言模型训练三阶段

大语言模型的训练过程一般包括3个阶段:预训练(Pre-training)、SFT(有监督的微调,Supervised-Finetuning)以及RLHF(基于人类反馈的强化学习,Reinforcement Learning from Human Feedb…

maxpool long数据类型报错

报错: RuntimeError: “max_pool2d” not implemented for ‘Long’ 源码: import torch from torch import nn from torch.nn import MaxPool2dinput torch.tensor([[1, 2, 0, 3, 1],[0, 1, 2, 3, 1],[1, 2, 1, 0, 0],[5, 2, 3, 1, 1],[2, 1, 0, 1, 1…

【uniapp】多端打包(h5...)

1. h5 HBuilder X -> 项目目录中manifest.json 发行 查看打包文件(用浏览器打开就行了)或者直接运行在浏览器中

android支付宝接入流程

接入前准备 接入APP支付能力前,开发者需要完成以下前置步骤。 本文档展示了如何从零开始,使用支付宝开放平台服务端 SDK 快速接入App支付产品,完成与支付宝对接的部分。 第一步:创建应用并获取APPID 要在您的应用中接入支付宝…