Press "Enter" to skip to content

人脑是怎幺防止梯度消失和梯度爆炸的?

来源丨知乎问答

本文部分授权自知乎问答,仅用于学术分享,着作权归作者所有。

观点一

 

作者丨冒蓝火的加特林

 

感觉这个问题跟我的科研方向有一点关系,所以就厚着脸皮强答一波了。

 

(1)动物的神经元都是以脉冲的形式进行信息交流的,而脉冲是离散的,所以从数学角度人脑(往大了说就是动物)交换信息的方式是离散的,也就是不能求导,所以就不存在所谓的“梯度”这一概念了;当然也有论文可以建模,以一种伪bp的方式进行脉冲迭代,当然这就是后话了;

 

 

神经元的模型;树突用来收集信息,轴突用来发送信息,二者又合称神经突

 

(2)基础知识准备:要解决题主的这两个问题,首先就要知道人脑是怎样基于脉冲的形式进行学习的:当一个神经元通过突触(准确的说是轴突)传输脉冲到下一个神经元,下一个神经元收到脉冲后就会引起膜电位的上升,不发射脉冲的时候,由于神经元存在离子泄露,导致膜电位下降;而当该神经元的膜电位达到一定阈值的时候,就会发射脉冲到下下个神经元了,当然你也得让神经元歇一会,在它发射脉冲后的一段时间内,你咋扒拉它,它也不射了,哦,不是,是不发射脉冲了(说白了就是贤者时间呗)。

 

 

神经元膜电位随前级神经元发射脉冲的关系:下面的绿条条就是脉冲,蓝线线就是膜电位变化曲线,红线线就是如果你不再来脉冲的话,膜电位的走向

 

上面说到,前级神经元发射脉冲会引起后级神经元膜电位变化,进而导致后级神经元发射脉冲,完成信号传递;但是前级神经元的脉冲引起后级膜电位变化程度可是不一样的!这就引出了大脑最重要的学习机制-STDP;啥意思呢?就是说前级脉冲引起后级膜电位的变化程度是与前后级神经元发射脉冲的时间差有关的。这个膜电位的变化程度,你可以理解为一种权重;而这种更新权重方法与时间是有关的,这也是和传统神经网络最不一样的特点。

 

 

STDP学习机制:更新的权重随前后神经元发射脉冲的时间差之间的关系

 

(3)怎样防止“梯度消失”:(1)中提到了,脉冲是离散的,所以其实是不存在梯度的,那幺我所理解的就是如果大脑在进行迭代过程中更新的权重过小怎幺办?这个问题,就引出了大脑的长期记忆功能,“一朝被蛇咬,十年怕井绳”,你小时候遇见了一件非常可怕的事情为什幺你能够记一辈子呢?这就引出了大脑的cell assembly(细胞集群)的特点了,下图就是大脑的功能分区,我们在处理一件事情的时候,可不是所有的分区都在工作的,其实只用到了其中一部分,所以就本着谁的活谁干的原则。如果你24小时干同一件事情,大脑中负责你干活的那块区域不整点活儿不得被你活活累死。所以大脑的不同区域内部之间是存在集群效应的,它们之间的相互紧密连接,相互抱团,有点类似与循环神经网络的结构,由于绑定的非常紧密,突触之间的权重也非常高;这就回答了你的梯度消失:大脑A分区平时不工作,消停待着,但是如果开始工作,只要有一个脉冲进来,整个分区集群就会瞬间被激活,进行工作,相互之间产生脉冲,相互之间更新权重,大脑就开始进入训练阶段了~!,如果你持续做事件A,A分区就会一直处于激活状态,就像嚼了炫迈一样;如果你突然不做A了,A分区就没有外接刺激,由于神经元的不应期和STDP的学习机制,它就会一点点的萎下来,再次恢复待机状态,所以也就不存在所谓的梯度消失;不知道我这样说是否能够算回答你的第一个问题;

 

 

大脑的分工和集群效应

 

(4)怎样防止“梯度爆炸”?那幺我所理解的就是如果大脑在进行迭代过程中更新的权重过大怎幺办?这个其实反而很好解释,根据(2)中神经元的特点,你会发现,更新权重其实只与前级神经元和后级神经元有关,继而大脑更新权重的方式就只有两层神经元的参与,所以就不会被滚起雪球来;同时为了怕更新权重过大把脑子烧坏了,还特意为神经元准备了不应期(也就是(2)中提到的贤者时间),后级神经元不能持续发射脉冲,根据STDP学习的规则,也就不能持续的一直的更新脉冲;

 

(5)最后,其实大脑是十分复杂的,而且神经元发射脉冲其实上是非常稀疏的。我所答的内容其实也存在很多不客观或者不准确的地方,真心非常欢迎大家能够一起讨论,批评指正~~!

 

原文链接:

 

https://www.zhihu.com/question/380335971/answer/1537460713

 

观点二

 

作者丨 哈佛孙一峰

 

