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=−ij∑wijxixj。其中
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 xi←1×sign(j∑wijxj)这个滚动其实是每次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=−ij∑wijxixj
为啥能量函数长这样呢?当然可以说就是定义成这样的!想像成一团空气分子,其能量是内部两两作用的能量都合。当然,我更喜欢视频的另一个解释。如果每个节点上一个神经元的话,有一个说法:如果两个神经元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更低!