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

这篇具有很好参考价值的文章主要介绍了Hopfield神经网络与受限波尔兹曼机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

神经网络可分为两大类:

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

深度学习目录:

  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)

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

首先我们来看看脑部神经元结构图
Hopfield神经网络与受限波尔兹曼机
生物神经元和人工神经元的对照关系

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]])

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

设置神经网络的网络权值

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

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

array_a=a.flatten()

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

其次,设置连接权值。

我们已知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)

生成网络权值图如下
Hopfield神经网络与受限波尔兹曼机

输入联想图,开始联想

联想图
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]])

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

开始联想

设输入值为 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

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

多联想记忆网络

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

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

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图像
Hopfield神经网络与受限波尔兹曼机
多记忆权值网络:
Hopfield神经网络与受限波尔兹曼机
联想记忆测试a
Hopfield神经网络与受限波尔兹曼机
联想结果a
Hopfield神经网络与受限波尔兹曼机
联想记忆测试b
Hopfield神经网络与受限波尔兹曼机
联想结果b
Hopfield神经网络与受限波尔兹曼机
结果显示,一个网络可以存储多个记忆图。

全部代码

引自: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神经网络的输出是按照某种确定性决定的
  • 玻尔兹曼机的输出是按照某种概率分布决定的

受限玻尔兹曼机

简单了解:一起读懂传说中的经典:受限玻尔兹曼机
Hopfield神经网络与受限波尔兹曼机
机器学习笔记之深度玻尔兹曼机(一)玻尔兹曼机系列整体介绍

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

我也没有弄明白!文章来源地址https://www.toymoban.com/news/detail-476052.html

到了这里,关于Hopfield神经网络与受限波尔兹曼机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度学习】受限玻尔兹曼机 (RBM) 初学者指南

            受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)是一种基于能量模型的人工神经网络。它只有一个隐层,将输入层和隐层中的每个神经元互相连接,但不同层的神经元之间没有连接。RBM是一种无向的概率图模型,可以用于特征提取、数据降维、协同过滤等任务。它

    2024年02月13日
    浏览(43)
  • 人工智能(pytorch)搭建模型13-pytorch搭建RBM(受限玻尔兹曼机)模型,调通模型的训练与测试

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型13-pytorch搭建RBM(受限玻尔兹曼机)模型,调通模型的训练与测试。RBM(受限玻尔兹曼机)可以在没有人工标注的情况下对数据进行学习。其原理类似于我们人类学习的过程,即通过观察、感知和记忆不同事物的特点

    2024年02月10日
    浏览(71)
  • 神经网络基础-神经网络补充概念-30-搭建神经网络块

    搭建神经网络块是一种常见的做法,它可以帮助你更好地组织和复用网络结构。神经网络块可以是一些相对独立的模块,例如卷积块、全连接块等,用于构建更复杂的网络架构。

    2024年02月12日
    浏览(47)
  • 神经网络基础-神经网络补充概念-17-计算神经网络的输出

    计算神经网络的输出通常涉及前向传播(Forward Propagation)的过程,其中输入数据通过网络的层级结构,逐步被传递并变换,最终生成预测结果。下面我将为你展示一个简单的神经网络前向传播的示例。 假设我们有一个具有以下参数的简单神经网络: 输入层:2个神经元 隐藏

    2024年02月12日
    浏览(41)
  • 神经网络实验--卷积神经网络

    本实验主要为了掌握深度学习的基本原理;能够使用TensorFlow实现卷积神经网络,完成图像识别任务。 文章目录 1. 实验目的 2. 实验内容 3. 实验过程 题目一: 题目二: 实验小结讨论题 ①掌握深度学习的基本原理; ②能够使用TensorFlow实现卷积神经网络,完成图像识别任务。

    2024年02月06日
    浏览(53)
  • 神经网络与卷积神经网络

    全连接神经网络是一种深度学习模型,也被称为多层感知机(MLP)。它由多个神经元组成的层级结构,每个神经元都与前一层的所有神经元相连,它们之间的连接权重是可训练的。每个神经元都计算输入的加权和,并通过一个非线性激活函数进行转换,然后将结果传递到下一

    2024年02月10日
    浏览(45)
  • 神经网络基础-神经网络补充概念-40-神经网络权重的初始化

    神经网络权重的初始化是深度学习中的重要步骤,良好的权重初始化可以加速模型的训练收敛,提高模型的性能和稳定性。以下是一些常用的权重初始化方法: 零初始化(Zero Initialization):将权重初始化为零。然而,这种方法不太适合深层神经网络,因为它会导致所有神经

    2024年02月12日
    浏览(49)
  • 【神经网络】循环神经网络RNN和长短期记忆神经网络LSTM

    欢迎访问Blog总目录! 一文看尽RNN(循环神经网络) - 知乎 (zhihu.com) 一文搞懂RNN(循环神经网络)基础篇 - 知乎 (zhihu.com) 循环神经网络(Recurrent Neural Network, RNN)是一类以 序列 (sequence)数据为输入,在序列的演进方向进行 递归 (recursion)且所有节点(循环单元)按链式连

    2024年04月10日
    浏览(46)
  • 神经网络 04(神经网络的搭建)

    tf.Keras 中构建模有两种方式,一种是通过  Sequential  构建,一种是通过  Model  类构建。前者是按 一定的顺序对层进行堆叠 ,而后者可以用来 构建较复杂的网络模型 。首先我们介绍下用来构建网络的全连接层: units: 当前层中包含的神经元个数 Activation: 激活函数,relu,sig

    2024年02月09日
    浏览(29)
  • 卷积神经网络与前馈神经网络

    常见的人工神经网络结构 人工神经网络是一类由人工神经元组成的网络,常见的神经网络结构包括: 前馈神经网络(Feedforward Neural Network,FNN):最简单的神经网络结构,由一个输入层、一个输出层和若干个隐藏层组成,信号只能从输入层流向输出层,不允许在网络中形成回

    2023年04月26日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包