神经网络可以很容易地学习复杂的表示。然而,在一些任务中,新的数据(或数据的类别)在不断变化。例如,你可以训练一个网络来识别8种不同类型的猫的图片。但在未来,你可能想要把图片数量改变为12种。网络需要不断地学习新的数据的过程,就会被称为“持续学习”。
左:选择性训练 中:动态扩展 右:网络分割
有选择性的再训练
训练一个新模型的最简单的方法是在每次新任务到来时对整个模型进行训练。然而,由于深度神经网络可以变得非常大,这种方法也会变得非常昂贵。
为了避免这样的问题,在第一个任务中,模型采用L1正则化训练。这确保了网络中的稀疏,也就是说,只有一些神经元与其他神经元相连。你们马上就会明白为什么这样做是有用的。
初始任务的损失函数
W^t表示在时间t上模型的权值,这种情况下,t=1。D_t表示在时间t上训练数据。这个方程的右半部分,从μ开始,就是L1正则化项,μ是正则化强度。L表示网络从第一层到最后一层的各个层。该规则试图使模型的权重接近(或等于)零。
l1和l2的正则化相关内容,你可以从这里阅读:http://cs231n.github.io/neural-networks-2/#reg
当需要学习下一个任务时,一个稀疏的线性分类器被安装到模型的最后一层,然后网络就可以被训练使用:
为下一个任务训练网络
这个数学符号意味着除了最后一层以外的所有层的权重。所有的这些层(从第一个到最后一个)都是固定的,而新添加的层是用相同的l1正则化来优化的,从而促进稀疏的连接。
构建这种稀疏的连接有助于识别那些在模型其他部分受到影响的神经元。这一发现是通过广度优先搜索(Breadth First Search)完成的,它是一种非常流行的搜索算法。然后,只有那些权重可以被更新,节省了大量的计算时间,而没有连接的权重也不会被触及。当在旧任务上的表现降低时,这种办法也有助于防止消极学习。
动态网络的扩展
有选择性的再训练与更旧的任务高度相关。但是,当更新的任务有相当不同的分布时,它的训练就会开始失败。可以使用另一种技术来确保更新的数据可以通过增加网络的容量来表示。通过增加额外的神经元来做到这一点。
假设你希望通过k个神经元来扩展网络的第l层。这一层(和前一层)的新权重矩阵将看上去有些维度:
是在增加了k个神经元之后的神经元总数。
通常,我们不想增加k个神经元。我们只希望网络能够计算出正确的神经元数量。幸运的是,已经有一种现有的技术,使用Lasso来规范网络,使其拥有稀疏的权重(然后可以被删除)。这一技术在“对于深神经网络的Group Sparse正则化”这篇论文中得到了详细的描述。论文地址:https://arxiv.org/pdf/1607.00485.pdf
在一个层上使用Lasso会得到这样的结果(Group Lasso是被使用的技术):
网络分割/复制
在转移学习中有一个常见的问题,叫做语义漂移(semantic drift),或者是catastrophic forgetting,catastrophic forgetting的模型会慢慢地改变了它的权重,以至于忘记了最初的任务。
虽然它可以添加l2正则化确保权重不会发生显著变化,但如果新任务非常不同的话(模型在某个点之后就会失败),那么它就不会有帮助。
相反,如果它们在一定范围内移动的话,那么最好就要复制神经元。如果神经元的值超过一定的值,就会产生一个神经元的副本,并随之产生一个分裂,然后这个复制的单元被作为副本添加到同一层。
具体来说,对于一个隐藏的单元i,如果新权重和旧权值( ρ_i)之间的l2距离(i)是大于的,那么就会产生分裂。是一个超参数。在分割之后,整个网络将需要重新训练,但是收敛速度很快,因为初始化不仅是随机的,而且有一个合理的最优值。
训练和评估
三种数据集:
为了比较性能,我们使用了各种各样的模型。它们分别是:
第一行:每个任务的平均性能 第二行:网络容量的性能。