强化学习study

写作目的

看莫烦的强化学习代码,因为基础太差,就是听不懂,于是自己从头到尾扣了一遍理解,感觉清晰多了,感觉这倒是一个学习的好方法。
另,大家真的都能听懂吗,没有神经网络基础的纯小白那种。。。。。我是不是应该先啃一啃神经网络。。
不过真的感谢莫烦,不然我会更难,有时间想从头补一补

区别

q_learning使用q_table 记录下各状态的q值,适用于状态离散的情况(静态)
DQN需要一个网络,相当于函数,需要q值时临时生成(动态)

def choose_action(self, observation):
    # to have batch dimension when feed into tf placeholder
    observation = observation[np.newaxis, :]

    if np.random.uniform() < self.epsilon:
        # forward feed the observation and get q_value for every actions
        #%%%%%%%%%%%就是这里%%%%%%%%%%%%%%%%%%%
        actions_value = self.sess.run(self.q_eval, feed_dict={self.s: observation})
        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        action = np.argmax(actions_value)
    else:
        action = np.random.randint(0, self.n_actions)
    return action

算法理解

1、随机初始化网络,二者参数完全一样

2、先学习200轮,得到每一步动作,状态,奖励,后来的状态
每次选动作,都是通过一次网络,得到一个q_value,根据策略选动作,然后做动作得到下一状态、奖励和结束标志。这些信息存放进记忆仓库

3、到学习步开始学习:

  • 先检查是否到更新步(不是更新步学习估计网络,更新步更新现实网络)

  • 估计网络参数更新:
    1、随机选择部分记忆batch_memory(和之前选择的动作无关,只是学习历史数据)
    2、q_next即把下一状态放进fix网络里的q值(想要的是其中最大的值),q_eval把此时状态放进网络得q值(估计值)
    (q值为上下左右的评分值,按记忆时间排序)
    3、q_target先取估计网络的q_eval,再把相应动作位改成真实值(根据公式)
    4、此时q_target-q_eval即误差,可投入网络训练

  • 训练网络
    1、把batch_memory投入网络,用q_target作为真实q,计算loss,以此训练 估计网络
    2、记录此次训练的平均损失

代码链接

https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/DQN3/#学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值