强化学习入门知识

随机抽样

from numpy.random import choice

classes = ['R','G','B']
size = 50
p = [0.1, 0.6, 0.3]

result = choice(classes, size, p)

print(type(result), result.shape)

result

reinforcement learning 专有名词

  • state:状态

  • action:行为

  • Agent:智能体,行为的主体

  • episode:回合

  • policy:根据state做出决策

    policy function Π \Pi Π :概率密度函数,条件概率

    Π ( a ∣ s ) = P ( A = a ∣ S = s ) \Pi(a|s) = P(A=a|S=s) Π(as)=P(A=aS=s) :在状态s下做出a行为的概率

    强化学习的目的就是通过训练得到policy函数,随机性

  • reward:奖励,强化学习旨在得到最高的奖励

  • state transition:状态转换,一个动作后给出一个新状态,随机性

    状态转移条件概率: 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)

    意思是在状态s下做出a行为得到s‘状态的概率

  • Agent & environment

    Agent在当前状态 S t S_t St下根据environment做出一个行为action a t a_t at,环境会根据这个
    action给Agent一个奖励Reward r t r_t rt

  • 游戏轨迹trajectory (state,action,reward)——一个序列

  • Return 回报
    未来累计回报: U t = R t + R t + 1 + R t + 2 + . . . U_t=R_t+R_{t+1}+R_{t+2}+... Ut=Rt+Rt+1+Rt+2+...

    由于未来回报的不确定性,所以要使用折扣回报来就按未来的累计回报

    • Discounted return
      γ \gamma γ: discount rate 是一个超参数,需要自己调整设置

      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}+... Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+...

      当奖励未知时,用大写字母R表示,这是一个随机变量,在结束后,奖励变为已知,此时用小写字母r表示,U也是随机变量

RL中的随机性

  • 行为随机(action):对于给定的状态,agent做出的行为是随机的 P ( A = a ∣ S = s ) = π ( a ∣ s ) P(A=a|S=s)=\pi(a|s) P(A=aS=s)=π(as)
  • 状态转换随机(state transition):对于给定的状态和行为状态的转换是随机的 P ( S ′ = s ′ ∣ S = s , A = a ) = p ( s ′ ∣ s , a ) P(S'=s'|S=s,A=a)=p(s'|s,a) P(S=sS=s,A=a)=p(ss,a)
    对于任意时刻i>t,回报是依赖于当前的状态和行为,也就是说在这个状态下做出这个行为所得到的回报

value function

  • 价值函数:Agent处于某种状态时的价值,状态值函数描述了给定状态的收获( G_t)的期望,状态值函数是针对策略而定义的,因为预期回报取决于策略
    v π ( s ) = E π ( Q t ∣ S t = s t ) v_\pi(s)=E_\pi(Q_t|S_t=s_t) vπ(s)=Eπ(QtSt=st)

  • Q ( s , a ) Q(s,a) Q(s,a):policy π \pi π的动作价值函数

根据策略 π 选择动作 a,则状态的动作值是预期回报

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)

U t U_t Ut是依赖于未来的状态S和未来的行为A

使用期望可以将 S t , A t S_t,A_t St,At给消去(连续函数是积分、离散的权重加)

Q π Q_\pi Qπ 依赖于policy函数和 s t , a t s_t,a_t st,at

已知policy函数 π \pi π,则 Q π Q_\pi Qπ会给当前状态下的action打分

  • Optimal action-value function最优动作价值函数

Q ∗ ( s t , a t ) = m a x π Q π ( s t , a t ) Q^*(s_t,a_t)=\mathop{max}\limits_\pi Q_\pi(s_t,a_t) Q(st,at)=πmaxQπ(st,at)

寻找最优的policy函数来让Q*对当前状态的的动作做出评价

Agent根据Q*对动作的评价来做出决策

  • State-Value Function 状态价值函数

    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π Q π Q_{\pi} Qπ的期望,A是随机变量,关于A求期望,消去A,V就是一个只关于 π \pi π
    和s的函数

    当前状态的价值,当前形势

    A   π ( ⋅ ∣ s t ) A~\pi (\cdot|s_t) A π(st)

    1. 当随机变量为离散型时: V π ( s t ) = ∑ a π ( a ∣ s t ) ⋅ Q π ( s t , a ) V_{\pi}(s_t)=\sum\limits_{a}\pi(a|s_t)\cdot Q_{\pi}(s_t,a) Vπ(st)=aπ(ast)Qπ(st,a)
    2. 当随机变量为连续型时: V π ( s t ) = ∫ π ( a ∣ s t ) ⋅ Q π ( s t , a ) d a V_{\pi}(s_t)=\int \pi(a|s_t) \cdot Q_{\pi}(s_t,a)da Vπ(st)=π(ast)Qπ(st,a)da
  • 总结:

    1. 动作价值函数:对于policy π, Q π Q_{\pi} Qπ表示在状态s下做出动作a的的价值
    2. 状态价值函数:对于policy π, V π V_{\pi} Vπ表示当前状态的好坏,比如说在围棋中,当前棋局的局势
    3. V π V_{\pi} Vπ可以评价策略π的好坏,其平均值越大表示策略policy越好

RL examples

使用RL来控制agent可以使用policy π 或者Q*两种方式,RL通过训练得到这两个来实现对智能体行为的控制

  1. policy π:根据当前给出的状态,使用π获取当前状态下做出动作的概率,根据概率随机选取一个动作让智能体agent执行
  2. Q*(s,a):根据当前给出的状态,对于所有的行为计算出其价值,选择最大价值的行为让智能体agent执行
    a t = a r g m a x a Q ∗ ( s t , a ) a_t=argmax_aQ^*(s_t,a) at=argmaxaQ(st,a)
import gym
env = gym.make('CartPole-v0')
type(env)
state = env.reset() #重置环境
for t in range(100): #每一轮循环,agent做出动作,环境更新状态
    env.render() #渲染,pygame窗口
    # print(state) #状态
    action = env.action_space.sample() #随机均匀抽样一个动作,实际中会使用policy或者Q*得到action
    state,reward,done,info = env.step(action) #agent做动作,返回信息

    if done: #游戏结束
        print("finished")
        break

env.close()
import gym
env = gym.make("CartPole-v1")
observation, info = env.reset(seed=42, return_info=True)

for _ in range(1000):
    env.render()
    action = env.action_space.sample()
    observation, reward, done, info = env.step(action)

    if done:
        observation, info = env.reset(return_info=True)
env.close()

总结

强化学习的目的:
学会控制agent,使agent基于当前状态s做出动作a,使其在未来能够得到尽可能多的奖励

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值