1031 --- AlexNet
网络:
summary : 信息的压缩
公开课
David深度强化学习算法学习
0908 第三课---动态规划
代码理解
利用格子世界举例来描述DP
- 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的更新,进而完成每一个迭代的更新。
- edition_2---价值迭代
价值迭代和策略评估中贪心算法的区别:价值迭代缺少get_prob函数,只看到'Q值'最高的状态然后直接将其Value价值改变,而策略评估中贪心算法是将计算得到的'Q值'还要乘以分别对应的概率然后得出Value - edition_3---策略迭代
套壳策略评估的贪心算法
0911 第四课---model-free prediction
Q:MC不对自身进行循环?
0912 Episode.2
- ...MC/TD/TD(\(lamda\))需要看代码理解
- 下午阅读代码,怎么老看手机...
主要看的是MC对于BlackJack游戏的策略评估
分为两大部分
- 建立游戏环境---先不赘述
- 设计MC评估算法
在每次游戏完成后取出每代和奖励值,然后在每代中更新Ns
(状态被访问的次数节点)和V
(状态价值)
两者更新过程类似,先通过在字典中查询该状态量是否存在,如果不存在则先记为状态出现次数 / 该状态得分为0 / 0,如果存在则直接拿出来使用;然后对当前状态使用次数加1,再利用下述公式进行更新Value,最后得到Value值
- 画图评估效果---
0912 model-free control
- Forward View Sarsa(\(lamba\))
?: 对未来无限步进行预估 --> 指的是在一代中需要对某个状态对应的'Q值‘进行更新时,要利用之后走过的值 × 权重来更新 - Backward View Sarsa(\(lamba\))
想法 --> 找出频繁出现的有利步,消减出现少的'无用步',以此来更新eligibility traces - Sarsa(\(lamba\))相比于Sarsa在值的更新上更加迅速(更加快速的实现信息倒退)
- 0913 六种方法的细分不能体会到
0913 On-policy MC control代码学习
在此部分主要学习同策略21点游戏的蒙特卡洛学习策略迭代
- Q1:这一行\(epsilon\)的变化不太懂,可能跟策略梯度有关?
epsilon = 1.0/(1 + 4 * math.log10(1+player.total_learning_times))
- Q2:\(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
书上没介绍,看看莫烦的