强化学习DQN算法

DQN,即Deep Q-learning算法,是将神经网络与Q-learning算法相结合而得到的强化学习算法。在DeepMind发表的论文《Playing Atari with Deep Reinforcement Learning》(https://arxiv.org/abs/1312.5602)中,DeepMind使用DQN算法训练出可以玩Atari游戏的模型,该模型甚至在某些游戏上表现的比人类还要优秀。然而,该算法性能如此优秀,原理却不是很复杂,本篇文章将介绍这个神奇的算法。

算法思想

DQN是神经网络和Q-learning算法相结合的产物,其基本思想与Q-learning一致,都是通过估计动作价值函数 的值以选择合适的策略。两者的不同之处在于:

  1. 原本在Q-learning中用来存储 值的Table,在DQN中被取缔了,取而代之的是一个神经网络。

  2. 在模型训练过程中,DQN算法利用离线记忆存储的方式,打破了样本的相关性。

在原本的Q-learning算法中,使用一个张Table存储所有状态以及动作空间的 值。如果状态和动作空间是离散且动作维度不高的时候,一张Table完全可以存储。如果状态和动作空间高维连续时,这时候Table所需要存储的数据就非常巨大甚至海量,这时候Table就显得很无力了。

事实上,Table在整个Q-learning算法中的作用是根据输入的状态 ,输出动作空间 值,如果用函数来表示如下:

从公式上看,只要完成这一功能,使用何种形式去实现都可以,而神经网络恰好是其中一个很合适的方案。因为神经网络的本质就是使用一组有限的参数 ,根据某种规律来拟合某种分布,以进行预测评估。有于神经网络只需要一组有限的参数 ,因此可以避免存储数量庞大的样本,减少样本存储占用,提升性能。

同样,在原本的Q-learning算法中,每一次与环境进行交互之后,得到的样本基本只能使用一次。这就导致样本的利用率不是很高,尤其是对于那些有着非常积极影响的样本。通过将这些样本存储下来,之后对样本进行采样训练,可以在一定程度上提高对样本的利用率,加速算法的收敛。

算法流程

  1. 初始化一个存储容量为 的记忆池 ,同时随机初始化一个 网络。

  2. 按以下流程迭代 轮。

    1. 通过 -greedy算法根据状态 从动作空间中得到动作 ,通过 网络选择动作的公式如下。

    2. 执行动作 并观测环境,得到奖励 以及图片

    3. 设置 并对 提取特征得到

    4. 将状态 存储到记忆池 中。

    5. 随机从记忆池 中选择一组 的记忆 ,并根据以下公式计算收获:

    6. 通过 来计算损失,并通过梯度更新 网络的参数。

    7. 初始化状态 为第一个状态 ,并进行处理得到特征向量

    8. 按以下流程迭代 轮。

需要注意的是:

  1. 记忆池的容量为 ,当记忆池中的记忆数量达到 时,在新加入记忆时,会将最久远的记忆清除掉。

  2. 在实际训练时, -greedy算法的 值会随着迭代次数的增加而减小。

  3. 网络的目标函数是 ,目的是让 网络预测的 值更加接近真实值。

关注【Java与Android技术栈】

更多精彩内容请关注扫码