强化学习笔记

目录

Q-Learning

DQN

拟合Q

评估方式

基本概念

业务实践

参考


Q-Learning

动态规划Dynamic Programming并且由此引出了Q-Learning算法。可能一些知友不是特别理解。那么这里我们再用简单的语言描述一下整个思路是什么。

为了得到最优策略Policy,我们考虑估算每一个状态下每一种选择的价值Value有多大。然后我们通过分析发现,每一个时间片的Q(s,a)和当前得到的Reward以及下一个时间片的Q(s,a)有关。有些知友想不通,在一个实验里,我们只可能知道当前的Q值,怎么知道下一个时刻的Q值呢?大家要记住这一点,Q-Learning建立在虚拟环境下无限次的实验。

DDQN:我们知道,DQN在基于target_model进行状态评估的过程中,首先要基于eval_model先选择最大Q(s_)对应的action,然后把这个action对应的最大Q(s_)值赋给eval_model要优化的action位置上,显然前后涉及的两个Q(s_)是相等的。这使得传统DQN在值函数估计上与真实值偏差较大。

DDQN稍作改变,将状态评估过程中,先根据ANN1选择最大Q(s_)对应的action,然后再根据选定的action的位置索引到target_model的Q(s_,a)对上,从而选出Q值(实际这个Q值在target_model这边可能并不是最大值)。这种操作,可以获得更准确地估计Q值。

Duel_DQN:将值函数分解成价值和优势,值函数在不同状况下对价值和优势的敏感程度不同,例如自动驾驶,在无其他汽车的路面上,价值对值函数的影响较大;若汽车靠近其他车辆,则优势对值函数的影响较大。它不像DoubleDQN改变的是算法,它改变的是网络结构,将原来的单Q输出,变成了双输出(价值和优势)

DQN

强化学习笔记_第1张图片

强化学习笔记_第2张图片

拟合Q

除了DQN中目标网络的存在外,神经拟合Q迭代仅使用可用历史观测值,不进行任何探索。换句话说,不需要有一个环境,只需要在训练步骤上循环:

D = historical data
for e in range(epochs):
  b = get_batch from D
  train_step(b)

而在DQN中有两个循环:

D = []
for e in range(max_episode):
  done = False
  s = env.reset()
  while (!done)
   a = policy.get_action(s)
   s',r, done = env.step(a)
   D.append(s,a,r,s')
   if D.size > min_replay_mem:
    b = get_batch
    train_step(b)

train_step中,两者都获得target值,然后使用欧几里德损失函数。为了获得DQN值,target使用目标网络,尽管拟合的Q迭代使用当前策略。

实际上,神经拟合Q迭代被认为是一种批处理RL算法,它假设没有任何可用的环境。

评估方式

学习目标与衡量方法

强化学习笔记_第3张图片

在自定义环境中进行强化学习训练时,可以使用多种方法来评估训练过程的好坏。

一种常见的方法是使用指标来评估模型的性能,这些指标可以是平均奖励、平均收益、最大收益或者其他指标。在训练过程中,可以定期计算这些指标,然后通过比较不同时期的指标值来判断训练的好坏。

另一种方法是使用可视化工具来可视化训练过程。例如,可以将训练过程中的损失值、奖励值或者其他指标作为图表展示出来。这样就可以更直观地看出训练过程中的趋势,从而判断训练的好坏。

此外,还可以使用真实环境或者模拟环境来评估模型的性能。例如,在模拟环境中让模型执行一系列任务,然后根据任务的完成情况来评估模型的好坏。

基本概念

batch_size
即批大小,如果把全部数据放入内存后再加载到显存中,空间显然不够的;如果一个一个数据加载训练并更新模型参数,效率极低。所以考虑一批一批地加载数据,每次送进去的数量就是batch_size,这样可以加快速度。

用minibatch方法时会定义batch_size,即把整个数据集分几份后,每份的大小就是batch-size。假设把10000个样本,分成500批次送进去,则每次送进20个样本,batch_size=20。

iteration
即迭代,表示每个循环的一遍,一次参数更新。用minibatch时就意味着训练完一个batch。

一个epoch的数据=batch_size * iteration 。假设把10000个样本,分成500批次送进去,则每次送进20个样本,则iteration=500,每经过一个iteration,参数更新一次。

epoch
one forward pass and one backward pass of all the training examples,
in the neural network terminology.(在神经网络术语中,所有训练示例的一次前向传递和一次反向传递)

一个epoch就是跑一遍完整的训练数据。假设有10000个训练样本,这10000个样本都跑完就算一个epoch。实验中一般需要训练很多个epoch,取均值作为最后的结果,从而减少偶然性,避免取到局部极值。

即所有训练数据过一遍,如果数据有300条,把数据分成了3个batch,batch_size是300 / 3 = 100,3个batch都跑完,即跑了三个iteration,就是一个epoch。

episode
episode常用于强化学习,以游戏举例,例如模型训练中途或迭代结束后,玩一轮游戏(例如玩一局飞机大战)看看本局游戏能得多少奖励。无论通关还是失败,都是一个episode。如果玩围棋,从头下到尾的一局棋就是一个episode。

agent根据状态和策略做出行为,从而获得奖励,到任务结束。往往在agent训练完成后或经过一段时间训练后,进行很多次episode,检验agent执行任务的能力,可以通过评价指标、奖励值进行评估,对模型进行验证,并保存模型。(划分valid集就是典型的例子)

业务实践

强化学习笔记_第4张图片

参考

DQN从入门到放弃5 深度解读DQN算法 - 知乎

深度强化学习——DQN算法原理_流萤点火的博客-CSDN博客

DQN-keras_keras dqn_飞翔的貅貅的博客-CSDN博客

DQN——深度强化学习的理解以及keras实现_keras dqn_SaMorri的博客-CSDN博客

DQN算法&流程图&代码实现(Tensorflow2.x / Keras)_dqn算法流程图_ggjkd的博客-CSDN博客

深度强化学习(3) 学习目标与评价方法 - 简书

深度Q学习(dqn)与神经拟合Q迭代的区别 - 问答 - 腾讯云开发者社区-腾讯云强化学习的分类方法_强化学习方法分类_csdn_LYY的博客-CSDN博客

强化学习在京东618大促流量调控中的落地应用 - 知乎

你可能感兴趣的:(机器学习,深度学习,人工智能)