Hinton Neural Network课程笔记11b: 利用Hopfield Net进行信息存储

2023-12-15 23:32

本文主要是介绍Hinton Neural Network课程笔记11b: 利用Hopfield Net进行信息存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

课程简介

Geoffrey Hinton 2012年在coursera上开的网课:Neural Networks for Machine Learning。

课程笔记

关于Hopfield的简单定义与应用,请参考Hinton Neural Network课程笔记11a: Hopfield Net的定义与应用。关于Hopfield的详细介绍,可以参考《现代模式识别(第二版)》(里面包括对于Hopfield Net其他角度的理解与应用,讲解也更加系统。个人猜测Hinton课程中的Hopfield Net只是为了引入RBM)。

1. 简单的信息存储方法

11a的笔记中已经提到了Hopfield Net的一个重要应用就是进行信息存储,其可以在给定结构和权重的情况下,对破损信息进行恢复。而如何通过需要存储的信息得到权重,就是这里的信息存储方法。(因为每个节点设置是0/1,按照特定顺序排列的多个节点设置就是一个二进制数了,而计算机内的二进制数就可以用于存储信息了。)
最简单的进行信息存储的方法如下图:
store memory
即在节点设置为0/1的情况下,设存储之前的权重为 wij ,对于每个新来的节点设置 si for all i (即要存储的信息),设置新权重为 wij=wij+4(si1/2)(sj1/2) 。对于每个信息,只需要进行一次权重更新即可。初始的权重为0(所有点能量值相同)。

1.1. 简单方法的存储能力限制

对于含有N个节点的全连接Hopfield Net,其大概只能存储0.15N个信息(每个信息都是N bit,所以是 0.15N2 个bit)。对比于存储权重所需要的空间 N2log(2M+1) (假设节点设置为1/-1,所以使用上诉第一种权重更新方法,每次都加减1,从而权重范围为[-M,M]),可见此种方法并没有充分利用权重信息。
storage capacity
思考其原因,每次记忆新的节点设置的时候,都是通过改变权重,期待生成一个新的局部最小点。但是会存在两个相邻的局部最小点融合为一个位于两者之间的局部最小点的情况,这就对应于Hopfield Net的记忆半径。而为了使得Hopfield Net可以记忆两个相邻的信息,就引入了unlearning。所谓unlearning就是learning的反向,即不是加上 Δwij ,而是减去。之后Hinton提出,unlearning理论并没有分析,只是实践结果;进而提出了一个做梦就是大脑在做unlearning的模型作为佐证(做梦往往记不住,是因为大脑在记忆白天的信息之后,在新生成的能量分布中进行搜索寻找局部最小点(做梦),然后做unlearning(记不住))。后来也提出了unlearning的问题:何时停止;具体的就是把网络错误记忆的信息量作为cost函数,unlearning看做某种最小化cost函数的方法。详情如下:
unlearning

2. 伪似然法

物理学家在Hopfield Net这个领域做了很多贡献,他们提出了一个可以大大提高网络存储能量的记忆方法:伪似然法。此方法看上去和坐标梯度下降法(Coordinate graident descent)近似相同,因为和RBM关系不大,只做简易介绍如下(与上诉方法的主要区别就在于多次循环数据集,而不是每种设置只记忆一次;另注意每次对权重的更新都是整数,对称权重所以需要对两个方向的变化综合之后再更新):
伪似然法

这篇关于Hinton Neural Network课程笔记11b: 利用Hopfield Net进行信息存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os