Hopfield神经网络与受限波尔兹曼机

news2024/10/6 6:45:40

神经网络可分为两大类:

  • 一类是多层神经网络、卷积神经网络:可用于模式识别
  • 另一类是相互连接型网络:可通过联想记忆去除输入数据中的噪声。

深度学习目录:

  1. 自适应线性单元 (Widrow and Hoff, 1960)
  2. 神经认知机 (Fukushima, 1980)
  3. GPU-加速 卷积网络 (Chellapilla et al., 2006)
  4. 深度玻尔兹曼机 (Salakhutdinov and Hinton, 2009a)
  5. 无监督卷积网络 (Jarrett et al., 2009b)
  6. GPU-加速 多层感知机 (Ciresan et al., 2010)
  7. 分布式自编码器 (Le et al., 2012)
  8. Multi-GPU 卷积网络 (Krizhevsky et al., 2012a)
  9. COTS HPC 无监督卷积网络 (Coates et al., 2013)
  10. GoogLeNet (Szegedy et al., 2014a)

文章目录

  • 深度学习目录:
  • Hopfield神经网络 HNN(Hopfield Neural Network)
    • 构建Hopfield神经网络
    • 设置神经网络的网络权值
      • 我们首先将二维图像**展开成为一层**
      • 其次,设置连接权值。
      • 输入联想图,开始联想
        • 联想图
        • 开始联想
    • 多联想记忆网络
    • 全部代码
    • 问题
  • 波尔兹曼机(Boltzmann Machine)
    • 波尔兹曼机与hopfield神经网络的区别
  • 受限玻尔兹曼机

Hopfield神经网络 HNN(Hopfield Neural Network)

1982年Hopfield 提出了Hopfield神经网络,是最典型的相互连接型神经网络。

首先我们来看看脑部神经元结构图
在这里插入图片描述
生物神经元和人工神经元的对照关系

在这里插入图片描述
Hopfield神经网络是一种递归神经网络,从输出到输入均有反馈连接,每一个神经元跟所有其他神经元相互连接,又称为全互联网络
我们根据如上形式,将所有神经元之间两两连接,形成了全互联网络

在这里插入图片描述
Hopfield最早提出的网络是二值神经网络,各神经元的激励函数为阶跃函数或双极值函数,神经元的输入、输出只取 ( 0 , 1 ) {(0,1)} (01) 或者 ( − 1 , 1 ) {( -1,1)} (11) ,所以也称为离散型Hopfield神经网络DHNN(Discrete Hopfiled Neural Network)

离散Hopfield神经网络DHNN是一个单层网络,有n个神经元节点,每个神经元的输出均接到其它神经元的输入。各节点没有自反馈。每个节点都可处于一种可能的状态(1或-1),即当该神经元所受的刺激超过其阀值时,神经元就处于一种状态(比如1),否则神经元就始终处于另一状态(比如-1)。

构建Hopfield神经网络

首先,构建Hopfield神经网络需要提供要求记忆的二进制网络,如:

a=np.array([[0,0,1,1,0,0],
            [0,0,1,1,0,0],
            [1,1,1,1,1,1],
            [1,1,1,1,1,1],
            [0,0,1,1,0,0],
            [0,0,1,1,0,0]])

在这里插入图片描述

设置神经网络的网络权值

因为网络共有 6 ∗ 6 = 36 6*6=36 66=36个结点。故神经网络连接需要 35 ∗ 35 35 * 35 3535个(自身与自身不连接)。

我们首先将二维图像展开成为一层

array_a=a.flatten()

在这里插入图片描述

其次,设置连接权值。

我们已知Hopfield神经网络为二值神经网络,值为0或1。

设:
当 a [ i ] 为 0 , a [ j ] 为 1 时 , 权值 w i j 为 − 1 当 a [ i ] 为 0 , a [ j ] 为 0 时 , 权值 w i j 为 1 且 w j i = w i j 即:俩结点值相同权值为 1 ,结点不同权值为 0 当 a[i]为0,a[j]为1时,权值w_{ij}为-1\\ \quad\\ 当 a[i]为0,a[j]为0时,权值w_{ij}为1\\ \quad\\ 且w_{ji} = w_{ij}\\ 即:俩结点值相同权值为1,结点不同权值为0 a[i]0a[j]1,权值wij1a[i]0a[j]0,权值wij1wji=wij即:俩结点值相同权值为1,结点不同权值为0

