如何评价Hinton提出的Forward-Forward方法?

论坛 期权论坛 金融     
期权匿名问答   2022-12-6 08:12   2216   5
https://www.cs.toronto.edu/~hinton/FFA13.pdf
分享到 :
0 人收藏

5 个回复

倒序浏览
潜评一下。
论文看了一下,对新手极不友好。
FFA 仍然依赖某种先验来调试参数,所以BP不可避免。差别只在是从 final layer 到 all layers 的调整,还是逐层微调。
Hinton 现在用的还是逐层微调的做法,和他06年的工作一样。这样做,计算量其实并没有变化。所以大家看到的 lower power,其实很大一部分是把一部分计算量分在了 epoch 里。也就是说,每次只调整部分 weights。
逐层微调会有一个缺点,收敛性无法保证。层与层之间的权重调整极有可能是相悖的。FFA 得以运行的关键因素之一,在于老爷子超强的微调能力和直觉吧!
所以到目前看,FFA 约等于 RBM + NCE,权重通过 local BP 来调整。RBM 用来最小化 FF 和 positive distributions 之间的差别(即 KL Divergence),NCE 生成一些 noisy 样本,即文中提到的 negative data,通过最大化 positive 和 negative distibutions,使得 FF 的判决面更加明确。所以老爷子说,FFA 是 GAN 的一个特例,很真实。
关于本文提出的 goodness function (起名字确实有一套),其实就是给 MP 神经元换了个函数表达式。据我的理解,在神经元表示上做这种操作,意义并不大。
最后说一下贡献,我觉得新东西还是有的,可能在无监督或者自监督学习中启发式地挖掘到一些 features。此外,关于 cortex learning 和 Mortal computation,那就仁者见仁,智者见智了吧。
NeurIPS现场听的,说实话听完跟听科幻小说一样,深受震撼,但非常兴奋,Hinton的talk结束之后就去看论文了。
我是做实验物理的,所以最care的还是这个东西能用在物理里面。现在想到了两个可能的应用:一个是做模拟。现在物理圈子用ML做模拟的一般喜欢用differentiable simulation,但事实上很多物理过程是不可微的,那么用这个FF的方法是不是可以绕过那些不可微的过程来生成物理事件?第二个是Hinton讲的所谓“mortal computing”,简单来说就是用FF网络实现模拟电路上的机器学习。这个也很有意思,毕竟很多物理实验的前端都是模拟电路,那么是不是可能在那里面加一个FF网络?
其实我最喜欢的部分还是Hinton关于梦的比喻,这是我现场照的照片:


Hinton的理论是:人脑是一个大型FF网络。人在醒着的时候连续接受正样本,而在睡着的时候,脑子里的FF网络开始不断生成负样本并训练(FF可以自己生成负样本,不需要额外的负样本)。这样正负样本达到平衡,人才能保持正常精神状态;如果人一直不睡觉,FF网络时候正样本没有负样本,那么训练就会崩溃。
最后想说一句,作为1947年出生的人,Hinton在一头白发的74岁高龄,依然不断的探索新领域。还是要革了自己提出的back propagation的命,并且自己写matlab代码验证自己的想法,真的很佩服这样的科学家。论文,荣誉,金钱都是身外之物,求知欲才是一名科研工作者最闪耀的勋章。
目前看下来就是一种Local learning,没有完全抛弃梯度下降和反向传播,只是把完整的端到端BP拆成了层内BP,文中因为用的是MLP的例子,每层都是线性的(再加ReLU),所以梯度计算会很快,但如果是Transformer这样比较复杂的block的话,依然解决不了效率的问题。
Local learning 也不是什么新鲜东西了,主要是为了解决端到端BP的一些弊端,比如Update locking,也就是前向和反向传播不能同步进行。Inference和Learning是互斥的两阶段,网络中的所有模块都要等前向传播全部完成后才能更新,使得训练大模型时用模型并行会存在长时间的空闲时间,降低显卡利用率,所以后面才有了流水线并行。如果Local learning能work,能极大地发挥出分布式训练的优势。
文中提出的方法感觉跟Greedy Infomax比较像,使用了类似对比学习的方式,通过数据增强或者先验知识,构造一些正负样本。文中用了一个比较好解释的分类头,而Greedy Infomax的local loss用的是InfoNCE。详情可以参考:
端到端反向传播是唯一的出路吗


