1 介绍
年份:2024
期刊:Nature
Dohare S, Hernandez-Garcia J F, Lan Q, et al. Loss of plasticity in deep continual learning[J]. Nature, 2024, 632(8026): 768-774.
本文提出的算法是“持续反向传播”(continual backpropagation),其关键步骤的技术原理是在标准的反向传播算法基础上,持续地、随机地重新初始化网络中一小部分使用最少的单元,以维持网络的多样性和可塑性。根据单元的贡献度(contribution utility)来选择重新初始化的单元。贡献度是通过计算单元的输出和其权重的乘积的绝对值来衡量的。
2 创新点
- 持续反向传播算法:提出了一种新的持续反向传播算法,该算法通过在每次迭代中随机重新初始化一小部分使用最少的单元,来维持网络的可塑性和多样性。
- 解决可塑性丧失问题:在深度连续学习环境中,标准深度学习方法会逐渐失去可塑性,本文的算法有效地解决了这个问题,使得网络能够在持续学习中保持性能。
- 实验验证:通过在ImageNet、CIFAR-100等经典数据集上的广泛实验,验证了持续反向传播算法在监督学习和强化学习问题中维持可塑性的能力。
- 对比分析:将提出的算法与传统反向传播、L2正则化、Shrink and Perturb等方法进行了对比,展示了其在维持网络可塑性方面的优势。
- 理论联系实际:文章不仅提出了理论算法,还将其实现在多种深度学习网络和学习算法中,证明了其广泛的适用性和有效性。
- 深入分析损失可塑性的原因:文章探讨了损失可塑性背后的几个可能原因,包括网络单元的死亡、权重大小的持续增长以及表示的低有效秩,并针对这些原因提出了解决方案。
- 开放资源:提供了实验数据和代码的公开访问,促进了研究的透明度和可重复性。
3 算法
3.1 算法原理
持续反向传播算法(Continual Backpropagation)是在标准反向传播算法的基础上进行的改进,其主要目的是在深度连续学习中维持网络的可塑性。算法的关键步骤如下:
- 初始化:网络的权重在训练开始前进行随机初始化。
- 前向传播:输入数据通过网络进行前向传播,计算预测值。
- 计算损失:根据预测值和真实值计算损失函数。
- 反向传播:根据损失函数对网络的权重进行反向传播,计算梯度。
- 权重更新:使用梯度下降方法更新网络的权重。
- 持续注入随机性:在每次迭代中,随机选择一小部分使用最少的单元进行重新初始化,以维持网络的多样性。
- 选择重新初始化的单元:根据单元的贡献度(contribution utility)来选择重新初始化的单元。贡献度是通过计算单元的输出和其权重的乘积的绝对值来衡量的。
- 保护新单元:新初始化的单元在一定数量的迭代内不会被再次重新初始化,以保护其不被立即覆盖。
- 重复:重复步骤2到8,直到训练结束。
3.2 算法步骤
- 初始化:随机初始化网络的权重 w 0 , w 1 , … , w L − 1 w_0, w_1, \ldots, w_{L-1} w0,w1,…,wL−1,其中 w l w_l wl是第 l l l层的权重。同时初始化每个单元的贡献度 u 1 , u 2 , … , u L − 1 u_1, u_2, \ldots, u_{L-1} u1,u2,…,uL−1为0。
- 前向传播:对于每个输入 x t x_t xt,进行前向传播以得到预测值 y t ′ y_t' yt′。
- 计算损失:根据预测值 y t ′ y_t' yt′和真实值 y t y_t yt计算损失函数 L ( x t , y t ) L(x_t, y_t) L(xt,yt)。
- 反向传播:根据损失函数 L ( x t , y t ) L(x_t, y_t) L(xt,yt)对网络的权重进行反向传播,计算梯度。
- 权重更新:使用梯度下降方法更新网络的权重:
w l = w l − α ⋅ ∂ L ∂ w l w_l = w_l - \alpha \cdot \frac{\partial L}{\partial w_l} wl=wl−α⋅∂wl∂L
其中, α \alpha α是学习率。
- 持续注入随机性:在每次迭代中,随机选择一小部分使用最少的单元进行重新初始化。具体步骤如下:
- 对于每一层 l l l,计算每个单元的年龄 a l a_l al。
- 找出年龄大于成熟阈值 m m m的单元,即成熟单元。
- 从成熟单元中随机选择 ρ ⋅ n l \rho \cdot n_l ρ⋅nl个单元进行重新初始化,其中 n l n_l nl是第 l l l层的单元数, ρ \rho ρ是替换率。
- 重新初始化这些单元的权重为0,并将它们的贡献度 u l u_l ul和年龄 a l a_l al重置为0。
- 贡献度更新:对于每个单元,根据其输出和权重的乘积的绝对值更新其贡献度:
u l [ i ] = η ⋅ u l [ i ] + ( 1 − η ) ⋅ ∣ h l [ i ] ⋅ w l + 1 [ i , k ] ∣ u_l[i] = \eta \cdot u_l[i] + (1 - \eta) \cdot \left| h_l[i] \cdot w_{l+1}[i, k] \right| ul[i]=η⋅ul[i]+(1−η)⋅∣hl[i]⋅wl+1[i,k]∣
其中, h l [ i ] h_l[i] hl[i]是第 l l l层第 i i i个单元的输出, w l + 1 [ i , k ] w_{l+1}[i, k] wl+1[i,k]是连接第 l l l层第 i i i个单元到第 l + 1 l+1 l+1层第 k k k个单元的权重, η \eta η是贡献度的衰减率。
- 重复:重复步骤2到7,直到训练结束。
4 实验分析
随着任务数量的增加,传统反向传播算法的性能逐渐下降,表明了可塑性丧失。这意味着网络在连续学习新任务时,其学习能力逐渐减弱。
比较了本文算法持续反向传播(Continual Backpropagation)、L2正则化和Shrink and Perturb算法在相同连续学习任务中的表现。
标准PPO(Proximal Policy Optimization)学习算法在非静态蚂蚁问题上的表现。图中还展示了对PPO优化器(Adam)进行特别调整后的表现,以及添加持续反向传播或L2正则化后的表现。标准PPO算法在非静态蚂蚁问题上表现灾难性,即随着时间的推移,其性能急剧下降。对PPO的Adam优化器进行特别调整可以减轻这种失败,但并不能完全解决问题。添加持续反向传播或L2正则化是必要的,以确保算法能够长期保持良好的性能。
-
现有方法的局限性:
- 流行的深度学习方法(如Adam、Dropout和归一化)实际上增加了可塑性的损失。
- Adam优化器:Adam优化器是一种自适应学习率的优化算法,它结合了Momentum和RMSprop的特点。然而,文章中提到,Adam优化器在连续学习任务中可能会导致网络快速失去多样性,表现为有效秩的显著下降和死单元(即在所有样本中输出始终为零的单元)的增加,这些都是可塑性损失的标志。
- Dropout正则化:Dropout是一种常用的正则化技术,通过在训练过程中随机丢弃(即设置为零)一部分神经元的输出,以减少过拟合。但文章中指出,Dropout在某些情况下可能会加剧可塑性损失,尤其是在较高的Dropout率下,可能会导致网络中的一些单元在面对新任务时无法恢复活力。
- 归一化技术:归一化技术(如Batch Normalization)通过规范化层的输出来减少内部协变量偏移,加速训练过程。尽管归一化在初始任务中可能表现出较好的性能,但文章发现,在连续学习环境中,归一化技术可能会导致网络在后期任务中性能下降,这可能是因为归一化层在面对新任务时无法适应数据分布的变化。
-
L2正则化的作用:
- L2正则化通过惩罚大权重来减少可塑性损失,防止权重过大,从而保持网络的可塑性。
-
Shrink and Perturb方法:
- Shrink and Perturb通过缩小权重并添加随机噪声来减少可塑性损失,增加了网络的多样性。
-
持续反向传播算法:
- 提出了一种新的持续反向传播算法,通过在训练过程中重新初始化一小部分使用最少的单元来维持网络的可塑性。
-
持续反向传播的效果:
- 持续反向传播在多个任务中表现出色,几乎没有可塑性损失,并且能够在整个学习过程中保持高稳定秩和低死单元比例。
-
小权重与可塑性:
- 发现保持小权重的算法(如持续反向传播、L2正则化和Shrink and Perturb)能够减少可塑性损失。
-
随机性注入:
- 注入随机性(如持续反向传播和Shrink and Perturb)可以提高网络的有效秩和降低死单元数量,从而提高性能。
-
选择性重新初始化的优势:
- 持续反向传播选择性地重新初始化单元,这比全面重新初始化更有效,因为它可以利用已有的学习成果来加速新任务的学习。
-
算法的适应性:
- 持续反向传播算法能够适应不同的替换率,并且对于维持可塑性具有较宽的适用范围。
5 思考
(1)本文中如何评价学习能力?如何评价可塑性?
- 学习能力的评价:
- 正确分类的百分比:在监督学习任务中,通过测量测试集上正确分类的图像百分比来评估网络在每个任务上的学习能力。
- 累积奖励:在强化学习任务中,使用累积奖励作为主要性能度量,即在一系列动作中,代理获得的总奖励。
- 性能比较:将连续学习(增量学习)的网络性能与从头开始训练的网络性能进行比较,以评估学习能力。
- 可塑性的评价:
- 性能下降:可塑性丧失表现为随着任务的增加,网络性能的下降。如果网络在后续任务中的表现不如早期任务,这直接表明了可塑性的丧失。
- 单位活跃度:通过测量网络中活跃度低于1%的单元数量的增加来评估可塑性。如果许多单元变得不活跃或冗余,这表明网络的可塑性在下降。
- 稳定秩:通过计算网络表示的稳定秩来评估可塑性。稳定秩低意味着网络单元不提供多样性,这与可塑性丧失有关。
- 权重大小:通过监测网络权重的平均大小来评估可塑性。权重的持续增长可能与可塑性丧失有关,因为大的权重可能导致学习速度变慢。
- 算法比较:通过比较不同算法(如标准反向传播、L2正则化、Shrink and Perturb、持续反向传播)在连续学习任务中的表现,来评估它们维持可塑性的能力。
(2)在网络结构中哪些部分实现重更新初始化?
- 识别低效单元:
- 算法会监测网络中每个单元的贡献度(contribution utility),这是一个衡量单元对其下游消费者重要性的指标。贡献度低的单元被认为是低效的。
- 选择性重初始化:
- 只有那些成熟(即经过一定数量的更新迭代)且贡献度低的单元会被选中进行重初始化。这样做是为了保护新加入的单元不被立即重置,因为它们需要时间来成熟并展示其价值。
- 重初始化过程:
- 对于被选中的单元,其输入权重会被重新从初始分布中采样,而输出权重则被设置为零。这样做是为了确保重新初始化的单元不会立即影响网络已经学到的功能。
- 更新单元状态:
- 重初始化的单元的贡献度和年龄会被重置,以便它们可以重新开始学习和适应新的任务。
- 网络层级:
- 重初始化可以在网络的任何层级进行,但通常关注那些对最终输出影响最大的单元,这些单元通常位于网络的较深层。
- 替换率(Replacement Rate):
- 算法中有一个参数称为替换率(ρ),它控制着在每次迭代中被重初始化的单元的比例。这个比例通常设置得非常小,意味着在大量的更新迭代中只有极少数单元会被替换。
(3)如何计算神经元贡献度?
- 定义贡献度:
- 对于第 l l l层的第 i i i个单元,其贡献度 u l [ i ] u_l[i] ul[i]是其所有输出连接的贡献度之和。
- 计算每个连接的贡献度:
- 每个连接的贡献度是单元的输出和其权重的乘积的绝对值。对于连接第 l l l层第 i i i个单元到第 l + 1 l+1 l+1层第 k k k个单元的权重 w l + 1 [ i , k ] w_{l+1}[i, k] wl+1[i,k],其贡献度为:
∣ h l [ i ] ⋅ w l + 1 [ i , k ] ∣ \left| h_l[i] \cdot w_{l+1}[i, k] \right| ∣hl[i]⋅wl+1[i,k]∣
其中, h l [ i ] h_l[i] hl[i]是第 l l l层第 i i i个单元的输出。
- 更新贡献度:
- 贡献度是一个运行平均值,使用衰减率 η \eta η来更新。对于第 l l l层的第 i i i个单元,其贡献度 u l [ i ] u_l[i] ul[i]在时间 t t t的更新公式为:
u l [ i ] = η ⋅ u l [ i ] + ( 1 − η ) ⋅ ∑ k = 1 n l + 1 ∣ h l [ i ] ⋅ w l + 1 [ i , k ] ∣ u_l[i] = \eta \cdot u_l[i] + (1 - \eta) \cdot \sum_{k=1}^{n_{l+1}} \left| h_l[i] \cdot w_{l+1}[i, k] \right| ul[i]=η⋅ul[i]+(1−η)⋅k=1∑nl+1∣hl[i]⋅wl+1[i,k]∣
其中, n l + 1 n_{l+1} nl+1是第 l + 1 l+1 l+1层的单元数。
- 初始化贡献度:
- 在训练开始时,所有单元的贡献度被初始化为0。
- 重初始化单元的贡献度:
- 当一个单元被重初始化时,其贡献度被重置为0。