伦敦国王学院EEM笔记:Intelligence And Autonomy 智能自主

Introduction

Intelligence 智能,是学习新知识和新技能的过程;而 Autonomy 自主,是能够自主做出决策并执行的过程。

通常涉及到机器学习。

learning 的分类:

  • 按照 feedback 分类:supervised 提供直接的正确结果 true output;reinforcement 强化,提供间接结果 indirect output 比如 reward 或者 punishment;unsupervised 无监督,没有 feedback 或者 output。
  • 按照 output 分类:concept learning 概念学习,Binary output based on +ve/-ve examples 二进制输出,比如 0 是“是这个概念”,1是“不属于这个概念”; classification;regression 数据或顺序。
  • 按照 sampling 分类:independent or dependent.

Control Systems Basics

Dynamical system:通常涉及到时间的模型,比如自动驾驶,汽车需要随时注意当前状态并做出决策。

State-space models:除了输入输出映射,还能呈现出系统内部的模型。state-space 是n维的状态输入,比如 xp 就是第p维度。

比如:cart-pole 模型,这是一个自动化专业的例子?好像是通过左右移动方块,最终实现让小球垂直立在方块正上方的系统。状态空间涉及4维参数:木块(水平方向上)的位置,木块(水平方向上)的速度,小球所处角度,小球角速度。

image-20250306090900816

而 observation-space 观测空间则是外部可见的空间,比如这个例子最直观的可观测的结果就是我们肉眼观测到的小球所处的坐标 y=(r1, r2)。

action space 则是要采取的行动,比如根据当前的 state-space 想让小球立起来,木块需要向右移动有一个向右的力。

image-20250306091218426

总地来说,x 代表物体所处状态,y 代表我们观测到的物体状态(可能和 x 有一定出入),u 代表我们要采取的行为。

一般可以用形如下面的公式表达:

其中的 x 上面带一个点,表示”我们希望 x 达到的下一步状态“。

对于多步状态转换,依次计算:$$x_{k+1}=\overline Ax_k+\overline B u_k=\overline A(\overline Ax_{k-1}+\overline B u_{k-1})+\overline B u_k=…$$

Major Concepts

控制理论的一些主要概念:

  • controllability:能让模型实现我们想让其完成的任务。
  • observability:能看到系统内部在发生的过程。
  • stability:为了让系统行为有界且可以被预测。

controllability 及证明方法

之前的线性动态系统系统还可以这样表示:

image-20250306100405035

也就是:

想要实现 controllability,controllability matrix must not be singular(非奇异矩阵,就是首先是一个对称矩阵(否则不能被称作奇异或者非奇异矩阵),其次行列式不等于0)。

例题:判断下面这个系统的 controllability:

image-20250306100958017

根据之前的公式可以知道 A B 矩阵分别是左边和右边的。

而矩阵只有两维状态,所以 $$G=(\overline B, \overline A \overline B)$$

G=[1 -2]

​ [0 0]

行列式=0,The system is not controllable.

Feedback Control

带有反馈的控制:error = predict value - actual value 进行调整。

image-20250306135639189

上面的 u 是不全的,请先忽略。

假设我们把 u 设置为:$$u=K_p \cdot e$$,和误差成一定比例。这样会出现什么问题?

如果 gain 设置得太小,则误差减小的速度太慢;如果gain 设置得太大,则可能出现超调 overshoot 现象。

image-20250306135910899

image-20250306135918812

所以说除了 e,最好再加两个部分:e 的积分和 e 的微分。

积分部分可以有效解决增长速度太慢问题,但是可能会引发 overshoot 问题;

微分部分可以有效解决 overshoot 问题,并且减小系统达到稳态所用时间,增加稳定性 。

三者互相结合使用,这就是有名的 PID 算法。

image-20250306140239426

这三个系数分别叫做:Proportional gain, derivative gain, integral gain

image-20250306141423878

Feedforward Control

前向控制系统有助于快速移动和高遵从性 fast movements with high compliance,快速达到目标。通俗来说,就是系统根据先验知识(经验)来预先计算控制输入的方法,有利于 responsiveness。

image-20250306142028016

比如对于机械臂控制,如果我们知道期望机械臂达到的最终状态,是否可以根据该状态做受力分析,从而分析出力矩,应当施加在每个机械关节上的力,来减少没有 feedforward 的试错时长呢?

Supervised Learning 监督学习

我们之前已经引入过,监督学习指的是知道最终要达到的状态,因此可以根据预测值和真实值的误差进行学习训练。

