赞
踩
1.ref:https://blog.csdn.net/zyy617532750/article/details/104217399
我们人类有能够将一个任务的知识用到另一个任务上的能力,学习后一个任务时也不会忘记如何做前一个任务。这种能力叫持续学习 (continual learning/ life-long learning) 。而这个能力归结起来主要有两个问题:
如何能把之前任务的经验用上,使得更快更好的学习当前任务;
学习当前任务时,不会忘记之前已经学会的任务。
用更专业的术语来讲就是可塑性(学习新知识的能力)和稳定性(旧知识的记忆能力)。
可是,神经网络不同于人类,由于其自身的设计天然存在灾难性遗忘问题。当学习一个新任务的时候,需要更新网络中的参数,但是上一个任务提取出来的知识也是储存在这些参数上的呀。于是,神经网络在学习新任务的时候,旧任务的知识就会被覆盖。
1.提高模型准确性和鲁棒性的一个利器
网络中有非常多的连接,我们在每一次参数更新的时候,随机的对这些连接做mask,mask掉的权重参数置零,不参与网络更新。dropout可以理解成一个简易的assemble,每次更新一个子网络,最终的预测结果是所有子网络预测的均值。
dropout强迫网络把每一层的模式相对均匀的记忆在各个神经元中(不加dropout时容易导致网络退化,一层中的神经元可能真正起作用的只有几个)。这样相当于增加了模型的鲁棒性,后续任务对其中的小部分神经元破坏时,不会影响整体的输出结果,对比之下,如果不加dropout,那么一旦关键的神经元被后续任务破坏,则前面的任务就完全崩了。使用dropout训练的模型size远大于不加dropout的模型大小。
当前主流的针对神经网络模型的持续学习方法可以分为以下五类:
Regularization
在网络参数更新的时候增加限制,使得网络在学习新任务的时候不影响之前的知识。这类方法中,最典型的算法就是EWC。
Ensembling
当模型学习新任务的时候,增加新的模型(可以是显式或者隐式的方式),使得多个任务实质还是对应多个模型,最后把多个模型的预测进行整合。增加子模型的方式固然好,但是每多一个新任务就多一个子模型,对学习效率和存储都是一个很大的挑战。google发布的PathNet是一个典型的ensembling算法。
Rehearsal:
这个方法的idea非常的直观,我们担心模型在学习新任务的时候忘了旧任务,那么可以直接通过不断复习回顾的方式来解决呀(ง •_•)ง。在模型学习新任务的同时混合原来任务的数据,让模型能够学习新任务的同时兼顾的考虑旧任务。不过,这样做有一个不太好的地方就是我们需要一直保存所有旧任务的数据,并且同一个数据会出现多次重复学习的情况。其中,GeppNet是一个基于rehearsal的经典算法。
Dual-memory:
这个方法结合了人类记忆的机制,设计了两个网络,一个是fast-memory(短时记忆),另一个slow-memory(长时记忆),新学习的知识存储在fast memory中,fast-memory不断的将记忆整合transfer到slow-memory中。其中GeppNet+STM是rehearsal和dual-memory相结合的一个算法。
Sparse-coding:
灾难性遗忘是因为模型在学习新任务(参数更新)时,把对旧任务影响重大的参数修改了。如果我们在模型训练的时候,人为的让模型参数变得稀疏(把知识存在少数的神经元上),就可以减少新知识记录对旧知识产生干扰的可能性。Sensitivity-Driven是这类方法的一个经典算法。
这个方法的idea确实是挺合理的,当有效知识储存在少数的节点上,那么新知识我们就大概率可以存储在空的神经元上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。