【Hopfield 网络】 记忆和联想

2024-08-25 06:04
文章标签 网络 记忆 联想 hopfield

本文主要是介绍【Hopfield 网络】 记忆和联想,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hopfield 网络: 记忆和联想

这篇内容是观看这个视频(神经网络是如何联想和记忆的)之后的emmm可以说是总结吧!

开篇

  • 如果我们突然听到了一首歌,我们为什么能快速的反应出这是哪首歌?这很不可思议,对吧!我们听到了一首歌,如果我们要把这首歌和我们记忆中存储的成千上万首歌一一比较才能知道这是哪首歌的话,那大脑早就超载爆炸了!所以我们不可能通过搜索的方式还原出一首歌是啥样。
  • 蛋白质是由肽链折叠而成的,蛋白质可以看作是这坨肽链的能量稳定状态。那么肽链是怎么变成能量低的状态而成为蛋白质的?肽链是不可能主动搜索然后找到无数个可能中最稳定的状态然后变成那样的。

定义能量,代替搜索

因此为了在听到旋律之后快速找到对应的曲子,或者说肽链成为能量稳定的蛋白质,其过程依赖的必然不是搜索!而是一个更加自然的规律

  • 这个规律对于肽链来说,就是根据自然物理法则的规律,不停的降低自己的能量!
  • 这个规律对于寻找曲子来说,则更为抽象一点,可以理解成对有噪声输入的还原!想象:(1) 现在听到的歌曲是一个小球,小球在一个广场(你的思维)上;(2) 它在广场上的位置初始的位置就是他自身的旋律(包含你听到的外界的噪声且不完整);(3) 小球不停的在重力(重力就是你的大脑的思考!)的左右下改变自己的位置(可以视作对旋律的去噪声,补全,想象);(4) 最后小球落入了一个能量的洼地,一个小口袋而停下,这个口袋就是你的记忆点,就是这个歌曲!

Hopfield网络

对于找曲子的过程,我们进一步抽象!假设你听到的曲子就是一堆由+1或者-1构成的序列,这些+1,-1共同构建成了一个网络上的节点的值!
在这里插入图片描述
就这之前的比喻来说吧!(1) 小球所在的广场就是这个网络中所有的边!具体而言就是连接每个节点的边权重,比如链接节点 i i i和节点 j j j之间的权重就是 w i j w_{ij} wij
(2) 小球的初始位置就是节点中这些+1,-1的组合!改变小球的位置就是改变这些+1,-1的取值 (3) 小球接下来就会在这个广场上受重力的影响而滚动,滚动是朝着重力势能低的方向滚动,这个时候我们定义小球的重力势能表达为 E = − ∑ i j w i j x i x j E =- \sum_{ij} w_{ij}x_ix_j E=ijwijxixj。其中 x i x_i xi表示节点i的取值,也就是+1或者-1 (先不关心能量为啥长这样) 。接下来小球回尽可能的改变自己的位置,也就是改变 x i x_i xi让能量 E E E变小!这就是小球的滚动!这个滚动可以被数学描述为 new  x i ← 1 × s i g n ( ∑ j w i j x j ) \text{ new } x_i\leftarrow 1\times sign(\sum_{j}w_{ij}x_j)  new xi1×sign(jwijxj)这个滚动其实是每次i节点都根据与自己相关的权重和相连的节点的取值,改变自己的值,这样能确保每次改变都能让总能量 E E E变得更小! (4) 小球不停的滚动,最后!数学上可以说明小球一定能到达一个局部的能量最小值点,也就是洼地,记忆点!

Hopfield网络的推理和训练

推理

上面描述的过程其实就是该网络的推理过程,简单来说就是根据 w i j w_{ij} wij在给定一组初始状态 x x x的条件下不停的优化自身状态直到最后收敛到洼地!这个过程可以用来被去噪,搜索匹配(寻找歌词)。事实上,如果这个网络通过 w i j w_{ij} wij确定了一些记忆点,最后收敛的结果一般是比较靠近初始状态的记忆点!

训练

所谓训练过程就是在广场上挖出洼地,也就是在脑子里弄出记忆点!这是如何做到的?答案是通过确定 w i j w_{ij} wij。实际上其实很简单,如果只有一个洼地,它对应的位置是 x i = ξ i x_i=\xi_i xi=ξi,那么只需要 w i j ← ξ i ξ j w_{ij}\leftarrow\xi_i\xi_j wijξiξj即可。因为此时,只要小球的位置满足了 x i = ξ i x_i=\xi_i xi=ξi E E E的取值必然最小!(显而易见此时 w i j ξ i ξ j = ξ i 2 ξ j 2 = 1 w_{ij}\xi_i\xi_j=\xi_i^2\xi_j^2=1 wijξiξj=ξi2ξj2=1,此时 E E E最小!)

那如果有多个洼地呢?很简单分别为每个洼地计算出一个 w i j w_{ij} wij最后叠加就行!

Hopfield的缺陷

这个广场中的洼地不能太多!如果小广场里挖了太多洼地,那么不同的洼地的最低点离太近就无法区分开了。这个时候放一个小球,很难保证他能进入一个其中一个我们给定的洼地。而且洼地太靠近问题越明显!一般而言,N个节点的网络,大概能放入0.14N个洼地

关于能量函数

E = − ∑ i j w i j x i x j E =- \sum_{ij} w_{ij}x_ix_j E=ijwijxixj
为啥能量函数长这样呢?当然可以说就是定义成这样的!想像成一团空气分子,其能量是内部两两作用的能量都合。当然,我更喜欢视频的另一个解释。如果每个节点上一个神经元的话,有一个说法:如果两个神经元fire together,那么他们wire together。 例如, x i , x j x_i,x_j xi,xj都同为+1或者-1,那么 w i j = 1 w_{ij}=1 wij=1就可以把他俩联系在一起!让E更低!

这篇关于【Hopfield 网络】 记忆和联想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104742

相关文章

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为