主要分为三类问题:

  • concept 概念类问题,比如“这个东西是一个猫”,其实机器也不懂概念但是只是将输入和输出“猫”关联起来。
  • classification 分类问题。如异常情况检测等。
  • regression 回归问题,比如求出一个杯子的质量数值。比如构造 feedforward control 系统,以及设定 reinforcement 强化学习的有效奖惩数值很有用。

具体学习过程中有很多需要确定。数据集如何选择?训练模型如何选择?error 评估方法如何选择?优化方法如何选择?

比如:

image-20250306154520770

image-20250306154534045

泛化地讲,主要分为两种 error 评估:generalisation error 和 empirical error,这两种一个是用正确的映射函数和我们的预测值函数计算误差,一个是用样本数据带入我们的预测值函数计算误差(不知道真实解,找不到正确的映射函数的情况)。Empirical Error 的情况更多见。

image-20250306155107014

Linear Models

多项式方程(形如:$$y=\theta_0x_0+\theta_1x_1+…$$)这种的方程,如果利用最小二乘距离计算误差来找损失最小的 θ 向量参数,最终计算结果如下:

中间过程就省略了,其实就是(y-θx)^2 来计算误差。

我们也可以进一步把这个公式推广到非线性模型中。其实线性模型就是总结为 $$\mathbf{y}=\mathbf{X}\boldsymbol{\theta}$$,如果非线性模型我们也可以总结成一个特征向量 * 一个参数向量的形式,就一样可以应用这个公式。

Overfitting

degree 太大了就会导致 overfit,比起寻找数据的规律,更像“努力往样本数据上凑”。

(当然我们知道,degree太小了会欠拟合 underfitting,比如一个二次函数的图像我非要用一次函数去拟合,怎么拟合都不会特别精确)。

所以我们也需要一个方法来找到最佳 degree。

Bias-Variance Trade-off

其实另一个角度来说,找到最佳 degree 的过程也是最小化泛化误差的过程。

image-20250306161601200

第一部分:噪声导致的方差。

第二部分:bias,选择模型产生的问题。我们要做的就是调整模型或者 degree 让这一部分更小。

第三部分:estimate error,训练产生的 error,可能是数据集选的不好或者太少了导致的。

Model Selection

通过曼巴 elbow 方法来确定模型的复杂度选取。

首先我们把数据分为训练集和测试集,进行交叉验证 cross validation。下图中我们可以明显看到有一个 test 测试数据集误差的极小值,或者有的图可能随着模型复杂度增加 test sample 的误差一直在减小但是在 elbow 点往后模型复杂度增加,error 减小的幅度越来越小,提升模型复杂度来减小误差的性价比变得越来越小。elbow 点就是最佳的模型复杂度点。

image-20250306161859693

Ridge regression

之前的最小二乘回归方法有一个很大的问题:依赖于每一列,每一个特征之间的独立性。如果特征之间关联比较大,那么误差和方差也会成倍增加,XTX 可能找不到逆。

改进后的计算公式如下:

lambda 就是用于减弱特征之间相关联的问题的参数,lambda 越大,对关联特征的鲁棒性就越强。

下面的是简化的计算公式,I 应该是单位矩阵。

Beyond Linear Models

如果实在是没办法用如上的特征和参数相乘的方式表示如何处理呢?主要有两种方法。

Local Approximation

把大学习问题拆成许多局部的小学习问题。

其中,fk 是第k个局部学习预测模型;w 是每个局部学习预测模型的权重。

最终的 solution 计算公式:

Neural Network

整体来说不算是线性问题,是多次迭代,每次把上一层的参数作为下一层的特征值输入,提取“特征中的特征中的特征……”寻找底层规律。

image-20250306174225709

第一层输出是h,第二层h1,一直到最后一层 y=h_(L-1).

y 是每一层输出;θ 是当前层权重;phi 是上一层输入。

误差计算公式:从 y 开始反向传播推回去。

yr,n 是第 n 个样本第 r 个神经元的目标输出,带波浪线是模型实际输出。

Imitation Learning 模仿学习

学习,模仿行为。最典型的例子就是机器人。

模仿学习主要分为四个问题:

  1. 如何采集数据?传感器等选择。
  2. 如何处理数据,和 behaviour 相关联?
  3. 如何训练学习?
  4. 如何将最终结果转化为行为的实现?

Capturing the data

比如:人类用操纵杆控制机器;录像视觉识别等。

Encoding the Behaviour

