强化学习公开课学习日志

前言

希望自己可以更新得快一点

在这里插入图片描述

公开课

David深度强化学习算法学习

David Silver强化学习公开课中文讲解及实践

示例代码资源地址
或者
码云镜像

课件

0908 第三课—动态规划

辅助理解

代码理解

利用格子世界举例来描述DP

  1. edition_1—策略评估
  • 首先初始化状态/行为空间 以及Value值
  • 然后使用n次迭代计算来评估一个MDP在给定策略Pi(此时策略pi为平均策略–> 每个行为都需要尝试)下的状态价值,初始时价值为V
  • update_V:在每一次迭代的过程中进行Value值的更新(给定一个MDP和一个策略,更新该策略下的价值函数V)
  • compute_v:在所有的状态中进行遍历来执行compute_v函数 然后来进行每一个状态的Value的更改(给定MDP下依据某一策略Pi和当前状态价值函数V计算某状态s的价值)
  • 每个行为进行遍历,将 概率 和 计算当前行动和状态下的’Q值’ 相乘 然后将所有行为进行完成后得到的v_s值相加 这样便得到了一个状态下所能得到的Value值
  • compute_q:计算当前行动和状态下的’Q值’ 具体执行方式如下:遍历环境中所有下一步的状态,然后需要利用get_prob函数(其中通过dynamics函数来与状态交互,从而更新下一步行为将会去向哪里)来将行为和下一步的状态(s_prime)一一对应,从而准确的将每个向前看一步‘Q值’计算出来;然后将目前能得到的即时奖励和向前走一步的奖励(会带有折扣)相加,从而完成该状态的Value的更新,进而完成每一个迭代的更新。
  1. edition_2—价值迭代
    价值迭代和策略评估中贪心算法的区别:价值迭代缺少get_prob函数,只看到’Q值’最高的状态然后直接将其Value价值改变,而策略评估中贪心算法是将计算得到的’Q值’还要乘以分别对应的概率然后得出Value
  2. edition_3—策略迭代
    套壳策略评估的贪心算法

0911 第四课—model-free prediction

Q:MC不对自身进行循环?

0912 Episode.2

  • …MC/TD/TD( l a m d a lamda lamda)需要看代码理解
  • 下午阅读代码,怎么老看手机…

在这里插入图片描述
主要看的是MC对于BlackJack游戏的策略评估

分为两大部分

  1. 建立游戏环境—先不赘述
  2. 设计MC评估算法
    在每次游戏完成后取出每代和奖励值,然后在每代中更新 Ns (状态被访问的次数节点)和 V (状态价值)
    两者更新过程类似,先通过在字典中查询该状态量是否存在,如果不存在则先记为状态出现次数 / 该状态得分为0 / 0,如果存在则直接拿出来使用;然后对当前状态使用次数加1,再利用下述公式进行更新Value,最后得到Value值

在这里插入图片描述

  • 画图评估效果—

0912 model-free control

  • Forward View Sarsa( l a m b a lamba lamba)
    ?: 对未来无限步进行预估 --> 指的是在一代中需要对某个状态对应的’Q值‘进行更新时,要利用之后走过的值 × 权重来更新
  • Backward View Sarsa( l a m b a lamba lamba)
    想法 --> 找出频繁出现的有利步,消减出现少的’无用步’,以此来更新eligibility traces
  • Sarsa( l a m b a lamba lamba)相比于Sarsa在值的更新上更加迅速(更加快速的实现信息倒退)
  • 0913 六种方法的细分不能体会到

0913 On-policy MC control代码学习

第五课代码

在此部分主要学习同策略21点游戏的蒙特卡洛学习策略迭代

  • Q1:这一行 e p s i l o n epsilon epsilon的变化不太懂,可能跟策略梯度有关?
epsilon = 1.0/(1 + 4 * math.log10(1+player.total_learning_times))
  • Q2: e p s i l o n epsilon epsilon探索代码概率设置也非常奇怪
def epsilon_greedy_pi(A, s, Q, a, epsilon = 0.1):
    m = len(A)
    # 利用greedy_pi()返回贪婪行动的概率
    greedy_p = greedy_pi(A, s, Q, a)
    #print("greedy prob:{}".format(greedy_p))
    # 如果没有比目前行动更优的选择,则进行epsilon探索
    if greedy_p == 0:
        return epsilon / m
    n = int(1.0/greedy_p)
    # greedy_p贪婪行动的概率 比如两个行动带来的Q一样大 那么采取哪个动作都是相同的概率
    return (1 - epsilon) * greedy_p + epsilon/m
  • Q3:通过最大的Q值选择最优策略 --> 最大Q值会增加被选中的概率
def greedy_pi(A, s, Q, a):
    '''依据贪婪选择,计算在行为空间A中,状态s下,a行为被贪婪选中的几率
    考虑多个行为的价值相同的情况
    '''
    #print("in greedy_pi: s={},a={}".format(s,a))
    max_q, a_max_q = -float('inf'), []
    for a_opt in A:# 统计后续状态的最大价值以及到达到达该状态的行为(可能不止一个)
        # 拿到Q值
        q = get_dict(Q, s, a_opt)
        #print("get q from dict Q:{}".format(q))
        if q > max_q:
            max_q = q
            # 最大的Q值对应最优的行为
            # 当刚开始一局时,此时先选择的是q=0,a_opt=A[0]
            a_max_q = [a_opt]
        elif q == max_q:
            #print("in greedy_pi: {} == {}".format(q,max_q))
            a_max_q.append(a_opt)
    n = len(a_max_q)
    if n == 0: return 0.0
    return 1.0/n if a in a_max_q else 0.0
  • 梳理一下该算法的过程:

建立游戏—MC玩家、庄家、casino设置,进行num局游戏

每局游戏中,为玩家庄家发牌,玩家庄家行为判定,进行奖励判定;同时每局游戏后将代数(包含s,a例如[(‘10_20_False’, ‘继续叫牌’))奖励拿出送入Q表更新

其中玩家行为是体现控制的核心部分,由greedy_policy()实现–>通过对不同行为的选择概率利用先前的Q值进行改变,从而改变选择的行为

  • 画图算法—要再看一看

0915 gridworld—model-free control

建立地图–> 运行测试算法…(也没啥好写的,只有亿点点细节要注意…)

0918 跳级到Actor-Critic算法

David的课太长了…
在这里插入图片描述
需要先熟悉Actor-Critic的算法流程,因此找了莫烦文档莫烦视频来学习

看了一天代码…

TensorFlow的感想,

  • TensorFlow1.2.0/1.3.0的sess.run很有意思,竟然是执行该函数才会调用之前写好的函数语句,而且在Debug中不跳转,另外观察张量也不方便…有点抽象

0922 PPO

书上没介绍,看看莫烦的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值