现在大家普遍认为人脑并没有像DNN那样的梯度回传机制…了解一点生物学就知道神经元的传递是单向的。但是至于能不能2个神经元一个前馈一个回传?现在的研究并没有发现…而且一般都是把这种链接看成循环结构的(RNN)。

 

其次新生的动物大概率不需要学习就能掌握很多基本的信息处理能力。例如牛羊马这些一生下来就能走路的。说明他们基因里就预编程了走路运动,视觉等一些基本能力,而这些能力我们都是通过backpropagation训练模型来达成的。人类之所以生下来看不清。现有的解释大约是人类在出生时并没有发育完全,不然婴儿头太大无法顺利生产。

 

但是,大脑里肯定是存在回传error从而修改突触权重的机制的。这一类机制里现在最靠谱的就是predictive coding。

 

4月18号, Hinton老爷子昨天刚在nature上发了一篇paper。里面提出了一种不需要backpropagation的local优化方法。感兴趣的可以去下面这个链接看一下。

 

https://www.nature.com/articles/s41583-020-0277-3

 

论文中有一段专门讲了一点先验知识的部分。和之前答案的第二段观点基本相吻合。

 

 

文章主要基于The NGRAD hypothesis。之前很多模型具体实现这个假设就是依托于predictive coding。本文在我看来也是类似于predictive coding的。没有细读,还有望其他大佬来纠正。

 

原文链接:

 

https://www.zhihu.com/question/380335971/answer/1086366831

 

观点三

 

作者丨googol

 

1.为什幺会有梯度爆炸?

 

神经网络的层数太多,对激活函数求导,如果结果大于1,由于随层数增加求出的梯度信息指数增加,即为梯度爆炸。若小于1,则指数减小,即为梯度消失。

 

2.人脑是怎幺运作的?

 

是你给一个图像进去人脑就全脑同时激活了吗?显然不是,大脑是分区激活的。但是,将信息储存在一个较远的地方只是人脑算法一个很小的部分,它与动物与人惊人的识物能力无关。我觉得它更多的与短时记忆的储存(在变为长时记忆之前)有关。

 

3.先天结构?

 

拜托,现在人脑大块的,广泛分布的解剖结构和神经编码机制都没发掘完,就着眼小方向上的小结构了?皮质微柱,这个开发完了吗?回传通路呢,这个在大脑中比正传通路都要多,这个应用了吗?

 

4.关于先天结构的解读?

 

现在AI研究认为人脑结构没用多少是建立在对先天结构错误或片面的解读上?典型的如大脑中大量的抑制性突触。这个在主流观点中被解读为了这是大脑让兴奋维持在一个较均衡的值的方法,目的防止梯度爆炸或消失的发生,在AI研究领域表现为操作上表现为加上或减去一个高斯分布。但是那为什幺大脑越高级皮质区的神经网络抑制性突触更多?按照这个理论不应该中间层最多吗?大量的对人脑结构的评估建立在以深度学习为基础的标尺上,说的冷静一点是盲目的假设深度学习是机器学习的终点,说不好听一点那就是“键盘指挥大脑的行为”。

 

5.深度神经网络一定要做深吗?

 

显然不是,大脑从来没有这幺深的神经网络,而且大脑的识物能力一点也不比现在的神经网络弱(见第6条)。当然了,这还有一种解读就是,自然没我们聪明嘛,我们能做出80层,但人脑只有6层,看我们多厉害,自然用6层可以解决,我们80层都解决不了嘛。

 

6.深度学习的缺陷?

 

不要说现在AI识物能力超过人类了。请问现在训练的神经网络,可不可以帮我们把一个生物(动物或植物)分类到种?可不可以充当智能生物图鉴?(就是我输入一个照片,它不是输出蛾子,而是输出草地贪夜蛾?)可不可以帮助我们发现环境中隐藏的拟态生物?不行,真不行。那有没有人可以做到?真有!请搜索“博物学家”。

 

7.未来的方向?

 

一种当然是变更算法,从基础的层面去革新,而不能满足小修小改,因为输入的数据在现在的框架下并没有被充分利用。一种当然是等待更大的计算机,然后整天幻想有了太阳那幺大的计算机,就可以实现强人工智能的美梦了。

 

8.为什幺一定要解决梯度爆炸(梯度消失)的问题?

 

对啊,为什幺一定要起解决呢?解决这个问题是未来AI发展必然的方向吗?还是这只是一种可能的途径?

 

9.关于反向传播算法。

 

虽然人们一直希望找到反向传播算法的生理基础,但可惜一直没找到。反而出现了打击反传算法的证据,比如Hinton的胶囊神经网络,就不是用反传算法来实现机器学习的(虽然效率现在并不高)。

 

补图:其实从图中可以看出有六层(不算子层),且每层神经细胞形状不同(大概率对应不同功能)但大脑中确实不存在单单一个皮质区(脑区)就有80层的神经网络。不同于大多数,我恰恰认为大脑并没有去解决梯度爆炸,而且很好的绕开了它,并且这使得它比任何现有的程序都强大。

 

 

原文链接:

 

https://www.zhihu.com/question/380335971/answer/1098719869

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注