主要分为两种:

  • non-autonomous 非自主:比如只是单纯跟随轨迹。这种方法不具备泛化能力,因为是纯纯的模仿。
  • autonomous 自主:比如 policy mapping 策略映射。

Learning algorithm

取决于行为复杂度和数据的可用性。

最简单的模仿学习:建模到线性控制策略。

y=u:要采取的力/力矩。

You can't use 'macro parameter character #' in math mode\phi=(e,\dot e)^T$$ 误差特征向量和其时间导数。 $$\theta=(K_p, K_d)^T$$ proportional and derivative gains. 常微分方程 ordinary derivative equation 只包含常导数,不包含偏导。 如下图,左侧图中出现了一些 fixed points 即我们的学习最终可能会趋向的稳态。 - attractor:吸引子。 - repeller:排斥子。 - saddles:鞍子,某些方向吸引某些方向排斥。 右侧是一个 Limit cycle,稳态是一个周期性孤立闭合轨迹 periodic isolated closed trajectory,不过不会在线性系统中出现。 ![image-20250306201847012](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503062018119.png) 一些定义: <img src="https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504181143755.png" alt="image-20250417235802109" style="zoom:67%;" /> ### Dynamic Movement Primitives DMPs 是一种用于描述和生成复杂运动轨迹的数学模型。 将复杂的运动分解为一系列简单的“运动原语”,每个原语可以独立地被学习和重用。 ![image-20250306213613010](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503062136154.png) g:goal,最终目标位置。 y:当前位置。 z:中间变量,类似速度或者加速度?类似 PID 的 I 控制模型更快达到稳态。 τ 是控制速度的参数,α 和 β 是正则化参数,调整稳定性和响应速度。 此外,为了创建更复杂的动力学行为,可以在基本方程中加入一个非线性函数 ( f(x) ):驱动系统控制运动策略,而调制系统单纯管理非线性方程 f(x) 的输入x。 图中红色部分是引入 f(x) 后的状态曲线。 ![image-20250306214032164](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503062140279.png) ![image-20250306214228716](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503062142836.png) ### Behaviour realisation 主要还是两个问题:泛化和抽象。 - 泛化:训练完一个数据,我们能否拿到另一个对象身上使用? - 抽象:我们能否忽略所有的环境因素只考虑主体?比如擦窗户动作,如果设计擦窗户机器人,数据是否会包含梯子绳子的晃动数据等? Correspondence Problem:由于演示者和模仿者的物理形态或者动态力学存在差异,不能直接照搬,要找一定的方法进行动作映射。通解是不存在的,因为是 context dependent 上下文相关的。 ## Decision Making 如何在信息不完整的环境中,利用有限的感知 perception 来做出 decision? 每次我们读取当前状态,根据当前状态和可以采取的 action 决定下一步要做什么。然后每一步会收到相应的 reward 奖励,让机器能评估自己做的怎么样(reinforcement learning)。 ### Reward Function 首先建立奖励函数。 让我们先从一个简单的例子开始,这个例子中我们采取一定的决策后就知道 agent 一直到结束所获取的全部 reward。比如一个简单迷宫,小白鼠只有东西南北四个入口可以选,我们选择一个入口后就知道后续确定的走向了,环境并不会因为 action 或者时间的变化而改变。 Q:长期期望奖励。

Q(u)=E[j_k∣u_k=u]

You can't use 'macro parameter character #' in math modeQ 的计算方法是多次尝试后统计该动作获得的奖励的平均值。统计数据越多越接近标准值。 ![image-20250307000713566](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503070007722.png) ### Greedy action 然后根据奖励函数采取策略。 贪心算法的核心是每一步都选择 Q 最大的 u。

u_k^*=arg\ max\ Q_k(u)

