[原创] 强化学习里的 on-policy 和 off-policy 的区别

强化学习(Reinforcement Learning,简称RL)是机器学习的一个领域,刚接触的时候,大多数人可能会被它的应用领域领域所吸引,觉得非常有意思,比如用来训练AI玩游戏,用来让机器人学会做某些事情,等等,但是当你越往里看,就会发现跟传统机器学习相比,RL里面的名词简直太多了吧!多到完全可以绕晕人。比如RL里经常会提到的agent,environment,episode(rollout),policy,on-policy,off-policy,state,trajectory,reward,replay buffer,model-based,model-free,MD,TD,PG,AC,等等。强化学习的高手对这些词很熟悉,但对新手来说可能就很痛苦。
在RL领域,on-policy和off-policy是两个非常重要的概念,这两个词,把RL方法分成了两个类别。你可以从网上搜到很多很人提问on-policy的强化学习方法和off-policy的强化学习方法有什么区别,作为一个智商相当平庸的人,鬼知道我当初看了多少教程才认为自己大概搞清楚了它们之间的区别。
所以我在这篇文章里想把自己的肤浅理解分享出来,希望能帮助到少部分人。

阅读更多

[原创] 怎么理解DDPG(Deep Deterministic Policy Gradient)里的Deterministic

DDPG(Deep Deterministic Policy Gradient,深度确定性策略梯度)是强化学习领域的一种知名算法。
如何理解其中的Deterministic(确定性)这个名词?
通俗地说,对一个状态(state)来说,根据这个state所采取的action有可能是带有随机性的。在两次与environment交互的时候,即使是一模一样的state,所采取的action也有可能不同,这就不是一种“确定性”的策略。
对一种“确定性”的策略来说,只要state相同,它给出的action必然相同。

阅读更多

[原创] 如何取出 tf.layers.dense 定义的全连接层的weight和bias参数值

TensorFlow版本:1.14.0
Python版本:3.6.8

在TensorFlow中,tf.layers.dense 定义了一个全连接层,其实现的是(来自官方文档):

This layer implements the operation: outputs = activation(inputs * kernel + bias) Where activation is the activation function passed as the activation argument (if not None), kernel is a weights matrix created by the layer, and bias is a bias vector created by the layer (only if use_bias is True).

意思就是它实现了 y = activation(x * kernel + bias) 的操作,其中,activation是激活函数。在这里,kernel 就是指我们通常所说的 weight,它被TF称为 kernel 而不是 weight。因此,如果你想从这个模型里取出weight参数的话,就要注意它的名字了,否则会读不到这个参数。
下面我们就来看具体的例子。

阅读更多

[原创] 如何打印出TensorFlow保存的checkpoint里的参数名

TensorFlow版本:1.14.0
Python版本:3.6.8

checkpoint文件是TensorFlow保存出来的一种模型文件格式。通常save下来的时候会得到4个文件,例如:

checkpoint
model.ckpt-1.data-00000-of-00001
model.ckpt-1.index
model.ckpt-1.meta

如何查看这些文件里的模型参数名称呢?

阅读更多

[原创] 重要性采样/Importance Sampling

查看本系列文章合集,请点击这里

在前面的文章中,我们看到,随机采样是一个蒙特卡罗方法中很关键的步骤。而采样是需要技巧的,单纯地增加采样次数太没有效率了,比如说,如果随机采样一亿次,你可以把结果计算得特别精确,但是采样一亿次需要的时间非常长,长得远远超过了我们能接受的范围,这又有什么意义呢?
人们发现,有一些方法可以让随机采的样本“特别好”。那么什么算“特别好”呢?比如说,本来使用没有任何原则的采样方法,需要采样1万个点,才能让计算出来的结果很接近真实值;现在使用一个“特别好”的采样方法,可以让我们只需要采样100个点,就可以让计算出来的结果很接近真实值了,这样就极大地减少了计算量。

阅读更多

[原创] 蒙特卡罗算法 对比 拉斯维加斯算法

查看本系列文章合集,请点击这里

  • 区别

讲到这里,稍微提一下,随机算法可以分为两类:蒙特卡洛算法 & 拉斯维加斯算法。
对蒙特卡洛算法来说,采样越多,越近似最优解
对拉斯维加斯算法来说,它永远给出正确解的随机化算法,总是给出正确结果,或是返回失败。

