欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

back propagation算法程序(python神经网络编程)

程序员文章站 2024-03-26 20:41:53
反向传播可以解释大脑学习吗?近日 hinton 等人的研究认为,尽管大脑可能未实现字面形式的反向传播,但是反向传播的部分特征与理解大脑中的学习具备很强的关联性。该研究将之前的相关研究置于「ngrad」...

反向传播可以解释大脑学习吗?近日 hinton 等人的研究认为,尽管大脑可能未实现字面形式的反向传播,但是反向传播的部分特征与理解大脑中的学习具备很强的关联性。该研究将之前的相关研究置于「ngrad」框架下,ngrad 算法利用活动状态的差异驱动突触更新,这与反向传播类似。

back propagation算法程序(python神经网络编程)

加拿大 cifar 人工智能主席、麦吉尔大学生物工程系教授 danilo bzdok 转发了该研究。

在学习过程中,大脑会调整突触以优化行为。在皮层中,突触嵌入在多层网络中,这导致我们难以确定单个突触的调整对整个系统行为的影响。而反向传播算法在深度神经网络中解决了上述问题,不过长期以来人们一直认为反向传播在生物层面上存在问题

尽管如此,神经科学的最新发展和神经网络的成功激活了人们对反向传播能否帮助进一步了解皮层学习的兴趣。反向传播算法使用反向连接(feedback connection)传递误差信号,来计算突触更新,从而实现快速学习。尽管反向连接在皮层中无处不在,但我们很难观察到它们是如何传递反向传播所需误差信号的。

近日,来自 deepmind、牛津大学和谷歌大脑的 timothy p. lillicrap、adam santoro、geoffrey hinton 等人在 nature 子刊《nature reviews neuroscience》发表文章。该研究以过去和近期的研究发展为基础,认为反向连接可能会引发神经活动,而其中的差异可用于局部逼近误差信号,从而促进大脑深层网络中的有效学习。

back propagation算法程序(python神经网络编程)

大脑对反向传播算法的近似。

论文地址:
https://www.nature.com/articles/s41583-020-0277-3

引言

大脑通过调整神经元之间的突触连接来进行学习。尽管突触生理学可以帮助解释单个突触调整背后的规则和过程,但这并不能解释突触调整是如何协调进而实现网络目标的。

学习不能只是对局部突触特定事件的盲目累积,也不能不考虑下游行为后果。因此,想要了解大脑中的学习过程,就必须揭示在整个网络中协调可塑性的原则。

在机器学习领域中,研究人员探索协调突触更新的方法,以提高神经网络的性能,同时不受生物现实情况的限制。

他们首先定义了神经网络的整体架构,包括大量神经元及其连接方式。例如,研究人员经常使用包含多层神经元的深层网络,因为研究证明这些架构对于多项任务都非常有效。

接下来,定义一个误差函数,用于量化当前网络实现目标的程度,进而搜索学习算法来计算那些可以减少误差的突触变化(如下图 1)。

back propagation算法程序(python神经网络编程)

图 1:多种学习算法图示。a)从左到右:神经网络通过一系列简单的计算单元来计算输出。b)在规定突触变化特异性的谱系中,反向传播和扰动算法的位置。c)该谱系上的算法以不同的速度进行学习。

在机器学习中,误差反向传播(backprop)是深度神经网络训练中最常用的算法,也是这些神经网络中最成功的学习步骤。

反向传播算法描述见下图:

back propagation算法程序(python神经网络编程)

反向传播算法的核心是对整个网络所有可能的路径重复使用链式法则。反向传播算法真正强大的地方在于它是动态规划的,我们可以重复使用中间结果计算梯度下降。因为它是通过神经网络由后向前传播误差,并优化每一个神经节点之间的权重,所以这种算法就称之为反向传播算法(backpropagation algorithm)。

经过反向传播训练的网络是机器学习近期成功案例的核心,包括最领先的语音识别、图像识别以及语言翻译。反向传播还支撑了无监督学习方面的最新进展,例如图像和语音生成、语言建模和其他相关的预测任务。此外,反向传播和强化学习的组合在解决控制问题方面也取得了重大进展,例如玩转 atari 游戏,在围棋和扑克游戏中击败人类顶尖的专业选手。

反向传播通过反向连接发送的误差信号来调整突触,该经典方法已在监督学习设置中有详细描述。

然而,大脑似乎将反向连接用于不同目的,而且主要以无监督的方式进行学习,为原始感官输入中的隐式表征构建显式结构从而建立表征。那么,我们很自然地就会想到这个问题:反向传播算法是否可以帮助我们了解更多有关大脑学习的信息?

该研究认为,尽管存在明显的差异,但大脑仍有能力实现反向传播的核心原则。其主要思想是,大脑可以通过使用反向连接来引发神经元活动从而计算有效的突触更新,而这些神经元活动将局部计算出的差异编码成类似于反向传播的误差信号。

该研究将一组看似完全不同的学习算法放入该框架中——neural gradient representation by activity differences(ngrad)。

ngrad 框架表明,在避开反向传播许多有问题的实现要求后,反向传播核心原则的实现是可能的。这些考虑因素可能与任何同时包含前向和反向连接的脑回路有关。尽管如此,该研究团队仍然关注大脑皮层,皮层是由其多层结构和分层组织所定义的,因此长期以来被视为具与深度网络具备很多相关的架构特征。

大脑中是否存在反向传播?

目前没有直接证据表明,大脑使用类似反向传播的算法进行学习。但是,之前的研究表明,使用反向传播训练的模型可以解释观测到的神经响应,如后顶叶皮层和初级运动皮层中的神经元响应。此外,神经科学领域对视觉皮层进行建模的研究提供了新的证据。

