论文阅读 前向正演算法(The Forward-Forward Algorithm)

最近祖师爷Hinton出了一篇论文,很有意思,深度学习模型训练不要反向传播,要两次前向传播,更符合生物学中人的认知了,真的牛

前向正演算法:一些初步研究

  • 摘要
  • 1 反向传播一些弊端
  • 2 前向演进算法
    • 2.1 用简单的逐层优度函数学习多层表示
  • 3 一些试验内容


摘要

这篇论文的目的就是为深度学习神经网络,引入了一种新的学习过程,并且在一些小的问题中进行尝试,效果很不错,值得再深入探究下去。前向正演算法用了两个前向传播代替了反向传播算法的前向传播和反向传播,这两次前向传播喂进去的数据样例分别为一正一负。网络的每一层都有自己的目标函数,并且对正样例有积极影响,负样例有消极印象。一个层中的平方活动的和(The sum of the squared activities)可以用作衡量网络层好坏的指标,但也有很多其他的衡量,包括减去平方活动的总和。如果正传和负传可以在时间上分开,负传可以离线进行,这使得正传中的学习更加简单,并允许视频通过网络流水线传输,而无需存储活动或停止传播梯度。

PS: 我觉更符合人类的认知了,人们觉得让自己爽的事情,大脑的神经网络会层层爽,让我不爽的事情,层层不爽,不必要非得传到结果才依次反馈。

1 反向传播一些弊端

反向传播就是优化网络模型中的一些参数,用损失函数知道这些参数在该怎么优化。换句话说就是,造成最后得出的结果与真实值不一致的现象,每一个参数都有一定的责任,每个参数或多或少都要优化一下,怎么优化呢?就需要用到链式法则求导了。

缺点:
1、反向传播不能很好的模拟人大脑的运行机制
2、反向传播对前面的网络层一定要可导,但是如果在前向传播中插一个黑盒,就不可以执行反向传播了(PS:为啥要放个黑盒呢),因为不了解黑盒的执行计算过程,就没办法求导求梯度了。

前向正演算法在速度上和反向传播相当,优点在于
1、当前向计算的精确细节未知时,可以使用该算法。
2、也可以在神经网络推理传送的时候进行学习,不需要存储神经网络活动或者停止传播误差导数。

在大数据模型中还是要选择反向传播,前向演进算法是非常低的硬件功耗

2 前向演进算法

这个算法是一种贪婪的多层学习过程,思想是用两个前向传播来替代反向传播的前向和反向,两个前向传播完全相同的方式操作,但在不同的数据上,目标相反。正传递对真实数据进行操作,并调整权重以增加每个隐藏层的质量。负传递对“负数据”进行操作,并调整权重以降低每个隐藏层的质量。本文探究了两种不同的衡量度----平方神经活动的和以及平方活动的负和,但许多其他的衡量也是可以的。

让我们假设一个层的优度函数只是该层中校正线性神经元活动的平方和。学习的目的是使优度远远高于真实数据的某个阈值,而远远低于负数据的阈值。更具体地说,其目的是在输入向量为正(即真实)的概率通过将逻辑函数σσσ应用于优度减去某个阈值θθθ

p(positive)=σ(∑jyj2−θ)p(positive)=σ(\sum_{j}^{}y_{j}^{2}-θ)p(positive)=σ(∑j​yj2​−θ)

其中yjy_jyj​是层归一化之前隐藏单元jjj的激活。负面数据可以由神经网络使用自上而下的连接进行预测,也可以由外部提供。

2.1 用简单的逐层优度函数学习多层表示

这个就是模拟神经网络中神经元的抑制机制,激活函数就是正数据进来不抑制,负数据进来抑制。不抑制那值就高,抑制值就低,这样就可以学习单个隐藏层。但是,如果第一隐藏层的激活随后被用作第二隐藏层的输入,那么通过简单地使用第一隐藏层中的激活向量的长度来区分正数据和负数据是不重要的。为了不让第一层隐藏层的激活信息传递到第二层,把第一层激活后的长度给归一化了,这样第二层不知道第一层是抑制还是不抑制,也就能相对独立的去训练了。

3 一些试验内容

验证了想法