在线学习理论:后悔界分析

在线学习(Online Learning)是研究序列决策问题的理论框架,与强化学习有密切联系。1

问题框架

在线学习设置

在在线学习中,学习者在每个时刻 做出决策 ,然后收到损失 。目标是最小化累积损失后悔

累积损失

后悔(Regret):与最优固定策略的比较

与批量学习的对比

方面在线学习批量学习
数据流式、顺序到达一次性获取
目标最小化累积损失/后悔最小化期望损失
评估累积后悔泛化误差
适应能力

经典在线算法

Follow-the-Leader (FTL)

FTL算法在每个时刻选择历史累积损失最低的策略:

问题:FTL在某些情况下表现不稳定,可能过度适应最近的损失。

Follow-the-Regularized-Leader (FTRL)

FTRL在目标函数中添加正则化项:

其中 是正则化函数(通常选择强凸函数)。

常见正则化

正则化函数形式特点
正则化平滑、闭式解
正则化稀疏性
Entropy 正则化概率分布

指数加权平均 (EWA)

EWA维护一个策略的加权分布:

概率更新公式:

实现

import numpy as np
 
class ExponentialWeightedAverage:
    def __init__(self, n_actions, eta=0.1):
        self.n_actions = n_actions
        self.eta = eta
        self.loss_sum = np.zeros(n_actions)
        self.t = 0
    
    def select_action(self):
        # 计算权重
        weights = np.exp(-self.eta * self.loss_sum)
        weights /= weights.sum()
        return np.random.choice(self.n_actions, p=weights)
    
    def update(self, action, loss):
        self.loss_sum[action] += loss
        self.t += 1
    
    def get_distribution(self):
        weights = np.exp(-self.eta * self.loss_sum)
        return weights / weights.sum()

后悔界分析

后悔界的定义

后悔界 描述算法性能相对于最优策略的增长速度。

后悔级别后悔界意义
常数与固定最优策略同级别
对数极快的适应速度
次线性随时间推移后悔占比减少
线性最差情况

Hedge算法

Hedge算法是EWA的离散动作版本:

定理(Hedge后悔界):

最优学习率选择 可得:


对偶平均法 (Dual Averaging)

在线凸优化

当损失函数是凸函数时,可以使用对偶平均法(也称次梯度下降的在线版本)。2

更新公式

其中 是次梯度。

遗忘因子

引入遗忘因子


神经网络在线学习

元学习视角

将在线学习与元学习结合,神经网络可以快速适应新任务。3

基本框架

class MetaOnlineLearner:
    def __init__(self, model, lr=0.01, meta_lr=0.001):
        self.model = model
        self.lr = lr
        self.meta_lr = meta_lr
        self.optimizer = torch.optim.Adam(model.parameters(), lr=lr)
        self.task_losses = []
    
    def online_update(self, x, y):
        # 计算当前任务的损失
        loss = self.model.loss(x, y)
        
        # 一阶梯度更新
        grad = torch.autograd.grad(loss, self.model.parameters())
        with torch.no_grad():
            for p, g in zip(self.model.parameters(), grad):
                p -= self.lr * g
        
        self.task_losses.append(loss.item())
        
        # 元更新:调整学习率
        if len(self.task_losses) > 1:
            improvement = self.task_losses[-2] - self.task_losses[-1]
            self.lr = max(0.001, self.lr * (1 + self.meta_lr * improvement))
    
    def adapt_to_task(self, support_x, support_y):
        """在支持集上快速适应"""
        for _ in range(5):
            loss = self.model.loss(support_x, support_y)
            grad = torch.autograd.grad(loss, self.model.parameters())
            with torch.no_grad():
                for p, g in zip(self.model.parameters(), grad):
                    p -= self.lr * g

持续适应能力

持续适应能力(Continual Adaptation)是评估在线学习算法的重要指标。

评估指标

指标定义
遗忘率在旧任务上性能的下降
前向迁移在新任务上利用旧知识
后向迁移改善旧任务的性能

与强化学习的联系

Bandit问题

MAB问题是在线学习的一个特例:

优化累积奖励等价于最小化负奖励。

上下文老虎机

上下文老虎机可以形式化为在线凸优化:


实践指南

学习率选择

场景建议学习率
Hedge (有限动作)
FTRL (凸函数)
神经网络自适应学习率 (Adam等)

梯度裁剪

为防止梯度爆炸,可以使用梯度裁剪:

torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

参考资料


相关链接

Footnotes

  1. Cesa-Bianchi & Lugosi, “Prediction, Learning, and Games”, 2006

  2. Shalev-Shwartz, “Online Learning and Online Convex Optimization”, Foundations and Trends in Machine Learning, 2012

  3. Finn et al., “Meta-Learning and Universally Weighted Optimization”, arXiv, 2017