You can't use 'macro parameter character #' in math mode不过由于随机性,通常会使用下面的公式,只有一定概率会采取最优策略 u; ![image-20250307001715012](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503070017095.png) 不过这个函数也只是随机地采取最优行动或者随机行动。进一步改进是下面的结果,上限置信度行为选择,也就是说已经采取过的行为的不确定性会变小,没采取过的行为不确定性大,更容易被随机到。 ![image-20250307001853009](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503070018088.png) 事实证明加一些随机性的结果还是会更好的。可能是因为贪心算法未必是长远角度来说最优解吧,很多情况下会达到一个稳态非最优解。不确定性促使我们探索/开发 exploration/exploitation。 ![image-20250307003717034](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503070037134.png) 好的聊完了这个例子我们来聊一些复杂的,不适用的例子。 如果状态多于1个怎么办? 如果每一步行动后,整个环境状态都会发生变化,reward 都不一样了怎么办? 或者如果每一步行动我们不知道当前行动的 reward,只有游戏结束,到达终点才知道 reward 怎么办? ### Problem Horizon 其他问题大致可以分为两类: 1. finite horizon 有限步内可以结束。达到 xk 就结束了。 ![image-20250307004955996](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503070049071.png) 总 reward 就是达到xk 的 reward 加上每一步的 reward。 ![image-20250307005015832](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503070050941.png) 2. infinite-horizon 可能有无限行动。那岂不是某些情况下 agent 永远不结束游戏,就永远有 reward?那 agent 会不会就不想早早结束? 我们可以用折扣因子,使得随着时间和步数的推移能得到的 reward 逐渐减小。 ![image-20250307030131065](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503070301186.png) ### Policies 之前我们都是在计算 action 的 reward。现在引入 policies,如何根据当前环境情况来决定 actions,也就是环境是变的。 policy 函数是选择 action 用的。

u=\pi(x)

