模仿学习
概述
本部分来自李逸尘师兄的笔记。
模仿学习,指在有专家示范的情况下,从示范中模仿出专家策略。当前的模仿学习算法主要分为两大类(近年来,有学者尝试用更多思路来做模仿,参见5. 领域前沿),即行为克隆(Behavioral Cloning)和逆强化学习(Inverse Reinforcement Learning),前者用监督学习的思路来求解模范学习问题,后者先从专家示范中学出reward函数,然后用强化学习[1]求解。
特别地,我们通常用六元组 ⟨S,A,r,p0,γ,P⟩ 描述一个无限决策长度马尔可夫决策过程,其中 S 表示状态空间,A 表示动作空间,r 表示奖励函数,p0 表示初始时刻状态的分布,γ∈[0,1)为衰减因子,P 为环境的状态转移函数。在任意时刻 t≥0,t∈N,智能体感知到环境的状态 st ,然后执行动作 at∼π(⋅∣s),其中 π 为智能体的策略,继而环境转移到状态 st+1∼P(⋅∣st) ,同时智能体拿到 r(st,at) 的奖励。智能体的目标是学到期望累积奖励最大的策略π∗,即
π∗=π∈ΠmaxEπ[t=0∑∞γtr(st,at)]=π∈ΠmaxE(s0,a0,⋯)[t=0∑∞γtr(st,at)∣∣∣∣s0∼p0,at∼π(⋅∣st),st∼P(⋅∣st−1)]
其中Π表示智能体考虑的策略集合。
对于现实任务(例如自动驾驶)而言,奖励函数的定义并不简单,概括来说,一个“好的”奖励函数至少要满足以下几个条件,
- 正确表达出想要解决的任务,也即累积奖励最大的策略要对应完成任务的最优策略;
- 方便策略优化,不同的奖励函数可能在理论上都能得到相同的最优策略,但是就实际应用来说,在不同的奖励函数下,策略优化的难度是不同的,比如稀疏奖励下,策略优化往往要比稠密奖励下更困难;
- 能被快速准确地计算,在训练阶段,智能体每一时刻都要拿到环境的奖励,如果奖励函数不能被准确计算或者计算起来很慢,那么整个训练阶段就会非常低效。
考虑到上述几个条件,要得到一个“好的”奖励函数,不仅需要知道对应任务的领域知识,还需要一定的强化学习背景。而模仿学习考虑的问题设定则是:没有奖励函数,但是有专家示范(expert demonstrations),如何从示范中模仿出专家策略。
Mathematical Formalization of Behavioral Cloning and Inverse Reinforcement Learning
特别地,用πE表示专家策略,πI表示模仿策略,对于任意策略π∈Π,定义其状态访问分布dπ:S→[0,1]和状态-动作访问分布ρπ:S×A→[0,1]分别如下,
dπ(s)=(1−γ)t=0∑∞γtPr(st=s;π)
ρπ(s,a)=(1−γ)t=0∑∞γtPr(st=s,at=a;π)
行为克隆 行为克隆用监督学习的思路来求解模仿学习问题,形式化地讲,对于任意状态s∈S,行为克隆最小化专家策略πE的动作分布πE(⋅∣s)和模仿策略πI的动作分布πI(⋅∣s)之间的Kullback–Leibler(KL)散度,即
πI∈ΠminEs∼dπE[DKL(πE(⋅∣s),πI(⋅∣s))]:=E(s,a)∼ρπE[log(πI(a∣s)πE(a∣s))]
逆强化学习 逆强化学习假设示范来自最优策略,于是先从示范中学出一个奖励函数,然后再在此奖励函数优化策略,形式化地讲,设R为奖励函数集合,则逆强化学习对应的优化目标如下
π∈Πmaxr∈RminEρπ[r(s,a)]−EρπE[r(s,a)]
更一般的,我们可以将逆强化学习中奖励学习问题建模为如下带约束优化问题:
r∈Rmaxτ∈DEmin(s,a)∈τ∑r(s,a)s.t.τ∈DEmin(s,a)∈τ∑r(s,a)≥τ∈DLmax(s,a)∈τ∑r(s,a)
其中:DE和DL分别表示专家数据集和任意一个其他策略roll out产生的轨迹集合。
备注:模仿学习跟监督学习的联系在于我们可以将专家示范中的动作视作对应状态下的标记,然后用监督学习来解模仿学习。事实上,可以证明,任意稳态策略都对应唯一的状态-动作访问分布,于是可以将 ρπ 对应监督学习中的数据的真实分布(ground truth);区别在于模仿学习本质上是一个多步最优决策问题,当前时刻的决策结果会影响后续时刻数据的分布,而监督学习假设数据是独立同分布的,当前的预测结果不会影响后续的预测。
共轭函数
以下内容由deepseek生成。
在数学中,特别是优化理论和凸分析中,共轭函数(Conjugate Function)是一个非常重要的概念。给定一个函数 ( f: \mathbb{R}^n \to \mathbb{R} ),其共轭函数 ( f^*: \mathbb{R}^n \to \mathbb{R} ) 定义为:
[
f^*(y) = \sup_{x \in \text{dom}(f)} \left( y^T x - f(x) \right)
]
其中,( \text{dom}(f) ) 表示函数 ( f ) 的定义域。
性质:
- 凸性:共轭函数 ( f^* ) 总是凸的,即使原函数 ( f ) 不是凸的。
- 对偶性:如果 ( f ) 是凸的且闭的(即 ( f ) 的定义域是闭集且 ( f ) 是下半连续的),那么 ( f^{**} = f )。
- Fenchel-Moreau定理:如果 ( f ) 是凸的且闭的,那么 ( f^{**} = f )。
下面是一个简单的Python代码示例,用于计算一个函数的共轭函数。我们使用 scipy.optimize
库来求解优化问题。
import numpy as np
from scipy.optimize import minimize
def conjugate_function(f, y, x0):
"""
计算函数 f 的共轭函数在 y 处的值。
参数:
f: 原函数,接受一个 numpy 数组 x 并返回一个标量。
y: 共轭函数的输入,numpy 数组。
x0: 优化问题的初始猜测,numpy 数组。
返回:
f^*(y) 的值。
"""
def objective(x):
return - (y @ x - f(x))
result = minimize(objective, x0, method='BFGS')
if result.success:
return -result.fun
else:
raise Exception("Optimization failed")
def f(x):
return x**2
y = np.array([1])
x0 = np.array([0])
f_star_y = conjugate_function(f, y, x0)
print(f"f^*(1) = {f_star_y}")
我们可以通过绘制原函数和其共轭函数的图像来直观地理解共轭函数的概念。
import matplotlib.pyplot as plt
def f(x):
return x**2
def f_star(y):
return conjugate_function(f, np.array([y]), np.array([0]))
x_values = np.linspace(-5, 5, 100)
y_values = np.linspace(-5, 5, 100)
f_x_values = [f(x) for x in x_values]
f_star_y_values = [f_star(y) for y in y_values]
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(x_values, f_x_values, label='$f(x) = x^2$')
plt.title('Original Function $f(x)$')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(y_values, f_star_y_values, label='$f^*(y)$')
plt.title('Conjugate Function $f^*(y)$')
plt.xlabel('y')
plt.ylabel('f^*(y)')
plt.legend()
plt.show()
- 原函数 ( f(x) = x^2 ):这是一个简单的二次函数,图像是一条抛物线。
- 共轭函数 ( f^*(y) ):对于 ( f(x) = x^2 ),其共轭函数 ( f^*(y) = \frac{y^2}{4} )。图像是一条抛物线,但开口方向相反。
通过可视化,我们可以看到原函数和其共轭函数之间的关系。共轭函数在优化和凸分析中有着广泛的应用,特别是在对偶问题和拉格朗日对偶性中。
f-divergence
参考
f-divergence是一种用于衡量两个概率分布之间差异的方法。它是由Nguyen Xuan Vinh等人提出的。f-divergence是一种广义的散度度量,它包括了KL散度、JS散度等常见的散度度量。f-divergence的定义如下:
Df(P∣∣Q)=∫q(x)f(q(x)p(x))dx
离散的f-divergence定义如下:
Df(P∣∣Q)=∑q(x)f(q(x)p(x))
其中,f是一个凸函数,p(x)和q(x)分别是两个概率分布。
考虑引入共轭函数,f-divergence可以写成如下形式:
Df(P∣∣Q)=EQf(dQdP)≥supg:X→REPg(x)−EQf∗(g(x))
其中,f∗是f的Fenchel共轭函数,f∗(t)=supsst−f(s)。
证明:
Df(P∣∣Q)=EQf(dQdP)≥supg:X→R∫xq(x)f(q(x)p(x))dx=supg:X→R∫xq(x)maxt[tq(x)p(x)−f∗∗(t)]dx=supg:X→REPg(x)−EQf∗(g(x))
不同的f函数对应不同的f-divergence。下表列出了一些常见的f函数及其对应的f-divergence以及其共轭函数:
f(t) |
f∗(t) |
f-divergence |
tlogt |
e(u−1) |
reverse KL |
−logt |
−1−log(−u) |
forward KL |
(t−1)2 |
4u2+u |
χ2 |
21∣t−1∣ |
u |
Total Variation |
−(t+1)log(2t+1)+tlogt |
−log(2−eu) |
JS |
KL散度
推荐阅读的博文:这篇博文写得非常精彩