我觉得对于这种具有分层特征的模型,较低层的正负样本之间的共性可能远大于差异,尤其对大模型来说,会不太好找。
一般这种方法的效果和收敛速度相比端到端都不高,毕竟两者虽然最后一层学习目标一致,但Local learning把问题分层处理,拆成多个可能与之冲突的小目标,是挺难达到最优的。不过之前有过类似的研究,比如一层学切词,一层学词性,再上面学ner,对于这种下游任务比较丰富的,倒可能比单独学一个语言模型更灵活。文中当然也不避讳,毕竟这算是老爷子的一个探索,还有很长的路要走,希望能看到更多的后续。
就这个方法本身而言,是没有什么新意的,基本原理和马毅那篇“第一原理”类似:
如何评价 马毅教授 的 NeurIPS 2020 中稿文章 MCR2 及 自称弄明白深度学习了?基本原理

high level的说,后向传播的做法是确定一个大模型,一股脑的往前计算,直到一头撞到南墙了(损失函数)再回头慢慢的一层一层调整。
而马毅和Hinton这两篇文章的做法是,走一层调整一层,但每一次调整都是做一件对最终的分类有益的事情。在马毅的文章里,这件事情是聚拢同类数据,拉开异类数据。在Hinton的文章里,这件事情是让正样本的“Goodness”值足够大,让负样本的“Goodness”值足够小。所以这两篇文章的基本原理是一样的,本质上,他们各自设计了一个损失函数的proxy,来代替损失函数提前调整各层的权重,不用等到最终审判(损失函数)的决定。
之所以Hinton有两个Forward,是因为他让同一层走一次正样本再走一次负样本。马毅的代码里也是用Batch的,甚至可以把整个数据集都堆上去调整那一层,那当然正负样本都会有,所以其实两者没区别。
前向网络的优点

这么做的好处,两人的着眼点不同。马毅认为,因为调整每一层的方法(聚拢同类,拉开异类)是可解释的,所以整个神经网络也变得可解释了,可解释性强。而Hinton则是聚焦于后向传播的若干问题:

  • 和人类不一样,人类的大脑没有直接的后向传播过程,前向传播更类似人类大脑的运作机制。
  • 后向传播必须要等一轮走到底了再回过头来再走一轮,你必须掌握每一步的具体方程才能传播梯度,还要记录中间结果。而前向网络可以在途中使用任意黑盒模型,用完扔掉就好,不需要记住中间结果,也不需要了解具体的方程。
  • 太慢了,后向传播必须把感知层的数据(比如眼睛)直接传到控制层(比如手),得到误差了再调整一次才算学完,人类如果这么玩早就死了。应该根据感知数据的变化马上调整,不能等到最后的错误发生再调整。
我的碎碎念。。。