w=np.zeros((36,36))
for i in range(36):
     for j in range(36):
         if i==j:
             w[i,j]=0
         else:
             w[i,j]=(2*s[i]-1)*(2*s[j]-1)

生成网络权值图如下
在这里插入图片描述

输入联想图,开始联想

联想图

c=np.array([[0,0,1,1,0,0],
            [0,0,1,1,0,0],
            [1,1,1,1,1,1],
            [1,1,1,1,1,1],
            [1,0,0,1,0,0],
            [0,0,1,1,0,0]])

在这里插入图片描述

开始联想

设输入值为 x i ( t ) x_i(t) xi(t),输出值为 x i ( t + 1 ) x_i(t+1) xi(t+1) t t t 为迭代次数,有如下公式
u i ( t ) = ∑ j = 1 n w i j x j ( t ) − b i ( t ) x i ( t + 1 ) = { 1 u i ( t ) > 0 x i ( t ) ( 不变 ) u i ( t ) = = 0 0 u i ( t ) < 0 u_i(t) = \sum_{j=1}^n w_{ij}x_j(t) - b_i(t)\\ \quad\\ x_i(t+1) = \left\{\begin{matrix} 1 & u_i(t)>0 \\ x_i(t)(不变) & u_i(t)==0 \\ 0& u_i(t)<0 \end{matrix}\right. ui(t)=j=1nwijxj(t)bi(t)xi(t+1)= 1xi(t)(不变)0ui(t)>0ui(t)==0ui(t)<0

  • 在此模型中,我们设 b i ( t ) b_i(t) bi(t) 都为0.

依据以上公式,代码如下:

c=c.flatten()
x=c
Y=np.zeros(36)
for t in range(10):
    u = np.zeros(36)
    for j in range(36):
        for i in range(36):
            if i==j:
                u[j]+=0
            else:
                u[j]+=w[i,j]*x[i]
        if u[j]<0:
            Y[j]=0
        else if u[j]==0:
			Y[j] = Y[j];
		else:
            Y[j]=1
    x=Y

输出 x x x

在这里插入图片描述

多联想记忆网络

即,一个网络存储多个记忆

将多个记忆的网络权值相加即可。

input_array=[array_a,array_b]
w=np.zeros((36,36))
for s in input_array:
    w0=np.zeros((36,36))
    for i in range(36):
        for j in range(36):
            if i==j:
                w0[i,j]=0
            else:
                w0[i,j]=(2*s[i]-1)*(2*s[j]-1)
    w+=w0

array_b图像
在这里插入图片描述
多记忆权值网络:
在这里插入图片描述
联想记忆测试a
在这里插入图片描述
联想结果a
在这里插入图片描述
联想记忆测试b
在这里插入图片描述
联想结果b
在这里插入图片描述
结果显示,一个网络可以存储多个记忆图。

全部代码

引自:Hopfield神经网络(HNN)详解

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
a=np.array([[0,0,1,1,0,0],
            [0,0,1,1,0,0],
            [1,1,1,1,1,1],
            [1,1,1,1,1,1],
            [0,0,1,1,0,0],
            [0,0,1,1,0,0]])
b=np.array([[0,0,1,1,0,0],
            [0,1,0,0,1,0],
            [1,0,0,0,0,1],
            [1,0,0,0,0,1],
            [0,1,0,0,1,0],
            [0,0,1,1,0,0]])
c=np.array([[0,0,1,1,0,0],
            [0,0,1,1,0,0],
            [1,1,1,1,1,1],
            [1,1,1,1,1,1],
            [1,0,0,1,0,0],
            [0,0,1,1,0,0]])
array_a=a.flatten()
array_b=b.flatten()
input_array=[array_a,array_b]
w=np.zeros((36,36))
for s in input_array:
    w0=np.zeros((36,36))
    for i in range(36):
        for j in range(36):
            if i==j:
                w0[i,j]=0
            else:
                w0[i,j]=(2*s[i]-1)*(2*s[j]-1)
    w+=w0
c=c.flatten()
v0=c
Y=np.zeros(36)
for t in range(10):
    v1 = np.zeros(36)
    for j in range(36):
        for i in range(36):
            if i==j:
                v1[j]+=0
            else:
                v1[j]+=w[i,j]*v0[i]
        if v1[j]<0:
            Y[j]=0
        else:
            Y[j]=1
    v0=Y
result=np.array(v0).reshape(6,6)
p=Image.fromarray(result*600)
plt.imshow(p)
plt.show()

问题

当需要记忆的模式之间较为相似,或者需要记忆的模式太多,hopfield神经网络就不能正确的辨别模式。这种相互干扰,不能准确记忆的情况称为串扰(crosstalk)。

波尔兹曼机(Boltzmann Machine)

波尔兹曼机与hopfield神经网络的区别

相同处:

  • 各单元连接权重是对称的。
  • 没有到自身的连接。
  • 每个单元的输出要么是0,要么是1。

区别:

  • hopfield神经网络的输出是按照某种确定性决定的
  • 玻尔兹曼机的输出是按照某种概率分布决定的

受限玻尔兹曼机

简单了解:一起读懂传说中的经典:受限玻尔兹曼机
在这里插入图片描述
机器学习笔记之深度玻尔兹曼机(一)玻尔兹曼机系列整体介绍

网络上关于玻尔兹曼机的资料甚少,而且各资料之间有差异,大多全是公式。

我也没有弄明白!

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

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

相关文章

海睿思分享 | 企业如何加强采购风险控制

企业运营的主要流程&#xff0c;不会因为企业人员规模或者业务规模大小的差异&#xff0c;而出现巨大的差异。千万亿市值的上市公司、不足百人的新兴公司&#xff0c;面对的经营风险本质上不会有明显的区别。今天我们一起分享企业经营管理中常见的风险应对策略。 对于企业而言…

专业分析┃微电子专业介绍及发展前瞻

不知道提到微电子&#xff0c;你最先想到的是什么&#xff1f;芯片&#xff1f;卡脖子&#xff1f;摩尔定律&#xff1f; 因为近两年芯片被限制的原因&#xff0c;大家经常可以从各路媒体上看到“芯片”一词。微电子作为一个学科&#xff0c;简单的说&#xff0c;就是研究如何…

C++,Qt部分面试和笔试题

面试这么多次&#xff0c;C这块基础太差了&#xff0c;乘着还有印象总结下相关的面试问答和笔试题&#xff0c;后续会不断更新内容 目录 问答题1.计算机网络七层体系结构2.C中关键字static和const的使用3.QList和QVector for循环输出速度比较4.构造函数能否为虚函数5.谈谈你对面…

【Mysql】 表的增删查改

文章目录 【Mysql】表的增删查改Create --创建数据Retireve -- 读取数据select 列where条件order by -- 结果排序limit -- 分页 Update -- 更新数据Delete -- 删除数据deletetruncate -- 截断表 插入查询结果聚合函数group by 子句 【Mysql】表的增删查改 CRUD : Create(创建)…

成熟GPT小程序源码分享,快速搭建GPT小程序

本文中分享成熟的GPT小程序源码&#xff0c;帮助你快速搭建自己的GPT小程序。 GPT小程序源码介绍 GPT小程序源码是一套成熟的GPT编程框架&#xff0c;可以帮助你快速开发高质量的GPT小程序。该源码包含了丰富的功能模块和优秀的编程实践&#xff0c;可以帮助你轻松实现GPT小程…

【无标题】如何借助项目管理软件 降低人为误操作风险

在项目管理工具中&#xff0c;权限管理功能对于数据安全的重要性非常高&#xff0c;通常情况下&#xff0c;权限管理是指在软件系统中对用户或用户组进行授权和访问控制的过程。在项目管理软件中&#xff0c;权限管理涉及到谁可以访问、修改或删除项目数据的问题。 以下几方面…

一文学会MySQL四种安装方式

目录 &#x1f341;rpm方式安装 &#x1f340;下载软件包 &#x1f340;前置配置 &#x1f340;安装MySQL &#x1f341;yum方式安装 &#x1f340;下载软件包 &#x1f340;安装MySQL &#x1f341;二进制方式安装 &#x1f340;下载软件包 &#x1f340;安装MySQL &#x1f3…

pyhon的运算符和字符串格式化方式

pyhton的变量类型 这里可以值得一提的是&#xff0c;python是一种弱类型的语言&#xff0c;使用的感觉有些像C的auto变量类型&#xff0c;定义变量不需要写类型名字&#xff0c;只需要变量名就会自动匹配 # int a 10 # float b 10.333 # string c "nihao" # dic…

Linux Shell 实现一键部署mariadb10.11

mariadb MariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。在存储引擎方面&#xff0c;使用XtraDB来代替MySQL的Inno…

【数据结构与算法分析】反转链表与顺序表(内含源码,思路清晰)

文章目录 介绍实现顺序表反转实现链表反转附链表的一些中间函数 介绍 顺序表和链表都是数据结构中常见的线性表。它们的主要区别在于内存管理方式不同。   顺序表&#xff08;Array&#xff09;是由一系列元素按照一定顺序依次排列而成&#xff0c;它使用连续的内存空间存储数…

【数据结构】--单链表力扣面试题⑥链表的回文结构

题述&#xff1a;对于一个链表&#xff0c;请设计一个时间复杂度为o(n),额外空间复杂度为o(1)的算法&#xff0c;判断其是否为回文结构。给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度<900 测试样例&#xff1a; 输入…

【统计分析】Bland-Altman图:MedCalc操作指南与Python实现

之前有记录过一致性分析中的天选之子ICC&#xff08;传送&#xff09;&#xff0c;也提到过Bland-Altman图&#xff0c;Bland-Altman图在一致性分析中作为一种既定量又定性的方法&#xff0c;还有着高颜值的表达展现&#xff0c;受到了广泛地应用。   如下图所示&#xff0c;…

Explaining predictive models: the Evidence Counterfactual

Imagine being targeted with an advertisement for this blog. You’d like to know: why did the AI model predict you’d be interested in the Faculty of Business and Economics’ blog, based on the hundreds of web pages you visited? The answer could be: becaus…

搭建ubuntu容器内C/C++开发调试环境

一、创建容器 为了让容器内的调试器&#xff08;gdb、lldb&#xff09;能够正常调试&#xff0c;在创建容器时需要添加参数&#xff1a; podman添加参数&#xff1a;--cap-addSYS_PTRACE&#xff0c;docker添加参数--cap-addSYS_PTRACE --security-opt seccompunconfined 否…

chatgpt赋能python:Python快捷键——另存为

Python快捷键——另存为 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创立。它的干净简洁&#xff0c;常规用途在计算机编程领域找到了广泛的应用。Python语言是一种普遍而有效的编程语言&#xff0c;有不少的Python程序员喜欢利用快捷键来提高编程效率。…

中医养生APP小程序开发 了解传统文化传承医学经典

中国文化博大精深&#xff0c;中国传统文化更是历史久远&#xff0c;一直到几千年后的今天很多传统文化依然对我们现在的生活有着重大的影响&#xff0c;比如中医。随着人们对健康关注度的提高&#xff0c;很多人把目光投向了追本溯源的中医上&#xff0c;企图通过中医养生达到…

搜索算法(四) 广度优先搜素算法

一、BFS bfs一层一层地遍历图或树&#xff0c;一般用队列实现&#xff0c;可以计算距离目标的步数。 二、例题 1&#xff09; 力扣https://leetcode.cn/problems/shortest-bridge/ 这道题实际是计算两个岛屿之间的最短距离&#xff0c;可以先用dfs搜索到第一个岛屿并且记录第…

TDEngine - taosdump的安装与使用实战

taosdump的安装与使用实战 一、taosdump简介二、下载三、安装四、taosdump主要参数五、taosdump数据导出&#xff08;备份&#xff09;六、taosdump数据导入七、不同版本的数据迁移7.1 问题&#xff1a;报错- create database 语句不一致7.2 解决&#xff1a;修改导出的dbs.sql…

MTK平台的SWT异常的简单总结(2)——SWT原理和分析

&#xff08;1&#xff09;原理性 &#xff08;2&#xff09;SWT如何抓取Log 遇到SWT问题详细可参考MTK提供的FAQ&#xff1a;SWT机制介绍。 获取Ap Log的路径&#xff1a;/sdcard/debuglogger/mobilelog/APLog_XXXXX 获取db的路径&#xff1a;/data/aee_exp 如果db没有打包…

RK3288 Android5.1添加WiFiBT模块AP6212

CPU&#xff1a;RK3288 系统&#xff1a;Android 5.1 注&#xff1a;RK3288系统&#xff0c;目前 Android 5.0 Kernel 3.10 SDK 支持 Braodcom,Realtek 等 WiFi BT 模块 各个 WiFi BT 模块已经做到动态兼容&#xff0c;Android 上层不再需要像以前一样进 行特定宏的配置 此…