QLearning和DQN

QLearning

QLearning是强化学习中的一种Value-Based算法,通过计算出一张Q-Table表,用来记录每种状态下采取每个动作能够获得的最大奖励,然后通过这张表就能找到每个状态下的最优动作,从而保证最后的收益最大化
参数:
actions:所有动作集合
learning_rate:学习率, 位于[0,1]之间,值越小,意味着旧的信息越重要
discount_factor:折扣因子,位于[0,1]之间,表示远见程度,值越小,意味着当下的奖励越比未来的奖励重要
epsilon:贪婪系数,位于[0,1]之间,采用贪心策略的概率
q_table:Q-Table表,用来记录每种状态下采取每个动作能够获得的最大奖励,初持状态全部为0

DQN(Deep Q Network)

QLearning问题:Q-Table的大小等于状态数量*动作数量。当状态和动作数量很多的时候,Q-Table就会变的很大,查找和存储都会消耗大量的时间和空间。
QLearning本质上是建立了个(状态+动作)与(在该状态下执行该动作所获得最大奖励)之间的映射关系,抽象来看就是在输入参数和输出参数之间建立了一种映射关系,而这恰好就是神经网络所擅长的,于是自然而然的想到能不能利用神经网络来取代Q函数的计算,进一步的,我们计算出Q-Table后还需要根据Q-Table来选择当前状态下的最优动作,那能不能直接实现当前状态到最优动作之间的端到端映射呢?这种方法就叫做Deep Q Network。

具体:
QLearning:Q(s,a)=Q(s,a)+alpha*[r+gammamaxQ(s’,a’)-Q(s,a)]
求解出一个函数来近似Q函数
f(s,a,w)≈Q(s,a),w是一个参数矩阵,比如最简单的线性函数:
Q(s,a) ≈f(s,a,w)= w1
s+w2a+w3
实际不可能这么简单,f应该是一个非常复杂的函数,所以可以采用神经网络来表示这个函数,神经网络可以从大量的样本数据中拟合出一个最相似的f来表示Q,而这需要一个前置条件:确定损失函数(判定f接近Q的标准)
借鉴QLearning的算法,利用r+gamma
maxQ(s’,a’)-Q(s,a)来作为损失函数(因为我们的目标也是为了让Q值逼近目标Q值),即
r+gammamaxQ(s’,a’,w)-Q(s,a,w)
为了方便后期数学计算的方便,取个平方,最终
L(w)=E[(r+gamma
maxQ(s′,a′,w)−Q(s,a,w))^2]
有了损失函数,那么就可以开始训练神经网络了

DQN与QLearning算法的不同点

  • 用神经网络取代Q-Table来计算Q值,解决维度爆炸的问题
  • 记忆库 ,用于存储过去的经验,记忆库有两个特点
    1. 随机抽取,可以移除数据之间的相关性。如果我们采用的不是随机抽取,有可能我们获取到的数据都是连续相关的,那么就可能出现训练的数据都是某个状态下的数据,那么训练就会失败,通过随机抽取,可以切断这种相关性,保证训练数据样本分布的均匀。
    2. 滚动更新,即用最新的记忆替换掉最老的记忆,因为我们的记忆库肯定是有限的,不可能无限存储记忆,因此需要对记忆进行更新,而正常的逻辑里面,新的记忆会比老的记忆更有价值(当然,这个并不是绝对的,也有可能老的记忆里面也有重要的经验,这个属于DQN后期的优化内容)
  • 暂时冻结 q_target 参数 ,让目标固定,使神经网络更好的收敛

学习记录–引用自学长的微信朋友圈笔记加上自己的理解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值