激活学习(activation learning)是一种生物启发的简单本地学习规则构建的前向无监督通用模型,它的核心是构建多层神经网络使得网络输出激活强度能反映输入的相对概率大小。并且,它在一些任务上达到并超过反向传播的表现。激活学习的概念由山东大学教授周洪超在arXiv上提交的一篇文章“Activation Learning by Local Competitions”中提出。
1
激活学习的思路
其实,很早之前我在加州理工学院读博士期间,尽管当时主要的研究方向是信息论编码和理论计算机,但是我的导师Jehoshua Bruck也是计算神经系统系的教授,所以跟很多搞信息研究的人一样我们经常闲聊的一个话题:怎么构建一个像大脑的机器。很长时间,我的一个执念是大脑是主要是以无监督学习的方式来工作的,而它背后的学习规则一定是一个简单的本地化规则,否则作为一个复杂的充满随机的生物学系统很难特别鲁棒。所以一个很明确的问题是: 我们是否可以设计一个很简单本地化的学习规则,这个规则很容易在神经元里实现,而且基于这个规则可以实现神经网络一层一层的自动的无监督学习。其实很多研究人员例如马毅老师的"第一原理"也有类似的思想。
那么怎么来设计一个好的本地化的学习规则? 我们的出发点就是从赫布规则(即同时激活的神经元的连接会加强)出发,因为赫布规则已经被大量的神经科学实验所证实,只是赫布规则具体的形式大家不是很清楚,或者简单的赫布规则根本不能保证不同神经元所表达的特征是不一样的。这里关键的一个因素就是神经元的竞争,通过竞争让不同的神经元表征不一样的特征。早在1985年,反向传播的提出者、认知科学的泰斗Rumelhart在提出反向传播的同期也提出了竞争学习的概念,就是让某一群或某一层的最强的一个神经元胜出并激活,他证明这种方法可以进行有效的学习。当然,因为反向传播在应用中的表现太好,这些非常有价值的研究就渐渐被大家所忽略了。有一天我看着刚出生的孩子的时候,忽然对这个问题又产生很强的兴趣,我坚信支配神经元学习的关键(全部)就是竞争。一个简单的物理图像就是当所有的神经元都在竞争激活并表达不同特征的时候,每一层的神经元就能够将最多的信息传递给下一层,而这个过程也就实现了无监督学习,这就是无监督学习的全部; 而且对于越经常遇到的输入,神经元的响应越强,输出的强度也就越强。这是激活学习最基本的思想。
激活学习的输出强度来衡量输入的典型性
因此我们对赫布规则进行了修改,使得它具备了本地神经元之间的竞争能力(连接的神经元之间能够相互竞争)。基于这样一个本地竞争学习规则,可以从数学上证明每一层的输出可以重构出每一层的输入,而且重构损失是最小的。这个重构能力也是Hinton多次提到的,如果一个网络具备逐层重构能力,那么它对于安全攻击就具有很好的安全性。进一步可以证明,这个重构损失跟主成分分析(PCA)的重构损失是一致的,所以它跟马毅老师提出的PCANet的有一定的联系,但是这里一个重要的不一样的是不同神经元的特征是非正交的,这保证即使少量的神经元停止工作对整个神经网络的影响不会特别大。更重要的一个结论是每一层网络的输出激活强度(输出的平方和)不会高于输入强度,而且对于越典型的输入其输出激活强度就越强。
激活学习的学习规则
如果我们将每一层神经网络看成一个激活强度的过滤器,它可以表示比较简单的输入概率分布;那么激活学习就是一个多层神经网络将多个激活强度过滤器串联起来,来表示非常复杂的概率分布。在激活学习中,网络的输出激活强度(平方和)用来估计输入的likelihood。为了保证激活强度在各层的可传递性,我们使用的非线性激活函数要保证它的输入和输出的强度是不变的。最终,我们可以训练一个激活学习神经网络,它可以直接估计输入的概率分布。因为整个训练的过程跟任何具体任务是无关的,它也是一个通用模型,可以用于各类学习任务。
2
激活学习的实验结果
1. 首先是分类任务,这时候激活学习网络的输入既包含图片又包含标签,预测分类的过程就是给定图片来推理标签使得整个网络的激活强度是最大的。受到认知科学实验的启发(J. L. McClelland, How Far Can You Go with Hebbian Learning, and When Does it Lead you Astray?), 正确信息的反馈在人类学习中起到很重要的作用。例如,人在学习某个东西的时候,如果识别错误,这时候如果能够纠正并告诉它正确的结果,可以明显提升它的学习效果。所以在激活学习中,我们引入了反馈并生成正样本和负样本, 正样本是图片和正确标签,负样本是图片和最差的错误标签,给正样本一个正的学习率,负样本一个负的学习率,可以明显提高学习的分类准确率。在MNIST上基于2层的全连接网络可以达到约1.36%的错误率,在CIFAR-10上3层的全连接网络可以达到约37%的错误率,基本上达到了跟反向传播差不多的性能。在CIFAR-10的实验中,我们发现全连接网络的学习收敛性和效果均不如本地连接网络,而且本地连接网络更接近于真实大脑中的神经元连接结构,当然对于更大的数据集和复杂的网络结构,激活学习目前还不能跟反向传播相比拟。
2. 在分类任务上,如果我们降低训练样本的数量,激活学习会得到明显优于反向传播的结果。例如给定600个MNIST训练样本,激活学习可以得到 9.74%的错误率,而反向传播(使用同样网络结构加一层线性分类器)只能得到约16.17%的错误率;此外,继续降低训练样本数量,在few-shot learning上激活学习也可以获得很好的效果。除了在小样本的优秀表现,激活学习在对抗外部噪音上表现也十分显眼,例如我们把MNIST测试图片的一部分覆盖掉或者在上面随机的画一些线,激活学习都取得了明显优于反向传播的识别能力(错误识别率大约能降低一半)。
3. 上面训练的同样的神经网络模型也可以用于图像的生成或补全。最直接的方式是使用sampling的方法,但是目前的sampling方法计算速度都比较慢。这里我们采用了梯度下降的方法来优化生成图片,使得它跟给定的类别标签组合能够让网络的激活强度最大化。实验表明这种方式生成的图片或者补全的图片可以达到不错的效果。为了提升生成图片的多样性,我们将网络中加入更多的随机来控制不同特征的表达。
4. 激活学习作为通用模型,可以用于图片分类和生成之外的其他任务。例如我们在接下来的工作里(Ding et al.) 将激活学习用于异常检测,并在real-world的数据集上取得了跟SOTA可以比拟的结果。这里激活学习的一个优势就是它不需要任何标签数据(异常数据),就可以学习输入数据的概率分布。如果给定一个输入,网络的输出激活强度小于某个阈值,那么说明输入可能是一个异常。这个说明基于简单本地规则的激活学习可以在一些场景下取得比反向传播更好的结果。此外,激活学习可能在时序预测上也具有非常吸引人的应用,例如可以更好的预测分布而不是具体的值。
3
关于激活学习的讨论
1. 激活学习是一个通用任务模型;如果给定一堆数据,我们完全不知道未来的任务是什么,这时候能学什么?我们的答案就是输入样本的概率分布,这就是激活学习要做的。
2. 激活学习可能会使用同一个模型统一监督学习、无监督学习和生成模型;例如,我们的输入数据没有标签就冻结标签部分的输入,如果有标签就跟标签一起输入。
3. 激活学习是一个新的学习范式。在传统的范式下,一部分数据作为输入,另一部分数据作为输出,所以如果我们有很多种类的数据并且有各种各样的推理需求,那么就需要很多很多模型,这个在大脑中是不切合实际的。而激活学习把所有的数据都作为一个模型的输入,不同数据间可以相互推理。
4. 激活学习可能会建立不同内容之间的关联,即associative memory,这是人类智能的关键之一。
4
激活学习的研究价值
1. AI算法层面,探索新的无监督学习AI技术和模型,能够成为反向传播技术补充,弥补反向传播的一些局限;探索通用任务模型,可能有助于通用人工智能的发展。
2. 神经科学的层面,帮助我们更好的理解神经元的可塑性、竞争、抑制、反馈以及associative memory。
3. 在AI硬件层面,我们在神经形态计算(neuromorphic computing)上展开过一些研究,我们发现随着网络规模最大,计算误差也会随之增大,解决这个问题的一个办法就是实现片上训练,而激活学习的本地训练特性使得它更容易实现片上训练,推动神经形态计算技术的研究和发展。
5
与Forward-Forward 算法的区别
Hinton的想法很有洞见,而且在很大程度上也影响了我们这些后来人的一些思考和工作。包括我们在内,很多人都相信大脑的工作机制一定跟反向传播是不一样的,如果我们想解决当前反向传播的一些局限性并进一步探索新的AI模型,那么很自然的会思考一个问题: 大脑是怎么学习的。很可惜,从神经科学的角度,我们对大脑的工作机制,尤其是从电路和算法的层面上是知之甚少的。费曼告诉我们,What I cannot create, I do not understand, 如果想要了解一个东西,最好的办法就是构建一个类似的东西,这是我们研究激活学习模型的一个驱动力 – 怎么构建一个尽可能接近大脑的方式又能够在性能上跟反向传播相比拟的模型。
回到主题, 看到Hinton写得Forward-Forward algorithm文章是朋友转发我,问我跟我们几个月之前放到arXiv的激活学习(activation learning) 工作有什么联系。从我个人理解上,Forward-Forward algorithm跟activation learning在很多的idea上是非常一致的,例如都是把每层神经元的输出平方和作为goodness (activation learning里叫typicality和likelihood, 基本上是一个意思), 都使用正样本和负样本对网络进行训练,甚至在训练CIFAR-10上使用的网络都基本一致,也都采用了本地连接。大家似乎从不同的角度得到一些类似的发现,activation learning是先提出了一个生物启发的很简单的一个本地化的神经元学习规则,然后基于这个学习规则从数学上证明,越是典型的输入它的每层的输出激活强度(输出平方和)就越强;而Forward-Forward Algorithm直接使用输出平方和作为每一层的goodness函数,然后再推导出学习规则,这里很佩服Hinton的直觉。对Forward-Forward有兴趣的伙伴可能会对activation learning也感兴趣,下面是论文和代价链接,请大家批评指正!
文章链接:
https://arxiv.org/pdf/2209.13400.pdf
GitHub代码:
https://github.com/DPSpace/activation_learning
最近将论文更新了一下,在discussions里简单的比较了一下Forward-Forward algorithm和activation learning的一些区别, 例如 (1) 如果将网络每一层看成激活强度的一过滤器, FF是将所有的过滤器加起来作为goodness, 而activation learning是将所有过滤器乘起来作为goodness, 在某种程度上前者可以看成activation learning的一阶近似。(2) 每层训练的local learning方法是不同的,在activation learning中每层的输出激活强度不会高于输入强度,因此如果低层不激活的话,高层也不会激活,跟大脑更类似;而FF中每层采用了归一化,输出激活可能很大,因此FF在估计概率的时候采用sigmoid。(3) Activation learning除了支持正负样本训练,也适用于只有正样本的场景,通过正样本的训练直接获得样本的统计概率分布,在一些应用例如异常检测是很用的,我们(Ding et al)使用activation learning非常简单的方法,就可以在real-world数据集上取得基于反向传播的SOTA性能。从分类任务上,activation learning的2层全连接神经网络可以在MNIST上可以达到1.36%的错误率,3层的本地连接网络可以在CIFAR-10上达到大约37%的错误率 (FF约为41%), 两者都基本上非常接近反向传播的错误率。在MNIST上,如果将训练数据减少,activation learning的错误率明显低于反向传播,在600个训练样本的时候,反向传播错误率是16.17%, activation learning是9.74%的错误率。我们继续将测试图片进行覆盖或随机添加线进行干扰,在很大的范围内,activation learning的错误率只有反向传播的一半左右。Activation learning 训练的模型也是通用模型,同一训练模型可以用于各类学习任务,例如在实验中将之前训练的分类网络也可以用于图像生成和图像补全,并取得了不错的效果。当然跟FF类似,目前activation learning在大数据集和复杂网络结构的时候还无法跟反向传播比拟,而且训练速度更慢一些,也有大量的问题需要研究和解决。Activation learning是一个例子,通过及其简单的类似生物的本地规则可以前向构建无监督通用模型,并在一些任务上达到并超过反向传播的表现。
原文链接:
如何评价Activation Learning的AI模型-Hongchao Zhou的回答:
https://www.zhihu.com/question/574765137/answer/2816497134
如何评价Hinton提出的Forward-Forward方法?-Hongchao Zhou的回答:
https://www.zhihu.com/question/570153849/answer/2816469270