专栏首页用户2133719的专栏策略梯度入门(上)

策略梯度入门(上)

强化学习是机器学习中的一个子领域,其目标是为「代理」(agent)找到一个最优的行为策略以获得最大的奖励。「策略梯度」(policy gradient)是一类解决强化学习问题的方法,其特点在于「直接」对策略进行建模并优化。本文将对策略梯度方法的工作原理以及近年来的一些新的策略梯度类算法进行介绍。文章的主要内容参考自 Lilian Weng 的博客[1]及其中文翻译[2]。

1 策略梯度方法

1.1 符号列表

下表对本文中的公式所使用的符号进行了总结:

1.2 策略梯度原理简述

策略梯度方法的原理就是直接对策略进行建模并优化。策略通常建模为一个关于参数

\theta

的函数

\pi_\theta(a|s)

,奖励(目标)函数的值取决于策略,其定义如下:

J(\theta) = \sum_{s \in \mathcal{S}} d^\pi(s) V^\pi(s) = \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} \pi_\theta(a \vert s) Q^\pi(s, a)

其中

d^{\pi}(s)

\pi_{\theta}

对应的马尔可夫链的「平稳分布」,其定义为:

d^\pi(s) = \lim_{t \to \infty} P(s_t = s \vert s_0, \pi_\theta)

上式可以理解为我们从状态

s_0

开始,在策略

\pi_\theta

下经过

t

个时间步后到达状态

s

的概率,当

t

趋于无穷时,这一概率会趋于稳定。马氏链的平稳分布也是经典采样方法 MCMC 的前提条件。

注意在上面的公式中,为了简洁在提及策略

\pi_\theta

时有时会省略参数

\theta

,即

d^{\pi}

Q^{\pi}

应该是

d^{\pi_\theta}

Q^{\pi_\theta}

。从公式可以看出,策略梯度方法能够更好地处理「连续」空间下的强化学习问题,其可以避免某些基于值的方法在应对无限状态或动作空间时的计算复杂度问题。通过「梯度上升」(gradient ascent)方法,我们可以将参数

\theta

沿着梯度

\nabla_{\theta} J(\theta)

的方向进行更新,来找出可以带来最大收益的策略

\pi_{\theta}

所对应的最优

\theta

值。

1.3 策略梯度定理及证明

实际上计算梯度

\nabla_{\theta} J(\theta)

并不简单。梯度不仅依赖于动作的选择(由

\pi_\theta

直接决定),还依赖于由选择的动作而产生的状态的平稳分布(由

\pi_\theta

间接决定)。由于环境通常是未知的,所以很难去估计策略的更新对状态分布造成的影响。

幸运的是,「策略梯度定理」的出现为梯度的计算提供了解决方案。该定理对梯度的形式进行了变形,使其不依赖于状态分布

d^{\pi}(.)

的导数,大大简化了

\nabla_{\theta} J(\theta)

的计算:

\begin{aligned} \nabla_\theta J(\theta) &= \nabla_\theta \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \pi_\theta(a \vert s) \\ &\propto \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \nabla_\theta \pi_\theta(a \vert s) \end{aligned}

下面将证明策略梯度定理的正确性,证明参考自 Sutton 和 Barto 的《强化学习》第 13.2 节。我们首先对状态-值函数的导数进行如下推导:

