【ziuno】强化学习入门—超级马里奥

强化学习入门—超级马里奥

【ziuno】强化学习入门—超级马里奥_第1张图片

对象抽取:马里奥、金币、板栗仔(蘑菇怪)

术语

  • 智能体-Agent:马里奥
  • 状态(S或s)-State:当前游戏画面
  • 动作(A或a)-Action:智能体(马里奥)的,左、右、跳(简化)
  • 策略-Policy:根据状态,决定该采取的动作
  • 奖励(R或r)-Reward:执行动作后,游戏给予奖励,例如吃金币加分
  • 轨迹-Trajectory:包括每一步的状态、动作、奖励。

智能体循环该过程:根据状态s,采取策略,执行动作a,获得奖励r,状态变化。

策略-Policy

  • Policy:记为 π \pi π函数(概率密度函数)
    π ( a ∣ s ) = P ( A = a ∣ S = s ) \pi(a|s)=P(A=a|S=s) π(as)=P(A=aS=s)

例:设在某个时刻 t t t π \pi π的概率密度

  • π ( 左 ∣ s t ) = 0.2 \pi(左|s_t)=0.2 π(st)=0.2
  • π ( 右 ∣ s t ) = 0.1 \pi(右|s_t)=0.1 π(st)=0.1
  • π ( 跳 ∣ s t ) = 0.7 \pi(跳|s_t)=0.7 π(st)=0.7

结论:马里奥更可能跳

强化学习目标:学习 π \pi π函数

奖励-Reward

人为设定(超参数)

  • 吃一个金币:R=+1
  • 到达终点:R=+10000
  • 死亡(比如:碰到怪):R=-10000
  • 其他(无事发生):R=0

赢得游戏的奖励较大,能够激励学到的 π \pi π倾向于赢得游戏而不是吃金币

假设:

  • 如果马里奥向右走,碰到怪(假设怪向左走),R=-10000
  • 如果马里奥跳,碰到金币,R=1

分析1:

  • 对于马里奥: 执 行 动 作 → 状 态 变 化 → 获 得 奖 励 执行动作\rightarrow 状态变化 \rightarrow 获得奖励
  • 对于蘑菇怪:向左走,也导致状态变化,进而影响奖励(蘑菇怪并非智能体,而是游戏本身设定导致状态变化的因素)

马里奥是否跳由 π \pi π决定,但蘑菇怪往左或往右由环境自己决定,玩家并不知道,因此统一归因于上一状态。

结论1:时刻 t t t的奖励 R t R_t Rt取决于 S t S_t St A t A_t At

状态转移-State transition