阅读更多

[原创] 蒙特卡罗方法的实例2:计算定积分

查看本系列文章合集,请点击这里

为了对蒙特卡罗方法有一个直观的印象,本文再举一个实例(计算定积分),以说明蒙特卡罗方法的用途。

  • 什么是定积分

对于一个给定的正实值函数 f(x) ,它在一个实数区间 [a,b]上的定积分 \int_a^b {f(x)dx} 可以理解为在 OXY 坐标平面上,由曲线 (x,f(x))、直线 x=a,x=b以及x轴围成的曲边梯形的面积值。

阅读更多

[原创] 蒙特卡罗方法的定义、历史以及存在意义

查看本系列文章合集,请点击这里

  • 定义

来自维基百科:

蒙特卡罗(洛)方法(Monte Carlo method),也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数来解决很多计算问题的方法。

也就是说,蒙特卡罗方法并不是指一种特定的算法,而是一类算法的总称,这种算法主要利用了“随机”来实现。

阅读更多

[原创] 用人话解释蒙特卡罗方法/Monte Carlo method(文章合集)

蒙特卡罗(洛)方法(Monte Carlo method),也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数来解决很多计算问题的方法。

阅读更多

[原创] 蒙特卡罗方法的实例1:计算圆周率

查看本系列文章合集,请点击这里

为了对蒙特卡罗方法有一个直观的印象,我们先举一个实例(计算圆周率 \pi ),让从来没有接触过蒙特卡罗方法的人产生“原来这就是Monte Carlo”的感觉,以减少刚开始学习的困惑。

  • 非蒙特卡罗方法

圆周率 \pi 可以怎么计算?其中一个“常规”的方法就是利用 \pi 的莱布尼茨公式:
\frac{\pi }{4} = \sum\limits_{n = 0}^\infty {\frac{{{{\left( { - 1} \right)}^n}}}{{2n + 1}}} = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \cdots
不断增大 n 的值,就能越来越逼近 \frac{\pi }{4}

阅读更多

[原创] 《Neural Networks and Deep Learning》读书笔记:最简单的识别MNIST的神经网络程序(2)

本文是上一篇文章的续文。
Neural Networks and Deep Learning》一书的中文译名是《神经网络与深度学习》,书如其名,不需要解释也知道它是讲什么的,这是本入门级的好书。
在第一章中,作者展示了如何编写一个简单的、用于识别MNIST数据的Python神经网络程序。
本文接着上一篇文章对程序代码进行解析。

阅读更多

[原创] 如何防止softmax函数上溢出(overflow)和下溢出(underflow)

Deep Learning》(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(overflow)和下溢出(underflow)对数值计算的影响,并以softmax函数和log softmax函数为例进行了讲解。这里我再详细地把它总结一下。

阅读更多

[原创]Machine Learning/机器学习 文章合集

注:带有 ♬♬♬♬♬ 标志的是文章合集。

强化学习(Reinforcement Learning)文章合集 ♬♬♬♬♬

用人话解释机器学习中的Logistic Regression(逻辑回归)

如何防止softmax函数上溢出(overflow)和下溢出(underflow)

ELL(Embedded Learning Library,微软嵌入式学习库)文章合集 ♬♬♬♬♬

阅读更多

[原创] 《Neural Networks and Deep Learning》读书笔记:反向传播的4个基本方程(1)

反向传播的4个基本方程这部分内容开始,《Neural Networks and Deep Learning》一书基本上是满屏的数学公式了,然而,得益于作者强大的、深入浅出的表述能力,理解起来并不会让人感觉那么难。
本文将描述反向传播的4个基本方程中的第一个——输出层误差的方程

阅读更多

[原创] 《Neural Networks and Deep Learning》读书笔记:最简单的识别MNIST的神经网络程序(1)

Neural Networks and Deep Learning》一书的中文译名是《神经网络与深度学习》,书如其名,不需要解释也知道它是讲什么的,这是本入门级的好书。
在第一章中,作者展示了如何编写一个简单的、用于识别MNIST数据的Python神经网络程序。对于武林高手来说,看懂程序不会有任何困难,但对于我这样的Python渣则有很多困惑。所以我对做了一些笔记,希望同时也可以帮助有需要的人。

阅读更多