【DataWhale打卡】第一天:学习周博磊讲的强化学习结合《深入理解AutoML和AutoDL》这本书中的强化学习的章节总结了基础部分。
参考资料:https://github.com/zhoubolei/introRL
先导课程:线性代数、概率论、机器学习/数据挖掘/深度学习/模式识别
编程基础:Python, PyTorch
强化学习和监督学习有很大的区别:
监督学习需要提供数据和对应的标签,训练数据和测试数据是独立同分布的,从而进行模式和特征的学习。
强化学习不同,强化学习没有直接的标签进行指导,并且数据不是独立同分布的,前后数据有比较强的关系。强化学习可以在环境中进行探索和试错,根据实验的结果提取经验,从而学习到最佳策略。
监督学习 | 无监督学习 | 强化学习 | |
---|---|---|---|
输出值 | 标签 | 无 | 奖励值 |
标签/奖励 | 人类提供标注 | 无标签 | 延迟奖励 |
经验 | 无 | 无 | 有 |
损失值 | 有 | 无 | 无 |
输入 | 独立同分布 | 独立同分布 | 前后依赖 |
强化学习的目标是训练一个agent,能够在不同的情况做出最佳的action,从而让系统给出的reward值最大化。
流程如下:agent会观察环境得到observation,然会采取一个action,环境受到这个action的作用,会反馈给agent一个reward,同时环境给出的observation也发生了改变。循环往复,agent目标是为了从环境中获得最高reward奖励。
存在两大主体,智能体Agent和环境Environment,整个过程是序列化的:
S t − A t − R t − S t + 1 − A t + 1 − R t + 1 − S t + 2 … S_t-A_t-R_t-S_{t+1}-A_{t+1}-R_{t+1}-S_{t+2}\dots St−At−Rt−St+1−At+1−Rt+1−St+2…
智能体目标就是最大化奖励函数 G t G_t Gt:
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + ⋯ = ∑ k = 0 ∞ γ k R t + k + 1 G_t=R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\dots=\sum_{k=0}^\infin \gamma^k R_{t+k+1} Gt=Rt+1+γRt+2+γ2Rt+3+⋯=k=0∑∞γkRt+k+1
也就是说当前时序为t的时候,最大化奖励函数就是从当前一直到最后一个状态(完成一个episode)所获取的所有Reward。 γ \gamma γ 是一个0-1之间的数,叫做奖励衰减因子。如果等于0,代表这个Agent只考虑当前即时结果,不考虑目标长远。如果等于1,代表这个Agent考虑的是长远利益,放眼整体。
强化学习的特点:
强化学习主要分为动态规划、蒙特卡罗法、时序差分法。强化学习中,从一个状态s转化到另外一个状态s’不仅和当前状态s和动作a有关,还与之前的状态有关。但是考虑这么多状态会导致模型非常复杂,所以引入马尔可夫性来简化问题,也就是一个假设 H H H, 即转化到下一个状态s‘的概率仅仅与当前的状态s有关,而和之前的状态没有关系。
解决马尔科夫决策过程有两个分类,见上图,需要解释的是Model-based方法和Model-Free方法。
Model-based方法代表这个问题中,必须能够获得环境的状态转化方程,需要对环境进行建模,比如在仿真环境中训练机械手臂。agent学习的模型可以提高对状态转移函数和奖励函数的估计的准确性。这样就可以通过动态规划算法求解。
有模型的强化学习方法可以对环境建模,使得该类方法具有独特魅力,即“想象能力”。在免模型学习中,智能体只能一步一步地采取策略,等待真实环境的反馈;而有模型学习可以在虚拟世界中预测出所有将要发生的事,并采取对自己最有利的策略。
Model-Free方法代表不需要对环境进行建模,只需要经验,也就是实际或者仿真的与环境进行交互的整个样本序列。免模型学习通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。免模型学习的泛化性要优于有模型学习,原因是有模型学习算需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了有模型学习算法的泛化性。
判断方法:在Agent执行动作前,看其能否对下一步的状态和回报做出预测,如果可以预测那就是model-based方法,如果不能,那就是model-free的方法。
Q: 有模型强化学习和免模型强化学习有什么区别?
A: 针对是否需要对真实环境建模,强化学习可以分为有模型学习和免模型学习。
from: https://blog.csdn.net/ppp8300885/article/details/78524235
Q: Q-learning也是对下一步的状态和奖励在做预测吗?
A: 无模型的RL是不会显式对Reward function和transition function进行建模, Q-learning的Q值更新是用的: 当前返回的reward(真实值)+下一步状态Q值(这个是异策略估计的), 这个reward是执行完a动作后的真实值, 并不是自己拟合的reward function给出的. AlphaGo为啥是model-based, 因为他依赖蒙特卡罗树去估计棋局未来的演化(transition function)和赢率(reward function)
从Agent的决策方式来看,可以分为三种:
一个常用的强化学习问题解决思路是,先学习环境如何工作,也就是了解环境工作的方式,即学习得到一个模型,然后利用这个模型进行规划。
State和Observation并不是等价的概念:
引入历史的概念,历史是观测、行为、奖励的序列:
H t = O 1 , R 1 , A 1 , … , A t − 1 , O t , R t H_t = O_1,R_1,A_1,\dots,A_{t-1},O_t,R_t Ht=O1,R1,A1,…,At−1,Ot,Rt
Agent采取的当前动作会依赖之前的历史,所以整个游戏的状态可以看做关于历史的函数:
S t = f ( H t ) S_t=f(H_t) St=f(Ht)
状态(state)s是对环境的整体描述,不会有其他隐藏的信息。观测(observation)o是状态的部分描述,可能会遗漏一些信息。
举个例子:在机器手臂抓杯子的案例中:
观测可以是通过摄像头得到的RGB像素值矩阵,来表示一个视觉的观测。
状态则是机器手臂每个关节的角度和速度的表示。
环境状态和智能体状态:
S t e = f e ( H t ) S t a = f a ( H t ) S_t^e=f^e(H_t) \\ S_t^a=f^a(H_t) Ste=fe(Ht)Sta=fa(Ht)
当满足 O t = S t a = S t e O_t=S_t^a=S_t^e Ot=Sta=Ste的时候,称这种状态为Full Observability,agent可以观测环境的全部状态,也就是马尔可夫决策过程MDP。
同时也有Partial Observation, agent无法观测环境中的全部状态,只能看到部分状态比如说Atari游戏中只能观测到屏幕上的像素,无法获取小球位置(这个状态就不可见)。这种问题是部分可见的马尔可夫决策过程POMDP。
不同的环境/游戏可以采取的动作不同。有效动作的集合经常被称为动作空间(action space)
。像 Atari 和 Go 这样的环境有离散动作空间(discrete action spaces)
在其他环境,比如在物理世界中控制一个 agent,在这个环境中就有连续动作空间(continuous action spaces)
。
RL Agent组成部分有policy函数(负责选取下一步动作)、价值函数(对当前状态进行评估,估计以后的收益大概有多少)、模型(表示了Agent对这个环境状态进行了理解)
Policy决定了Agent的行为,根据看到的状态,得到应该采取的行为。主要分为两种:
Q: 既然有确定性策略,采取能让奖励极大化的action不就可以了,为什么要加入随机性呢?
A: 引入随机性是为了更好的探索环境,随机性可能会带来负面收益,但是也可能会带来巨大的正面收益,为了探索这种可能性,所以随机性策略更好。
价值函数是期望,在看到当前状态s的时候,直到游戏结束期望获得的reward值就是价值函数 V π ( s ) V^\pi(s) Vπ(s)。
V π ( s ) = E π [ G t ∣ S t = s ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] V_\pi(s)=E_\pi[G_t|S_t=s]=E_\pi[\sum_{k=0}^{\infin}\gamma^kR_{t+k+1}|S_t=s] Vπ(s)=Eπ[Gt∣St=s]=Eπ[k=0∑∞γkRt+k+1∣St=s]
以上公式中的 γ \gamma γ上文已经讲过了,是奖励衰减因子。因为希望能够在尽可能短的时间内,得到更多的奖励。
当然价值函数只考虑s也是不足的,Q函数综合考虑了状态和动作的影响,代表在当前状态s下,采取动作a以后的期望得到的奖励值。
Q π ( s , a ) = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] Q_\pi(s,a)=E_\pi[\sum_{k=0}^{\infin}\gamma^k R_{t+k+1}|S_t=s,A_t=a] Qπ(s,a)=Eπ[k=0∑∞γkRt+k+1∣St=s,At=a]
模型决定了下一个状态是什么,下一步的状态取决于当前的状态和当前采取的行动。主要由两部分组成:
有了Model也就代表可以用Model-based方法进行求解,可以使用动态规划的方法求解问题。
在强化学习里面,Exploration
和Exploitation
是两个很核心的问题。
因为在刚开始的时候强化学习 agent 不知道它采取了某个行为会发生什么,所以它只能通过试错去探索。所以 Exploration 就是在试错来理解采取的这个行为到底可不可以得到好的奖励。Exploitation 是说我们直接采取已知的可以得到很好奖励的行为。所以这里就面临一个 trade-off,怎么通过牺牲一些短期的 reward 来获得行为的理解。
Rollout:从游戏当前帧,生成很多局游戏,让当前的Model和环境交互,得到很多的观测(轨迹),得到最终的最终reward,从而可以训练agent。
感谢DataWhale的工作人员的组织,以及群友的耐心解答,感谢!(鞠躬)
https://github.com/cuhkrlcourse/RLexample
https://github.com/datawhalechina/leedeeprl-notes
https://blog.csdn.net/ppp8300885/article/details/78524235
https://datawhalechina.github.io/leedeeprl-notes/#/chapter1/chapter1