\begin{aligned} & \nabla_\theta V^\pi(s) \\ =& \nabla_\theta \Big(\sum_{a \in \mathcal{A}} \pi_\theta(a \vert s)Q^\pi(s, a) \Big) & \\ =& \sum_{a \in \mathcal{A}} \Big( \nabla_\theta \pi_\theta(a \vert s)Q^\pi(s, a) + \pi_\theta(a \vert s) \color{red}{\nabla_\theta Q^\pi(s, a)} \Big) &\scriptstyle{\text{求和符号移位,应用导数乘法法则}} \\ =& \sum_{a \in \mathcal{A}} \Big( \nabla_\theta \pi_\theta(a \vert s)Q^\pi(s, a) + \pi_\theta(a \vert s) \color{red}{\nabla_\theta \sum_{s', r} P(s',r \vert s,a)(r + V^\pi(s'))} \Big) & \scriptstyle{\text{将 } Q^\pi \text{ 改写为由状态-值函数表示的贝尔曼形式}} \\ =& \sum_{a \in \mathcal{A}} \Big( \nabla_\theta \pi_\theta(a \vert s)Q^\pi(s, a) + \pi_\theta(a \vert s) \color{red}{\sum_{s', r} P(s',r \vert s,a) \nabla_\theta V^\pi(s')} \Big) & \scriptstyle{\text{略去与 } \theta \text{ 不相关的项,并移动求导符号}}\\ =& \sum_{a \in \mathcal{A}} \Big( \nabla_\theta \pi_\theta(a \vert s)Q^\pi(s, a) + \pi_\theta(a \vert s) \color{red}{\sum_{s'} P(s' \vert s,a) \nabla_\theta V^\pi(s')} \Big) & \scriptstyle{\text{基于 } P(s' \vert s, a) = \sum_r P(s', r \vert s, a)} \end{aligned}

现在我们有:

\color{red}{\nabla_\theta V^\pi(s)} = \sum_{a \in \mathcal{A}} \Big( \nabla_\theta \pi_\theta(a \vert s)Q^\pi(s, a) + \pi_\theta(a \vert s) \sum_{s'} P(s' \vert s,a) \color{red}{\nabla_\theta V^\pi(s')} \Big)

上述公式有很好的「递归」特性(红色部分)。下面我们考虑如下的状态访问序列,并将从状态

s

开始在策略

\pi_0

下经过

k

个时间步到达状态

x

的概率记为

\rho^\pi(s \to x, k)

s \xrightarrow[]{a \sim \pi_\theta(.\vert s)} s' \xrightarrow[]{a \sim \pi_\theta(.\vert s')} s'' \xrightarrow[]{a \sim \pi_\theta(.\vert s'')} \dots
k = 0

时,

\rho^\pi(s \to s, k=0) = 1
k = 1

时,我们扫描所有的可能动作并将目标状态的转移概率相加:

\rho^\pi(s \to s', k=1) = \sum_a \pi_\theta(a \vert s) P(s' \vert s, a)
  • 假设我们的目标是从状态
s

开始遵循策略

\pi_0

经过

k+1

个时间步后到达状态

x

。我们可以先从

s

经过

k

个时间步后移动到中间点

s’

(任意状态

s' \in S

),然后再最后一步到达目标状态

x

。那么我们可以递归地来计算访问概率:

\rho^\pi(s \to x, k+1) = \sum_{s'} \rho^\pi(s \to s', k) \rho^\pi(s' \to x, 1)

基于上述推导,现在我们可以对

\nabla_\theta V^\pi(s)

进行递归式展开。为了简化公式我们令

\phi(s) = \sum_{a \in \mathcal{A}} \nabla_\theta \pi_\theta(a \vert s)Q^\pi(s, a)

,则导数可以递归地表示为:

\begin{aligned} & \color{red}{\nabla_\theta V^\pi(s)} \\ =& \phi(s) + \sum_a \pi_\theta(a \vert s) \sum_{s'} P(s' \vert s,a) \color{red}{\nabla_\theta V^\pi(s')} \\ =& \phi(s) + \sum_{s'} \sum_a \pi_\theta(a \vert s) P(s' \vert s,a) \color{red}{\nabla_\theta V^\pi(s')} \\ =& \phi(s) + \sum_{s'} \rho^\pi(s \to s', 1) \color{red}{\nabla_\theta V^\pi(s')} \\ =& \phi(s) + \sum_{s'} \rho^\pi(s \to s', 1) \color{red}{[ \phi(s') + \sum_{s''} \rho^\pi(s' \to s'', 1) \nabla_\theta V^\pi(s'')]} \\ =& \phi(s) + \sum_{s'} \rho^\pi(s \to s', 1) \phi(s') + \sum_{s''} \rho^\pi(s \to s'', 2)\color{red}{\nabla_\theta V^\pi(s'')} \scriptstyle{\text{ 将 }s'\text{ 作为 }s \to s'' \text{ 的中间状态}}\\ =& \phi(s) + \sum_{s'} \rho^\pi(s \to s', 1) \phi(s') + \sum_{s''} \rho^\pi(s \to s'', 2)\phi(s'') + \sum_{s'''} \rho^\pi(s \to s''', 3)\color{red}{\nabla_\theta V^\pi(s''')} \\ =& \dots \scriptstyle{\text{ 递归展开 }\nabla_\theta V^\pi(.)} \\ =& \sum_{x\in\mathcal{S}}\sum_{k=0}^\infty \rho^\pi(s \to x, k) \phi(x) \end{aligned}

对上式代入目标函数,进行进一步的推导,可以得到:

\begin{aligned} \nabla_\theta J(\theta) &= \nabla_\theta V^\pi(s_0) & \scriptstyle{\text{起始于随机状态 } s_0\text{,此时忽略 } d^{\pi}(s)} \\ &= \sum_{s}\color{blue}{\sum_{k=0}^\infty \rho^\pi(s_0 \to s, k)} \phi(s) &\scriptstyle{\text{令 }\color{blue}{\eta(s) = \sum_{k=0}^\infty \rho^\pi(s_0 \to s, k)}} \\ &= \sum_{s}\eta(s) \phi(s) & \\ &= \Big( {\sum_s \eta(s)} \Big)\sum_{s}\frac{\eta(s)}{\sum_s \eta(s)} \phi(s) & \scriptstyle{\text{归一化 } \eta(s), s\in\mathcal{S} \text{ 使其成为一个概率分布}}\\ &\propto \sum_s \frac{\eta(s)}{\sum_s \eta(s)} \phi(s) & \scriptstyle{\sum_s \eta(s)\text{ 是一个常数}} \\ &= \sum_s d^\pi(s) \sum_a \nabla_\theta \pi_\theta(a \vert s)Q^\pi(s, a) & \scriptstyle{d^\pi(s) = \frac{\eta(s)}{\sum_s \eta(s)}\text{ 即为平稳分布}} \end{aligned}

在周期性环境中,

\sum_s \eta(s)

为该周期的平均长度,而在连续环境(无穷时间)中,该值为 1。目标函数的梯度可以进一步表示为:

\begin{aligned} \nabla_\theta J(\theta) &\propto \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \nabla_\theta \pi_\theta(a \vert s) &\\ &= \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} \pi_\theta(a \vert s) Q^\pi(s, a) \frac{\nabla_\theta \pi_\theta(a \vert s)}{\pi_\theta(a \vert s)} &\\ &= \mathbb{E}_\pi [Q^\pi(s, a) \nabla_\theta \ln \pi_\theta(a \vert s)] & \scriptstyle{\text{由于 } (\ln x)' = 1/x} \end{aligned}

其中

\mathbb{E}_\pi

\mathbb{E}_{s \sim d_\pi, a \sim \pi_\theta}

,对应的状态和动作分布均遵循策略

\pi_\theta

生成,也就是所谓的「同轨策略」(on-policy)。

策略梯度定理是各种策略梯度算法的理论基石。在一篇 2016 年的论文[3]中,对策略梯度方法的一般形式进行了比较好的归纳:

策略梯度算法通过迭代地估计梯度

g:=\nabla_{\theta} \mathbb{E}\left[\sum_{t=0}^{\infty} r_{t}\right]

来最大化期望总奖励。梯度的相关计算方法有多种形式,具体如下:

g=\mathbb{E}\left[\sum_{t=0}^{\infty} \Psi_{t} \nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right)\right]

其中

\Psi_{t}

可以是下面列举的项中的一个:

\sum_{t=0}^{\infty} r_{t}

:轨迹的总奖励

\sum_{t^{\prime}=t}^{\infty} r_{t^{\prime}}

:遵循动作

a_t

的奖励

\sum_{t^{\prime}=t}^{\infty} r_{t^{\prime}}-b\left(s_{t}\right)

:第二种的基线调整版本

Q^{\pi}\left(s_{t}, a_{t}\right)

:状态-动作值函数

A^{\pi}\left(s_{t}, a_{t}\right)

:优势函数

r_{t}+V^{\pi}\left(s_{t+1}\right)-V^{\pi}\left(s_{t}\right)

:TD 残差

通过上述推导得出的「平凡」(vanilla)策略梯度更新虽然没有偏差,但是存在较大的方差。后续提出的各种算法都希望在保持偏差不变的情况下减少方差。

2 常见策略梯度算法

本节将对近年来提出的部分基于策略梯度定理的算法进行简要介绍。

2.1 REINFORCE

「REINFORCE」(蒙特卡洛策略梯度)基于整个轨迹样本对应的累积奖励来更新策略参数

\theta

。该算法能够起效的原因是样本梯度的期望是对实际的梯度的无偏估计:

\begin{aligned} \nabla_\theta J(\theta) &= \mathbb{E}_\pi [Q^\pi(s, a) \nabla_\theta \ln \pi_\theta(a \vert s)] & \\ &= \mathbb{E}_\pi [G_t \nabla_\theta \ln \pi_\theta(A_t \vert S_t)] & \scriptstyle{\text{由于 } Q^\pi(S_t, A_t) = \mathbb{E}_\pi[G_t \vert S_t, A_t]} \end{aligned}

因此我们可以从真实的样本轨迹计算

G_t

,然后使用它来更新策略梯度。由于其依赖于一条完整的轨迹,所以属于一种蒙特卡洛方法。算法的完整流程如下:

  1. 随机初始化策略参数
\theta
  1. 基于策略
\pi_\theta

生成一条轨迹:

S_1, A_1, R_2, S_2, A_2, \dots, S_T
  1. 对于每个时间步
t = 1, 2\ldots, T

  1. 估计累积奖励
G_t
  1. 更新策略参数:
\theta \leftarrow \theta + \alpha \gamma^t G_t \nabla_\theta \ln \pi_\theta(A_t \vert S_t)

一种常用的 REINFORCE 算法的变种是从奖励

G_t

中减去一个基准值来在「保证偏差不变的情况下减小梯度估计的方差」。一个常用的基准值是状态-值函数,那么在实际的梯度更新中我们使用的就是优势函数

A(s, a) = Q(s, a) - V(s)

。关于为什么基准值能够减少方差的解释可以参考 CS229 学习笔记第十七章以及这篇博客[4]。

2.2 Actor-Critic

策略梯度和值函数是策略梯度中的两个主要组件。在学习策略的基础上再去学习值函数是有意义的,因为值函数可以辅助策略的更新,例如 REINFORCE 算法中利用值函数来进行方差缩减,这也是 「Actor-Critic」 算法的主要思想。

Actor-Critic 方法由两个模型组成,其可以有选择性地共享参数:

  • 「评论家」(Critic)模型更新值函数的参数
w

,根据算法的不同其可以是动作-值函数

Q_{w}(a|s)

或状态-值函数

V_{w}(s)
  • 「演员」(Actor)模型根据评论家模型建议的方向来更新策略
\pi_\theta(a|s)

的参数

\theta

一个简单的动作-值 AC 算法的流程如下:

  1. 随机初始化
s, \theta, w

,从初始策略中采样

a \sim \pi_{\theta}(a|s)
  1. 对于每个时间步
t = 1, 2\ldots, T

  1. 采样奖励
r_{t} \sim R(s, a)

以及下一个状态

s^{\prime} \sim P\left(s^{\prime} | s, a\right)

(可能只是获得值,不需要了解分布)

  1. 采样下一个动作
a' \sim \pi_\theta(a' \vert s')
  1. 更新策略参数
\theta \leftarrow \theta + \alpha_\theta Q_w(s, a) \nabla_\theta \ln \pi_\theta(a \vert s)
  1. 计算当前时间步
t

的动作-值的校正值(TD 误差)

\delta_t = r_t + \gamma Q_w(s', a') - Q_w(s, a)

,并使用它来更新动作-值函数的参数:

w \leftarrow w + \alpha_w \delta_t \nabla_w Q_w(s, a)
  1. 更新
a \leftarrow a'

s \leftarrow s'

上述算法中两个学习率

\alpha_\theta

\alpha_w

分别用于策略和值函数的参数更新。

2.3 Off-Policy Policy Gradient

上述两种算法:REINFORCE 和平凡 AC 方法都是基于「同轨策略」(on-policy)的:训练样本是通过目标策略(也就是我们尝试去优化的策略)进行采集的。而「离轨策略」(off-policy)方法有着以下两点额外优势:

  1. 离轨策略方法并不需要完整的轨迹样本,可以使用任何历史轨迹的样本(即「经验回放」),从而具有更好的采样效率
  2. 使用不同于目标策略的行为策略来收集样本,可以带来更好的「探索性」(对于 Sarsa 这种同轨策略本身带有探索性的方法,这一优势则不是很明显)

下面我们将介绍离轨策略下的策略梯度是如何实现的。用来收集样本的行为策略是一个「已知」策略(类似于一个预先定义好的超参数),记作

\beta(a|s)

。目标函数将行为策略所定义的状态分布得到的奖励进行加和:

J(\theta) = \sum_{s \in \mathcal{S}} d^\beta(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \pi_\theta(a \vert s) = \mathbb{E}_{s \sim d^\beta} \big[ \sum_{a \in \mathcal{A}} Q^\pi(s, a) \pi_\theta(a \vert s) \big]

其中

d^{\beta}(s)

是行为策略

\beta

的平稳分布,

d^\beta(s) = \lim_{t \to \infty} P(S_t = s \vert S_0, \beta)

Q^{\pi}

则是通过目标策略

\pi

(注意不是行为策略)估计出的动作-值函数。

由于训练样本通过

a \sim \beta(a \vert s)

采样得出,我们可以将梯度重写为:

\begin{aligned} \nabla_\theta J(\theta) &= \nabla_\theta \mathbb{E}_{s \sim d^\beta} \Big[ \sum_{a \in \mathcal{A}} Q^\pi(s, a) \pi_\theta(a \vert s) \Big] & \\ &= \mathbb{E}_{s \sim d^\beta} \Big[ \sum_{a \in \mathcal{A}} \big( Q^\pi(s, a) \nabla_\theta \pi_\theta(a \vert s) + \color{red}{\pi_\theta(a \vert s) \nabla_\theta Q^\pi(s, a)} \big) \Big] & \scriptstyle{\text{导数乘法法则}}\\ &\stackrel{(i)}{\approx} \mathbb{E}_{s \sim d^\beta} \Big[ \sum_{a \in \mathcal{A}} Q^\pi(s, a) \nabla_\theta \pi_\theta(a \vert s) \Big] & \scriptstyle{\text{忽略红色部分:} \color{red}{\pi_\theta(a \vert s) \nabla_\theta Q^\pi(s, a)}}. \\ &= \mathbb{E}_{s \sim d^\beta} \Big[ \sum_{a \in \mathcal{A}} \beta(a \vert s) \frac{\pi_\theta(a \vert s)}{\beta(a \vert s)} Q^\pi(s, a) \frac{\nabla_\theta \pi_\theta(a \vert s)}{\pi_\theta(a \vert s)} \Big] & \\ &= \mathbb{E}_\beta \Big[\frac{\color{blue}{\pi_\theta(a \vert s)}}{\color{blue}{\beta(a \vert s)}} Q^\pi(s, a) \nabla_\theta \ln \pi_\theta(a \vert s) \Big] & \scriptstyle{\text{蓝色部分为重要性权重}} \end{aligned}

其中

\frac{\pi_\theta(a \vert s)}{\beta(a \vert s)}

「重要性权重」(importance weight)。在第二步中,我们忽略了包含

\nabla_\theta Q^\pi(s, a)

的红色部分,因为在实际中计算这一项是十分困难的。幸运的是如果我们忽略这一项来计算近似的梯度,依然可以保证策略的提升,最终得到一个真实的局部最优解。关于这一收敛性的证明可以参考这篇文章[5]。总而言之,当在离轨策略下使用策略梯度时,我们可以简单地通过一个加权和的方式进行实现,其中权重为目标策略与行为策略的比值。

2.4 A3C

「Asynchronous Advantage Actor-Critic」 方法,简称 「A3C」,是一种注重并行训练的经典策略梯度方法[6]。在 A3C 中,同时有多个演员(学习策略)和评论家(学习值函数)并行训练并不时与全局参数同步。

以状态-值函数为例,对评论家来说其损失函数为最小化如下均方误差:

J_v(w) = (G_t - V_w(s))^2

,使用梯度下降法来找出最优参数

w

。该状态-值函数在策略梯度更新中作为基准值使用。整个 A3C 算法的流程(针对每个线程)如下:

  1. 定义全局参数
\theta, w

;特定线程的参数

\theta', w'

;以及全局计数

T = 0
  1. 初始化时间步
t = 1
T \le T_{\text{MAX}}

「循环」):

  1. 重置梯度
\mathrm{d}\theta = 0

以及

\mathrm{d}w = 0
  1. 将线程特定参数与全局参数同步:
\theta' = \theta

以及

w'=w
t_{\text{start}} = t

,采样一个初始状态

s_t
s_t

不为终止状态且

t - t_{\text{start}} \le t_{\text{max}}

「循环」):根据当前线程的策略选择动作

a_{t} \sim \pi_{\theta^{\prime}}\left(a_{t} | s_{t}\right)

,得到奖励

r_t

和新的状态

s_{t+1}

,并更新

t = t + 1

以及

T = T+1
  1. 初始化奖励估计:
R = \begin{cases} 0 & \text{if } s_t \text{ is TERMINAL} \\ V_{w'}(s_t) & \text{otherwise} \end{cases}
  1. 对于
i = t-1, \dots, t_\text{start}

「循环」):更新

R= \gamma R + R_i

,这里

R

G_i

的蒙特卡洛估计;累加关于

\theta'

的梯度:

d\theta \leftarrow d\theta + \nabla_{\theta'} \log \pi_{\theta'}(a_i \vert s_i)(R - V_{w'}(s_i))

;累加关于

w'

的梯度:

dw \leftarrow dw + 2 (R - V_{w'}(s_i)) \nabla_{w'} (R - V_{w'}(s_i))
  1. 使用
\mathrm{d}\theta

\mathrm{d}w

异步更新

\theta

w

A3C 实现了多代理的并行训练(此处的多个代理之间并不存在博弈关系),算法中的梯度累加步骤可以理解为小批量梯度下降在并行环境下的一种变形:

w

\theta

的值在每个训练线程中对应的方向上独立地进行校正。

2.5 A2C

「A2C」 是 A3C 的一种同步、确定的版本(少了第一个 A)。在 A3C 中,每个代理独立地与全局参数进行交互,因此线程独立的代理可能会执行不同版本的策略(异步的影响),导致累加的更新并不是最优的。为了解决这种不一致性,A2C 中引入了一个「协调器」(coordinator),等待所有并行的代理完成工作后再更新全局参数,然后在下一个迭代中并行的代理将执行同一策略。A2C 已经被证明[7]能够达到与 A3C 同样或更好的表现,且可以更高效地利用 GPU,同时适应更大的批量大小。

「未完待续」

参考资料

[1]

Policy Gradient Algorithms: https://lilianweng.github.io/lil-log/2018/04/08/policy-gradient-algorithms.html#proof-of-policy-gradient-theorem

[2]

策略梯度方法: https://tomaxent.com/2019/04/14/%E7%AD%96%E7%95%A5%E6%A2%AF%E5%BA%A6%E6%96%B9%E6%B3%95/

[3]

High-Dimensional Continuous Control Using Generalized Advantage Estimation: https://arxiv.org/abs/1506.02438

[4]

Going Deeper Into Reinforcement Learning: Fundamentals of Policy Gradients: https://danieltakeshi.github.io/2017/03/28/going-deeper-into-reinforcement-learning-fundamentals-of-policy-gradients/

[5]

Off-Policy Actor-Critic: https://arxiv.org/abs/1205.4839

[6]

Asynchronous Methods for Deep Reinforcement Learning: https://arxiv.org/abs/1602.01783

[7]

OpenAI Baselines: ACKTR & A2C: https://openai.com/blog/baselines-acktr-a2c/

本文分享自微信公众号 - 口仆(roito33),作者:口仆

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《SICP》读书笔记之一:构造过程抽象(上)

    本章节将介绍有关计算过程(computational process)的知识。计算过程是存在于计算机里的一类抽象事物。在其演化过程中,这些过程会去操作一些被称为...

    口仆
  • CS229 课程笔记之十五:强化学习与控制

    本章将开始介绍「强化学习」与适应性控制。在监督学习中,对于训练集我们均有明确的标签,算法只需要模仿训练集中的标签来给出预测即可。但对于某些情况,例如序列性的决策...

    口仆
  • CS229 课程笔记:机器学习的实用建议

    对于一个学习算法,有着各种各样的调试手段,不同的调试手段可以解决不同的问题,需要根据实际情况进行选择。学习算法的问题大致可以分为两类:「高偏差/方差」问题以及「...

    口仆
  • 【AlphaGo Zero 核心技术-深度强化学习教程笔记07】策略梯度

    【导读】Google DeepMind在Nature上发表最新论文,介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值...

    WZEARW
  • 还不了解梯度下降法?看完这篇就懂了!

    那么其实可以总结出关于“如何找到函数f(x)”的方法论。可以看作是机器学习的“三板斧”:

    木东居士
  • 面试宝典之深度学习面试题(下)

    身边最近也有好多朋友打算换工作,和他们交流了许多,都在说今年的就业市场没有之前那么好,以往简历投出去,马上就能收到好几个面试机会,而现在隔几天才能收到一个面试。...

    小小詹同学
  • 腾讯安全入围安全界奥斯卡“Pwnie Awards” 为亚洲唯一入选团队

    美国时间7月18日,“全球黑客奥斯卡”Pwnie Awards公布2016年最新奖项提名。来自腾讯安全联合实验室旗下科恩实验室获Pwnie for Best P...

    腾讯高校合作
  • XiaoBa勒索病毒变种分析简报

    XiaoBa勒索病毒,是一种新型电脑病毒,是一款国产化水平极高的勒索病毒,主要以邮件,程序木马,网页挂马的形式进行传播。这种病毒利用各种加密算法对文件进行加密,...

    FB客服
  • 一文看懂常用的梯度下降算法

    作者:叶 虎 编辑:祝鑫泉 一 概述 梯度下降算法(Gradient Descent Optimization)是神经网络模型训练最常用的优化算法。对于深...

    机器学习算法工程师
  • 深度学习过程中的优化算法

    神经网络的训练过程实质是得到最优化目标函数的过程,常见的目标函数MSE Loss、Cross Entropy Loss、NLL Loss等,网络训练过程就是最小...

    CodeInHand

扫码关注云+社区

领取腾讯云代金券