本文主要是介绍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,按照特定顺序排列的多个节点设置就是一个二进制数了,而计算机内的二进制数就可以用于存储信息了。)
最简单的进行信息存储的方法如下图:
即在节点设置为0/1的情况下,设存储之前的权重为 wij ,对于每个新来的节点设置 si for all i (即要存储的信息),设置新权重为 w′ij=wij+4(si−1/2)(sj−1/2) 。对于每个信息,只需要进行一次权重更新即可。初始的权重为0(所有点能量值相同)。
1.1. 简单方法的存储能力限制
对于含有N个节点的全连接Hopfield Net,其大概只能存储0.15N个信息(每个信息都是N bit,所以是 0.15N2 个bit)。对比于存储权重所需要的空间 N2log(2M+1) (假设节点设置为1/-1,所以使用上诉第一种权重更新方法,每次都加减1,从而权重范围为[-M,M]),可见此种方法并没有充分利用权重信息。
思考其原因,每次记忆新的节点设置的时候,都是通过改变权重,期待生成一个新的局部最小点。但是会存在两个相邻的局部最小点融合为一个位于两者之间的局部最小点的情况,这就对应于Hopfield Net的记忆半径。而为了使得Hopfield Net可以记忆两个相邻的信息,就引入了unlearning。所谓unlearning就是learning的反向,即不是加上 Δwij ,而是减去。之后Hinton提出,unlearning理论并没有分析,只是实践结果;进而提出了一个做梦就是大脑在做unlearning的模型作为佐证(做梦往往记不住,是因为大脑在记忆白天的信息之后,在新生成的能量分布中进行搜索寻找局部最小点(做梦),然后做unlearning(记不住))。后来也提出了unlearning的问题:何时停止;具体的就是把网络错误记忆的信息量作为cost函数,unlearning看做某种最小化cost函数的方法。详情如下:
2. 伪似然法
物理学家在Hopfield Net这个领域做了很多贡献,他们提出了一个可以大大提高网络存储能量的记忆方法:伪似然法。此方法看上去和坐标梯度下降法(Coordinate graident descent)近似相同,因为和RBM关系不大,只做简易介绍如下(与上诉方法的主要区别就在于多次循环数据集,而不是每种设置只记忆一次;另注意每次对权重的更新都是整数,对称权重所以需要对两个方向的变化综合之后再更新):
这篇关于Hinton Neural Network课程笔记11b: 利用Hopfield Net进行信息存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!