概述: EWC 通过在损失函数中添加一个正则化项,防止重要参数偏离先前任务的最优值。这个正则化项基于费舍尔信息矩阵,衡量每个参数对先前任务的重要性。
公式:
其中 是费舍尔信息矩阵, 是旧任务的最优参数。
代码示例:
pythonimport torch
def ewc_loss(new_loss, model, fisher_matrix, old_params, lambda_ewc):
ewc_penalty = 0
for param, fisher, old_param in zip(model.parameters(), fisher_matrix, old_params):
ewc_penalty += torch.sum(fisher * (param - old_param).pow(2))
return new_loss + (lambda_ewc / 2) * ewc_penalty
概述: 渐进神经网络通过为每个新任务引入新的网络模块,同时保持旧模块不变。新模块通过侧向连接利用旧模块的知识。
代码示例:
pythonclass ProgressiveNN:
def __init__(self, task_modules):
self.task_modules = task_modules
def add_task(self, new_module):
self.task_modules.append(new_module)
def forward(self, x, task_id):
return self.task_modules[task_id](x)
概述: 知识蒸馏使用旧模型的输出作为软标签来训练新模型,从而保留旧任务的知识。
公式:
其中 是基于旧模型输出的损失。
代码示例:
pythondef distillation_loss(student_logits, teacher_logits, temperature, alpha):
soft_loss = torch.nn.functional.kl_div(
torch.nn.functional.log_softmax(student_logits / temperature, dim=1),
torch.nn.functional.softmax(teacher_logits / temperature, dim=1),
reduction='batchmean'
) * (temperature ** 2)
return alpha * soft_loss
概述: 通过引入外部记忆模块,模型可以在训练新任务时访问旧任务的数据或特征。
概述: 同时训练多个任务,确保模型在学习新任务时不会遗忘旧任务。
概述: 在训练新任务时,定期回放旧任务的数据,以帮助模型保持对旧任务的记忆。
概述: 在损失函数中加入正则化项,限制模型参数的变化,以减少对旧任务的遗忘。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!