该研究表明,相比匹配灵长目动物视觉皮层腹侧流中表征的其他模型,使用反向传播训练得到的多层分类模型性能更好(参见下图 2)。

未使用反向传播训练的模型(如使用 gabor filter 的生物启发模型,或使用非反向传播优化的网络)的性能不如使用反向传播进行优化的网络。与使用反向传播训练的模型所发现的表征相比,未使用反向传播模型的表征无法很好地匹配下颞叶皮层中的表征。

back propagation算法程序(python神经网络编程)

图 2:使用反向传播训练的网络与利用视觉皮层腹侧流中神经响应的模型的对比。a)cadieu 等人的研究 [58] 表明使用反向传播训练的模型(蓝色)比其他模型(灰色)更好地解释下颞叶皮层(it)中的多单元响应;b)khaligh-razavi 和 kriegeskorte 的研究 [70] 表明,具备更好分类性能的模型与 it 表征的近似度越高。

使用反向传播训练的深层网络除了能够更好地匹配大脑中的表征以外,它还可以帮助解释感知学习中感受野变化的规模和时间,以及在动物和人类的某种学习过程中观察到的阶段变换。

反向传播自身的问题

尽管越多越多的证据表明使用反向传播训练的多层网络有助于解释神经数据,但关于如何在皮层中实现类反向传播的学习还有很多难题。下列公式 1 表示反向传播中的突触更新:

back propagation算法程序(python神经网络编程)

基于该公式,该研究指出了在生物回路中实现反向传播的三个主要难题。

反向传播要求前向和后向路径具备突触对称性

反向传播的朴素实现要求通过反向连接传播误差信号,而反向连接的强度必须与前向连接一致。从上文公式 1 中可以看到,误差 δ_l+1 沿着后向权重 w^⊤_l+1 移动,该后向权重与前向权重是对称的。

在计算机上,反向传播算法利用一组与前向传播所用活动变量完全不同的 error derivative 变量,向后传播误差信息。而将反向传播引入大脑中后,大脑中的误差信息可以通过不同的「误差传播网络」(error delivery network)进行传播,该反向网络的每一个神经元均携带前向网络中对应神经元的更新信息。

反向传播中的误差信号可能出现极值情况

在反向传播中,通过网络向后传播用于告知更新的信息通常以 signed 误差信号 δ 的形式进行传输。在训练过程中,误差信号常常发生多个数量级的变化,即梯度爆炸和梯度消失问题。

尽管有证据表明单层结构(如小脑)中存在 signed 误差传播,但深层网络(如大脑皮层)中 signed 误差的反馈存在很多问题。

大脑中的反向连接改变了神经活动

在误差反向传播中,反向连接发送的误差信号不会影响前向传播生成神经元的活动状态。但是通过 δ 传播的信息仅对突触更新造成影响。因此,大脑中反向连接的作用发生本质变化。例如在皮层中,反向连接影响前向传播生成的神经活动,而这些活动用于执行多个功能。又例如,通过反向连接执行自上而下的控制与增益控制(gain control)有一定关联,即神经响应的增强或抑制取决于对视场中特定特征的关注。有趣的是,大脑皮层中的反向连接还可以驱动活动,而不只是调整或激活活动。

ngrad 假设

利用神经活动差异来编码误差

研究者将利用活动状态差异来驱动突触变化的学习机制称为 ngrad,而皮层利用 ngrad 机制来执行对梯度下降近似的想法被称为 ngrad 假设。该假设的主要魅力在于,它不再需要传播两种类型截然不同的参数:活动和 error derivative。

相反,ngrad 机制基于这样一种 idea,即来自一个目标、另一种形态或更大空间或时间背景的较高级活动,可以推动较低级活动得到与较高级活动或期望输出更一致的值。然后,较低级活动中出现的变化可以仅使用局部可用信号来计算反向传播的权重更新。因此,其核心理念是自上而下驱动(top-down-driven)的活动可以在层间不出现明显误差信息的情况下驱动学习。

目标传播

目标传播是深度学习中使用一系列自编码器的基础理念,下图 3a 展示了目标传播的流程图:

back propagation算法程序(python神经网络编程)

图 3:目标传播算法。a)在每一层使用完美反函数 g_l=f_l^-1(.) 的目标传播原理图;b)差异目标传播有助于纠正反向连接或许无法实现完美反函数的事实;c)单层差异目标传播原理图。前向突触权重的更新旨在促使 forward-pass 隐藏活动更接近修正后的隐藏目标。

差异目标传播

上文中描述的目标传播使用完美的自编码器将目标传达至较早出现的层。这个约束是不切实际的,但可以通过训练后向权重来修复。在前向传递过程中,研究者力图基于后续层中的活动来重建神经活动:̂ h= g_l+1(h_l+1)(如图 3b 中浅紫色箭头所示)

此学习过程称为差异目标传播(difference target propagation,dtp),并在图 3b 和 c 中与逐层权重更新一起显示。

实现

大脑如何近似反向传播,现有的 ngrad 或许能提供高级见解,但是关于如何在神经组织中实现这种算法仍有许多疑问。

为了在神经回路中发挥作用,ngrad 必须具备以下能力:协调前向和反向路径之间的交互、计算神经活动模式之间的差异以及利用这一差异进行适当的突触更新。

当前,尚不清楚生物回路如何支持这些操作,但最近的实证研究提出了针对这些实现所需的一组潜在解决方案(下图 4)。

back propagation算法程序(python神经网络编程)

图 4:大脑如何近似反向传播算法,近期的实证研究提供了新思路。