Fisher's Blog

Sein heißt Werden
Leben heißt Lernen

0%

Asynchronous Methods for Deep Reinforcement Learning 一文中,将异步的强化学习框架套给了四种强化学习算法,我们主要实现了最后一种 Asynchronous Advantage Actor-Critic (A3C) ,用来解决连续行为空间的问题。直接看所有代码

整体框架:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 全局网络
class Global_net(object):
def __init__(self, sess, s_dim, a_bound, gamma, actor_lr, critic_lr,
max_global_ep, max_ep_steps, update_iter):

# 与子线程共用的构建神经网络函数
def build_net(self, scope):


# 独立线程,actor critic 合并
class Worker_net(object):
def __init__(self, global_net, name):

def _choose_action(self, s):

# 从全局下载参数替换子线程中的参数
def _sync(self):

# 在子线程中进行学习,并将子线程的参数更新到全局
def _update(self, done, transition):

# 子线程模拟自己独有的环境
def run(self):
阅读全文 »

根据 Deep Deterministic Policy Gradient ,尽管 DPPG 算法的思路简单,就是将 DPG 与 DQN 的几个特性结合起来,但因为设置了4个神经网络,之间还因求导链式法则而相互关联,所以程序设计稍微复杂一点。直接看所有代码

整体框架:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Memory(object):

class Actor(object):
def __init__(self, sess, s_dim, a_bound, lr, tau):

def _build_net(self, s, scope, trainable):
# 选择确定性行为
def choose_action(self, s):
# 根据链式法则,生成 Actor 的梯度
def generate_gradients(self, Q_a_gradients):

def learn(self, s):


class Critic(object):
def __init__(self, sess, s_dim, s, s_, a, a_, gamma, lr, tau):

def _build_net(self, s, a, scope, trainable):
# 生成 Q 对 a 的导数,交给 actor
def get_gradients(self):

def learn(self, s, a, r, s_):
阅读全文 »

在 DeepMind 的 Asynchronous Methods for Deep Reinforcement Learning 一文中,介绍了另一种简单的轻量级深度强化学习框架——异步地进行深度神经网络梯度下降。该框架可以适用于许多强化学习算法,论文中将框架套在了四种标准强化学习算法上,分别是 one-step Q-Learning, one-step Sarsa, n-step Q-LearningAdvantage Actor-Critic ,都取得了不错的稳定效果。其中最后一个 Asynchronous Advantage Actor-Critic (A3C) 算法更是有着最好的性能表现,在多核 CPU 上学习比在 GPU 上学习的时间减少了一半,本文也会重点关注 A3C 算法。

阅读全文 »

Deep Deterministic Policy Gradient (DDPG) 算法出自论文 Continuous control with deep reinforcement learning ,该算法的思想很简单,就是将 确定性策略梯度 Deterministic Policy GradientDeep Q-Network 两个算法结合起来,解决了 DQN 只能运用在离散行为空间上的局限,同时借鉴 DQN 的神经网络、经验回放和设置 target 网络使 DPG 中的 Actor-Critic 算法更容易收敛

阅读全文 »

使用的 Hexo 静态博客系统没有置顶文章的功能,用的 NexT 主题在文章 front-matter 中加上 sticky: true 属性也只是在文章标题之前加了一个图钉图标,并没有真正的置顶,NexT 开发者在 Issue 中指出置顶功能需要在 Hexo 中实现,所以我们对 Hexo 进行修改。

阅读全文 »

Deterministic Policy Gradient Algorithms 一文中,DeepMind 在原有随机策略梯度 (Stochastic Policy Gradient) 算法的基础上介绍了确定性策略梯度算法 (Deterministic Policy Gradient Algorithms DPG) 来解决连续性决策问题,是之后 Deep DPG (DDPG) 算法的基础。

传统的策略梯度算法以概率形式 \(\pi_\theta(a|s) = \mathbb{P}[a|s; \theta]\) 来表示一个策略,以此来随机的选择行为。但 DPG 用一种确定性的策略形式 \(a=\mu_\theta(s)\)

DPG 有着比 PG 更简单的形式:行为价值函数的期望,这也使得 DPG 比 PG 更加有效,同时在高维度行为空间中也比 PG 表现得更加好。

阅读全文 »

  • 拆箱
  • 使用 .(dot) 来访问字典成员
  • numpy 一维数组与二维数组相加
  • class 中的 self
  • global & nonlocal
  • 默认参数陷阱
  • 交换变量
  • 行内 if 语句
  • 带索引的列表迭代
  • … 持续更新中
阅读全文 »

策略梯度 Policy Gradient 一文的理论基础上,实践了一下基于离散行为 Softmax Policy 与基于连续行为 Gaussian Policy 的 Actor-Critic 算法。直接看所有代码

程序框架很简单,就为 Actor 和 Critic 两个类:

1
2
3
4
5
6
7
8
9
10
11
class Actor(object):
def __init__(self, sess, s_dim, a_dim, lr):

def choose_action(self, s): # 根据softmax所输出的概率选择行为

def learn(self, s, a, td_error):

class Critic(object):
def __init__(self, sess, s_dim, gamma, lr):

def learn(self, s, r, s_):
阅读全文 »

之前的所有方法都是基于值函数、行为价值函数,求出 \(V^\pi(s)\)\(Q^\pi(s,a)\) 或是他们的近似函数来映射出最优策略。而基于策略的强化学习方法 (Policy-Based Reinforcement Learning) 则直接将策略参数化,即 \(\pi_\theta(s,a)=\mathbb{P}[a|s,\theta]\) ,利用参数化的线性、非线性函数来表示策略,寻找最优策略,而这个最优策略的搜索即是要将某个目标函数最大化。

阅读全文 »

之前遇到的优化问题,在 Tensorflow 中,都是直接用 Optimizer 的 minimize 方法将损失函数最小化即可,但最近在写 DDPG Actor 的代码时,无法直接写出一个代价函数进行最小化,而是需要用到 Critic 的梯度利用链式法则合并出代价函数的梯度来进行最小化,所以借此机会简单研究了下 Tensorflow 的梯度计算。

阅读全文 »