应该说我还是更喜欢Hinton这文章,他数学上是不如马毅的文章严密,但他从仿生的角度出发,得出了类似的结论。比如他的"Goodness"函数是完全仿生学的,就是计算每一层输出值的平方和,然后优化这一层让正样本的输出平方和更大,让负样本的输出平方和更小,非常好理解。和人的神经元一样:遇到正样本就激动,遇到负样本没反应。
人们喜欢用各种数学工具去解释神经网络,我虽然也是学的不亦乐乎吧,但说实在的,还是太绕了。我更倾向于使用自然语言去解释,我的文章也尽量使用这个风格,能不用公式尽量不用。
就比如Hinton这个“Goodness”的函数吧,在数学上不也是聚拢正样本,拉开负样本?真的去细究起来,本质上是一样的。既然如此,那不如选个舒服点的角度去理解,没必要和自己的大脑过不去。
此外,Hinton这篇文章,让后继者的发挥自由度大太多了。马毅的文章,数学严密,论证充分,连每一步更新的公式都给你推出来了,基本没什么可发挥的。
但Hinton这篇文章,他随便选了个“Goodness”函数,然后告诉你说什么函数都可以。网络层,他随便用了全连接,然后告诉你什么不可微的黑箱函数都可以。这两个“都可以”,意味着什么?意味着他只提供了个框架,你可以自由发挥。
我给你提一个现实工作中的例子:图像分割。假设我们要分割蓝天,我想任何一个人都知道,分割蓝天真的超级简单,绝对不需要什么UNet,连SegNet都嫌大了,但使用传统图像处理方法还是不够好。于是你会想,我能不能给神经网络提供一点hint?我能不能把蓝天偏蓝色这个先验知识给你整合进去,让模型轻松点?很遗憾,用反向传播不太行,即便可以,也是通过很不自然的方法,他不接受先验知识,不撞南墙不回头的。
但用前向网络,那就可以,你可以在前向传播中插入一个黑箱函数用简单的图像处理方法预分割蓝天,等于是向整个神经网络中插入了一个黑箱函数,都不需要可微的,乱玩都可以。然后这个知识就算是整合进去了,后面的步骤他接着学,慢慢的学着去融合你提供的先验知识。人类先验知识整合就很自然。
连续性的学习也意味着可以通过设计停止条件随时停止!简单的东西,走两步就出结果了,超级快,比如蓝天的分割。复杂的东西,比如分割出路牌上某行细微的文字,你就多走几步,不断地refine。多么优雅,多么自然!不像现在,无论你需要的内容多么简单,或是多么复杂,网络都那么大,太static了。比如你如果镜头对准蓝天,分割这玩意还要过一遍整个神经网络,这不是傻x么?纯粹浪费时间。
总之,我觉得想象空间很大,会不会成为未来的趋势,我希望能成。前向网络更符合人类大脑结构,更符合自然的认知过程,更节能,速度更快,怎么看都是好东西。当然,最后还是需要各位的努力。。。
结论

如论文的标题一样,工作还比较早期,但这个方向不错,值得深入研究。
概述

反向传播有什么问题:


  • 推理和学习是两个阶段,学习时需要将推理暂停
  • 梯度需要完整的前向计算后才能得到
FF的用处和限制

用处

  • 用于低功耗模拟硬件
  • 替换网络中不可导模块的强化学习方法
限制

  • 暂时还不能用于大模型 (论文中提到,未来会有一篇论文讨论这个)
  • FF训练比传统的反向传播训练慢
Forward-Forward算法



对于正样本,要求激活的平方和大于阈值 ;对于负样本,要求激活的平方和小于阈值
Forward-Forward算法,基本可以看做是在每层自己构造了一个学习目标,即正样本的激活平方大于阈值,负样本激活平方小于阈值。
正样本、负样本的逻辑是不是和GAN很像?论文后面提到,FF可以看做是GAN的一个子集。
实验

基准实验

MNIST数据,不使用卷积网络、Dropout等的情况下,一般错误率为1.4%
无监督FF

负样本构造方法如下:


使用随机的两张真图片,然后使用一个mask与mask取反,分别对与两张图片做乘,然后相加,得到一张负样本。mask的生成方式为: 取一张随机位图,高斯模糊几次(1/4, 1/2, 1/4),再取阈值0.5。
在用四个隐藏层(每个隐藏层包含 2000 个 ReLU)训练 100 个epoch后,如果我们使用最后三个隐藏层的归一化活动向量作为 softmax 的输入,我们得到 1.37% 的测试错误率,该 softmax 被训练来预测标签。
有监督FF



直接在图片左上角,放one-hot的标签,比如上面放一个one-hot值为7,是正样本,其他值是负样本。
网络结构和训练方法如上无监督,60 个 epoch 后在 MNIST 上得到 1.36%
模拟硬件和Mortal Computation

现在的神经网络基本都是在数字电路上运算的。
但如果将神经网络的活动实现为电压,将权重实现为电导(在集成电路上,电导也可以通过电压来控制),有望将万亿参数级别的模型,运行在只有几瓦的模拟芯片上。
硬件的电气参数会随着时间、运行和外部温度环境等变化而产生变化,而数字电路是在模拟电路的基础上,做到二进制数据的不变性。
如果舍弃数字电路的不变性,而直接在模拟电路上实现神经网络,那功耗和计算延迟都将大大降低。
个人想法

受限于摩尔定律基本结束,实现具备通用智能的边缘代理(eg、服务机器人),那模拟电路上实现神经网络可能是唯一选择。
希望这个领域可以继续深入发展,推动AI软硬件的协同设计。
论文翻译参考: https://tongtianta.site/paper/108822
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:391687
帖子:78338
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP