文章目录
- 1. 为什么要引入函数近似?
- 2. 核心概念:价值函数近似
- 曲线拟合 (Curve Fitting)
- 3. 函数近似的两大优势
- 4. 代价
1. 为什么要引入函数近似?
在之前的内容(如 Q-learning, Sarsa)中,我们通常假设状态价值V ( s ) V(s)V(s)或动作价值Q ( s , a ) Q(s, a)Q(s,a)是存储在一个**表格(Table)**中的。
- 表格型表示 (Tabular Representation):类似于一个查找表(Lookup Table)。
- 例如:Q QQ-table 的行代表状态s ss,列代表动作a aa,表格中的每个格子存储具体的数值。
- 程序实现:通常使用数组、矩阵或张量。
🚫 表格型方法的局限性:
- 无法处理大规模/连续空间
如果状态空间(State Space)非常大(例如围棋的状态数),或者是连续的(例如机器人关节的角度、速度),表格无法列举所有可能的状态。
即使使用离散化(网格法),网格太密会导致计算量爆炸(维数灾难),太疏又会丢失精度。
- 缺乏泛化能力
- 在表格法中,你必须亲自访问并更新每一个状态-动作对,才能知道它的值
- 未被访问过的状态,其值永远不会更新。但在现实中,我们希望在学过类似状态后,能推断出未见过的状态的值。
2. 核心概念:价值函数近似
为了解决上述问题,我们不再用表格记录每个点的具体数值,而是用一个函数来拟合这些值。
定义:使用一个带参数w ww的函数v ^ ( s , w ) \hat{v}(s, w)v^(s,w)来近似真实的状态价值v π ( s ) v_\pi(s)vπ(s)。
- v ^ \hat{v}v^:估计值
- s ss:状态
- w ww:权重/参数
曲线拟合 (Curve Fitting)
- 假设有n nn个状态S 1 , S 2 , . . . , S n S_1, S_2, ..., S_nS1,S2,...,Sn,它们对应的真实价值是图上的一系列离散点。
- 表格法:相当于要记录n nn个点的( x , y ) (x, y)(x,y)坐标,需要大量内存。
- 函数近似法:
- 试图画一条直线(或曲线)穿过这些点。
- 一旦确定了直线的方程(例如y = a x + b y = ax + by=ax+b),我们只需要存储a aa和b bb这两个参数,就能算出任意s ss对应的价值。
- 参数数量远小于状态数量(例如 2 个参数 vs 100万个状态),极大地节省了内存。
🧮 数学形式 (线性近似)
最简单的形式是线性函数近似:
v ^ ( s , w ) = ϕ ( s ) T w \hat{v}(s, w) = \phi(s)^T wv^(s,w)=ϕ(s)Tw
- ϕ ( s ) \phi(s)ϕ(s)- 特征向量 :描述状态s ss特征的向量(例如:[状态数值, 1])。
- w ww- 权重向量 :我们需要学习和存储的参数。
注:也可以使用非线性函数(如神经网络)来拟合,这属于 Deep RL 的范畴,但基本原理相同:调整w ww使得v ^ \hat{v}v^尽可能接近真实价值。
3. 函数近似的两大优势
✅ 1. 节省存储 (Storage Efficiency)
- 对比:
- 表格法:需要存储空间∝ \propto∝状态数量 (N NN)。
- 函数法:需要存储空间∝ \propto∝参数数量维度 (d i m ( w ) dim(w)dim(w))。
- 当状态无限多时,我们只需要存储有限的几个参数w ww即可。
✅ 2. 泛化能力 (Generalization)
这是函数近似最强大的地方。
- 表格法:更新状态S 2 S_2S2的值,只会改变S 2 S_2S2的记录,S 1 S_1S1和S 3 S_3S3的值完全不受影响。
- 函数法:
- 更新状态S 2 S_2S2的值,实际上是在调整参数w ww(例如改变了直线的斜率)。
- 牵一发而动全身:因为w ww变了,整个函数曲线都会发生变化。
- 结果:即使我们从未访问过S 1 S_1S1和S 3 S_3S3,因为它们在S 2 S_2S2附近(或共享相同的参数w ww),它们的估计值也会根据S 2 S_2S2的经验自动得到修正。这使得智能体能够对未见过的状态做出预测。
4. 代价
天下没有免费的午餐。函数近似的代价是精度 (Precision)。
- 一条直线可能无法完美穿过所有离散的点。
- v ^ ( s , w ) \hat{v}(s, w)v^(s,w)只是一个近似值 (Approximation),通常不等于真实的v π ( s ) v_\pi(s)vπ(s),会存在误差。
- 可以通过提高函数的复杂度(如使用高阶多项式、深度神经网络)来提高精度,但这会增加计算量和过拟合的风险。