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

来源丨知乎问答

编辑丨极市平台

文授权自知乎,仅学术分享,著作权归作者所有

观点一

作者丨冒蓝火的加特林

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

(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

<think>好的,用户现在问的是模型剪枝的原理、方法步骤。之前他们问过梯度消失爆炸的问题,现在转向模型压缩技术,可能是在学习深度学习优化或部署相关的知识。用户可能是学生、研究人员或者工程师,想了解如何让模型更高效。 首先,我需要确定模型剪枝的基本概念。剪枝是为了减少模型大小计算量,去除冗余参数。原理方面,得提到减少冗余参数,保持性能。可能要从人脑神经网络的稀疏性类比,或者模型过参数化的角度解释。 然后方法部分,用户可能需要分类,比如非结构化剪枝结构化剪枝。非结构化是去掉个别权重,结构化是去掉整个通道或层。得举例子,比如基于权重大小的剪枝,或者基于敏感度的逐层剪枝。还要提到自动化的方法,比如AutoML或强化学习应用。 步骤的话,通常包括训练原始模型、评估参数重要性、剪枝、微调、迭代。可能需要详细说明每一步,比如评估重要性可以用梯度、贡献度等指标。微调的重要性,恢复模型性能。 还要考虑用户可能的深层需求,比如实际应用中的挑战,比如如何平衡剪枝率准确率,不同框架的支持情况,或者剪枝后的部署问题。是否需要提到工具库,如TensorFlow的模型优化工具包或PyTorch的剪枝库? 要确保回答结构清晰,按照原理、方法、步骤分点。避免使用过于专业的术语,但需要准确。可能用户想知道具体如何实施,所以步骤部分要详细,可能给出例子,比如使用L1范数剪枝。 检查之前的回答格式,用户喜欢分点,有公式的地方用$$,所以如果有公式,比如剪枝的数学表达式,需要正确使用LaTeX。但模型剪枝可能更多是流程性的内容,公式可能较少,不过如果有阈值设定之类的,可以加入。 需要确认信息准确性,比如Xavier初始化在剪枝中是否相关?可能不相关,剪枝更多是修剪参数,而初始化是训练开始时的步骤。但可能需要提到再训练时的权重初始化? 最后总结应用场景,比如移动端、IoT设备,或者实时推理需求。帮助用户理解剪枝的实际意义。</think>### 模型剪枝详解 #### 一、基本原理 **模型剪枝**(Model Pruning)通过移除神经网络中冗余参数或结构,实现**模型轻量化**,同时尽可能保持模型性能。其核心思想源于两个观察: 1. **过参数化现象**:神经网络通常存在大量对最终输出影响极小的参数。 2. **稀疏性潜力**:人脑神经网络的激活模式具有稀疏性,类似原理可迁移到人工网络。 数学表达上,剪枝可定义为: $$ W_{\text{pruned}} = W \odot M $$ 其中$M$为二进制掩码矩阵,$M_{ij}=0$表示对应权重$W_{ij}$被移除,$\odot$为逐元素乘法。 --- #### 二、主要方法分类 根据剪枝粒度可分为以下两类: ##### 1. **非结构化剪枝**(Unstructured Pruning) - **特点**:移除单个权重(细粒度),生成稀疏矩阵。 - **方法**: - **基于权重大小**:移除绝对值小于阈值$\theta$的权重(如$|W_{ij}| < \theta$)。 - **基于梯度敏感度**:通过损失函数对权重的二阶导数(Hessian矩阵)评估重要性。 ##### 2. **结构化剪枝**(Structured Pruning) - **特点**:移除整组参数(如神经元、通道或层),直接改变网络结构。 - **方法**: - **通道剪枝**:移除输出通道数(如CNN中删除卷积核)。 - **层剪枝**:删除冗余层(如ResNet中的残差块)。 - **基于重要性评分**:使用$L_1$-Norm评估通道重要性,公式为: $$ s_j = \sum_{i=1}^{C_{\text{in}}}} |W_{ij}| $$ 移除评分最低的通道。 --- #### 三、通用实施步骤 1. **训练原始模型** - 完成常规训练流程,获得基准模型精度。 - *关键点*:使用正则化(如L2正则)鼓励参数稀疏性。 2. **评估参数重要性** - **非结构化剪枝**:统计权重绝对值分布,设定阈值$\theta$(例如保留前$k\%$大权重)。 - **结构化剪枝**:计算通道/层的贡献度指标(如APoZ*激活率为零的比例*)。 3. **执行剪枝操作** - 按预设剪枝率(如移除50%参数)生成掩码矩阵$M$。 - *示例代码(PyTorch)*: ```python prune.l1_unstructured(module, name='weight', amount=0.5) ``` 4. **微调(Fine-tuning)** - 对剪枝后模型进行再训练,恢复性能损失。 - *技巧*:使用更小的学习率余弦退火策略。 5. **迭代剪枝** - 重复步骤2-4,逐步提高剪枝率,避免一次性剪枝过多导致模型崩溃。 --- #### 四、进阶技术 1. **自动化剪枝** - **AutoML方法**:使用强化学习或进化算法搜索最优剪枝策略。 - **动态剪枝**:训练过程中动态调整剪枝率(如[SNIP](https://arxiv.org/abs/1810.02340)算法)。 2. **硬件友好设计** - **块稀疏化**:将非结构化稀疏转换为硬件可加速的块结构(如4x4块)。 - **量化协同优化**:结合8-bit量化进一步提升压缩效率。 --- #### 五、典型工具库 | 工具名称 | 框架支持 | 核心功能 | |---------------|----------------|------------------------------| | TensorFlow Model Optimization | TensorFlow | 结构化/非结构化剪枝 | | Torch Pruning | PyTorch | 通道剪枝、依赖关系分析 | | NNI(Neural Network Intelligence) | 多框架 | 自动化剪枝策略搜索 | --- #### 六、应用场景 - **移动端部署**:将ResNet-50压缩至3MB以下,满足手机端实时推理。 - **边缘计算**:在Jetson Nano等设备上运行轻量级目标检测模型。 - **大模型压缩**:对GPT-3等模型进行稀疏化,降低推理成本。 --- **注**:剪枝效果需通过**帕累托前沿分析**(模型大小 vs 精度)评估,实际应用中常与量化、知识蒸馏等技术联合使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值