You can't use 'macro parameter character #' in math mode ### Markov Decision Processes 之前我们采取的行动都是确定的,比如我给定行动往东走,最终结果就是一定往东走。 不过可能采取行动会有概率失败,比如0.8概率往东走,0.2概率往南北走。 ![image-20250307030912285](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503070309383.png) ppt 应该写错了,Pr[y|x,u]>=0 如果每个条件概率事件都和之前的事件和状态独立,那么就可以通过逐级相乘求得某一个特定状态的概率。 如果事件和时间无关(稳定),也就是在不同时间会做的决策都一样,就是 stationary 的,如下: ![image-20250307133651966](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503071336076.png) 想要定义一个有限 MDP,需要如下内容: - 状态和动作集 state and action sets. - 每个状态下的动作转移概率 Pr[xk+1|xk , uk] - 每一步转移的 reward。 下面是一个垃圾回收机器人的例子,它收集易拉罐或者别人给它易拉罐有奖励,但是它自身有电池电量,电量耗尽有惩罚,需要自行决定什么时候去充电。但是如下例子使用很多随机事件实现,比如低电量的时候有一定概率充电,一定概率继续搜寻易拉罐,一定概率等待。 ![image-20250307134247178](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202503071342284.png) ## Evaluating and Improving Decisions 评估,改进决策 对于序列决策问题,我们可以使用 DP 动态规划寻找最优解。 DP Dynamic Programming:找到一个最优的序列,并且如果删除这个序列的第一个 state,剩下的序列仍然是最优序列。 所以实际 DP 求解的方法可以先从结尾倒推。 V(x)=从x开始的最小成本。状态价值函数。 Q(x) 是动作价值函数,指采取下一步行动后获得的价值。 计算: State Value Function V(x)=E[Jk|xk=x],即:从x状态开始到结束所有可能路径的成本/回报期望值。 State Action Value Function Q(x, u) = E[Jk |xk = x, uk = u],即:从x状态开始,如果采取了u行动,后续所有可能路径的成本/回报期望值。 J 是折扣回报 discounted return。 为什么是求平均而不是挑出最大值呢?当我们位于状态 x 的时候,哪怕采取同样的动作 u 也可能会过渡到不同的新状态,也可能会收到不同的 reward。我们可能不能永远保持选择回报值最大的路径并获得最大回报值,只能尽可能保持选取回报期望值最大的路径。 比如一个经典的晚餐例子:假设(一定是假设)某个人出车祸的概率是1%,那么他明天的晚餐 value 就应该设置成 99%,因为有那么一丝可能他吃不到明天的晚餐。 之前的学习我们提过,为了解决无穷步的问题解,还需要引入折扣因子 γ,使得 agent 的行动随着时间推移,回报越来越小。 换一种形式写就是如下这样,一个迭代方程,本步的回报+γ倍的下一步的所有可能回报期望。 ![image-20250415231724684](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161239942.png) ### Bellman Equations Bellman Equations:最优的策略就是让 value 函数最优的策略。(如果 Value 函数计算的是奖励值,比如吃豆人的分数,那就是越高越好;如果是游戏总用时,成本等等,就是越低越好)。 ![image-20250415234914165](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161239648.png) Bellman Equation 是定义了最优策略的判断方法,而贪心算法是一种选择策略的方法:永远选择当前步的最优解(贪心算法得到的策略不一定能通过比尔曼方程的验证)。 具体策略选择除了考虑 Value(采取了这一步策略的即时期望,以及未来期望)同时也要考虑概率(就像上一章结尾的垃圾机器人的决策图)。这就叫做 Policy Evaluation 评估决策。 例题: ![image-20250416000032390](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161239529.png) 我们利用贪心算法多次迭代求出每个格子的 value. 规则是:每次行动目标除了起始格子和终止格子,其他格子的 reward 都是-1. k=0 我们先将所有格子的 value 值初始化为0. 然后每次迭代,我们让这个格子往其他所有可能的方向走,并借此计算其更新的平均 reward 值(-1+其他格子的 reward 值取平均。-1是走下一步必须要发生的移动代价,再加上下一步的目标格子的 value 值平均)。当然,我们的移动策略是贪心算法,但是就像之前介绍的一样,对于 value 更新计算,我们还是选择计算其所有可能策略并取平均。 k=1 第一轮迭代,反正不管目标是那个格子,平均 reward 值都是0(因为我们一开始初始化的所有 value 都是0),此外所有非目标格子的移动代价是-1,所以除了目标格子其他格子的 value 更新成 -1+0=-1. k=1 第一轮迭代,由于我们初始没有任何更新所以初始所有格子的 reward 都是0,所以贪心算法就会往随机所有方向走并计算平均值(除了目标格子因为到达目标格子游戏就结束了所以不存在从目标格子走到临近格子的说法)。比如第一行第二个格子,其可能方向是:往左到达 value=0 的目标格子;往下或者往右到达 value=-1 的格子;所以取平均,下一步到达新格子的新 reward 值是-1.7,再加上移动代价-1=-2.7 。 以此类推…… ![image-20250416000059549](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161239939.png) ### Policy Improvement 对于一个任意的位置,如何判断下一步应该怎么走?用走下一步的奖励函数+折扣因子*下一步的目标格子的状态价值函数。如果有一个策略的动作价值函数优于原状态的状态价值函数,那么这个策略的下一个状态一定比当前状态好。 采取完策略下一次策略迭代怎么更新?我们之前已经知道全图的 V(x) 了,现在只需要知道下一轮迭代所在位置能采取的策略,这些策略的奖励函数,以及这些策略能到达的新状态的状态价值函数即可进行新一轮策略评估。 ![image-20250416000621993](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161239285.png) if 那一行的大概意思应该是:如果我采取新策略的即时回报+采取新策略后继续使用旧策略走的价值期望>采取旧策略后按旧策略继续走的期望价值,则可以说新策略一定更好。 下面是一个例子,我懒得看了,主要是他泊松分布有点复杂而且图像化建模没有标答。简单说就是一个出租车店老板有两个租车点,两个租车点每天的租车请求和换车请求符合一定的泊松分布,租车店老板每天晚上可以花钱在两个地点之间挪车,如何让利益最大化。 ![image-20250416001304060](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161239133.png) ### Value Iteration 之前的策略迭代方法主要还是太复杂了,就是基本要把所有可能情况所有当前决策可能造成的后果都更新一遍,计算量开销太大。 值函数迭代,取而代之,是每回在当前策略的前提下,尽可能(利用比尔曼方程)选择最优的 Value 值进行更新,而不是排查所有可能。这样在有限次迭代后就可以收敛到最优价值函数。 ![image-20250422234543624](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504222345836.png) ## Modelling and Sampling for Decision-making 如何处理动态的情况?比如吃豆人游戏,每一秒由于鬼的移动,全局的状态价值函数可能都会发生变化。这种情况和之前的最关键区别就是**模型未知**。 ### Monte Carlo 一种解决方式是蒙特-卡洛方法,蒙特卡洛方法用于估计状态价值函数。 虽然我一开始不知道整个游戏的状态,但是我玩上几次不断估计近似的状态价值函数,每局游戏可能都会修改我们的状态价值函数,不像动态规划(DP)依赖已知的状态转移概率模型进行精确计算,蒙特卡洛方法不依赖模型,仅通过采样估计价值。但是在游戏过程中,蒙特卡洛方法不会根据动态变化而改变自己的状态价值函数,只是每次完成一或多轮学习(episode)的时候才更新状态价值函数,所以不太适合灵活的动态环境(每一局游戏可能千变万化)。 策略评估 Evaluation:评估所有策略以及相应的收益。 策略改进 Improvement:根据 Q 值判断要不要采取新的策略。 策略迭代 Iteration:重复如上行为更新评估。 比如二十一点,可能一开始我们的游戏策略是:20点或者21点就停手,否则继续抽牌。 玩完几局感觉还是不太保险,可能进一步更改 V(x),从而策略也会改变:19点就停手…… 对于连续时间系统如何解决策略评估问题?通过设定一定长度的步长,步长越小精度越高但是计算量更大。首先,我们的状态一定步长时间后才更新。 <img src="https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161229664.png" alt="image-20250416122926491" style="zoom: 67%;" /> 相应的成本函数计算公式:达到终点的代价+这个过程中的代价积分。 ![image-20250416123355148](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161233262.png) h(x) 是 terminal cost,就是到达终点那一步的花费。 那么接下来,又到了解决无限步的问题情况了。解决方式就是两种 HJB 方程形式。 ### Hamilton-Jacobi-Bellman Equations Hamilton-Jacobi-Bellman Equations 来进行策略评估如下: ![image-20250416123900346](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161239479.png) u 是要采取的行动,公式右边第一部分是采取下一步行动之后获得的奖励/损失,第二部分是 u 策略下状态的变化趋势 * 状态变化后对状态价值函数的变化趋势影响,即当下策略的回报和对未来的累计策略回报的影响。我们采取损失最小或者奖励最大的下降方向。 对于无限决策,折扣因子用 e 的一定次方,这样更适合微分方程建模。 ![image-20250416124559633](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161245868.png) 另一种实现方法是平均每一步的价值: ![image-20250416124723689](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161247802.png) ### LQR 一般来说,最优控制率 Optimal control laws 很难找到。有一种特殊情况是策略选择是线性的,而价值函数是二次的,这样就很容易找到价值函数的极值。这种调节器叫做线性二次调节器 Linear Quadratic Regulator, LQR。 ![image-20250416125708045](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161257202.png) 每一步最优策略和状态价值函数更新公式如下,我们可以利用V(T)=QT 带入计算。 ![image-20250418114337225](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504181143449.png) 对于离散问题: ![image-20250416131504729](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161315847.png) ### ILQR 大多数复杂问题并不能拟合为线性路径和二次价值函数,不过可以近似地处理,这样就可以用 LQR 解决。对于价值函数可以视作近似二次函数的例子: - forward pass:先选取一定的策略 u,获取 x 状态空间。 - backward pass:根据 x u,尽可能地将大问题简化为一个或多个线性问题,求得 V 状态价值函数。 - 迭代反复修正。 比如操控机器人行走问题,有很多维度,比如迈步角度,迈步速度,关节扭矩等等,我们没法把这个问题简化为线性的 LQR 因为每一个状态都有很多维度策略需要寻找最优解。我们可以先给机器人一套方案然后让其局部迭代找到更优解,微调这一步的行走角度、速度等找到最合适的解之后再前进执行下一组策略。 ![image-20250416135027938](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161350050.png) ## State Observability and Estimation 状态观测性和评估 ### Observability 及证明方法 回顾之前控制理论基础我们学的内容,假设 y 是观测变量。则有: ![image-20250416142732634](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161427804.png) H 必须是 non-singular 矩阵,即行列数相等,且行列式!=0. 如果不符合,那么就找不到 y 观测空间,这个系统就是不可观测的。 例题: ![image-20250416143025953](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161430075.png) 可观测系统就可以利用公式根据 y 反推出 x0: ![image-20250416143647521](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161436654.png) 不过,评估预测当前状态其实可能有一定的问题,比如可能预测到的并不是准确的当前状态(传感器读数延迟),传感器可能受到噪音影响,突然面临停电 blackouts 等等。 所以需要结合感官得到的 feedback 和 forward 模型同时考察。一方面利用模型进行预测,另一方面结合观测到的参数进行调整估计。 大致过程如下图: ![image-20250416195246907](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504161952270.png) w 和 v 是观测到的噪声。D 是观测到的状态。Pr[xk|Dk-1] 是根据上一个时刻观测到的状态,下一个时刻状态变为 xk 状态的概率。Pr[xk|xk-1] 是我们先验经验估计,如果上一时刻状态是 xk-1,下一时刻状态变为 xk 的概率。相当于 xk 代表的是模型的真实状态,而 D 是我们通过传感器观测到的观测变量,实际值可能和 x 有出入,而大多数情况下对于现实问题,我们都无法找到 xk 也就是真实状态值。 w 和 v 是两个维度的噪声,w 是发生在对 x 的影响上,v 是发生在观测上,比如传感器读数错误等问题。 ### Kalman Filtering 卡尔曼滤波是用于线性高斯系统的最优估计方法。 ![image-20250416200133771](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504162001862.png) 先验步骤: ![image-20250416200905223](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504162009455.png) 带有波浪线的 x 表示对当前状态的预测,并非实际观测值,也并非模型真实状态值 x。 sum 部分是协方差矩阵,代表“对于这一部分的不确定性有多大”。 然后根据观测值,更新卡尔曼增益,进而更新我们预测的状态值和协方差矩阵。更新协方差矩阵。H 是观测矩阵,y=Hx+v. ![image-20250416201608900](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504162016995.png) 卡尔曼滤波的优点: - optimal estimation:最优线性无偏估计。 - efficient:实时更新观测数据和状态估计。 - robustness:对噪声容忍度高。 - adaptive:能适应系统变化。 对于非线性的动态学习问题或者非高斯噪声的情况,一般使用 EKF Extented Kalman Filter 扩展版卡尔曼滤波进行局部线性估计(这一点上很像 LQR 和 ILQR 的关系)。不一定能获取到最优解但整体上可以获取到不错的解。 除此之外还有 unscented Kalman Filter, Particle Filter, Square-Root Filter, Information Filter. ### Dimensionality Reduction 降维 事实上有很多维度因素虽然可以被观测到但是和解决问题无关,或者对结果影响实在太小,可以忽略掉。这部分我们之前在 AI 课程里也有接触,比较经典的一个方法就是 PCA 主成分分析降维。比如我们现在有两个维度的观测参数,但是对其建模后我们发现在二元坐标平面内,所有观测点大致成一个线性状态(比如y=2x),那么我们就可以把这两个维度上的参数转化为一个维度,投影到 y=2x 这条直线上。 #### Principal component analysis PCA ![image-20250416202632041](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504162026178.png) ![image-20250416202706086](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504162027197.png) 缺点在于,如果噪声比较密集,PCA 可能会保留噪声而不是数据。 判断能否用 PCA 优化的算法应该是:$$det(\sum -\lambda I)=0$$ 求出 λ 的多个解,看看有没有一个解明显小于其他解,说明其影响性比较小可以删掉。然后可以利用 $$(\sum -\lambda I)v=0$$ 求出正交向量。 ## On and Offline Learning 我们之前介绍过,对于不知道具体模型的动态学习问题,可以利用蒙特-卡洛方法不断拟合。但是如果问题复杂度过高,那么无限探索出所有可能得策略是不现实的。 有两种简化方法: - on policy 在线策略:贪心算法,每一步都选择当下的最优解。explore in an ε-greedy manner. - off policy 离线策略:学习策略未必是真正执行的策略。use a behaviour policy that is good at exploring, then infer optimal policy from that. 字面上比较好理解,就好比 on policy 是我们直接拿着更好的代码放到电脑上去跑去检验结果了所以叫在线策略;而 off policy 我们学习评估的新策略是一套没有实际执行的策略,而新策略学习用的数据可能是旧策略跑出来的,所以叫离线策略。不仅执行效率高,方便比较,而且也更加安全,可能有些策略在确定其安全性之前不适用于直接跑。 行为策略 Behaviour policy π′ 供离线策略学习,Estimation policy π 则是学习评估之后得到的新策略。 off policy 的具体执行过程如下: 1. 根据 behaviour policy 计算平均回报。 2. 通过比较 π 和 π' 策略之间的相关概率,推测 π 策略的回报。“虽然我没有玩这局游戏,但是我看别人玩,推测:如果是我的水平,会玩到什么地方”。 ![image-20250416204157558](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504162041731.png) 如上只是离线学习的简单阐述,但基本原理一致。参考数据除了非线性控制器的行为策略获得,也可以从人类专家处获得。 ### Batch vs Online Learning 之前我们遇到的学习任务都是 batch problems,就是说训练之前所有数据都已经拿到了。 如果一开始我们没有拿到全部数据呢,比如可能随着时间推移,每天数据都是在变化更新的。online learning 学习方法就是允许边学习边接收新数据。 一种 online learning 是 SGD,SGD 就是从所有数据集里面每次挑出一部分来进行更新迭代参数。 ![image-20250416234821193](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504162348340.png) θ 是参数,α 是学习率,▽ 是梯度,e 是损失函数。下面的是普通最小二乘回归 OLS 的公式。 应用到 MC 中: ![image-20250417001254727](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504170012060.png) ### Temporal Difference Updates 我们知道蒙特卡洛方法只有每轮学习开始的时候会更新价值函数和状态预测。 而下面这种方法则是真正实现了动态的一步一修改状态函数。 ![image-20250417001747226](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504170017343.png) 相比卡尔曼滤波,TD 我们是知道模型和状态更新的,所以重点在于更新价值函数,而不用考虑根据观测值来更新状态估计值。 相比 DP,DP 需要先知道完整模型才能开始学习,TD 可以边试边学习。 相比 MC,TD 不用等到开始状态-> 结束状态完成后再更新状态(这叫一个 episode),可以每步动态更新,而且 less susceptible to the effect of exploratory actions,MC 完成一次 episode 后评估整个 episode 的价值更新函数,这其中可能有好的策略可能有坏的策略,比如前半段都是好策略后半段策略差可能会影响系统对前半段策略的影响。 ### Least Squares Policy Iteration 一种支持 off policy,数据利用率更高,收敛性更好(相对于TD),在线学习 online 的学习方法。 结合了 Q 函数线性近似和 π off policy 离线策略。 ![image-20250417004616181](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504170046347.png) ![image-20250417004843583](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504170048751.png) 总之近似的 Q 动作价值函数公式如下: <img src="https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504170049130.png" alt="image-20250417004955033" style="zoom:67%;" /> 接下来的问题就是如何选取合适的特征了。 一种方法还是局部线性优化。 ![image-20250417005053963](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504170050090.png) 局部二次模型: ![image-20250417005250735](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504170052854.png) ## Inverse Learning Problems Attempt to model task-oriented behaviour or skills from human demonstrations. ### Behavioural Cloning 反向学习,比如机器人为了实现像人一样的行走,对人建模。这种学习方法叫做行为克隆。简单来说就是让我们当前状态+采取策略变得更像观测到的行为。 ![image-20250417115610371](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171156472.png) ### Inverse Reinforcement Learning Behavioural Cloning 是让策略和观测到的行为比较相似,而反向强化学习则是根据观察到的行为,猜奖励函数。 奖励函数是与实现方式无关的最优性度量 Reward function represents the measure of optimality independent of embodiment. ![image-20250417121030388](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171210493.png) π* 是专家策略,也就是我们学习的对象实际采取的策略,应当比任何策略都优。 我们通过 Bellman Equation 反向推导奖励函数: ![image-20250417121238815](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171212940.png) 以及根据 u 策略的最优性可以得到: ![image-20250417121346656](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171213774.png) 当然如上方程的一个解是 zero reward,但是这并不是我们想要的结果。 另一种解决方案是我们找到一种奖励函数使得偏离最优策略的其他策略和最优策略差距比较大,这样学习起来更方便。主要实现方法就是找到次优策略(或近似),然后找到一种奖励函数让观测策略尽可能远远优于次优策略。 ![image-20250417121807479](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171218632.png) 对于真实世界的连续性问题: ![image-20250417122657699](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171226828.png) 总地来说,反向强化学习大致如下: ![image-20250417123033290](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171230455.png) 最左边一列是直接拷贝人类专家的行为给机器人,往往效果不好。 中间一路是提取一些高层特征,比如速度,加速度,加加速度等,然后建立奖励函数给机器人供执行。 右边一路是先学习人类专家的行为特征的奖励函数,然后通过控制算法算出机器人应当如何执行使得回报最大,再交给机器人执行。 ### Abstraction of Motion 简化,提取人类行为的部分特征进行训练。同时也能利用机器人硬件力量的优势。 ![image-20250417123632468](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171236617.png) ### Machine Teaching 给定目标模型和学习者,找到最佳训练集而不是找到最佳模型。 ![image-20250417124227011](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171242182.png) 举例:比如一个一维分类器,其实只需要两个样本点就够了。 ![image-20250417125722703](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171257871.png) 正式地讲,机器学习和机器教学如下。机器学习给定一个数据集,要求找到预测误差较小的模型;而机器教学已知目标模型,设计数据集让学生更快学会,teaching risk 是学生学出来的模型距离正确答案有多远,teaching effort 是教学代价,比如数据集大小,训练时间,标注成本等。 ![image-20250417130047001](https://raw.githubusercontent.com/Jingqing3948/FigureBed/main/mdImages/202504171300140.png) 老师的任务一般就是在给定的 ρ 和 ε 范围内尽可能找到让训练误差最小的数据集。 机器教学一般适用于老师需要高效地通过训练数据集将训练模型传达给学习者的情况,比如我们可能知道区分红色和蓝色的 RGB 公式,如果要通过训练数据集的方式构造模型,就需要找到比较关键的训练数据点,这样能更高效地训练。
Contact Me
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2022-2025 Jingqing3948

星光不问,梦终有回

LinkedIn
公众号