本文章记录Datawhale开源学习组织2024年第一期学习,《深度强化学习基础与实践》第二期的任务一。这项课程是有第一期的,但是由于那段时间本人学校课程比较多,同时又有一摊子的事情需要去完成,因此没有参与,本月直接参与第二次,任务一实际上也就是对于第一期任务的复习和缓冲。
课程开源地址如下:(https://github.com/datawhalechina/joyrl-book)
任务一的内容是:第二章、第七章、第八章,也就是第一期任务中的核心部分。
对于我这种第一期没有参加的来说任务还挺重的哈,其余几章不在要求中,但是还是过一遍比较合适。
马尔科夫决策过程是强化学习中基本的表达方式,将机器决策的过程用数学的方式表达出来,从而使得可能对其参数进行优化。
也就是针对状态作出动作,动作改变状态,依据状态的改变给出reward。
而马尔科夫决策过程的前提是满足马尔科夫决策性质:环境下一步的状态只与当前的采取的动作有关而与历史动作无关。这在大多数实际情况中都是不成立的。因此在必要的情况下可以使用其他的方法来辅助马尔科夫决策过程。
经过上面的描述之后自然而然的,前面提到的给出reward就是判断任务完成好坏的指标。暂且不提如何根据任务的完成情况来给出reward,我们的最终目标显然是将回报总值最大化。
但是在实际情况中,除了一些能够在有限步骤中完成的任务外,还有很多无法完成的任务,这时如果考虑总的奖励量就是有问题。给出了一个折扣因子
γ
\gamma
γ来应对这种情况。
G
t
=
r
t
+
1
+
γ
r
t
+
2
+
γ
2
r
t
+
3
+
.
.
.
=
r
t
+
1
+
γ
G
t
+
1
G_t = r_{t+1}+\gamma r_{t+2}+\gamma^2 r_{t+3}+...=r_{t+1}+\gamma G_{t+1}
Gt?=rt+1?+γrt+2?+γ2rt+3?+...=rt+1?+γGt+1?
当
γ
\gamma
γ为0时,只关注当前奖励;当
γ
\gamma
γ为1时,同等关注未来全部奖励;当
γ
\gamma
γ为0到1之间时,体现了在未来奖励和当前奖励之间权衡。
状态或者说环境会发生变换,并且这些变化不是由于智能体的行为导致的,描述这个的特点的矩阵就是状态转移矩阵,状态转移矩阵是环境的一部分。矩阵的每个元素表示当前状态在下一“步”转变成另一状态的概率,因此很显然,状态转移矩阵的行和列之和都是1.
啊哈哈哈,我还是跳了,中间跳过的章节有:动态规划、免模型预测、免模型控制、深度学习基础。
DQN
算法的主要贡献就是在Q-learning算法的基础上引入了深度神经网络来近似动作价值函数Q(s,a),从而能够处理高维的状态空间。
该节主要阐述DQN对于Q表来近似动作价值函数的优势。神经网络只是用了两个维度的输入就表示了原来Q表中的无穷多个状态。参数的求解也使用深度学习中常用的梯度下降的方式来求解。
由于强化学习的每次迭代的样本都是从环境中实时交互获得的,因此样本是关联的,并不满足独立同分布的要求;并且是但个传入的,这样迭代网络参数容易导致训练的不稳定。
采用小批量梯度下降类似的方式可以有效解决这种问题。如果将之前获得的样本都存起来,然后每次得到新数据时从之前的样本中随机抽取一部分与当前样本一起传入就可以近似独立同分布。
不过经验回放的容量应当是有限的,不是由于成本导致的,而是因为在训练初期的样本数据质量相对于后面是不好的,所以应当从更新的样本中抽取样本进行训练。
目标网络就是每个一定步骤再更新其参数(从当前网络中复制),这样做的好处是保证训练的稳定,避免Q值的估计发散。
作者在这里提醒读者应该养成先写伪代码再变成的习惯,有助于提高对算法的理解。
先去实战一下再继续学习第八章(但是可能要先装环境)
作者专门提醒不能使用镜像源安装joyrl哦,所以安装时间挺久的,继续往下学了先。
诶呀,连接超时了,依赖包还是就镜像源装吧,指定个版本。
介绍基于DQN改进的一些算法。改进角度各有不同,但是本质上都是通过提高预测精度和控制过程中的探索独来改善DQN算法的性能,这些算法用到的技巧也都是比较通用的,说要是学得好可以根据需求灵活组合。
前面提到过,跟上面所说的目标网络有相似的地方。但这个算法的是将动作选择和动作评估分开。一个网络给出使得Q最大的动作,然后将这个动作带入到目标网络计算Q值。
不过在实际中效果和复制网络参数到目标网络的方式(Nature DQN)效果差不多,所以一般就用后者。
与Double DQN不同,这个算法是通过优化神经网络的结构而不是改进目标Q值的计算来优化算法的。dueling这个词语的意思就是分流。原本的网络结构是输入层、隐藏层、输出层;现在的结构是从隐藏层分流出了价值层(用于估计每个状态的价值)和优势层(用于估计每个动作带来的优势)。
看不明白,说与这个Actor-Critic算法是类似的,在后面具体展开。
这个算法分开评估每个状态的价值以及采取某个动作的Q值。
有助于降低方差并提高学习鲁棒性。
也是优化网络结构来提升算法的性能的。但是并不是为了提高Q值的估计,而是为了增强网络的探索能力。
这是通过添加噪声层来实现的。可以认为强化学习炼丹比深度学习炼丹更加容易过拟合或者说陷入局部最优解的困境中。将随机性应用到神经网络中的擦桉树或者说权重,增强了Q网络对于状态和动作空间的探索能力,从而提高收敛速度和稳定性。
这是一种进一步优化了梯度下降方式的算法,也可以翻译为“优先经验回放DQN”算法。
采样时对于经验回放中的样本赋予不同优先级,使用TD误差来判断,因为TD误差越大,损失函数的值也就越大,那么对于法相传播的作用也就越大。
但是这种方式会导致原本和被选中的样本TD误差相差不大的样本不能够被选择上:选择那个TD误差更大的样本之后,该样本的误差就会随之减小,但是并不能够确定这个样本没有重要信息。所以引入了“随即优先级采样”和“重要性采样”(重要性采样是以后总用于估计某一分布性质的方法,它的基本思想是,我们可以通过与带古迹分布不同的另一个分布中采样,然后通过采样样本的权重来估计待估计分布的性质)的技巧。
分布式DQN算法,Distributed DQN。和PER一样也是可以将这种改进算法的方法用到其他强化学习算法中的方法。
该算法的核心思想是将Q值换成了Q值的分布,从而能够更好地处理值函数估计不准确以及离散动作空间的问题。