状态转移(状态变化):不同状态间的跳转
根据分析1得:下一状态 s ′ s' s取决于状态 s s s和动作 a a a
s ′ s' s可能的概率分布:
p ( s ′ ∣ s , a ) = P ( S ′ = s ′ ∣ S = s , A = a ) p(s'|s,a)=P(S'=s'|S=s,A=a) p(ss,a)=P(S=sS=s,A=a)

概念

回报- U t U_t Ut:从时刻 t t t到游戏结束的累积奖励

回报- U t U_t Ut

U t = R t + R t + 1 + R t + 2 + R t + 3 + ⋯ U_t=R_t+R_{t+1}+R_{t+2}+R_{t+3}+\cdots Ut=Rt+Rt+1+Rt+2+Rt+3+

提问:马里奥吃金币的顺序应该如何设计?
答案:优先吃距离最近的,再吃距离远的
结论2:越近的奖励越优先考虑,即权重更高,相对地,越远的奖励权重越低
即: 权 重 ( R t ) > 权 重 ( R t + 1 ) 权重(R_{t})>权重(R_{t+1}) (Rt)>(Rt+1)

不妨假设: γ ∈ ( 0 , 1 ) \gamma\in(0,1) γ(0,1)
得: U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + ⋯ U_t=R_t+\gamma R_{t+1}+\gamma^2 R_{t+2}+\gamma^3 R_{t+3}+\cdots Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+
(满足结论2)
γ \gamma γ:折扣率(超参数)

Agent的目标是使 U t U_t Ut尽可能大

扩展结论1得: U t U_t Ut取决于从 t t t时刻开始未来所有的状态与动作
所以, U t U_t Ut是一个随机变量

提问:如何评估当前 U t U_t Ut的高低?
答案:求期望(大概过程是对未来所有的 π ( a ∣ s ) \pi(a|s) π(as) p ( s ′ ∣ s , a ) p(s'|s,a) p(ss,a)求积分)

分析:在时刻 t t t,若当前状态 s t s_t st和当前动作 a t a_t at已知

  • 根据 p p p,下一状态 s t + 1 s_{t+1} st+1取决于 s t s_t st a t a_t at p p p取决于环境
  • 根据 π \pi π,下一步采取的动作 a t + 1 a_{t+1} at+1取决于 s t + 1 s_{t+1} st+1 π \pi π取决于智能体

结论:对于智能体, U t U_t Ut π \pi π有关,而与 p p p无关

因此: E ( U t ) = Q π E(U_t)=Q_\pi E(Ut)=Qπ

智能体面对状态 s t s_t st时采取的动作定义为 a t a_t at

动作价值函数- Q π Q_\pi Qπ

Action-value Function
E ( U t ) = Q π E(U_t)=Q_\pi E(Ut)=Qπ Q π Q_\pi Qπ取决于 π \pi π
因此,智能体的目标:寻找最佳的 π \pi π使 Q π Q_\pi Qπ最大
即: Q ∗ = max ⁡ π Q π Q^*=\max_\pi Q_\pi Q=πmaxQπ

进一步,若 s t s_t st a t a_t at未知,则得到公式2 Q π ( s t , a t ) = E ( U t ∣ S t = s t , A t = a t ) Q_\pi(s_t,a_t)=E(U_t|S_t=s_t,A_t=a_t) Qπ(st,at)=E(UtSt=st,At=at)
结论:若已知 π \pi π函数,则可以对当前状态的所有动作进行评分,判断不同动作的好坏
推论:智能体根据 Q ∗ Q^* Q对动作的评价作出决策

分析: Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at) π \pi π s t s_t st a t a_t at有关

  • a t a_t at可能是:左、右、跳,其中之一,也是一个随机变量
  • a t a_t at视为随机变量 A A A,再对 Q π Q_\pi Qπ求期望,则 E A [ Q π ( s t , A ) ] E_A[Q_\pi(s_t,A)] EA[Qπ(st,A)]只与 s t s_t st π \pi π有关

定义: V π ( s t ) = E A [ Q π ( s t , A ) ] V_\pi(s_t)=E_A[Q_\pi(s_t,A)] Vπ(st)=EA[Qπ(st,A)]
其数值意义:当前局势如何(与采取的动作无关)

状态价值函数- V π V_\pi Vπ

State-value function
结论:

  • π \pi π固定时, V π V_\pi Vπ越大,表示可能快赢了,越小表示可能快输了
  • V π V_\pi Vπ的平均值越大,表示 π \pi π越好

运行

问题:马里奥如何执行动作?
答案:两种方法

  1. s t s_t st输入到 π ( a ∣ s ) \pi(a|s) π(as)中,得到动作的概率分布,随机取样选择动作 a t a_t at
  2. 输入 s t s_t st,计算得到 a t = arg max ⁡ a Q ∗ ( s t , a ) a_t=\argmax_a Q^*(s_t,a) at=aargmaxQ(st,a)

【后续内容,持续学习更新中~】

P.S.

黄色表示超参数

笔者语

正式:本文描述中省略了大量笔者认为不利于理解的部分,替换为简易表达,具体概念必然存在不完善的部分,但不影响基础入门理解
吐槽:找了很多博客,但是概念过多,或过于啰嗦,越看越困,感觉不易于理解,索性自己写个简易版的,加入了一些自己的解读,未必准确,但是方便理解,也算是给自己挖个坑吧~
简化前原文

你可能感兴趣的:(NLP,笔记,强化学习,自然语言处理)