经典强化学习:基本概念与学习直觉
简介
强化学习的目标是找到一个「策略」,所谓策略,就是「在某个环境状态下,需要采取某个动作」。这里的「学习」二字,可以借由「机器学习」的概念去理解,你可以笼统地认为为是「用一个函数去逼近这个策略」。而「神经网络」就可以看做是这个函数逼近器。而「强化」二字,可以借由「控制系统」的概念去理解,RL 算法是构建一个「闭环控制系统」,其目标是通过与环境的交互来优化决策。在不断地「采样-评估-更新」过程中,找到或逼近解一个高维动态规划问题的「最优策略」,其本质是求解由随机过程和不完全信息耦合所带来的高维优化问题。在这个视角下,RL的数学本质可以概括为:构建闭环的学习系统,利用反馈信息去逼近策略函数。PS:「闭环」是控制系统中的概念,具有反馈环节,能够感知系统输出的变化,并根据输出的变化进行调整。与之相对的是「开环」概念,没有反馈环节。
从训练机器人行走开始
策略梯度法入门—强化学习该例是要设计一个两腿机器人,使其能自动的行走。机器人左右腿的跨、膝、踝共有6个关节,都装有小电机,希望能自动控制它的6个小电机,使机器人能和人一样正常的行走。
强化学习需要一个软件系统,其基本组成包括:
- 代理(Agent智能体):是个软件,相当于机器人的大脑,是强化学习的核心。它可以接受环境状态的信息,还可以将计算的结果传输给环境。其中,负责计算的是个函数,称作策略(policy),是强化学习最重要的部分。
-
环境(Environment):代理以外的部分都是环境。和通常的环境概念不同,机器人所处的周边当然是环境,不同的是,机器人的躯体四肢都在代理之外,也都归于环境,比如躯干的高度,各个腿及各个关节的位置、速度等。此例中,环境状态使用31个观测值。包括
- 躯干沿Y和Z轴方向的坐标值,
- 躯干沿X、Y和Z方向的速度,
- 躯干旋转的角度和角速度,
- 6个关节的角度和角速度,
- 脚和地面之间的接触力。
- 状态(State):指环境的状态。机器人一直在移动,所以,周围环境的状态,以及自身各关节的状态也在不断的变化。
- 行动(Action):指代理根据当前状态采取的动作,比如机器人向左或向右,向前或向后移动等。
- 奖励(Reward):代理在当前状态下,采取了某个行动之后,会获得环境的反馈,称作奖励。但可能是奖励,也可能是惩罚,实际是代理对行动的评价。在强化学习中,奖励非常重要,因为样本没有标签,所以奖励起到引领学习的作用。
使机器人正常行走要做的工作。让两腿机器人正常行走,要做的工作是,用正确的指令控制每个关节,使机器人的腿和躯干正确的移动,这需要有六个关节的扭矩指令。在给定的环境状态下,如何得到正确的指令,这就是强化学习要做的工作。用传统方法开发机器人的行走程序,要人工设计逻辑、循环、控制器及参数等等,需要很多的环路,非常复杂。而强化学习的思想极为简单,它不考虑整个过程的具体步骤,不进行一步步的具体设计,而是把这一切复杂工作都塞到一个函数里,这个函数称作策略函数。策略收到环境传来的31个状态值,会自动计算出6个可供执行的指令,指令正确,机器人就会正常的行走。可以看出,强化学习中,机器人能正常行走的关键,就是这个策略函数。
所以下面的重点是:智能体里的策略函数是什么形式?它如何进行学习?如何通过环境状态值计算出6个正确的指令,使机器人能正常的行走。
- 策略是个函数,因其过于复杂,很难用显性的公式来表式。对于这种连续且复杂的问题,强化学习是采用功能强大的神经网络来近似这个函数。这里策略神经网络是用的多层感知机(最基本的前馈神经网络),并以此为例进行说明。
神经网络包含多个隐藏层,每层都有数百个神经元,没有足够多的神经元,网络无法拟合这么复杂的非线性函数,不可能将31个观察值正确的映射到6个动作。但是,神经元过多,将花费更多的时间训练,还容易得到过拟合的逻辑。所以,如何选择网络结构,包括网络层的数量,各层如何连接,以及每层神经元的数量等等,需要丰富的经验和知识找到最佳平衡点,使训练即可行又有效。 - 神经网络的学习过程。策略函数的学习过程,可以选择仿真或真实行走的方式。方法是让机器人不断行走,不断调整策略函数里的参数w和b,直至得到能使机器人正常行走的网络模型(策略函数)。一般监督学习的样本带有标签,可以直接根据预测与标签构造损失函数,再通过反向传播求损失函数对参数w和b的梯度。强化学习没有这种逐样本的标准答案,但没有监督标签不等于没有损失函数。环境给出 reward,算法再把 reward 加工成 return 或 Advantage,并构造可反向传播的策略损失,例如 $L_{policy}=-A_t\log\pi_\theta(a_t\mid s_t)$。反向传播穿过的是策略网络输出的 log-prob,而不是环境或 reward 本身。
- 奖励函数。奖励函数是人工精心设计的外部反馈信号,用于告诉智能体当前行为或整段轨迹有多好;它不是监督学习中的标签,也不直接等于最终用于反向传播的 loss。此例已经设计好的奖励函数是$ r_t = v_x -3y^2 - 50z^2 + 25xx - 0.22xx $,其中 $v_x$ 是前进速度,$v_x$ 越大,机器人走得越快。y是侧向位移,使机器人沿着一条直线移动,不向左右偏移,越小越好。z是机器人重心的垂直位移,是要机器人的躯干保持一定的高度,不摔倒、不跳跃或蹲着走路,越小越好。其余设置,这里不逐一深究。总之,这个奖励函数值越大,机器人走的就越好。奖励函数非常重要,但其设置是个难点,需要丰富的经验和专业知识。
- 策略函数的学习过程。现在,策略函数是一个神经网络(多层感知机),策略能否做出正确的动作指令,取决于网络里的所有参数w和b。环境通常不在策略网络的可微计算图中,因此不能直接求 reward 对w和b的梯度。策略梯度使用 log-derivative trick,把“提高期望回报”转换成“按 return 或 Advantage 加权采样动作的 log-prob”,再通过这个策略损失更新参数。就这样反复采样、评估和更新,最终得到能做出较好指令的策略网络。
具体作法大意是
- 输入31个环境值;
- 网络计算得到6个指令,执行指令改变了环境,检 测得到了31个新环境值;
- 根据一段交互得到的 reward 计算 return 或 Advantage;
- 用 Advantage 加权动作的 log-prob,构造策略损失并反向传播;
- 修改网络参数w和b,返回到1进行下一轮采样。 就这样,代理不断与环境交互,不断修改策略的参数。强化学习的过程就是不断优化策略的过程。环境检测到的新状态和 reward 虽然没有与策略网络直接连成可微计算图,但策略梯度可以利用采样动作的 log-prob,将这些反馈转换成可用于更新策略参数的梯度估计。
PS: rl和dl都是在想办法,算一个loss,优化w和b。 李宏毅老师提到 ml 约等于looking for a funtion, 对监督学习 label = func(input), 对rl来说,action=func(observation)。
什么是强化学习
如果只用一句话概括,强化学习就是:让模型在与环境的持续交互中,通过奖励反馈不断修正策略,最终最大化长期回报。
强化学习和监督学习最大的不同在于:监督学习面对的是静态训练集,而强化学习面对的是一个闭环系统。当前策略会影响你接下来看到的状态、动作和奖励,所以“训练数据”本身会随着策略变化而变化。
如何学习
Agent learns to take action to maximize expected reward. 单从训练视角看,RL 和 supervised learning 一样,也可以粗略理解成三步:function with unknown variable;define loss / signal from training data;optimization。

强化学习并不是根据“标准答案标签”来学,而是根据和环境交互得到的反馈来学。它优化的是累积奖励,而不是“这一步对不对”。也正因为如此,RL 往往更难收敛:奖励信号是否准确、参数更新是否平稳、交互环境是否稳定,都会直接影响训练效果。
如果你能收集很多<s,a->r> training data, 就可以监督学习Agent(如果agent 是一个network的话),不过一般不直接用r,我们用A来表示你有多希望s时采取动作a,<s,a->A>,在实践中,A有多种表示方式。
- r 直接作为A,缺点是会导致actor 比较短视

- G 作为A,缺点是越靠前的a的A越大,也不符合实际。

- 离a越远的r打一下折扣

- G是绝对值,不能直接用,比如一次考试你单说考了80分其实说不清楚你考的好与差,所以要对G标准化一下,一个简单的方法是减去一个baseline。,但如何选baseline也有很多花样了(下文会考)。

- 但其实这么做还有问题,比如对于下围棋来说,大部分a的$r_i$都是0,最后最后一步的a的r是1(赢)或-1(输)。所以A的花活很多,甚至专门安排一个模型来学习。
留下评论