TowardsDataScience 博客中文翻译 2016~2018(二百四十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

回归美好

原文:https://towardsdatascience.com/regression-to-the-nice-c7059cf81a7c?source=collection_archive---------8-----------------------

以下是一个真实的故事。一家公司的人力资源部对员工满意度进行了年度调查。他们比较了前一年报告低于中间值的人和今年的结果。他们得意洋洋地宣布,去年 75%的不满者在最新调查中得分更高,这是士气提高的明显迹象。

但是房间里的统计学家更清楚。得出的结论不正确, 回归谬误 的一个例子。回归均值是极端变量在下一次迭代中变得不那么极端的趋势。这种现象不是由任何原因引起的,而仅仅是一种随机性的产物。假设调查结果是独立且同向抽取(iid)的连续随机变量,75%的改善正是不太快乐的那一半人所期望的。

X1 为上一年的调查结果, X2 为本年的调查结果。要计算的值是 P(*X2>X1 |*F(X1)≤0.5)其中 F 是累积密度函数(CDF)。目前假设 X1X2 是iid 标准均匀随机变量,这就简化为 P( X2 > X1|X1≤ 0.5)。下面是对 X1X2 的联合概率分布的支持的可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该区域内的联合概率值是常数,是两个独立均匀随机变量的乘积。彩色区域为 X1≤ 0.5,蓝色区域为 X2 > X1X1≤ 0.5 *的区域。*蓝色区域除以彩色区域得到 P(X2>X1 | X1≤0.5)= 0.75 当 X1X2 ~ 均匀 (0,1)。

即使调查结果不是均匀分布的,只要连续分布,这个 0.75 的值仍然成立。

Y1Y2 为 iid 随机变量,具有某种任意连续分布和 CDF F,则感兴趣的值为 P(*Y2>Y1 |*F(Y1)0.5)。将 CDF 应用于 Y1Y2 ,由于是单调递增的,所以这个概率相当于 P(F(Y2)>F(Y1)| F(Y1)0.5)。概率积分变换陈述了将任意连续随机变量的 CDF 应用于随机变量给出了标准的均匀随机变量。因此,P(F(Y2)>F(Y1)| F(Y1)0.5)等价于 P( X2 > X1|X1≤ 0.5),P 也是 0.75。

回归谬误的另一个例子是“大二滑坡”,即运动员在第一个赛季的出色表现不会在接下来的赛季重复。虽然冷漠或紧张可能是罪魁祸首,但在某种程度上,运气在最初的表现中发挥了作用,这种下降是意料之中的。同一个运动员不太可能第二次这么幸运。

机器学习中的正则化

原文:https://towardsdatascience.com/regularization-in-machine-learning-76441ddcf99a?source=collection_archive---------0-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练机器学习模型的一个主要方面是避免过度拟合。如果模型过拟合,精度会很低。发生这种情况是因为您的模型过于努力地试图捕捉您的训练数据集中的噪声。 我们所说的噪音是指那些并不能真正代表你的数据的真实属性的数据点,而是随机的 。学习这样的数据点,使你的模型更加灵活,但有过度拟合的风险。

平衡偏差和方差的概念,有助于理解过度拟合现象。

[## 平衡偏差和方差以控制机器学习中的错误

在机器学习的世界里,准确性就是一切。您努力通过调整和…使您的模型更加精确

medium.com](https://medium.com/towards-data-science/balancing-bias-and-variance-to-control-errors-in-machine-learning-16ced95724db)

避免过度拟合的方法之一是使用交叉验证,这有助于估计测试集的误差,并决定哪些参数最适合您的模型。

[## 机器学习中的交叉验证

总是需要验证你的机器学习模型的稳定性。我的意思是,你就是不能让模型符合…

medium.com](https://medium.com/towards-data-science/cross-validation-in-machine-learning-72924a69872f)

本文将关注一种有助于避免过度拟合并增加模型可解释性的技术。

正规化

这是一种回归形式,它将系数估计值约束/调整或缩小到零。换句话说, 这种技术不鼓励学习更复杂或更灵活的模型,以避免过度拟合的风险。

线性回归的一个简单关系如下。这里,Y 表示学习的关系,而 β表示不同变量或预测值(X)的系数估计值。

Y≈β0+β1 x1+β2 x2+…+βpXp

拟合过程涉及一个损失函数,称为残差平方和或 RSS。选择系数,使得它们最小化这个损失函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,这将根据您的训练数据调整系数。如果训练数据中有噪声,那么估计的系数将不能很好地推广到将来的数据。这就是正则化的用武之地,它将这些学习到的估计缩小或正则化到零。

里脊回归

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图显示了岭回归,其中 RSS 通过添加收缩量进行了修改。 现在,通过最小化这个函数来估计系数。这里, λ是调节参数,它决定了我们想要对模型的灵活性进行多少惩罚。 一个模型的灵活性的增加是通过其系数的增加来表示的,如果我们想要最小化上述函数,那么这些系数需要很小。这就是岭回归技术如何防止系数升得太高。此外,请注意,我们缩小了每个变量与响应的估计关联,除了截距β0,此截距是当 xi1 = xi2 = …= xip = 0 时响应平均值的度量。

当λ = 0 时,罚项没有 effect ,岭回归产生的估计将等于最小二乘。然而, 随着λ→∞,收缩惩罚的影响增大,岭回归 coefficient 估计将趋近于零 。可以看出,选择一个好的λ值至关重要。为此,交叉验证很方便。用这种方法产生的系数估计值是 也称为 L2 范数

然而,岭回归的情况并非如此,因此,在进行岭回归 之前,我们需要标准化预测因子或将预测因子带到相同的尺度。下面给出了实现这一点的公式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

套索

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

套索是另一种变化,其中上述功能被最小化。很明显,这种变化与岭回归的不同之处仅在于惩罚高系数。它使用|βj|(模数)而不是β的平方作为它的惩罚。在统计学中,这种 被称为 L1 常模

让我们从不同的角度来看看上面的方法。岭回归可视为求解一个方程,其中系数的平方和小于或等于 s 。并且套索可以被认为是一个方程,其中系数的模数之和小于或等于 s 。这里,s 是对于收缩因子 λ的每个值都存在的常数。 这些方程也被称为约束函数。

认为自己是给定问题中的 2 个参数 。那么根据上述公式, 岭回归由β1 + β2 ≤ s 表示。这意味着岭回归系数对于位于由β1 + β2 ≤ s 给出的圆内的所有点具有最小的 RSS(损失函数)

同样, 对于套索,方程变成,|β1|+|β2|≤ s 。这意味着拉索系数对于位于由|β1|+|β2|≤ s 给出的菱形内的所有点具有最小的 RSS(损失函数)

下图描述了这些等式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Credit : An Introduction to Statistical Learning by Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani

上图显示了套索(左)和岭回归(右)的约束函数(绿色区域),以及 RSS 的轮廓(红色椭圆) 。椭圆上的点共享 RSS 的值。对于非常大的 s 值,绿色区域将包含椭圆的中心,使两种回归技术的系数估计值等于最小二乘估计值。但是,上图中的情况并非如此。在这种情况下,套索和岭回归系数估计值由椭圆接触约束区域的第一个点给出。 由于岭回归具有没有尖锐点的圆形约束,所以这种相交一般不会出现在轴上,因此岭回归 coefficient 估计将专门是非零的。 然而,套索约束在每个轴上都有角,所以椭圆通常会在一个轴上与约束区域相交。当这种情况发生时,其中一个 coefficients 将等于零。 在更高维度(其中参数远多于 2),许多 coefficient 估计可能同时等于零。

这揭示了岭回归的明显缺点,即模型的可解释性。它将缩小最不重要预测因子的系数,非常接近于零。但这永远不会使它们完全为零。换句话说,最终的模型将包括所有的预测值。然而,在套索的情况下,当调谐参数λ是 sufficiently 大时,L1 罚函数具有迫使一些 coefficient 估计恰好等于零的 effect。因此,套索法也执行变量选择,据说能产生稀疏模型。

正规化实现了什么?

标准最小二乘模型往往会有一些差异,即该模型对于不同于其训练数据的数据集不能很好地泛化。 正则化,显著降低模型的方差,而不大幅增加其偏差 。因此,在上述正则化技术中使用的调谐参数λ控制对偏差和方差的影响。随着λ值的上升,它会降低系数的值,从而降低方差。 直到某一点,λ的增加是有益的,因为它只是减少了方差(因此避免了过度拟合),而没有丢失数据中的任何重要属性。 但是在某个值之后,模型开始失去重要的属性,导致模型出现偏差,从而拟合不足。因此,应该仔细选择λ的值。

这是你开始正规化所需要的所有基础。这是一种有用的技术,有助于提高回归模型的准确性。实现这些算法的一个流行库是 Scikit-Learn 。它有一个很棒的 api,只需几行 python 代码就能让你的模型运行起来。

如果你喜欢这篇文章,请务必为下面这篇文章鼓掌以示支持,如果你有任何问题,请留下评论,我会尽力回答。

为了更加了解机器学习的世界,跟我来。这是最好的办法,等我多写点这样的文章就知道了。

你也可以在 关注我【推特】直接发邮件给我 或者 在 linkedin 上找我。我很乐意收到你的来信。

乡亲们,祝你们有美好的一天:)

信用

这篇文章的内容来自 Gareth James,Daniela Witten,Trevor Hastie,Robert Tibshirani 的《统计学习导论》

机器学习中的正则化:将点连接起来

原文:https://towardsdatascience.com/regularization-in-machine-learning-connecting-the-dots-c6e030bfaddd?source=collection_archive---------3-----------------------

故障

以下是我们将一起走的各个步骤,并试图获得理解。

  1. 语境

2.先决条件

3.过度拟合问题

4.目标

5.什么是正规化?

6.L2 范数或岭正则化

7.L1 范数或拉索正则化

8.拉索(L1) vs 里奇(L2)

9.结论

1.语境

在本文中,我们将把线性回归视为一种算法,其中目标变量“y”将由系数为β1 和β2 的两个特征“x1”和“x2”来解释。

2.先决条件

首先,让我们先弄清楚一些次要的先决条件,以便理解它们的用法。

线性回归

可选:参考下面链接中的第 3 章,了解线性回归。

[## 统计学习的要素:数据挖掘、推理和预测。第二版。

web.stanford.edu](https://web.stanford.edu/~hastie/ElemStatLearn/)

普通最小二乘(OLS)回归的成本函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: https://web.stanford.edu/~hastie/ElemStatLearn/

N —样本数量

p——独立变量或特征的数量

x-特征

y —实际目标或因变量

f(x) —估计目标

β——对应于每个特征或独立变量的系数或权重。

表示为等高线图的梯度下降

在下面的图 1(a)中,梯度下降以三维形式表示。J (β)代表相应β1 和β2 的误差。红色代表误差高的区域,蓝色代表误差最小的区域。使用梯度下降,将在误差最小的地方识别系数β1 和β2。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 1: Gradient Descent Projection as Contour

在上面的图 1(b)中,来自梯度下降的成本函数的相应误差被投影到具有相应颜色的 2-dim 上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 2: Gradient Descent on axes of β1 and β2

在左侧的图 2 中,简单线性回归的梯度下降轮廓在系数β1 和β2 的坐标系中以二维格式表示。

让我们暂时把这个理解放在一边,继续讨论其他一些基本问题。

3.过度拟合问题

假设我们已经在训练集上使用线性回归训练了一个模型,并将性能提高到令人满意的水平,我们的下一步是根据测试集/看不见的数据进行验证。在大多数情况下,准确性水平会下降。发生了什么事?

为了在训练过程中努力提高模型的准确性,我们的模型将尝试拟合和学习尽可能多的数据点。换句话说,随着拟合优度的增加,模型从线性到二次再到多项式(即模型复杂性在增加)。这是由于过度拟合。下图来自吴恩达的机器学习课程,有助于直观地理解这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: https://youtu.be/u73PU6Qwl1I?t=211

高次模型和大系数显著增加了方差,导致过度拟合。

4.目标:

我们的模型需要稳健,以便在现实世界中进行良好的预测,即从样本数据或训练期间未见过的数据中进行预测。训练过程中的过度适应是阻止它变得健壮的原因。为了避免这种过度拟合的情况并提高模型的稳健性,我们尝试

1.缩小模型中要素的系数或权重

2.从模型中去除高次多项式特征

我们如何实现这一目标?随之而来的是正规化。现在就来探索一下吧。

5.什么是正规化?

假设说,我们已经训练了我们的线性回归模型,并且在全局最小值处识别了系数β1 和β2。为了达到我们的目标;如果我们尝试缩小先前学习的特征的系数,模型会失去准确性。这种准确度的损失需要用其他东西来解释,以保持准确度水平。这个责任将由模型方程的偏差部分承担(偏差:不依赖于特征数据的模型方程的一部分)。

偏置部分将按以下方式调整:

1.*方差需要减少,偏差需要增加:*由于方差是系数β1,β2 的函数;偏差也将被标记,并作为系数β1、β2 的函数而改变。使用系数β1、β2 的 L1 和 L2 范数的原因。

2.*推广:*这个系数β1,β2 的函数需要推广,在整个坐标空间(坐标轴上的正值和负值)都起作用。这就是我们在 L1 和 L2 范数方程中发现模算子的原因。

3。 *正则化参数‘λ’:*由于方差和偏差都是系数β1、β2 的函数,所以它们将成正比。这样不行。因此,我们需要一个额外的参数来调节偏差项的大小。这个调节器是正则化参数‘λ’

4.*‘λ’是一个超参数:*如果‘λ’是一个参数,梯度下降会很好地将其设置为 0,并移动到全局最小值。因此,对‘λ’的控制不能用于梯度下降,需要排除在外。它将不是一个参数,而是一个超参数。

在理解了偏差项的变化后,让我们进入将用于正则化的系数β1、β2 的一些函数。

6.L2 范数或岭回归

L2 范数是|β1| + |β2|形式的欧氏距离范数。

具有 L2 正则化的修改的成本函数如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: https://web.stanford.edu/~hastie/ElemStatLearn/

让我们假设λ = 1 并且暂时不在画面中

在寻找全局最小误差的过程中,β1 和β2 可以变化。正则项(在上面的等式中用蓝色突出显示);特定值(β1,β2)将产生偏置输出β1 + β2。可以有多个值产生相同的偏差,如(1,0)、(-1,0)、(0,-1)、(0.7,0.7)和(0,1)。在 L2 范数的情况下,产生特定相同偏差的β1 和β2 的各种组合形成一个圆。对于我们的例子,让我们考虑一个偏差项= 1。图 6(a)表示这个圆。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 6: L2 Norm

图 6(b)表示线性回归问题的梯度下降等高线图。现在,这里有两股力量在起作用。

力 1:偏项,将β1 和β2 拉至仅位于黑色圆圈上的某处。

力 2:梯度下降试图行进到绿点指示的全局最小值。

这两个力都在拉动,最后停在由“红十字”表示的交点附近。

记住我们之前对图 6(b)的假设是偏差项= 1 且λ = 1。现在去掉一个关于偏差项的假设。

想象一下“黑色圆圈”的大小在变化,梯度下降落在成本最低的不同点上。λ = 1 的假设仍然存在。观察到的最小成本是λ = 1 时的

接下来去掉另一个假设λ = 1。提供一个不同的值,比如λ = 0.5。

对λ = 0.5 重复梯度下降过程,并检查成本。可以对不同的λ值重复该过程,以便识别成本函数给出最小误差的最佳λ值。

总的目标是在坡度下降后保持低成本。因此,λ、β1、β2 的值被确定为保持客观。

在该过程结束时,方差将会减小,即系数的大小减小。让我们转到β1,β2 的另一类函数。

7.L1 范数或拉索回归

L1 范数的形式是|β1| + |β2|。

L1 正则化的修正成本函数如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: https://web.stanford.edu/~hastie/ElemStatLearn/

图 7(a)显示了 L1 范数的形状。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 7: L1 Norm

图 7(b)显示了具有梯度下降等高线图的 L1 范数。从减少差异的角度来看,上一节讨论的相同逻辑在这里也是有效的。

让我们转到套索正则化的另一个重要方面,我们将在下一节讨论。

8.拉索(L1)对岭(L2)正规化

图 8(a)显示了 L1 和 L2 标准的面积。对于产生的相同量的偏置项,L1 范数占据的面积很小。但是 L1·诺姆不允许任何靠近轴线的空间。这是导致 L1 范数和梯度下降轮廓之间的交点在轴附近会聚的原因,从而导致特征选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig 8: L1 vs L2 Norms

图 8(b)显示了 L1 和 L2 标准以及不同线性回归问题的梯度下降轮廓。除了一种情况,L1 范数收敛于或非常接近轴,因此从模型中移除特征。

这里的每个象限都有一个梯度下降轮廓,用于不同的线性回归问题。绿色、蓝色、棕色表示它们与不同的线性回归问题有关。每个等高线中的红色圆圈与山脊或 L2 范数相交。每个轮廓中的黑色圆圈与套索或 L1 范数相交。

这表明 L1 范数或 Lasso 正则化作为特征选择器,同时减少方差。

9.结论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方差减少等同于偏差方差权衡。

学分:

  1. 《统计学习的要素》,作者:特雷弗·哈斯蒂、罗布·蒂伯拉尼、杰罗姆·弗里德曼。链接:【https://web.stanford.edu/~hastie/ElemStatLearn/】T4
  2. 正规化话题由吴恩达提出。链接:https://youtu.be/u73PU6Qwl1I?t=211

正则化:偏差-方差权衡之路

原文:https://towardsdatascience.com/regularization-the-path-to-bias-variance-trade-off-b7a7088b4577?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo credit: Pixabay

DataRobot 的首席产品官 Owen Zheng 说:

如果你在没有正则化的情况下使用回归,你必须非常特别。

任何有监督的机器学习问题的最终目标都是找到一个模型或函数来预测一个目标或标签,并且在所有可能的输入和标签上最小化期望误差。最小化所有可能输入的误差意味着函数必须能够对未知输入进行归纳和准确预测。换句话说,机器学习的基本目标是让算法在训练集之外进行推广。因此,正则化简单来说就是引入附加信息以解决不适定问题或防止过度拟合的过程。

说明性示例

假设我们想根据一个独立变量——教育水平来预测某人的工资。我们可以在拉各斯随机选择 1000 人,给他们每个人打电话,问他们的工资。如果我们拟合一条年龄对工资的曲线,我们能准确地用这条曲线来预测所取数据中人的年龄吗?你我都知道这个模式会失败,因为太简单了。这就是所谓的具有高偏差或拟合不足的模型。

假设我们现在从 10 个不同的城市取样,询问受访者的年龄、性别、教育水平、职业和工作经验、父母的职业、体重、身高、最好的食物等等。它变得更加复杂。我们的模型现在可以对我们的训练数据进行归纳和很好的预测。但是它能对其他它没有见过的测试集做出好的预测吗?不会,因为它会像记忆了数据一样一直粘在数据上。这就是我们所说的过度拟合。当一个学习者输出一个对训练数据 100%准确而对测试数据 50%准确的模型时,当它可以输出,比如说对训练和测试数据都是 80%准确时,它已经’过度拟合了。因此,我们说我们的模型有很高的方差,这就是正则化想要解决的问题。

这是一个线性回归问题,我们知道我们的独立变量(年龄、受教育程度等)会以不同的权重组合来预测工资。现在我们的正则化技术来了。我们希望惩罚或调整独立变量的每个权重,这样它就可以对一个以前没有见过的测试集做出很好的预测。换句话说,我们说正则化通过缩小每个特征的贡献来执行特征选择。正则化将有助于在高偏差的第一种情况和高方差的第二种情况之间选择一个中点。就偏差和方差而言,一般化的理想目标是低偏差和低方差,这几乎不可能或难以实现。因此,需要权衡取舍。我们可能不得不将训练数据的准确率从 100%降低到 80%,而将未知数据的准确率从 50%提高到 80%。下图说明了偏差-方差分解。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fig. 1: Graphical Illustration of bias-variance trade-off , Source: Scott Fortmann-Roe., Understanding Bias-Variance Trade-off

数学理解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Machine Learning Flashcard by Chris Albon

当我们说我们有一个对测试和训练数据进行良好预测的算法时,这意味着该算法绘制了一条使误差平方和最小化的回归线。MSE 是我们的实际值(y 或 f(x))和预测值之间的平方差的平均值。详细的数学证明可以在这里找到

模型 f(x)越复杂,它捕获的数据点就越多,偏差就越低。然而,复杂性将使模型“移动”更多以捕捉数据点,因此其方差将更大。

从抽认卡中可以看出,为了减少偏差,我们必须确保预测的期望值尽可能接近真实值,这意味着我们要增加偏差方程中预测值的平均值。随着预测值平均值的增加,方差公式中第二项的平均预测值也会增加。如果我们增加太多,那么它将远远大于单点的预测值,这将使方差增加更多(高方差)。但是,如果期望值或预测值的平均值增加,使其小于单个点,则方差将在此过程中最小化。因此,当我们调整模型时,我们必须观察它对方差和偏差的影响。
不可约误差作为泛化误差是无法避免的。这是一个来自我们数据集中噪音的错误。然而,在预处理过程中通过有效的数据清理可以减少这种情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Graph showing relationship between model complexity and the squared error.

可视化正规化

本节讨论带有随机噪声的模拟正弦数据的图形表示。这将用于测试不同模式的模型选择与正则化。

下图清楚地显示了确保我们在训练样本/数据上获得最佳拟合线的尝试。可以看出,随着模型复杂度随着多项式次数的增加而增加,该模型试图捕获所有数据点,如 20 次多项式所示。作为一个 20 次多项式,该模型已经记忆了数据集,并且由于高方差而过度拟合数据。但是在 2 次多项式中,模型相对于数据有很大的偏差。

多项式次数为 2 时,我们有高偏差,多项式次数为 20 时,我们有高方差和低偏差。我们现在将使用正则化来尝试减少方差,同时将偏差上移一点。所有插图都将形象化。但是,也可以使用定量可视化,如观察特征的均方误差、观察系数和截距。

因此,当我们的模型过度拟合时,正则化可以派上用场,这将在随后的会议中讨论。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Varying polynomial degrees model on on training data

我们如何使用 20 次多项式并防止过度拟合?:正规化

里脊回归

岭回归是一种正则化技术,它使用 L2 正则化对系数的大小施加惩罚。因此,最小化惩罚后的剩余平方和。正则化参数(根据文本使用α或λ)。目标是最大限度地减少:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

α控制系数的大小和正则化的量。必须对其进行适当的调整,否则我们旨在使用正则化来校正的过度拟合模型将会变得欠拟合。当λ=1 时,这可以在下图中观察到。

岭回归交叉验证可用于选择最佳λ值,以确保选择最佳模型。

下面可以观察到,仔细选择作为我们的正则化参数的λ可以帮助消除过拟合。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Plots showing the effect of varying lambda on model

套索回归

Lasso 回归使用 L1 正则化技术作为系数大小的惩罚。然而,我们不是使用重量的平方来施加惩罚,而是采用重量的绝对值。目标是最大限度地减少:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Plots showing the effect of varying lambda on lasso regression model

弹性净回归

弹性网络结合岭(L2 作为正则)和套索(L1 作为正则)来训练模型。目标是最大限度地减少:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们还可以看到,随着λ的增加,系数的损失也增加。这导致最终欠拟合,如λ=1 时所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Plots showing the effect of varying lambda on lasso regression model

最终礼物

这篇文章并不详尽,因为关于正则化技术还有很多内容要写。我们可以看看这篇论文中关于机器学习的一些小知识和 scikit 的学习文档其他技术

我们也可以使用交叉验证结合不同的回归技术,旨在正则化我们的模型,以选择正则化参数的最佳值。

我的下一篇与正则化相关的文章将讨论线性回归的前向和后向消除算法的特征选择。敬请关注。

不要忘记分享和一些掌声给更多的人。谢谢你。

我有空 @Holafisayo

Tensorflow 中基于稀疏滤波自动编码器的正则化

原文:https://towardsdatascience.com/regularization-via-sparse-filtering-auto-encoders-in-tensorflow-4880c73fcfd2?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GIF from this website

这个想法在我心中已经存在很长时间了。我们能做什么让神经元有效学习。更具体地说,我们如何在不执行数据扩充的情况下规范网络……

我认为在机器学习中,一定会有样本偏差,因为我们无法收集世界上所有现有的数据。(人口数据)。并且数据的分布将会不同。(我把增加数据理解为最小化这种差异的一种方法。)但是有没有更好的办法……?

请注意,这个帖子只是为了表达我的创意,当然也是为了好玩。

稀疏滤波介绍和我的天真想法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Illustration of Sparse Filtering From this website

稀疏过滤是一种无监督的学习方法,我们的目标是通过按行和列归一化数据来降低给定数据的维数。上面可以看到稀疏滤波如何修改数据的说明,以防我链接了解释理论概述的论文。

Paper from this website

此外,如果您希望看到 tensorflow 中的实现,请单击此处。稀疏过滤自动编码器背后我简单而天真的想法是这样的。通过更高级特征的聚类,我们的网络将能够区分什么是噪声,什么是我们希望学习的数据。换句话说,正规化。(或者我认为这是在训练过程中注入噪声的一种方式,类似于抖振正则化或者在反向传播中加入梯度噪声。)我想看看这个想法实际上是否有意义。

数据集/训练详情

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image from this website

我希望我们的自动编码器解决的任务是简单的行人分割,我们将使用“ Penn-Fudan 数据库进行行人检测和分割 ”。数据集由 170 幅图像和它们的分割蒙版组成,我想看看当我们有 1:1 比例的训练数据和测试数据时,我们能做多少正则化工作。(每个有 85 张图片。)最后,让我们使用 mall 数据集测试我们模型的性能,可以在这里找到

所有的网络都有相同的历元数、批量大小和学习速率。超参数的细节可以在下面看到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,在培训期间,我发现将学习率乘以 10 是可以的。此外,我们将使用 Adam Optimizer。

我想提一件事,对于稀疏滤波自动编码器,我们不打算从头到尾训练网络,而是我们打算分割训练过程,其中,对于第一个 200 个时期,我们只打算集中于更高级特征的聚类,然后我们打算在执行端到端训练的同时增加学习率。

结果:纯自动编码器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于上面的每一幅图像,最左边一列是原始图像,中间一列显示地面真实遮罩值以及重叠在图像上的地面真实遮罩值,最后右边一列图像表示网络生成的遮罩。(而且是叠加版)

我们可以清楚地看到,网络没有在分割行人方面做得很好,生成的掩膜的一些区域模糊不清。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,当我们使用纯自动编码器网络从商场数据集中分割人时,我们可以观察到网络认为一切都是行人。(当我叠加生成的分割蒙版时,它看起来就像上面一样。)而且我们可以明确的说网络未能一般化。

结果:带 L1 正则化的纯自动编码器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

For each image above, the left most columns are the original image, the middle column shows the ground truth mask values as well as the ground truth mask value overlapped on the image and finally the right column images represents the generated mask by the network. (and it’s overlay-ed version)

当我们添加 l1 正则化时,从网络生成的分割掩模大部分是灰色和白色的,并且它没有清楚地显示分割的外部线。似乎由于正规化,网络很难决定行人的起点和终点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乍一看购物中心的数据集,它可能看起来像是网络在分割行人方面做了惊人的工作。(它确实很好地勾勒出了行走的人。)然而,仔细观察我们可以发现,与其他商场数据集结果相比,生成的 GIF 更红。这表明生成的分割不具有行走行人的清晰边界线,但从分割的角度来看,它做了一项惊人的工作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左图 →来自 L1 正则化自动编码器的一帧
右图 →来自稀疏滤波自动编码器的一帧(软赦免激活功能)

作为比较,我们可以看到与其他具有清晰边界线的网络相比,整体红色通道的差异。

结果:采用 L2 正则化的纯自动编码器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

For each image above, the left most columns are the original image, the middle column shows the ground truth mask values as well as the ground truth mask value overlapped on the image and finally the right column images represents the generated mask by the network. (and it’s overlay-ed version)

L2 正则化与加入 L1 正则化具有相似的效果,但是生成的分割掩膜具有更清晰的边界线。仍然有一些区域的分割面具是模糊的,以及与黑点混合在一起。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如上所述,当网络通过 L1 正则化器进行正则化时,屏幕没有那么红。并且生成的分割掩膜更加清晰。

结果:稀疏滤波自动编码器(软绝对激活)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

For each image above, the left most columns are the original image, the middle column shows the ground truth mask values as well as the ground truth mask value overlapped on the image and finally the right column images represents the generated mask by the network. (and it’s overlay-ed version)

对于稀疏滤波自动编码器,使用软绝对函数作为非线性变换函数。首先,我们可以看到,与 L1 或 L2 正则化网络相比,它有一个清晰的决策线。然而,这种方法也不像上面看到的那样完美。我们可以在生成的掩码中观察到一些漏洞,从那里我们可以得出结论,网络缺乏细节化的能力。(填空)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网络不可细化可以通过上面的 GIF 进一步证明。与我们上面看到的网络不同,这个网络不能清楚地从每一帧中分割出人,而是以 blob 格式分割。

结果:稀疏滤波自动编码器(ELU 激活)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

For each image above, the left most columns are the original image, the middle column shows the ground truth mask values as well as the ground truth mask value overlapped on the image and finally the right column images represents the generated mask by the network. (and it’s overlay-ed version)

对于样本图像,这个网络具有最清晰的轮廓。(我喜欢网络喜欢做自信的决定。)在上面的中间图像中可以看到一个非常令人印象深刻的事实。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红框 →被分割的人那是连在地面上也不真实的分割面具。

如上所述,当我们第一次看到红框区域时,我们可能会认为它是图像中的一个区域,不应该被分割。然而,如果我们看得足够近,我们可以观察到网络注意到另一个人站在角落里,并决定分割该区域。(嗯部分。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然而,当我们用 ELU()作为激活函数时,网络缺少了一样东西。细节。当我们考虑它时,它确实是有意义的,当执行维数减少时,在负区域中的每个值都被丢弃,因此它只在网络最有信心的区域上执行分割。

撤回

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左图 → ELU 激活功能自动编码器
右图 →软绝对激活功能自动编码器

我注意到关于这种方法的一个事实是,它缺乏细节,一般来说,网络似乎知道一个人在图像中的位置,但以 blob 格式。但这也适用于其他网络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了比较,我将来自其他网络的分割结果按照纯自动编码器、L1 正则化和 L2 正则化的顺序进行了链接。

交互代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

要访问纯自动编码器的代码,请点击这里。
要访问 L1 汽车编码器的代码,请点击此处。
要访问 L2 汽车编码器的代码,请点击此处。
要访问软绝对稀疏自动编码器的代码请点击此处。
要访问 ELU 稀疏自动编码器的代码请点击此处。

遗言

我真的没有看到这种方法的任何实际方面,但它是一个有趣的研究领域(对我个人来说)。).我希望继续这些研究。我在下面收集了一些结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的推特这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。

参考

  1. 何时使用 cla(),c. (2018)。什么时候使用 cla()、clf()或 close()来清除 matplotlib 中的绘图?。堆栈溢出。2018 年 7 月 25 日检索,来自https://stack overflow . com/questions/8213522/when-to-use-cla-clf-or-close-for-clearing-a-plot-in-matplotlib
  2. Aubuchon,V. (2018)。2 的幂表——沃恩的总结。Vaughns-1-pagers.com。检索于 2018 年 7 月 25 日,来自https://www.vaughns-1-pagers.com/computer/powers-of-2.htm
  3. tf.tile |张量流。(2018).张量流。检索于 2018 年 7 月 25 日,来自 https://www.tensorflow.org/api_docs/python/tf/tile
  4. [ ICLR 2015 ]追求简单:具有交互码的全卷积网。(2018).走向数据科学。检索于 2018 年 7 月 25 日,来自https://towards data science . com/iclr-2015-力争简单-所有卷积-网络-交互式代码-手册-b4976e206760
  5. [ NIPS 2011 /吴恩达 Tensorflow 中的稀疏滤波与交互式代码第一瞥。(2018).走向数据科学。检索于 2018 年 7 月 25 日,来自https://towards data science . com/nips-2011-Andrew-ng-first-glance-of-sparse-filtering-in-tensor flow-with-interactive-code-659 c4e 84658 e
  6. 谷歌合作实验室。(2018).Colab.research.google.com。检索于 2018 年 7 月 25 日,来自https://colab . research . Google . com/drive/1 JZ 0 jhv 5 ozyzokgihvywy 3j 98 by-uysq 0 # scroll to = c 70 qbz 71 v9 ox
  7. NumPy . dtype—NumPy 1.14 版手册。(2018).Docs.scipy.org。检索于 2018 年 7 月 25 日,来自https://docs . scipy . org/doc/numpy-1 . 14 . 0/reference/generated/numpy . dtype . html
  8. TF . image . resize _ images | tensor flow(2018).张量流。检索于 2018 年 7 月 25 日,来自https://www . tensor flow . org/API _ docs/python/TF/image/resize _ images
  9. TensorFlow,R. (2018)。在 TensorFlow 中调整训练图像的大小。堆栈溢出。检索于 2018 年 7 月 25 日,来自https://stack overflow . com/questions/40299704/resizing-images-for-training-in-tensor flow
  10. float32,T. (2018)。TensorFlow:将 float64 张量转换为 float32。堆栈溢出。检索于 2018 年 7 月 25 日,来自https://stack overflow . com/questions/35725513/tensor flow-cast-a-float 64-tensor-to-float 32
  11. (2018).[在线]可在:https://www . researchgate . net/figure/Illustration-of-Sparse-filtering-Sparse-filtering-is-applied-to-a-random-set-of-data-X _ fig 2 _ 301837553[2018 年 7 月 29 日获取]。
  12. (2018).Arxiv.org。检索于 2018 年 7 月 29 日,来自 https://arxiv.org/pdf/1603.08831.pdf
  13. [ NIPS 2011 /吴恩达 Tensorflow 中稀疏滤波与交互式代码的第一瞥。(2018).走向数据科学。检索于 2018 年 7 月 29 日,来自https://towards data science . com/nips-2011-Andrew-ng-first-glance-of-sparse-filtering-in-tensor flow-with-interactive-code-659 c4e 84658 e
  14. 行人检测数据库。(2018).Cis.upenn.edu。检索于 2018 年 7 月 29 日,来自https://www.cis.upenn.edu/~jshi/ped_html/
  15. 洛伊,C. (2018)。购物中心数据集-人群计数数据集。Personal.ie.cuhk.edu.hk。检索于 2018 年 7 月 29 日,来自http://personal . ie . cuhk . edu . hk/~ cc loy/downloads _ mall _ dataset . html
  16. 张量流正则化。(2018).ritchieng . github . io . 2018 年 7 月 30 日检索,来自https://www . ritchieng . com/machine-learning/deep-learning/tensor flow/regulation/
  17. Matplotlib 图:移除轴,l. (2018)。Matplotlib 绘图:删除轴、图例和空白。堆栈溢出。检索于 2018 年 7 月 30 日,来自https://stack overflow . com/questions/9295026/matplotlib-plots-removed-axis-legends-and-white-spaces
  18. 情节,一.(2018)。散点图中的单个 alpha 值。堆栈溢出。检索于 2018 年 7 月 30 日,来自https://stack overflow . com/questions/24767355/individual-alpha-values-in-scatter-plot
  19. https://stack overflow . com/questions/332289/how-do-you-change-the-size-of-figures-drawn with-matplotlib?,H. (2018)。如何改变用 matplotlib 绘制的图形的大小?。堆栈溢出。检索于 2018 年 7 月 30 日,来自https://stack overflow . com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib
  20. https://stack overflow . com/questions/9295026/Matplotlib-plots-remove-axis-legends-and-white-Matplotlibplots:remove axis,l. (2018)。Matplotlib 绘图:删除轴、图例和空白。堆栈溢出。检索于 2018 年 7 月 30 日,来自https://stack overflow . com/questions/9295026/matplotlib-plots-removed-axis-legends-and-white-spaces
  21. matplotlib,O. (2018)。用 numpy 和 matplotlib 覆盖图像分割。堆栈溢出。检索于 2018 年 7 月 30 日,来自https://stack overflow . com/questions/31877353/overlay-an-image-segmentation-with-numpy-and-matplotlib
  22. [复本],H. (2018)。如何用 python 把图像做成电影?堆栈溢出。检索于 2018 年 7 月 30 日,来自https://stack overflow . com/questions/44947505/how-to-make-a-movie-out-of-images-in-python
  23. 函数,H. (2018)。如何在张量流误差函数中加入 L1 正则化?堆栈溢出。检索于 2018 年 7 月 30 日,来自https://stack overflow . com/questions/36706379/how-to-exact-add-L1-regularization-to-tensor flow-error-function
  24. 阿什温诉弗吉尼亚州(2015 年)。如何在 Python 中自然排序?编码纱线👨‍💻。检索于 2018 年 7 月 30 日,来自https://code yarns . com/2015/01/23/how-to-natural-sort-in-python/
  25. OpenCV:视频入门。(2018).Docs.opencv.org。检索于 2018 年 7 月 30 日,来自https://docs . opencv . org/3 . 1 . 0/DD/d43/tutorial _ py _ video _ display . html
  26. Gastaldi,X. (2017)。抖抖正则化。Arxiv.org。检索于 2018 年 7 月 30 日,来自 https://arxiv.org/abs/1705.07485
  27. Only Numpy:实现“添加梯度噪声改善非常深度网络的学习”来自…(2018).成为人类:人工智能杂志。检索于 2018 年 7 月 30 日,来自https://becoming human . ai/only-numpy-implementing-adding-gradient-noise-improves-learning-for-very-deep-networks-with-ADF 23067 F9 f1

强化学习 101

原文:https://towardsdatascience.com/reinforcement-learning-101-e24b50e1d292?source=collection_archive---------0-----------------------

学习强化学习的要领!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Daniel Cheung on Unsplash

强化学习(RL)是现代人工智能领域最热门的研究课题之一,其受欢迎程度还在不断增长。让我们看看开始学习 RL 需要知道的 5 件有用的事情。

1。什么是强化学习? 与其他 ML 技术相比如何?

强化学习(RL)是一种机器学习技术,它使代理能够在交互式环境中使用来自其自身行为和经验的反馈通过试错来学习。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虽然监督学习和强化学习都使用输入和输出之间的映射,但与监督学习不同,监督学习向代理提供的反馈是执行任务的正确的动作集,强化学习使用奖励和惩罚作为积极和消极行为的信号。

与无监督学习相比,强化学习在目标方面是不同的。虽然无监督学习的目标是找到数据点之间的相似性和差异,但在强化学习的情况下,目标是找到一个合适的动作模型,使代理的总累积报酬最大化。下图显示了通用 RL 模型的行动奖励反馈回路

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2。如何公式化一个基本的强化学习问题?

描述 RL 问题基本要素的一些关键术语是:

  1. 环境— 代理运行的物理世界
  2. 状态— 代理人的现状
  3. 奖励— 环境的反馈
  4. 策略— 将代理的状态映射到动作的方法
  5. 价值— 代理在特定状态下采取行动将获得的未来回报

一个 RL 的问题可以通过游戏得到最好的解释。就拿 吃豆人 这个游戏来说,代理人(吃豆人)的目标是吃掉格子里的食物,同时避开途中的鬼魂。在这种情况下,网格世界是代理的交互环境。代理人会因为吃了食物而得到奖励,如果被鬼魂杀死(输掉游戏)则会受到惩罚。状态是代理在网格世界中的位置,总的累积奖励是代理赢得游戏。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了建立一个最优策略,代理人面临着探索新状态,同时最大化其整体报酬的困境。这就是所谓的勘探与开发权衡。为了平衡这两者,最好的整体策略可能需要短期的牺牲。因此,代理应该收集足够的信息,以便在未来做出最佳的整体决策。

马尔可夫决策过程**【MDPs】**是描述 RL 中环境的数学框架,几乎所有的 RL 问题都可以用 MDPs 来公式化。一个 MDP 由一组有限的环境状态 S,一组在每个状态下的可能动作 A(s),一个实值奖励函数 R(s)和一个转移模型 P(s ',s | a)组成。然而,真实世界的环境更可能缺乏任何关于环境动态的先验知识。在这种情况下,无模型 RL 方法就派上了用场。

Q-learning是一种常用的无模型方法,可用于构建自玩 PacMan 代理。它围绕着更新 Q 值的概念,Q 值表示在状态 s 中执行动作 a 的值。下面的值更新规则是 Q 学习算法的核心。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里有一个使用深度强化学习的 PacMan 代理的视频演示。

3。最常用的强化学习算法有哪些?

Q-learningSARSA (状态-动作-奖励-状态-动作)是两种常用的无模型 RL 算法。它们的勘探战略不同,但开发战略相似。Q-learning 是一种非策略方法,其中代理基于从另一个策略导出的动作 a来学习值,而 SARSA 是一种策略方法,其中它基于从其当前策略导出的当前动作 a 来学习值。这两种方法实现起来很简单,但是缺乏通用性,因为它们不具备估计未知状态值的能力。*

这可以通过更高级的算法来克服,例如使用神经网络来估计 Q 值的 深度 Q 网络(DQNs) 。但是 dqn 只能处理离散的、低维的动作空间。

【DDPG】深度确定性策略梯度是一种无模型、非策略、行动者-批评家算法,通过在高维、连续的动作空间中学习策略来解决这个问题。下图是演员兼评论家建筑的代表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4。强化学习有哪些实际应用?

由于 RL 需要大量数据,因此它最适用于模拟数据容易获得的领域,如游戏、机器人。

  1. RL 在构建用于玩电脑游戏的 AI 方面应用相当广泛。 AlphaGo Zero 是第一个在中国古代围棋比赛中击败世界冠军的计算机程序。其他包括雅达利游戏,西洋双陆棋等
  2. 在机器人和工业自动化中,RL 用于使机器人能够为自己创建一个高效的自适应控制系统,该系统从自己的经验和行为中学习。 DeepMind 的工作关于利用异步策略** 更新进行机器人操作的深度强化学习就是一个很好的例子。观看这个有趣的演示视频。**

RL 的其他应用包括抽象文本摘要引擎、可以从用户交互中学习并随时间改进的对话代理(文本、语音)、学习医疗保健中的最佳治疗策略以及用于在线股票交易的基于 RL 的代理。

5。强化学习怎么入门?

为了理解 RL 的基本概念,可以参考以下资源。

  1. ****强化学习——一本介绍的书,作者是强化学习之父——理查德·萨顿 和他的博士生导师 安德鲁·巴尔托 。这本书的在线草稿可以在这里找到。
  2. 教材 来自大卫·西尔弗包括视频讲座是一门很棒的 RL 入门课程。
  3. 下面是另一个关于 RL 的 技术教程 ,作者是彼得·阿比尔约翰·舒尔曼**(开放人工智能/伯克利人工智能研究实验室)。**

对于开始构建和测试 RL 代理,以下资源可能会有所帮助。

  1. 这篇博客 讲述了 Andrej Karpathy如何利用原始像素的策略梯度来训练神经网络 ATARI Pong 智能体将帮助您在仅 130 行 Python 代码中建立并运行您的第一个深度强化学习智能体。
  2. DeepMind Lab 是一个开源的 3D 类游戏平台,为基于智能体的人工智能研究创建了丰富的模拟环境。
  3. 项目马尔默 是另一个支持人工智能基础研究的人工智能实验平台。
  4. OpenAI gym 是一个构建和比较强化学习算法的工具包。

如何产生更多的销售线索并降低成本?A/B 测试 vs 强化学习。

原文:https://towardsdatascience.com/reinforcement-learning-64730aaa46c9?source=collection_archive---------12-----------------------

你会发现进入机器学习世界的迷人而直观的旅程,其中有有趣的实验和非常有用的结论。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

营销人员经常使用 A/B 测试——一种比较产品的两个或更多版本(广告、设计、登陆页面等)的技术。)来评估它们中的哪一个更好地执行其功能。但是你想知道如何达到同样的目标,得到好得多的结果,降低成本吗?在这篇文章中,我将告诉你强化学习。

下面您将了解到:

  • A/B 测试最大的问题是什么,如何解决
  • 机器如何学习
  • 如何在强化学习的帮助下优化几乎任何网络产品
  • 简单而强大的置信上限算法
  • 如何实际实现置信上限算法(以 Node.js 为例)

市场营销中的多臂强盗问题

在概率论中,有所谓的多臂土匪问题。让我们以登录页面为例深入探讨这个问题。

假设你有 5 个版本的登陆页面。众所周知,在最初几秒钟内保持网站用户的注意力是非常重要的。但是如何选择最能应对这种情况的版本呢?

第一个(也是不好的)解决方案是 A/B 测试。我们可以向用户展示我们的登陆页面的随机版本,并根据大量访问的结果,确定哪个版本的性能更好。

你为什么不应该这样做?

  1. 你将花费金钱和时间来推广你网站的“坏”版本
  2. 你的企业服务的潜在客户可能会离开,因为他们对你的登录页面的“坏”版本
  3. 结果你得到的统计数据没什么用,因为大多数用户已经看过你的登陆页面了

如果机器本身能够决定你的登陆页面哪个版本效果最好,那该多好啊……而且是有可能的!

机器如何学习

因此,强化学习是一种机器学习,机器通过试错来学习如何达到目标。每一个动作机器都会获得一份奖励。机器的主要目标是报酬最大化。在我看来,它是最有趣的机器学习类型。它用于训练机器人行走,以及训练无人机自主飞行。使用这种算法的最有趣的例子可以在这个视频中看到。

我给你看一个简单但非常有效的强化学习算法——置信上限。

置信上限

好,假设我们的登录页面有以下选项:

  1. 糟糕透了。10%的用户将成为客户
  2. 不好。20%的用户将成为客户
  3. 中等。30%的用户将成为客户
  4. 很好。40%的用户将成为客户
  5. 太好了。50%的用户将成为客户

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Landing Pages

一开始,我们不知道哪个版本更好,哪个版本更差。我们的任务是让机器解决这个问题。

我们开始吧!

啊,不对,先表示一件事……注意这个方案。这对我们将来会有用的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们终于开始了!

第一步

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们登陆页的每个版本都有“平权”。我的意思是,它有相等的估计平均回报和相同的范围,我们将搜索实际的平均回报。让我们向用户展示一次网站的每个版本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

发生了什么事?

访问了我们登录页面第一版的客户还没有成为客户。对于这个选项,机器的回报是 0。这个选项的估计平均回报变低了,我们搜索实际平均回报的范围也缩小了。

同样的事情也发生在第二版和第四版上。

选项#3 和选项#5 会出现相反的情况。访问过这些版本的登录页面的客户已经成为客户。对于这些选择,机器的回报是 1。这些选项的估计平均回报已经变得更大,我们搜索实际平均回报的范围已经缩小。

步骤 2+

厉害!现在让我们看看我们的范围的上限。第三个和第五个选项具有最大的上限。因此,现在他们是我们的最佳登陆页面的主要候选人。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新访问者已经看到了站点版本#3。他也没有成为我们的客户。但是来到 5 号站点的访问者变成了买家!我们登陆页面的哪个版本是领导?是的,5 号。我想你已经明白了主要意思。

让我们看看整个过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当然,这个过程被大大加速了,但是我认为这个想法是明确的。通过反复试验,机器本身找到了我们网站的最佳版本,并越来越准确地向用户展示它。

如何计算置信上限?

公式如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中:

  • n 是访客总数;
  • N i ( n )是登陆页面 i 展现给访问者 n 的次数;
  • R i ( n )是登陆页面 i 到访客n的奖励总和

一切都比看起来简单得多。使用 UCB,你不需要深入研究数学。

实验时间到了!

我使用 Node.js 和 Firebase 创建了一个工作示例。我绝对不想让你厌烦阅读代码,所以那些感兴趣的人可以在这里看到它。

现在让我们把注意力集中在结果上。在对我们的登录页面进行了 540 次访问后,我们看到了下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以肯定,机器处理了任务,并找到了我们的登录页面的最佳版本。 277/540 用户已经看到登陆页面# 5。

228/540 游客变成了顾客!为了进行比较,我随机选择了登陆页面版本(就像 A / B 测试一样)来模拟这种情况,只有 148/540 访问者成为了客户。

恭喜你!我们刚刚将付费用户的数量增加了 1.5 倍。

结论

我相信你毫不怀疑强化学习可以给几乎任何网络产品带来巨大的价值。重要的是,它实现起来非常简单。

如果你还有问题,请在评论中提问,我很乐意回答。

强化学习。

原文:https://towardsdatascience.com/reinforcement-learning-79ffd92886a7?source=collection_archive---------5-----------------------

我们人类从日常活动中学到了很多东西。我们观察我们的环境,采取一些行动,看看我们的行动如何影响我们的环境,并采取我们的下一步行动。强化学习类似于系统建模或编写计算机程序,其中系统看到或观察其环境,并采取一些行动来实现某些目标。

在这个博客中,我们将从零开始,学习蒙特卡罗估计方法,并训练一个代理来实现一个目标。特别是,我们将学习训练一个代理来平衡一个推车杆!!我们还将学习如何将方程式转换成代码,并亲眼看看它是如何工作的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pushing cart towards left.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

pushing cart towards right.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Trained agent taking correct decions.

萨顿的经典教科书和大卫·西尔弗的 T2 讲座是详细理解主题的最佳途径,但是如果他/她应用这些概念,建立一些东西并看到它为自己工作,他/她会学得更好,这也是这篇博客的主要动机。如果你看过他的讲座,这个博客会非常有用,但如果没有,不要担心,我已经尽力用简单的方式解释了这些概念。

我们将以经典的推车杆子游戏环境为例,通过它学习强化学习(RL)。在 RL 设置中,我们将试图学习的东西称为代理。在这篇博客中,我将交替使用代理/我们。例如,在动物中,大脑是一种媒介。在计算机中,你的 RL 代码是一个代理。人类进化得如此复杂,以至于即使是我们最顶尖的研究人员也不知道它是如何学习一切的。当人们说人工智能的时候,你需要意识到它不是什么超级有意识的东西,它能够像人类一样学习一切,交流和行动!!这只是一个如预期运行的代码。神经网络只是其中很小的一部分,重要的是你的设计系统如何使用这些网络。类似地,我们的 RL 程序只能学习我们要编程做的事情。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

RL Setup

在典型的 RL 设置中,我们的代理通过在时间 t 采取一些动作(在的*)来与环境交互。代理采取的动作也通过修改环境改变了环境,或者如果代理移动了,那么它的摄像机/传感器视角将会改变,所以代理将会看到新的状态( St+1 )。就像我们一样,你看到一些东西,闭上眼睛向前迈一步,然后你会发现你所看到的和你之前看到的有些不同。如果智能体的行为是好的,环境会给予奖励( Rt+1 )。使用这些奖励代理将学到一些东西,看到这个新的国家代理将采取新的行动。而且还在继续。让我们通过例子来理解这一点,首先让我们设置我们的环境。*

设置

OpenAI 通过他们的 OpenAI 健身房提供 RL 环境。看一看。我们将使用 Cartpole 环境。这里是设置您的环境的链接。一旦你安装好了,试一下这段代码。

你会看到一个车杆游戏环境将显示,并按照代码。我们将随机抽样一个动作( 0 或 1 ) 0 表示左,1 表示右,我们通过调用 env.step 来采取该动作,然后我们得到采取该动作的结果。结果将是新的状态,奖励,终端,信息。终端指示游戏是否已经结束(如果游戏结束,则为真)。现在,如果您打印 new_state 值,您将会看到类似于[28.53394423 4.91374739-43.098292439-9.这是一个 1×4 的向量。这个向量中的每一个值都代表一个类似角度的东西,或者是从中心移动的距离。这个向量中的每个唯一的数字代表那个推车杆子的唯一的状态。现在,我们的目标是利用这些向量,通过决策而不是随机行动来选择行动,并查看我们的行动如何使车杆移动。如果这些值中的一个变得极端,比如只采取向左的动作(向左推),将导致新的状态向左移动,如果购物车越过某个阈值,游戏将结束。类似地,如果杆子掉下来或形成极端角度,游戏结束。在每个时间步,我们/代理都有两种可能的操作(向左推或向右推)。我们需要观察我们的推车杆子是如何移动的,并调整我们的动作,使杆子停留在同一个地方。这是你只向左推时的样子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pushing cart to left.

状态

状态可以是描述代理当前状况的任何东西。例如,让我们说你正在玩玉米迷宫游戏。如果将位置视为州,什么参数可以唯一地描述您的位置?我们可以选择人的纬度,经度和方向作为状态,我们可以用向量数组[37.338,-121.88,0.234]来表示它们,或者让我们说你正在教机器人移动,然后我们可以考虑像传感器读数,它的摄像头,位置等作为状态表示。显然传感器越多,我们就能越独特地识别它的状态。

目标

如果你考虑任何动物,它做的每一件事,都是为了最大化某样东西。比如你为了考试努力学习,让成绩最大化。在这种情况下,你的学校、班级、家庭、考试都是环境的一部分。你采取行动学习,环境根据成绩给你奖励。如果你成绩不好,你会努力学习,这样下次考试你就能提高成绩。最终,你试图最大化你的成绩。请注意,你不会一学习就立即获得奖励,但奖励会延迟。所以当我们说我们得到了奖励时,我们需要考虑从你的学习时间到考试时间到结果日的所有事情。让我们在下一节量化这个目标和奖励。

在手推车杆的情况下,平衡杆是我们的目标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

initial agen`t effort

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Goal achieved

奖励

在代码中,如果你打印奖励值,你会看到它的 1。实际上,你可以定义你想要的任何奖励,但让我们理解这个术语叫做贴现回报

每当你处于一种状态时,你采取一个行动,你就会得到一些奖励(比如说 1)。在游戏设置中,如果你一直向左推手推车,你会看到有东西向右移动,杆子倒了(试试看)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据代码,您只需向左/向右推,每次设置时,您将获得 1 的奖励,在某个点上,极点会高于/低于阈值,游戏结束。那么,我们得到的总回报是多少呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们说 t=1 时的总收益是 8。类似地,如果你想计算 t3 时刻的回报。只需添加从时间步长 t3 开始的所有返回。你可以这样想。从游戏第 1 帧的回报是游戏结束前所有奖励的总和。游戏框架 4 的回报(time_step = 4)是游戏框架 4 上所有奖励的总和。或者一般来说,如果一个博弈在时间步长 tn 结束,你想从时间步长 t 开始计算收益。我们可以这样表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在有一个问题。有些环境,比如这个横竿,是终结性的,也就是说,在某个时刻游戏结束了(如果你采取了错误的行动)。然而,有些环境可能没有终点,比如说你正在教一个代理阅读英语,这里没有有限的终点。我们需要将我们的回报推广到所有代理商。概括来说,我们添加额外的终端状态,称为 ST 。终结状态的特殊属性是它永不结束的 ie。如果您进入终端状态,我们将返回到相同的终端状态。同样进入终极状态会给你 0 奖励。现在不要担心终端状态,你最终会明白的。但是,现在稍微修改一下,我们可以把方程写成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 t 从 0 到无穷大。如果你注意到 Gt 的值没有改变,因为在终端状态我们得到 0 奖励。即使我们向无穷大求和。

现在还有一个关于非终态环境的问题。就像那个英语阅读问题,我们可以看到,如果我们不断增加奖励,GT 值就会爆炸。此外,对于在时间 t 采取的行动,我们在下一个时间步骤获得的奖励(即时奖励)很重要,而从下一个时间步骤获得的奖励(延迟奖励)很不重要,等等。概括来说,我们引入了折扣奖励。在某些情况下,只有在你实现了某些目标之后,奖励才会到来。因此,我们需要在设计我们的系统时牢记这些事情。因此,给这些奖励增加权重是一个开始。ie 奖励在每一个时间步会被一些伽玛因子打折。现在我们可以想象所有这些。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

state to state transitions with rewards and terminal state.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Discounted return

在一些初始状态下,我们采取一些行动,我们得到回报 R1,然后我们的新状态是 S1,我们采取一些行动,我们得到回报 R2,等等。在 S2,我们/代理人做了一些不好的行为,把我们/代理人推到了某种终结状态,因此从那时起,我们得到的奖励为 0。

现在,为了计算回报 Gt,我们采用下一个奖励(即时奖励)并通过用 gamma 对所有其他奖励进行贴现来添加所有其他奖励。典型地,我们保留 1 作为正奖励,对于终止前的最后一个状态,我们给出负奖励,因为在那个状态中,我们的代理采取了不好的行动,并以终止状态结束。

让我们运行一个简单的代码来看看它的作用。

Total returns for different states in an episode.

浏览代码,看看状态是如何转换的。在时间步骤 1,我们处于初始状态。我们果断地采取了行动 1,结果我们进入了新的状态。从那个状态我们再次确定性地采取行动 1,以此类推。在时间步骤 t=11 时,我们处于状态[ 0.15274551,1.70880722,-0.17696351,-2.69724965]并采取行动 1,我们到达最后状态[ 0.18692165,1.90472068,-0.2309085,-3.03828657]。尽管 reward 显示 1,但在计算回报时,我们会将其设置为-10。之后我们可以用 0.9 的折现率来计算回报

*注意这里重要的一点,为了计算一个州的回报,我们必须等到游戏结束。*我们可以将一场比赛作为一集来运行。如果我们运行两个游戏,我们可以说我们运行了两集。在文学作品中,它通常被称为展开。

让我们稍微修改一下代码,看看 10 个不同情节的第一个状态和最后一个状态的返回结果。注意每集的长度是如何变化的!!这就是我们用终端状态,导出一般返回函数 Gt 的原因。不管每集的长度如何,我们可以从时间 sigma 到无穷大,因为最终状态的回报为零,所以我们的回报在每集中都是一致的。这里是 10 个不同剧集的状态 s1 和 st(最后一个状态)的总回报计算代码。

Total returns for state s1 and st(last state) for 10 different episodes.

马尔可夫性质和马尔可夫决策过程。

到目前为止,我们已经确定地选择了单个动作(左/右)。我们没有考虑任何直观的方式来决定采取哪些行动。在我们能够跳到决策之前,我们需要知道整个状态动作转换是如何发生的。在现实世界中,宇宙决定了转变应该如何发生。例如,如果你制作一架纸飞机,并将其射向目标,即使你的目标是完美的,风、湿度、摩擦等宇宙因素将决定你的飞机是否应该击中目标。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Finite MDP

横竿是一个简单的环境。让我们考虑一个通用环境。假设这个环境只有 3 个状态,在每个状态下你可以采取行动 a0 或 a1。在现实世界中,一切都是随机发生的,也就是说,假设你处于状态 S0,那么有 30%的几率你会采取行动 a0,有 70%的几率你会采取行动 a1。假设你选择了 ao 行动,那么可能有 50%的机会你可以转到 S2,或者可能你会回到同一个州,任何事情都可能发生!!。上面提供的例子是有限 MDP,因为有有限数量的状态,即 3.在 cartpole 的情况下,可以有任何数量的状态,所以我们可以使用所谓的棒图和贝尔曼方程来捕捉它们。在每一个状态中,环境控制着你如何过渡到下一个状态。给定一个状态,每个行为都会有一些概率,我们知道只有在我们采取行动后,我们才会得到回报。

我们应该知道如何将信息编码到每个状态,这样当我们处于特定状态时,我们就可以看到采取这些行动的可能性和价值。如果状态能保持这样的值,它们被称为具有马尔可夫性。一旦我们到达本博客中关于状态值 V(s)和 Q 值 Q(s,a)的部分,你将更好地理解每个状态如何保持值,并且我们可以使用马尔可夫决策过程来采取正确的行动。在我们开始寻找这些状态的值之前,让我们给这些概率项取一些名字。

政策

在一个给定的状态下,将会有与支配我们的代理行为的每个动作相关的概率。例如,如果机器人是一个代理人,比方说在一个特定的状态(山顶)有大风吹,有时把机器人推到悬崖,那么机器人应该避免去那个状态。机器人可以通过减少与导致该状态的那些动作相关联的概率来避免该状态。

政策只不过是在给定状态下采取行动的概率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

pi 是概率,a 是动作,|是给定的,s 是状态。

跃迁概率

如果你处于一种状态,你会采取特定的行动。那么你可能会在任何一个州结束。如果你的环境有 n 种状态,那么每种状态都有一定的关联概率,假设你处于这种状态并采取了某种行动。

转移概率就是从一个给定的状态转移到另一个状态,采取某种行动,我们在上面讨论过,宇宙编码了这些概率,我们需要恢复它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

p 是概率,St+1 是下一个状态,St 是你当前的状态,At 是你采取的行动。从 St 状态到 St+1 状态的概率。

前方数学!!😃

过渡棒图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

State Transitions.

从简笔画中可以很容易地推断出,开始时我们处于这样的状态。在这种状态下,我们可以选择采取 n+1 个行动。我们随机决定采取行动。在采取行动后,现在的环境可能会把我们推回到索州、S1 和其他州。因为我们有这么多的行动要做,我们可能会在任何状态下结束,让我们把概率和它们联系起来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

State Transitions with probabilities over state and action space.

让我们浏览一下这个图表。最初,代理/我们处于状态*,因此*,在该状态下,我们可以从动作空间 A 中选择 n+1 个动作:{A0,A1,A2…An,An+1} 对于这些动作中的每一个,都有选择它的概率,这定义了代理的行为。一个好的代理将有很高的概率选择正确的行动。Medium 不允许我使用数学符号来表示 PI ,所以我将使用 PI 。PI(At|St) 代表在给定的 St 状态下选择行动的概率,这是我们的策略。

注意,代理选择的动作取决于它所处的状态。就像你一样!!你开车的速度(动作=踩油门?)是以你的妈妈/爸爸在车上是否坐在你旁边为条件的(St =妈妈,爸爸)!!

猜测…PI(动作=按压气体?| St =闺蜜)?😃

好了,现在我们的环境是随机的(“风可能会把我们吹到任何地方”),所以我们的代理有可能最终处于状态 S0,S1…序列号。这些状态来自状态空间 S:{S0,S1,S2…Sn} 。我们可以把它写成 Pr(St+1| St,At) ,这意味着概率代理可能结束于状态 St+1,假设它处于状态 St 并在采取行动*。如果代理最终处于正确的状态,它将获得好的奖励(正奖励),如果它最终处于坏的状态,它将获得坏的奖励(负奖励)。因此,代理人的回报取决于它最终所处的状态,所以我们可以将概率放在 Pr(Rt+1| St,at,St+1)上,这意味着代理人将获得回报 Rt+1 的概率,假设我们处于状态 St,在状态 St+1 采取行动并着陆。*

状态值 V(s)

假设我们有一个机器人代理,它处于状态 S0 。如果它采取行动 A0 它会在火坑结束,这是不好的,如果它采取行动 A1 它会送上平坦的道路,这是好的。现在,我们需要从数学上量化好/坏意味着什么。在另一个世界中,我们需要估计这些状态的值。我们可以使用贝尔曼方程来估算价值。

贝尔曼方程是一个动态规划方程。为了理解它,假设我们已经估计了状态 S0 的某个值,下次我们访问相同的状态时,因此我们可以使用旧的估计值,计算新的估计值并更新该相同状态的值。下次你访问同一个州时,你会有一个更好的估计。

我们可以做的一件事就是简单地建立一个字典,用 states 作为键,state-values 作为值。我们可以用总收益作为这个状态的值。但是,如果您查看标题为“10 个不同剧集的状态 s1 和 st(最后一个状态)的总回报”的代码贴在上面,我们可以看到 S1 州的回报不断变化,每集我们可以有任何数量的州。我们可以对一个特定的州的总收益进行简单的平均,这将是一个开始估算的好方法。

所以,我们将上面代码运行几集,比如 10 集,然后我们将它平均。现在,让我们想想如何才能做到这一点?我们可以保留一个计数器。我们将运行 10 集,每次我们访问一个特定的州,我们可以更新该州的计数器。在所有状态的 10 集之后,我们可以对它们进行总结和更新。

请注意,当我们说相同状态时,请记住所有值必须相同。例如,如果在剧集中,第一个游戏帧是状态 S0:[1.1,1.2,1.3,1.4],而在第二集中,第一个游戏帧是状态 S0:[0.1,0.1,1.1,0.4],那么它们都不表示相同的状态。如果在第二集第五个游戏帧是状态 S5:[1.1,1.2,1.3,1.4],那么它们都表示相同的状态。

下面是一个简单的代码

蒙特卡洛学习

这种估算状态值的方法,我们从头到尾运行一集。收集所有州的回报,并运行许多这样的插曲。最后停止运行游戏,并通过取收集状态值的平均值来更新状态值。这可能是游戏情节。

第 0 集:S00-> S01-> S02-> Sot

第一集:S10 -> S11 -> S12->S1t

第二集:S20 ->S2t

第 N 集:Sn0-> Sn1-> Sn2-> Sn3-> Sn4-> Snt

这里没有什么需要注意的。S10 表示第 1 集的状态 0,类似地,S01 表示第 0 集的状态 1。

S00 S10 可能不相同!!可能是 S01 和 S12 相同的状态!!

在一个随机环境中,转变到由 Pr(St+1|St,At)决定的状态,正如我们之前看到的。

假设 S10 和 S12 都是相同的状态,我们称之为 Sb。让我们初步估计 sb ti 的值为 0.1 ie。V(sb) = 0.1。经过两集 0,1,我们知道真实的回报 Gt(S10)和 Gt(S12)让我们说它是 0.2 和 0.3,然后我们可以保持一个计数器,并更新它 N(sb) += 1,所以它将是 2。为了估计新值,将状态 Gt(S10)+G(S12)的所有返回相加,并计算平均值 Gt(S10)+G(S12)/N(sb ),这就是新的估计值。

因此,我们可以更新 V(sb) ← Gt(S10)+G(S12)/N(sb),其中 S10 和 S12 表示不同剧集中的相同状态。如果在一个状态 ie 中不增加计数器。如果你在一集内访问同一个州,并且没有更新计数器,那么首先访问蒙特卡洛。如果你每次访问一个州就增加一个计数器,那么它就叫做每次访问蒙特卡洛

现在我们看到一个小问题。为了更新 V(s ),我们必须运行 n 集,然后停止运行,计算平均值,然后更新 V(s ),然后我们继续做同样的事情。能找到解决办法吗?我们可以在移动中进行批量更新,而不是停下来进行批量更新吗?让我们做一个简单的推导。我们知道 V(s)是我们运行一集时的估计状态值,在我们运行该集后,我们知道该状态的真实回报,即。燃气轮机。所以,Gt(s)-V(s)是我们在估计状态值时产生的误差。

让我们的初始状态估计为 V(s)。在我们运行 k 数之后,如果 N(s)k 集代表我们访问状态 s 的次数,我们知道状态 V(s)k 的值是总收益的平均值,直到 N(s)k 集的 k 集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以将适马拆分为当前真实回报+所有先前回报的总和。我们知道在 k-1 第五集,k-1 一定是收益的平均值。因此

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以用 V(S)k-1 中的 N(S)k-1 代替 V(S)k 中的 sigma 项,N(S)k-1 为(N(S)k)-1。因此

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

重新安排

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以用 N(s)来计算所有状态的出现次数,或者我们可以放松,只考虑一小部分事件,这样我们就可以摆脱计数器。让我们用阿尔法修正它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们有一个蒙特卡洛更新。这就是说,每次你访问一个州,你可以得到我们到目前为止对该州所做的估计,在剧集结束后,我们可以得到该州的真实回报,我们发现我们犯的错误,并在错误的方向上更新我们的旧估计。所以下次我们访问同一个州时,我们会有更好的估计。

注意,要更新,我们仍然需要运行完整的剧集,但是要更新值,我们不需要停下来批量更新,但是我们可以在每集之后更新。但是,我们仍然必须运行一个完整的插曲来计算总回报,这个问题可以通过时间差异学习来解决,我们稍后将访问。

数学够了让我们编码吧!!

但是等等,我们如何存储状态值呢?以前我说过我们可以用一些字典把状态作为键,把它的值作为状态值,但是状态可以有这么多!!让我们用一个近似为 0r 的函数。

函数逼近器以数组向量为输入,乘以权重,结果就是近似值。当然,最初的值会是错误的,但是因为我们知道它的真实值,我们可以找到错误并改变权重。该函数逼近器可以是神经网络或简单的乘法运算。

从我们之前的代码中选择一个状态 s =[-0.02553977,-0.5716606,0.03765532,0.90520343],选择随机权重 w = [0.1,0.21,0.14,0.18],然后 V(s)=-0.02553977 * 0.1±0.5716606 * 0.21+0.03777 其中 0.3 是偏置项。

所以 V(s)是 0.3456056592。但是如果真实返回 Gt(S)是 0.234,那么这个状态的真实值应该是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

0.345605659+0.9 *[0.234–0.3456056592]即 0.24516056572。但是我们的估算者预测它是 0.345605659,所以它产生的误差是-0.10044。现在我们只需要相应地改变权重来做出正确的预测。我不会详细讲述如何改变权重,因为这是一个单独的主题,但我们将使用 python 包来完成(我们将使用 Tensorflow)

第一个数组表示状态,第二个数组表示函数近似值。现在我们知道了真实的回报,所以让我们来计算这些州的真实价值估计。

期望值

之前我们已经看过这个图表,现在让我们从状态值的角度来看,看看我们要考虑的状态值到底是多少。众所周知,我们的环境是随机的。我们的政策决定我们选择什么样的行动,我们的环境决定我们应该降落在什么样的状态,我们有可能捕捉到它们。让我们写出方程来捕捉它们。我在这里想说的是,我们估计的值不是真实的估计值。理想情况下,如果你认为宇宙是真实的,那么每个状态都有一些真实的宇宙编码状态值!!我们的模型通过探索和更新其状态值视图来预测该状态值可能是什么。当我们的状态值等于宇宙编码的状态值时,我们的模型将收敛到真正的理想状态值。我们不知道真正的理想状态值是什么,但是利用这个图表,我们可以得出一个数学方程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在策略 pi 下,假设您的策略是始终采取左操作(向左推)。假设你处于状态 S0 ,那么你可以从该状态 S0 采取所有行动。我们考虑行动的概率 pi(a|s) ,对于所有这些行动,你可以降落在由宇宙概率 p(s’|s,a) 控制的任何状态,我们添加下一个状态的即时奖励和贴现值。这意味着我们的行为会影响我们的价值评估。

对于具有 Q 值 Q(S,A)的动作的判定

到目前为止,我们已经估计了状态 V(S)的值。在前面的代码中,你可能已经注意到,我们看到了我们的函数逼近状态的近似值,我们也计算了状态的真实值。我们可以计算它们之间的误差,并更新我们的权重,以预测良好的估计,但如果你想一想,即使你准确地估计了状态值,如果你在一个状态中,你无法知道下一个状态的值会是什么。如果你处于 S0 状态,如果某个先知告诉你,你的下一个状态将是 Sa 或 Sc,而绝对不是 Sb,那么我们可以只计算 V(Sa),V(Sc ),并朝着最大值采取行动,但我们没有这样神奇的先知。所以我们需要计算一些联系。如果你可以计算采取行动的价值,那么我们就可以预测好的行动。也就是说,嘿,我在这个州,上次我在这个州,我采取了这个行动,一些不好的事情发生了,所以我会避免它。如果我采取另一个动作,我会得到这个预测值。就像我们如何估计状态的值一样,我们可以估计在给定状态下采取行动的值,这些值是 Q 值 Q(S,A)。现在 Q 值很相似。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里,如果我们在状态 S,采取了一个动作 a,那么从那个状态我们可以到达由 P(s’|s,a)控制的 m 个状态中的任何一个,然后我们可以在策略 pi 下取这些状态的值。

现在在我们的代码中,就像我们如何估算 V(s)一样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以估计 Q(S,A)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我们随着时间探索所有状态时,我们采取状态-动作的估计值将收敛到宇宙编码的状态-动作值。

现在我想对政策做一些改变,这样我们就能确保探索所有可能的状态,我们还需要确保达到目标(最大化总回报),我们可以做这些事情。

  1. 我们将对一个状态中的所有行为进行估计,然后选择给出最大值的行为。这是一个贪婪的政策,因为如果我们发现这个行动很好,我们会一直坚持下去,可能不会探索不同的国家。
  2. 最初我们采取随机行动,偶尔我们会采取与最大 q 值相对应的行动。随着时间的推移,我们将减少随机行动,采取更多的贪婪行动。
  3. 为了预测 q 值,我们可以使用相同的函数逼近器,但这次我们将输出两个值,因为我们有两个动作,向左推/向右推。
  4. 我们将跟踪总回报、采取的行动和当前对 q 值的估计,然后我们可以计算误差并更新我们的权重。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是代码。

运行这段代码,你可以看到大约 5000 集,你会看到我们的政策开始改善。我没有对学习参数进行实验,但我们可以看到它的改进,最终大约 7000 集的目标得以实现。但是我们能做得更好吗?我们能从少量的插曲中学到什么吗?让我们在下一篇博客中探讨这个问题。第一个 for 循环收集经验,第二个开始学习。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Around episode 2000

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

around 7000 episode

缺点

这种蒙特卡罗方法有一些缺点。

  1. 我们需要等到我们运行一个完整的插曲来计算回报。
  2. 这对非终结性发作不起作用。
  3. MC 法方差大,偏倚小。
  4. 低偏差,因为我们考虑的回报是该州在一集中的真实值。
  5. 方差很大,因为这种方法没有考虑太多的环境动态。我们更新的值是为整个剧集计算的回报。有时,只考虑眼前的回报是好的,可能是未来评估的一部分,因为这将更好地捕捉环境动态。

我们将在下一篇博客中探讨解决这些问题的时间差异学习。

强化学习:概念、应用和代码介绍

原文:https://towardsdatascience.com/reinforcement-learning-an-introduction-to-the-concepts-applications-and-code-ced6fbfd882d?source=collection_archive---------5-----------------------

第 1 部分:强化学习的介绍,解释常见的术语、概念和应用。

在这一系列强化学习的博客文章中,我将尝试对理解强化学习及其应用所需的概念进行简单的解释。在这第一篇文章中,我强调了强化学习中的一些主要概念和术语。这些概念将在未来的博客文章中进一步解释,并结合实际问题中的应用和实现。

零件:123344

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

强化学习

强化学习(RL)可以被视为一种介于监督非监督学习之间的方法。它不是严格监督的,因为它不仅仅依赖于一组标记的训练数据,但也不是无监督的学习,因为我们有一个回报,我们希望我们的代理最大化。代理需要找到在不同情况下采取的“正确”行动,以实现其总体目标。

强化学习是决策的科学。

强化学习不涉及主管,只有一个 奖励 信号用于代理确定他们做得好还是不好。是 RL 中的关键组成部分,其中流程是*。代理做出的每个 动作 都会影响它接收的下一个数据。***

Reinforcement Learning applied to Atari games by DeepMind

强化学习问题是什么?

到目前为止,我们已经说过代理需要找到“正确的”动作。正确的行动取决于奖励。****

奖励: 奖励 Rₜ 是一个标量反馈信号,它指示代理在步骤时间 t 做得有多好。

在强化学习中,我们需要定义我们的问题,以便它可以被应用来满足我们的奖励假设**。一个例子是下一盘棋,代理人赢了一局得到正奖励,输了一局得到负奖励。**

报酬假设 : 所有的目标都可以用期望累积报酬的最大化来描述。

*由于我们的过程涉及到系列决策任务,我们早期的行动可能会对我们的总体 目标 产生长期影响。有时候牺牲即时奖励(时间步 Rₜ 奖励)来获得更多*长期奖励可能更好。一个应用于国际象棋的例子是牺牲一个卒在稍后阶段夺取一辆车。

目标 :目标是选择行动以最大化未来总报酬。

设置强化学习问题

在强化学习中,代理决定在每个时间步 Aₜ 采取哪些动作。代理基于其接收的标量奖励 Rₜ观察到的环境 Oₜ 做出这些决定。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Reinforcement learning process diagram

****环境接收代理的动作并发出新的观察 Oₜ 和标量奖励 Rₜ 。接下来发生的环境取决于 历史

历史 :历史 Hₜ 是到时间 t 为止的一系列观察、行动和奖励

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

状态: 状态是用来决定接下来发生什么的信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

历史状态的主要区别在于状态是历史的函数。这些状态可以分为三种主要类型:**

  • 环境状态(sₜᵉ)*—环境的私有表示,可能对代理不可见。它用于选择下一个观察值。*
  • 代理状态(sₜᵃ)*——代理的内部表示,被代理用来挑选下一个动作。*
  • 信息状态 / 马氏状态(sₜ)*—包含了来自历史的有用信息。因此,给定这种状态,将有足够的信息来模拟未来,并且可以丢弃历史。*

马尔可夫状态:一个状态 Sₜ是马尔可夫的当且仅当

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们相信接下来会发生什么取决于代理的状态表示。

环境又分为完全可观测环境部分可观测环境

  • **完全可观测环境 (马尔可夫决策过程):智能体直接观测环境状态。 Oₜ=Sₜᵃ=Sₜᵉ
  • **部分可观测环境 (部分可观测马尔可夫决策过程):智能体间接观测环境。 Sₜᵃ≠Sₜᵉ

强化学习代理

到目前为止,我们已经定义了如何设置 RL 问题,但没有定义 RL 代理如何学习或代理由什么组成。RL 代理可以具有三个主要组件中的一个或多个:

  • 策略: Agent 的行为函数,是从状态到动作的映射。它可以是确定性政策随机政策。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Deterministic policy function

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Stochastic policy function

  • 价值函数: 代表每个状态和/或动作有多好。这是对未来回报的预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example value function

  • 模型: 智能体对环境的表征。它预测环境下一步会做什么。预测的是下一个状态和下一个直接奖励。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example equation to predict of the next state

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example equation to predict the next immediate reward

RL 代理可分为以下几类:

  • ****基于值:没有策略,基于状态值贪婪地选择动作。
  • ****基于策略:没有值函数,使用策略函数选择动作。
  • ****演员评论家:同时使用价值和政策功能。
  • 无模型:**使用策略和/或值函数,但没有模型。
  • ****基于模型:使用策略和/或值函数,并有一个模型。

这些代理类别中的每一个都将在以后的博客中详细描述。

问题内部强化学习

在顺序决策中有两个基本问题:

  • 学习: 环境最初是未知的并且代理需要与环境交互以改进其策略
  • 规划: 如果环境是已知的代理用它的模型执行计算,然后改进它的策略。

由于强化学习就像一种试错学习方法,代理需要从环境中的经验中学习,以便在不损失太多回报的情况下做出决策。它需要考虑开发探索,在探索新信息和利用已知信息之间取得平衡,以实现回报最大化。

参考

如果你喜欢这篇文章,并想看到更多,不要忘记关注和/或留下掌声。

2017 年纽约奥莱利人工智能大会上的强化学习

原文:https://towardsdatascience.com/reinforcement-learning-at-oreilly-artificial-intelligence-conference-ny-2017-404f62c99002?source=collection_archive---------8-----------------------

几周前,2017 年奥莱利人工智能大会在纽约举行。这是一次令人惊叹的会议,来自学术界和工业界的演讲都非常精彩。这篇文章总结了我在那里做的关于强化学习的一些演讲和一个教程,“机器学习领域关注的是软件代理应该如何在一个环境中采取行动,以便最大化一些累积回报的概念”。

与人协调的汽车

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fantasia, Disney 1940

来自伯克利的 Anca D. Dragan 发表了题为“ 与人协调的汽车 ”的主题演讲,她在演讲中介绍了论文“规划对人类行动产生影响的自动驾驶汽车”的结果他们没有进行纯粹的避障,即试图避免妨碍其他移动物体,而是能够将驾驶员建模为遵循自己政策的其他代理。这意味着机器人知道其他汽车也会避免撞到障碍物,所以它可以预测其他车辆对它的行动会有什么反应。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Figure from “Planning for Autonomous Cars that Leverages Effects on Human Actions”

自主车辆还能够采取行动,收集其他车辆的信息。例如,它可以开始慢慢合并人类前面的车道,直到有足够的证据表明司机没有侵略性,并将实际刹车以避免碰撞。

关键的音符是如此之好,以至于我改变了我的时间表去看她的演讲,名为“逆奖励函数”,在我看来,这是大会中最好的演讲。她从迪士尼的电影《幻想曲》开始讲起。它是根据歌德在 1797 年写的诗《巫师的学徒》改编的。正如 W ikipedia 总结它,

这首诗以一个老巫师离开他的工作室开始,留下他的徒弟做杂务。厌倦了用桶打水,这个学徒用一把扫帚附魔来为他做这件事——使用他还没有完全训练好的魔法。地板很快就被水淹没了,学徒意识到他无法停止扫帚,因为他不知道如何停止。

随着我们创造更多与人类直接互动的机器人,Dragan 正在研究我们如何确保它们会做我们真正想要的事情,即使我们发出的命令并不十分精确。我曾经读过一个假设的故事,也说明了这个问题。不幸的是,我找不到参考文献,但它是这样的:

假设我们创造了一台超级智能机器,并要求它找到治疗疟疾的方法。我们设定的目标是尽量减少死于这种疾病的人数。机器人发现,解决问题的最快和最有保证的方法是侵入世界上所有的核武器,并发射它们杀死所有的人类,确保没有人会再次死于疟疾。机器能够实现它的目标,但显然不是以程序员想要的方式。

艾萨克·阿西莫夫也写了几个关于类似情况的好故事,并提出了机器人三定律作为解决问题的方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://xkcd.com/1613/

Dragan 和她的小组在这方面做了很多研究:“机器人应该听话吗?机器人用数学模型规划人的状态和动作关闸游戏简而言之,他们的方法是让机器人考虑到人类指定的命令或政策并不完美,并通过不做与训练时看到的太不同的事情来避免风险。

战略推理的超人 AI:在单挑无限注德州扑克 **中击败顶级职业选手,作者 Tuomas Sandholm(卡内基梅隆大学)😗*他们能够在一场难度相当的比赛中击败顶级人类选手,但没有得到媒体的同等关注。这个游戏增加了额外的复杂性,因为玩家没有完整的信息。桑德霍尔姆评论了除了典型的探索与利用权衡之外游戏必须考虑的第三个变量:可利用性。他们的代理人 Liberatus 试图将剥削最小化。它并不真正擅长探索糟糕的玩家,但可以用这种方法击败最好的人类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www.cmu.edu/news/stories/archives/2017/january/AI-tough-poker-player.html

深度强化学习教程,作者 Arthur Juliani。非常好的教程,代码易于理解和运行。朱利安尼提出了几种不同的强化学习方法,包括多武装匪徒理论、Q 学习、政策梯度和行动者-批评家代理。看一看资源库中的教程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Multi-Armed Bandit Dungeon environment

使用 OpenAI 的 Gym 和 Universe 构建游戏机器人,作者 Anmol Jagetia: 不幸的是,他遇到了几个技术问题:一些例子崩溃了,运行的例子帧率很差,我们看不到代理在做什么,但他的教程笔记本看起来很有趣:【https://github.com/anmoljagetia/OReillyAI-Gamebots】T2

敬请关注更多内容。我会写另一篇关于我在那里看到的其他主题的帖子:推荐系统、张量流和自然语言理解。

强化学习备忘单

原文:https://towardsdatascience.com/reinforcement-learning-cheat-sheet-2f9453df7651?source=collection_archive---------7-----------------------

免责声明:这是一个正在进行的项目,可能会有错误!

为了快速回顾我的强化学习知识,我用所有的基本公式和算法创建了这个备忘单。我希望这可能对你有用。

你可以在这里找到完整的 pdf ,在这里找到回购

2018 年 3 月 19 日更新。重写了 Sarsa 以遵循萨顿和巴尔托算法

2018 年 3 月 15 日更新。感谢Alexandre baullne增加了收缩贴图、Sarsa 和清理乳胶。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有新功能的拉式请求非常受欢迎!

主要参考资料是萨顿和巴尔托的《强化学习导论》。这里可以找到

也许你还可以找到值得一读的我的其他文章:

https://towards data science . com/let-fool-a-neural-network-B1 cded 8 C4 c 07

https://towards data science . com/how-to-use-dataset-in-tensor flow-c 758 ef 9 e 4428

感谢您的阅读。

弗朗西斯科·萨维里奥

基于满足设定预算和个人偏好的膳食计划强化学习(蒙特卡罗)

原文:https://towardsdatascience.com/reinforcement-learning-for-meal-planning-based-on-meeting-a-set-budget-and-personal-preferences-9624a520cce4?source=collection_archive---------10-----------------------

这篇文章介绍了一种使用强化学习来计划膳食的基本方法。我也已经将描述、数据和内核发布到 Kaggle,可以在这里找到:https://www . ka ggle . com/osbornep/reinforcement-learning-for-meal-planning-in-python/notebook

如果您有任何问题或建议,请告诉我。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo: Pixabay

目标

购买食品时,超市里有许多相同成分的不同产品可供选择。有些不太贵,有些质量更好。我想创建一个模型,对于所需的配料,可以选择制作一顿饭所需的最佳产品,这两者都是:

  1. 在我的预算内
  2. 符合我的个人喜好

为此,我将首先构建一个非常简单的模型,在介绍我的偏好之前,它可以推荐低于我预算的产品。

我们使用一个模型的原因是,理论上,我们可以将问题扩大到考虑越来越多的成分和产品,这些成分和产品会导致问题超出任何心理计算的可能性。

方法

为了实现这一点,我将建立一个简单的强化学习模型,并使用蒙特卡洛学习来寻找产品的最佳组合。

首先,让我们将模型的各个部分正式定义为马尔可夫决策过程:

  • 我们需要有限数量的配料来做任何一顿饭,并且被认为是我们的
  • 每种成分都有有限的可能产品,因此是每个状态的动作
  • 我们的偏好成为选择每个产品的个人奖励,我们将在后面更详细地介绍这一点

蒙特卡洛学习将达到最终目标的每一步的质量结合起来,并要求为了评估任何一步的质量,我们必须等待并看到整个结合的结果。这个过程在许多不同产品的剧集中一遍又一遍地重复,直到它找到看起来会导致积极结果的选择。这是一个强化学习过程,我们的环境是基于我们获得的关于成本和偏好的知识来模拟的。

蒙特卡洛通常被避免,因为在能够学习之前,需要花时间经历整个过程。然而,在我们的问题中,在确定所选产品组合是好是坏时,我们需要进行最终检查,将所选产品的实际成本相加,并检查其是否低于或高于我们的预算。此外,至少在现阶段,我们不会考虑超过几个成分,因此在这方面所花的时间并不重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www.tractica.com/artificial-intelligence/reinforcement-learning-and-its-implications-for-enterprise-artificial-intelligence/

抽样资料

在这个演示中,我为一顿饭创建了一些样本数据,其中有 4 种配料和 9 种产品,如下图所示。

我们需要为膳食中的每种成分选择一种产品。

这意味着我们有 2 x 2 x 2 x 3 = 24 种成分的 24 种产品可供选择。

我还包括了每个产品的实际成本和 V_0。

V_0 只是满足我们要求的每个产品的初始质量,我们将其设置为 0。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Diagram showing the possible product choices for each ingredient

首先,我们导入所需的包和数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在理论上应用该模型

现在,我不会为产品引入任何个人奖励。相反,我将只关注所选择的产品组合是否低于我们的预算。这个结果被定义为我们问题的终端回报

例如,假设我们的预算是 30,那么选择:

a1→b1→c1→d1

那么这个选择的真正成本是:

£10+£8+£3+£8 = £29 < £30

因此,我们的终极奖励是:

R_T=+1

鉴于,

a2→b2→c2→d1

那么这个选择的真正成本是:

£6+£11+£7+£8 = £32 > £30

因此,我们的终极奖励是:

r _ T = 1

现在,我们只是告诉我们的模型选择是好是坏,并观察这对结果有什么影响。

模型学习

那么我们的模型实际上是如何学习的呢?简而言之,我们让我们的模型尝试许多产品组合,并在每个组合结束时告诉它它的选择是好是坏。随着时间的推移,它将认识到,一些产品通常会带来良好的结果,而另一些则不会。

我们最终创造的是每个产品有多好的价值,用 V(a)表示。我们已经介绍了每种产品的初始 V(a ),但是我们如何从这些初始值开始真正做出决策呢?

为此,我们需要一个更新规则。这告诉模型,在每次它给出它的产品选择后,我们告诉它选择是好是坏,如何把它加到我们的初始值中。

我们的更新规则如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这乍一看可能不寻常,但在文字上,我们只是简单地更新了任何行动的值 V(a ),如果结果是好的,则增加一点,如果结果是坏的,则减少一点。

g 是回报,简单来说就是获得的总回报。目前在我们的例子中,这只是终端奖励(相应地+1 或-1)。稍后,当我们包括个人产品奖励时,我们将再次介绍这一点。

Alpha,αα,是学习率,我们将在后面演示它如何影响结果,但现在,简单的解释是:“学习率决定了新获得的信息覆盖旧信息的程度。因子 0 使代理什么也学不到,而因子 1 使代理只考虑最近的信息。”(https://en.wikipedia.org/wiki/Q-learning)

更新值的小演示

那么我们如何在模型中使用它呢?

让我们从一个包含每种产品及其首字母 V_0(a)的表开始:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们现在随机挑选产品,每个组合被称为。我们现在也设置α=0.5α=0.5,只是为了计算简单。

例如:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,导致这一积极结果的所有行动也被更新,以便与 V1(a)一起生成下表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以让我们再随机挑选一集来试试:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,我们可以将 V2(a)添加到我们的表中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

动作选择

你可能在演示中注意到了,我只是简单地随机选择了每集的产品。我们可以这样做,但是使用一个完全随机的选择过程可能意味着一些行为没有足够频繁地被选择来知道它们是好是坏。

类似地,如果我们选择其他方式,并决定贪婪地选择产品,即选择目前具有最佳价值的产品,我们可能会错过事实上更好但从未有机会的产品。例如,如果我们选择 V2(a)的最佳行动,我们将得到 a2、b1、c1 和 d2 或 d3,它们都提供了积极的最终回报。因此,如果我们使用纯粹贪婪的选择过程,我们将永远不会考虑任何其他产品,因为这些产品继续提供积极的结果。

相反,我们实施ε-贪婪动作选择,其中我们随机选择具有概率ϵ的产品,并贪婪地选择具有概率 1−ϵ1−ϵ的产品,其中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这意味着我们将很快达到产品的最佳选择,因为我们继续测试“好”的产品实际上是否是最佳的,但也为我们留下了空间,我们也偶尔探索其他产品,以确保它们没有我们当前的选择好。

构建和应用我们的模型

我们现在准备构建一个简单的模型,如下面的 MCModelv1 函数所示。

虽然这看起来很复杂,但我所做的不过是应用前面讨论的方法,这样我们就可以改变输入并仍然获得结果。诚然,这是我第一次尝试这样做,所以我的代码可能写得不完美,但应该足以满足我们的要求。

为了计算终端奖励,我们目前使用以下条件来检查总成本是少于还是多于我们的预算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个模型的完整代码太大了,不适合放在这里,但可以在链接的 Kaggle 页面上找到。

我们现在用一些样本变量运行我们的模型:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们的函数中,模型有 6 个输出:

  • Mdl[0]:返回每集所有 V(a)的总和
  • Mdl[1]:返回最便宜产品的 V(a)之和,由于样本数据的简单性,可以对其进行定义
  • Mdl[2]:返回非最便宜产品的 V(a)之和
  • Mdl[3]:返回最后一集的最佳动作
  • Mdl[4]:返回为每个产品添加了最终 V(a)的数据表
  • Mdl[5]:显示每个周期的最佳操作

从这些案例中我们可以学到很多东西,所以让我们仔细研究每一个案例,并确定我们可以学到什么来改进我们的模型。

最后一集的最佳行动

首先,让我们看看模型建议我们应该选择什么。在这种情况下,它建议总成本低于预算的行动或产品是好的。

然而,我们还可以检查更多内容,以帮助我们了解正在发生的事情。

首先,我们可以画出所有动作的总 V,我们看到这是理想的收敛。我们希望我们的模式能够趋同,这样当我们尝试更多剧集时,我们就能“分区”选择最佳产品。输出收敛的原因是因为我们将它每次学习的数量减少了一个因子αα,在本例中为 0.5。我们将在后面展示如果我们改变这个或者根本不应用它会发生什么。

我们还绘制了我们知道最便宜的产品的 V 的总和,这是基于能够单独评估小样本量和其他产品。同样,两者正向趋同,尽管较便宜的产品似乎价值略高。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么,为什么会发生这种情况,为什么模型会提出它所做的动作?

为了理解这一点,我们需要剖析每集模型提出的建议,以及这些建议与我们的回归有何关联。

下面,我们针对每个状态采取了最佳措施。我们可以看到,建议的行动确实在剧集之间变化很大,并且模型似乎很快就决定了想要建议哪个。

因此,我绘制了每集建议行动的总成本,我们可以看到行动最初有所不同,然后变得平稳,最终总成本低于我们的预算。这大大有助于我们理解正在发生的事情。

到目前为止,我们告诉模型的是提供一个低于预算的选择,它已经做到了。它只是找到了一个低于所需预算的答案。

那么下一步是什么?在我介绍奖励之前,我想演示一下如果我改变一些参数会发生什么,以及如果我们决定改变我们希望模型建议的东西,我们能做些什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

改变参数的影响以及如何改变模型的目标

我们有几个可以改变的参数:

  1. 预算
  2. 我们的学习率,α
  3. 输出动作选择参数,ϵ

变动预算

首先,让我们观察一下,如果我们把预算定得过低或过高,会发生什么。

一个小的预算意味着我们只能得到一个负的回报,意味着我们将迫使我们的 V 向负的方向收敛,而一个太高的预算将导致我们的 V 向正的方向收敛,因为所有的行为都是持续的正的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

后者看起来就像我们在第一轮中所做的那样,许多情节都带来了积极的结果,因此许多产品组合都是可能的,最便宜的产品与其他产品之间几乎没有区别。

相反,如果我们考虑一个给定产品价格的合理低的预算,我们可以看到一个趋势,最便宜的产品看起来正趋同,而更贵的产品负趋同。然而,这两部电影的流畅度并不理想,每一集之间都有很大的波动。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么,我们能做些什么来减少输出的“尖峰”呢?这就引出了我们的下一个参数,α。

变化α

栈溢出用户 VishalTheBeast 很好地解释了 alpha 对我们输出的影响:

“学习率告诉我们向解决方案迈进的幅度。

它不应该是太大的数字,因为它可能会在最小值附近连续振荡,也不应该是太小的数字,否则将需要很多时间和迭代才能达到最小值。

在学习速率中建议衰减的原因是,最初当我们处于解空间中的一个完全随机的点时,我们需要向解大步跳跃,后来当我们接近解时,我们进行小跳跃,因此小改进,最终达到最小值。

可以这样类比:在高尔夫球比赛中,当球远离球洞时,球员非常努力地击球,以尽可能靠近球洞。后来,当他到达标记区域时,他选择了一根不同的棍子来获得准确的短杆。

所以这并不是说他不选择短杆就不能把球打进洞里,他可能会把球送到目标前面两三次。但是,如果他发挥最佳状态,使用正确的力量到达球洞,那将是最好的。学习率下降也是如此。"

https://stack overflow . com/questions/33011825/learning-rate-of-a-q-learning-agent

为了更好地演示改变 alpha 的效果,我将使用 Plot.ly 创建的动画情节。

我在这里写了一个关于如何做的更详细的指南:

[## 使用 Plot.ly 创建参数优化的交互式动画

介绍

towardsdatascience.com](/creating-interactive-animation-for-parameter-optimisation-using-plot-ly-8136b2997db)

在我们的第一个动画中,我们在 1 和 0.1 之间改变 alpha。这使我们能够看到,当我们减少阿尔法我们的输出平滑一些,但它仍然很粗糙。

然而,即使结果变得平滑,它们不再在 100 集内收敛,而且,它们的输出似乎在每个 alpha 之间交替。这是由于小阿尔法组合需要更多集来学习,并且动作选择参数ε为 0.5。本质上,一半的时间输出仍然是由随机性决定的,所以我们的结果不会在 100 集的框架内收敛。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们的动画情节中运行它会产生类似如下的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

变化的ε

考虑到前面的结果,我们现在将 alpha 固定为 0.05,并将 epsilon 在 1 和 0 之间变化,以显示完全随机选择操作对贪婪选择操作的影响。

下图显示了不同 epsilon 的三个快照,但动画版本可以在 Kaggle 内核中查看。

我们看到高ε产生了非常零星的结果。因此,我们应该选择一个相当小的值,比如 0.2。虽然ε等于 0 看起来很好,因为曲线很平滑,正如我们前面提到的,这可能会让我们很快做出选择,但可能不是最好的。我们需要一些随机性,这样模型就可以在需要时探索其他动作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

增加剧集数量

最后,我们可以增加剧集的数量。我没有马上这么做,因为我们在一个循环中运行 10 个模型来输出我们的动画图,这会导致运行模型的时间爆炸。

我们注意到低 alpha 需要更多的剧集来学习,所以我们可以运行 1000 集的模型。

然而,我们仍然注意到输出是振荡的,但是,如前所述,这是因为我们的目的只是推荐一个低于预算的组合。这表明,当有许多组合低于我们的预算时,模型无法找到单一的最佳组合。

因此,如果我们稍微改变我们的目标,以便我们可以使用模型找到最便宜的产品组合,会发生什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

改变我们模型的目标,找到最便宜的产品组合

这样做的目的是更清楚地将最便宜的产品与其他产品区分开来,并且几乎总是为我们提供最便宜的产品组合。

要做到这一点,我们需要做的就是稍微调整我们的模型,以提供一个相对于该组合在该集中低于或高于预算多少的最终奖励。

这可以通过将退货计算改为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们现在看到最便宜的产品和其他产品之间的区别被强调了。

这确实展示了强化学习的灵活性,以及根据您的目标调整模型是多么容易。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

首选项介绍

到目前为止,我们还没有包括任何个人对产品的偏好。如果我们想包括这一点,我们可以简单地为每个产品引入奖励,同时仍然有一个终端奖励,鼓励模型低于预算。

这可以通过将退货计算改为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么为什么我们现在的回报计算是这样的呢?

首先,我们仍然希望我们的组合低于预算,所以我们分别为高于和低于预算提供积极和消极的奖励。

接下来,我们要考虑每个产品的奖励。出于我们的目的,我们将奖励定义为 0 到 1 之间的值。MC 回报的正式计算方法如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

γ是贴现因子,它告诉我们,与前面的步骤相比,后面的步骤有多重要。在我们的例子中,所有行动对于达到低于预算的预期结果同样重要,所以我们设置γ=1。

然而,为了确保我们达到低于预算的主要目标,我们对每项行动的奖励总和取平均值,使其始终分别小于 1 或-1。

同样,完整的模型可以在 Kaggle 内核中找到,但是太大了,无法在这里链接。

使用奖励引入偏好

假设我们决定购买产品 a1 和 b2,我们可以给每一个产品增加奖励。让我们在下面的输出和图表中看看这样做会发生什么。我们稍微改变了预算,因为 a1 和 b2 加起来是 21,这意味着没有办法再选择两个产品,使其低于预算 23。

应用一个非常高的奖励迫使模型选择 a1 和 b2,然后寻找能使它在我们预算之内的产品。

我一直在比较最便宜的产品和其他产品,以表明该模型现在不再评估最便宜的产品。相反,我们得到总成本为 25 的输出 a1、b2、c1 和 d3。这既低于我们的预算,也包括我们的首选产品。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们再试试一个奖励信号。这一次,我给每个人一些奖励,但希望它能提供我的奖励的最佳组合,使我们仍然低于预算。

我们有以下奖励:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运行该模型几次表明,它将:

  • 经常选择 a1,因为这有更高的回报
  • 我总是选择 c1,因为回报是一样的,但是更便宜
  • 我很难在 b1 和 b2 之间做出选择,因为回报分别为 0.5 和 0.6,但成本分别为 8 和 11
  • 通常会选择 d3,因为它比 d1 便宜得多,即使报酬稍低

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论

我们已经设法建立了一个蒙特卡洛强化学习模型,以:1)推荐低于预算的产品,2)推荐最便宜的产品,3)基于仍然低于预算的偏好推荐最好的产品。

在这个过程中,我们展示了在强化学习中改变参数的效果,以及理解这些如何使我们达到预期的结果。

在我看来,我们还可以做更多的事情,最终目标将是应用于真正的食谱和来自超市的产品,其中需要考虑增加的成分和产品的数量。

我创建这个样本数据和问题是为了更好地理解强化学习,希望你会觉得有用。

谢谢

菲利普·奥斯本

现实生活规划问题的强化学习

原文:https://towardsdatascience.com/reinforcement-learning-for-real-life-planning-problems-31314491e5c?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最近,我发表了一些例子,其中我为一些现实生活中的问题创建了强化学习模型。例如,根据设定的预算和个人偏好使用强化学习进行膳食计划。强化学习可以用于各种各样的计划问题,包括旅行计划、预算计划和商业策略。使用 RL 的两个优点是,它考虑了结果的概率,并允许我们控制环境的一部分。因此,我决定写一个简单的例子,以便其他人可以考虑如何开始使用它来解决他们的一些日常或工作问题。

什么是强化学习?

强化学习(RL)是通过基本的反复试验来测试哪种行为对于环境的每种状态是最好的过程。该模型引入了一个随机策略,每次采取行动时,都会有一个初始数量(称为奖励)输入到模型中。这种情况会持续到达到最终目标,例如,你赢得或输掉游戏,此时该回合(或情节)结束,游戏重置。随着模型经历越来越多的情节,它开始学习哪些行动更有可能将我们引向积极的结果,并因此找到任何给定状态下的最佳行动,这被称为最优策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Reinforcement Learning General Process

许多在线 RL 应用在游戏或虚拟环境中训练模型,其中模型能够重复地与环境交互。例如,你让模型一遍又一遍地玩井字游戏,以便它观察成功和失败或尝试不同的动作。

在现实生活中,我们很可能无法以这种方式训练我们的模型。例如,在线购物中的推荐系统需要一个人的反馈来告诉我们它是否成功,这是基于有多少用户与购物网站交互而限制其可用性的。相反,我们可能有显示一段时间内购物趋势的样本数据,我们可以使用这些数据来估计概率。使用这些,我们可以创建所谓的部分观察马尔可夫决策过程(POMDP ),作为概括潜在概率分布的一种方式。

部分观察马尔可夫决策过程

马尔可夫决策过程(MDP)提供了一个框架,用于在结果部分是随机的,部分在决策者控制下的情况下对决策进行建模。MDP 的关键特征是它们遵循马尔可夫性质;所有未来的状态都是独立于过去的。换句话说,进入下一个状态的概率只取决于当前状态。

POMDPs 的工作方式类似,只是它是 MDP 的一般化。简而言之,这意味着模型不能简单地与环境相互作用,而是根据我们观察到的情况给出一个设定的概率分布。更多信息可在这里找到。我们可以在 POMDP 上使用值迭代方法,但是在这个例子中我们决定使用蒙特卡罗学习。

示例环境

想象一下,你回到了学校(或者可能仍然在学校),在教室里,老师对废纸有严格的政策,要求任何纸片都必须在教室前面递给他,他会把垃圾放入垃圾桶。然而,班上有些学生不在乎老师的规定,宁愿省去在教室里传纸条的麻烦。相反,这些麻烦的人可能会选择从远处把废纸扔进垃圾箱。这激怒了老师,这样做的人会受到惩罚。这引入了一个非常基本的行动奖励概念,我们有一个示例教室环境,如下图所示。

我们的目的是为每个人找到最好的说明,以便论文到达老师手中并放入垃圾箱,避免被扔进垃圾箱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

状态和动作

在我们的环境中,每个人都可以被视为一个状态,他们可以对废纸采取各种行动。他们可能会把它传给邻近的同学,自己拿着,或者有些人会把它扔进垃圾箱。因此,我们可以将我们的环境映射到一个更标准的网格布局,如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是有目的地设计的,这样每个人或每个状态都有四个动作:上、下、左或右,并且每个动作都将基于谁采取了该动作而有不同的“真实生活”结果。把人放到墙上(包括中间的黑色方块)的动作表示这个人抓住了纸。在某些情况下,这个动作是重复的,但在我们的例子中不是问题。

例如,人 A 的行为导致:

  • 向上=扔进垃圾箱
  • 向下=抓住纸张
  • 左=传给人 B
  • 右=抓住纸

概率环境

目前,部分控制环境的决策者是我们。我们会告诉每个人他们应该采取什么行动,这就是所谓的政策

我在学习中面临的第一个挑战是理解环境可能是概率性的,以及这意味着什么。概率环境是指当我们指示一个州根据我们的政策采取行动时,有一个与此是否成功执行相关的概率。换句话说,如果我们告诉人 A 把纸递给人 B,他们可以决定不按照我们政策中的指示行动,而是把废纸扔进垃圾箱。另一个例子是,如果我们推荐网上购物产品,不能保证人们会看到每一个。

观察到的转移概率

为了找到观察到的转移概率,我们需要收集一些关于环境如何作用的样本数据。在我们收集信息之前,我们首先介绍一个初始策略。为了开始这个过程,我随机选择了一个看起来会带来积极结果的方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们观察每个人在这个政策下采取的行动。换句话说,假设我们坐在教室的后面,简单地观察课堂,观察到 A 的以下结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Person A’s Observed Actions

我们看到一张纸经过这个人 20 次;6 次他们拿着它,8 次他们把它传给了 B,还有 6 次他们把它扔进了垃圾桶。这意味着,在我们最初的策略下,这个人持有或将其扔进垃圾桶的概率是 6/20 = 0.3,同样地,传给人 b 的概率是 8/20 = 0.4。我们可以观察班上的其他人,以收集以下样本数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Observed Real Life Outcome

同样地,我们计算出下面的概率矩阵,我们可以用它来模拟经验。该模型的准确性将在很大程度上取决于概率是否真实地代表了整个环境。换句话说,我们需要确保我们的样本足够大,数据足够丰富。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Observed Transition Probability Function

多武装土匪,集,奖励,返回和折扣率

因此,我们在 POMDP 下从样本数据中估计了转移概率。在我们引入任何模型之前,下一步是引入奖励。到目前为止,我们只讨论了最后一步的结果;要么这张纸被老师扔进垃圾箱,得到正奖励,要么被 A 或 M 扔出去,得到负奖励。结束这一集的最终奖励被称为最终奖励。但是,也有不太理想的第三种结果;这张纸不断地被传来传去,从来没有(或者花了比我们希望的长得多的时间)到达垃圾箱。因此,总而言之,我们有三个最终结果

  • 老师将纸放入垃圾箱,并获得积极的最终奖励
  • 一个学生把纸扔进垃圾箱,得到一个负的最终奖励
  • 纸张不断在教室里传来传去,或者粘在学生身上的时间比我们希望的要长

为了避免纸被扔进垃圾箱,我们提供了一个大的负奖励,比如说-1,因为老师很高兴它被放入垃圾箱,这净得一个大的正奖励+1。为了避免在房间里不断传递的结果,我们将所有其他行为的奖励设置为一个小的负值,比如-0.04。如果我们将它设置为正数或空数,那么模型可能会让论文循环往复,因为获得小的正数比冒险接近负数要好。这个数字也很小,因为它只会收集一个单一的最终奖励,但它可能需要许多步骤来结束这一集,我们需要确保,如果论文被放入垃圾箱,积极的结果不会被抵消。请注意,奖励总是相对于另一个,我选择了任意的数字,但如果结果不理想,这些可以改变。

尽管我们无意中讨论了示例中的情节,但我们还没有正式定义它。一集就是每张纸通过教室到达垃圾箱的动作,这是最终状态并结束一集。在其他例子中,比如玩井字游戏,这将是一场你赢或输的游戏的结尾。

理论上,论文可以从任何状态开始,这介绍了为什么我们需要足够的片段来确保每个状态和动作都经过足够的测试,这样我们的结果就不会被无效的结果所驱动。然而,另一方面,我们引入的剧集越多,计算时间就越长,并且根据环境的规模,我们可能没有无限量的资源来做这件事。

这就是所谓的多兵种土匪问题;在有限的时间(或其他资源)下,我们需要确保对每个状态-动作对进行足够的测试,以确保我们的策略中选择的动作实际上是最优的。换句话说,我们需要证明,在过去导致我们取得好结果的行动并不是纯粹的运气,而是事实上是正确的选择,对于那些看起来糟糕的行动也是如此。在我们的例子中,这看起来很简单,因为我们的状态很少,但是想象一下,如果我们增加规模,这将会变成一个越来越大的问题。

我们 RL 模型的总体目标是选择最大化预期累积回报的行动,即回报。换句话说,回报就是该集获得的总回报。一个简单的计算方法是把每集的所有奖励加起来,包括最终奖励。

一种更严格的方法是,通过在下面的公式中应用一个折扣因子γ,认为第一步比后面的步骤更重要:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

换句话说,我们将所有的奖励相加,但是将后面的步骤加权一个系数,该系数是达到这些奖励所需的步骤数的幂。

如果我们想一想我们的例子,使用折扣回报会变得更加清晰,因为老师会奖励(或相应地惩罚)任何参与该事件的人,但会根据他们离最终结果的距离来衡量这一点。例如,如果纸从 A 传到 B,再传到把它扔进垃圾箱的 M,M 应该受到最大的惩罚,然后是 B 把它传给他,最后是 A,他仍然参与最终结果,但比 M 或 B 参与得少。这也强调了从一个状态开始并到达垃圾箱所花的时间越长(基于步骤数), is 得到的奖励或惩罚就越少,但采取更多步骤会累积负奖励。

将模型应用于我们的示例

由于我们的示例环境很小,我们可以应用每一个并显示一些手动执行的计算,并说明更改参数的影响。

对于任何算法,我们首先需要初始化状态值函数 V(s ),并且已经决定将它们中的每一个设置为 0,如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们让模型基于我们观察到的概率分布来模拟对环境的体验。该模型从一张随机状态的纸开始,在我们的策略下,每个行动的结果都基于我们观察到的概率。例如,假设我们有如下的前三个模拟情节:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有了这些片段,我们可以使用给定的三个模型中的每一个来计算我们的状态值函数的最初几次更新。现在,我们选择一个任意的 alpha 和 gamma 值为 0.5 来简化我们的手工计算。我们将在后面展示这个变量对结果的影响。

首先,我们应用时间差异 0,这是我们最简单的模型,前三个值更新如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么这些是如何计算的呢,因为我们的例子很小,我们可以手工显示计算结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么在这个早期阶段我们能观察到什么呢?首先,使用 TD(0)似乎对某些国家不公平,例如 D 人,他在现阶段从三分之二到达垃圾箱的纸张中一无所获。他的更新只受到下一阶段价值的影响,但这强调了积极和消极的奖励如何从角落向外传播到各个州。随着我们拍摄的剧集越来越多,正面和负面的最终奖励将会越来越分散到各个州。这大致显示在下面的图表中,我们可以看到,导致正面结果的两个事件影响了状态 Teacher 和 G 的值,而单个负面事件惩罚了人 m。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了显示这一点,我们可以尝试更多的情节,如果我们重复已经给出的相同的三个路径,我们产生以下状态值函数:

(请注意,为简单起见,我们在本例中重复了这三集,但实际模型会有几集的结果基于观察到的转移概率函数)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图显示了终端奖励从右上角向外传播到各州。由此,我们可以决定更新我们的政策,因为很明显,负的终端报酬通过人 M 传递,因此 B 和 C 受到负面影响。因此,基于 V27,对于每个状态,我们可以决定通过为每个状态选择下一个最佳状态值来更新我们的策略,如下图所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个例子中有两个值得关注的原因,第一个是 A 的最佳行动是把它扔进垃圾箱,净得一个负回报。这是因为没有一集访问了这个人,并强调了多武装匪徒的问题。在这个小例子中,只有很少几个州,所以需要很多集才能访问所有的州,但我们需要确保做到这一点。这个行动对这个人来说更好的原因是因为两种最终状态都没有价值,而是积极和消极的结果都在最终回报中。然后,如果我们的情况需要,我们可以根据结果用终态的数字初始化 V0。

其次,人 M 的状态值在-0.03 和-0.51 之间来回翻转(大约。)之后,我们需要解决为什么会发生这种情况。这是我们的学习率α造成的。目前,我们只介绍了我们的参数(学习率α和贴现率γ),但没有详细解释它们将如何影响结果。一个大的学习率可能会导致结果振荡,但反过来,它不应该太小,以至于永远收敛。下图进一步显示了每集的总 V(s ),我们可以清楚地看到,尽管总体趋势是上升的,但它在各集之间来回变化。学习率的另一个很好的解释如下:

“在高尔夫球比赛中,当球离球洞很远时,球员要尽可能地靠近球洞。后来,当他到达标记区域时,他选择了一根不同的棍子来获得准确的短杆。

所以不是说他不选短杆就不会把球送进洞,他可能会把球送到目标前面两三次。但是,如果他发挥最佳状态,使用正确的力量到达球洞,那将是最好的。"

[## Q 学习代理的学习速率

学习率如何影响收敛率和收敛本身的问题。如果学习率是…

stackoverflow.com](https://stackoverflow.com/questions/33011825/learning-rate-of-a-q-learning-agent) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Episode

对于一个问题,有一些复杂的方法来建立最佳学习速率,但是,与任何机器学习算法一样,如果环境足够简单,您可以迭代不同的值,直到达到收敛。这也被称为随机梯度下降。在最近的 RL 项目中,我用动画演示了减少 alpha 的效果,如下所示。这演示了当 alpha 较大时的振荡,以及当 alpha 减小时振荡如何变得平滑。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同样,我们也必须有一个介于 0 和 1 之间的折现率,通常这个值接近 0.9。贴现因子告诉我们未来的回报有多重要;大数值表示它们将被认为是重要的,而将这个数值移向 0 将使模型越来越少地考虑未来的步骤。

考虑到这两个因素,我们可以将 alpha 从 0.5 更改为 0.2,将 gamma 从 0.5 更改为 0.9,并获得以下结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为我们的学习率现在小得多,所以模型需要更长的时间来学习,并且值通常更小。最明显的是对于老师来说,这显然是最好的状态。然而,这种增加计算时间的折衷意味着我们的 M 值不再像以前那样振荡。我们现在可以在下图中看到,根据我们更新的参数,V(s)的总和。虽然它并不完全平滑,但总 V(s)以比以前平滑得多的速度缓慢增加,并像我们希望的那样收敛,但需要大约 75 集才能收敛。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

改变目标结果

RL 的另一个至关重要的优势是我们对环境有一定的控制权,这一点我们还没有详细提及。目前,奖励是基于我们的决定,即让模型以尽可能少的步骤达到积极的结果是最好的。然而,假设老师换了,新老师不介意学生把纸扔进垃圾箱,只要它够得着。然后我们可以围绕这个改变我们的负回报,最优策略就会改变。

这对于商业解决方案尤其有用。例如,假设您正在计划一项战略,并且知道某些转变不如其他转变理想,那么这可以被考虑在内并随意改变。

结论

我们现在已经根据观察到的数据创建了一个简单的强化学习模型。有许多事情可以改进或进一步发展,包括使用更复杂的模型,但对于那些希望尝试并应用于自己现实生活中的问题的人来说,这应该是一个很好的介绍。

我希望你喜欢阅读这篇文章,如果你有任何问题,请随时在下面评论。

谢谢

哲学(philosophy 的缩写)

从头开始强化学习:在 Python 笔记本中设计和解决任务

原文:https://towardsdatascience.com/reinforcement-learning-from-scratch-designing-and-solving-a-task-all-within-a-python-notebook-48c40021da4?source=collection_archive---------6-----------------------

第 1 部分:定义环境,用价值迭代找到最优策略,并引入 Q 学习

摘要

在本文中,我将介绍一个新项目,它试图通过在 Python 笔记本中完全定义和解决一个简单的任务来帮助那些学习强化学习的人。环境和基本方法将在本文中解释,所有代码都发布在 Kaggle 的下面的链接中。此外,我已经创建了一个“元”笔记本,可以很容易地分叉,只包含定义的环境,供其他人尝试、适应和应用他们自己的代码。

[## Python 中从头开始的强化学习

寻找特定环境下最佳行动的初学者指南

www.kaggle.com](https://www.kaggle.com/osbornep/-reinforcement-learning-from-scratch-in-python)

语境

当我第一次开始学习强化学习时,我直接复制在线指南和项目,但发现我迷路了,感到困惑。“为什么结果会显示这一点?这个参数有什么作用?环境这样做是为了什么?”都是我开始问自己的一些问题。直到我后退一步,从基础开始,首先完全理解概率环境是如何定义的,并建立一个我可以在纸上解决的小例子,事情才开始变得更有意义。然而,我发现很难找到一个不需要从外部资源导入的环境来应用我的知识。

因此,我给自己设定了一个挑战:

我能否在一个 Python 笔记本中完全独立地定义并找到任务环境的最佳行动?

通过关注我的工作,我希望其他人可以将此作为学习自己的基本起点。

阶段 1:定义环境

任务

很简单,我想知道从房间的任何位置将一张纸放入垃圾桶的最佳动作。我可以把纸扔向任何方向,或者一次移动一步。

尽管对于可以通过视觉判断箱子位置并且具有大量关于机器人必须从零开始学习的距离的先验知识的人来说很简单。

这定义了一个环境,在该环境中,根据纸张投掷的方向和当前距离垃圾箱的距离来计算成功投掷的概率。

例如,在下图中,我们有三个人,分别标为 A、B 和 c。A 和 B 都朝正确的方向投掷,但 A 比 B 更近,因此更有可能击中目标。

人 C 比人 B 更近,但是投掷方向完全错误,因此击中垃圾箱的概率非常低。这可能看起来不合逻辑,人 C 会朝这个方向扔,但正如我们稍后将展示的那样,算法必须首先尝试一系列方向,以找出成功在哪里,并且没有关于箱子在哪里的视觉引导。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Task Environment Example

为了在 python 中创建环境,我们将图表转换为 x 和 y 值的二维尺寸,并使用方位数学来计算投掷的角度。我们使用标准化的整数 x 和 y 值,因此它们必须以-10 和 10 为界。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Environment Mapped to 2-d Space

环境概率

投掷成功的概率与投掷的距离和方向有关。因此,我们需要计算两个度量:

  • 当前位置离箱子的距离
  • 纸被扔出的角度和垃圾箱的真实方向之间的差异

距离测量 如上图所示,A 人在 set 中的位置为(-5,-5)。这是它们的当前状态,并且可以使用欧几里德距离度量来计算它们与容器的距离:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于最终计算,我们对此进行归一化并反转该值,以便高分指示该人更接近目标箱:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为我们已经将二维维度固定在(-10,10)之间,所以这个人可能的最大距离是 sqrt{(100) + (100)} = sqrt{200}。因此,我们对人 A 的距离得分是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方向测量

然后,人 A 要做一个决定,他们是移动还是向一个选定的方向扔东西。现在,让我们想象他们选择扔纸,他们的第一次投掷是在 50 度,第二次是在正北 60 度。来自人 A 的面元的方向可以通过简单的三角学来计算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,第一次投掷偏离真实方向 5 度,第二次投掷偏离真实方向 15 度。

当我们考虑好的投掷以实际方向的任一侧 45 度为界时(即,没有以错误的方式投掷),那么我们可以使用下面的公式来计算这个选择的方向有多好。超过 45 度界限的任何方向将产生负值,并映射到概率 0:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两者都相当接近,但他们的第一次投掷更有可能击中垃圾箱。

概率计算

因此,我们计算成功投掷的概率与这两个测量值相关:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建广义概率函数

尽管之前的计算相当简单,但当我们概括这些计算并开始考虑仓位或当前仓位不固定时,需要考虑一些因素。

在我们之前的例子中,人 A 在箱子的西南方向,因此角度是一个简单的计算,但是如果我们同样将一个人放在东北方向,那么这是不正确的。此外,因为容器可以放置在任何地方,所以我们需要首先找到人相对于它的位置,而不仅仅是原点,然后用于建立所需的角度计算。

下图总结了这一点,其中我们根据人与箱子的相对位置概括了每个三角计算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Angle Calculation Rules

记住这个图表,我们创建一个函数,它只从相对于箱子的给定位置计算投掷成功的概率。

然后,我们按照前面的图计算从人到容器的方位,并计算限制在+/- 45 度窗口内的分数。最接近真实方位的投掷得分较高,而较远的投掷得分较低,任何大于 45 度(或小于-45 度)的投掷都是负的,然后被设置为零概率。

最后,如前所示,给定当前位置,总概率与距离和方向相关。

注意:我选择了 45 度作为边界,但是你可以选择改变这个窗口,或者手动调整概率计算,以不同的方式加权方向测量的距离。

我们重新计算了前面的例子,发现结果和预期的一样。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

绘制每个状态的概率

现在我们有了这个函数,我们可以很容易地计算和绘制出二维网格中所有点在固定投掷方向上的概率。

概率是由我们在前面的函数中设置的角度定义的,目前是 45 度,但如果需要的话,可以减少或增加,结果会相应地改变。我们可能还想对距离的概率进行不同的缩放。

例如,对于每个 x/y 位置,纸张以 180 度角(正南)投掷的概率如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所有投掷方向的动画剧情

为了进一步演示这一点,我们可以迭代多个投掷方向,并创建一个交互式动画。代码变得有点复杂,您总是可以简单地使用前面的代码块,并手动更改“throw_direction”参数来探索不同的位置。然而,这有助于探索概率,可以在 Kaggle 笔记本中找到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 [## RL 从头开始第 1 部分:定义环境| Kaggle

编辑描述

www.kaggle.com](https://www.kaggle.com/osbornep/rl-from-scratch-part-1-defining-the-environment)

阶段 2:在概率已知的情况下,为环境寻找最佳策略

基于模型的方法

我们的目标是在每种状态下,通过投掷或向给定方向移动来找到最佳动作。因为我们知道概率,所以我们实际上可以使用基于模型的方法,我们将首先证明这一点,并可以使用值迭代通过以下公式实现这一点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Value Iteration Update Rules

值迭代从任意函数 V0 开始,并使用以下等式从 k 个阶段的函数得到 k+1 个阶段的函数(https://artint.info/html/ArtInt_227.html)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Initial Value of Each State

移动动作的计算相当简单,因为我已经定义了保证移动成功的概率(等于 1)。因此,例如,来自状态(-5,-5)的动作(1,1)的 Q 值等于:

Q((-5,-5),MOVE(1,1)) = 1*( R((-5,-5),(1,1),(-4,-4))+ gamma*V(-4,-4))

现在,回报也全是 0,因此第一次计算的值很简单:

Q((-5,-5),(1,1))= 1 (0+伽马0) = 0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

First Q update for Move Actions

第一次更新中的所有移动操作都将以类似方式计算。成功的投掷给系统增加了价值。因此,我们可以计算特定投掷动作的 Q 值。之前,我们发现投掷方向与(-5,-5)成 50 度的概率等于 0.444。因此,此动作的 Q 值会相应更新:

Q((-5,-5),THROW(50)) =

0.444*(R((-5,-5),(50),bin)+gamma * V(bin+))+

(1–0.444)(R((-5,-5),(50),bin) + gammaV(bin-))

再次,奖励被设置为 0,并且容器的正值是 1,而容器的负值是-1。因此,我们有:

Q((-5,-5),THROW(50)) =

0.444*(0 +伽玛*1) +

(1–0.444)*(0+gamma * 1)= 0.3552–0.4448 =-0.0896

很明显,虽然第一次更新后的移动没有改变初始值,但由于距离和错过的概率,以 50 度投掷更糟。

一旦为所有状态和动作计算了每个 Q(s,a ),每个状态的值 V(s)就被更新为该状态的最大 Q 值。这个过程反复进行,直到结果收敛。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Value-Iteration Update Procedure

对于需要重复的次数没有设定限制,这取决于问题。因为我们的环境如此简单,它实际上在仅仅 10 次更新内就收敛到最优策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Convergence of Value-Iteration Updates

我们首先展示了基于投掷或移动的最佳动作,如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Optimal Policy Plot v1

改善最佳策略的可视化

尽管图表显示了最佳行动是投掷还是移动,但它并没有告诉我们这些行动的方向。因此,我们将把每个最优动作映射到一个向量 u 和 v,并使用这些来创建一个箭图(https://matplotlib . org/API/_ as _ gen/matplotlib . axes . axes .颤图. html )。

我们定义箭头的比例,并使用它来定义标记为 u 的水平分量。对于移动动作,我们简单地将 x 方向上的移动乘以该因子,对于投掷方向,我们向左或向右移动 1 个单位(说明 0 或 180 度没有水平移动,90 或 270 度没有垂直移动)。

然后,利用一些基本的三角学,水平分量被用于计算垂直分量,其中我们再次考虑了会在计算中引起误差的某些角度。

我们看到一些州有多个最佳行动。那些直接朝北、朝东、朝南或朝西的可以向多个方向移动,而状态(1,1)、(1,-1)、(-1,-1)和(-1,1)可以向容器移动或投掷。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我决定通过导出每个图并传递到一个小动画中来显示每次更新时最优策略的变化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阶段 3:用强化学习寻找最优策略,其中概率是隐藏的

q 学习算法

我们现在将假设概率对人来说是未知的,因此需要经验来找到最佳行动。

首先,让我们试着找到一个最优的行动,如果这个人从一个固定的位置开始,bin 像以前一样固定在(0,0)。

我们将应用 Q-learning 并用值 0 初始化所有状态-动作对,并使用更新规则:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Q learning Update Rule

我们给算法选择扔在任何 360 度方向(到一个完整的角度)或移动到当前的任何周围位置。因此有 8 个地方可以移动:北方,东北,东方等。

当它选择扔纸时,它将根据它是否击中垃圾箱而获得+1 的正奖励或-1 的负奖励,这一集结束。

需要通过多次反复试验来确定箱子的位置,然后确定是先移动还是从当前位置投掷更好。

Q-学习伪代码

首先,和以前一样,我们用 0 的任意值初始化 Q 表。

现在,每集的开始位置将固定为一个状态,我们还引入了每集动作数量的上限,这样就不会意外地无休止地持续下去。

如果扔出纸,每集自然结束,算法执行的动作由ε-贪婪动作选择程序决定,由此以概率ε和贪婪(当前最大)随机选择动作,否则。为了平衡移动或投掷动作之间的随机选择(因为只有 8 个移动动作,但有 360 个投掷动作),我决定给算法 50/50 的移动或投掷机会,然后从这些动作中随机选择一个动作。

如前所述,随机移动动作不能超出房间的边界,并且一旦发现,我们根据所有可能的后续动作的最大 Q(s’,a)来更新当前 Q(s,a)。例如,如果我们从-9,-9 移动到-8,-8,Q( (-9,-9),(1,1))将根据 Q 的最大值((-8,-8),a)更新所有可能的动作,包括投掷动作。

如果算法投掷该纸,则计算这次投掷的成功概率,并且我们模拟在这种情况下它是成功的并且接收正的终端奖励,还是不成功的并且接收负的终端奖励。

该算法继续更新每个状态-动作对的 Q 值,直到结果收敛。

我们将在下一篇文章中分析不同参数的影响,但现在只介绍一些任意选择的参数:
—次数= 100
—阿尔法= 0.5
—伽马= 0.5
—ε= 0.2
—最大动作= 1000
—pos _ terminal _ reward = 1
—neg _ terminal _ reward =-1

用这些参数运行算法 10 次,我们为状态-5,-5 产生以下“最佳”动作:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显然,这些并不一致,这严重表明这些行动实际上并不是最佳的。因此,我们需要考虑我们选择的参数如何影响输出,以及如何改进结果。

结论

我们在 Python 中从头引入了一个环境,并找到了最佳策略。此外,我已经开始介绍用 Q-learning 寻找最优策略的方法。

我将在后续文章中继续这一点,并通过改变参数来改善这些初始结果。现在,我希望这足以让你开始在这个例子中尝试他们自己的算法。

如果您有任何问题,请随时在下面或 Kaggle 页面上发表评论。

谢谢

哲学(philosophy 的缩写)

强化学习:必要性和挑战

原文:https://towardsdatascience.com/reinforcement-learning-its-necessity-and-challenges-febef1470e9a?source=collection_archive---------1-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

lemme learn …

简介:

这是我第一篇关于强化学习的博客。过去几个月我一直在学习和应用 RL。我试图通过这篇文章呈现对 RL 及其含义的高度理解。

在深入讨论之前,我们先了解一下什么是强化学习,它与其他机器学习技术有什么不同。

强化学习(RL)是机器学习的一个子领域,其中代理通过与其环境交互,观察这些交互的结果并相应地接收奖励(积极或消极)来学习。这种学习方式模仿了我们人类学习的基本方式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Reinforcement learning system

必要性和挑战:

当我们走向人工智能(AGI)时,设计一个可以解决多种任务的系统(例如,分类图像,玩游戏…)真的很有挑战性。目前机器学习技术的范围,无论是监督学习还是非监督学习,都擅长在任何时刻处理一项任务。这就限制了 AI 实现通用性的范围。

为了实现 AGI 的目标,RL 要让代理执行许多不同类型的任务,而不是只专攻一种。这可以通过多任务学习和记忆学习来实现。

我们已经看到了 Google Deep Mind 最近在多任务学习方面的工作,其中代理学习识别数字和玩雅达利。然而,当您扩展流程时,这确实是一项非常具有挑战性的任务。学习任务需要大量的训练时间和大量的迭代。

另一个挑战来自代理感知环境的方式。在许多现实世界的任务中,代理没有观察整个环境的范围。这种局部观察使代理人不仅根据当前的观察,而且根据过去的观察采取最佳行动。因此,记住过去的状态并根据当前观察采取最佳行动是 RL 成功解决现实世界问题的关键。

RL 代理总是从探索和开发中学习。RL 是一种基于不断试错的学习,其中代理试图对一个状态应用不同的动作组合,以找到最高的累积奖励。这种探索在现实世界中变得几乎不可能。让我们考虑一个例子,你想让机器人学会在复杂的环境中导航,避免碰撞。当机器人在环境中移动学习时,它会探索新的状态,并采取不同的行动来导航。然而,在现实世界中采取最好的行动是不可行的,因为环境的动态变化非常频繁,并且对于机器人来说学习变得非常昂贵。

因此,为了避免上述问题,在 RL 代理上应用了不同的其他机制来使其学习。很少有像通过模仿想要的行为来学习,通过演示来学习这样的方法正在机器人身上进行尝试,以在模拟中学习环境。然而,通过这种方式,学习变得非常特定于环境,并且它失去了一般化学习的实际目标。

在过去的几个月里,从开放式人工智能和 DeepMind 到人工智能,几乎没有什么积极的进展。开放人工智能的最新发展之一是进化策略(ES) 一种克服许多 RL 缺点的优化技术(【https://blog.openai.com/evolution-strategies/】T2)。DeepMind 的另一个发展是 路径网 是一个新的模块化深度学习(DL)架构(https://arxiv.org/abs/1701.08734)

任何需要手册才能工作的产品都是坏的。埃隆·马斯克

致谢:

我要感谢 David Silver,Google DeepMind 在 youtube 上的教程,Denny Britz,Google Brain 和 Arthur Juliani。

参考文献:

[## Denny britz/强化学习

强化学习-强化学习算法的实现。Python,OpenAI 健身房,Tensorflow。练习…

github.com](https://github.com/dennybritz/reinforcement-learning) [## OpenAI

OpenAI 是一家非营利性的人工智能研究公司,旨在发现和制定通往安全人工智能的道路。

openai.com](https://openai.com) [## 深度思维

解决智能问题,用它让世界变得更美好

deepmind.com](https://deepmind.com)

强化学习第 3 部分:实用强化学习

原文:https://towardsdatascience.com/reinforcement-learning-part-3-practical-reinforcement-learning-e562c4089633?source=collection_archive---------14-----------------------

如果你还没有看过我们强化学习系列的第一部分第二部分,你可以在这里查看,在这里查看。在第 1 部分中,您将学习强化学习的关键概念,这将帮助您更好地理解强化学习。第 2 部分将带您了解强化学习算法的比较和具体考虑。

在这篇文章中,我们将庆祝我们所学到的强化学习!我们将看看人们在强化学习方面做的一些很酷的事情,在强化学习中仍然存在的一些主要障碍,并讨论一些如果你想自己开始从事强化学习的话可以开始使用的资源!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Who knows… Maybe you’ll create the next AI system to defeat humans at games like Google did with AlphaGo!

酷 RL 成就

有了所有的强化学习知识,我们现在对 RL 如何工作以及开发人员在决定如何开发 RL 应用程序时必须考虑的一些因素有了一个很好的基础。我们来过一遍 RL 都实现了哪些很酷的东西。

RL 在 Dota 2 击败人类

OpenAI 开发了一套五个神经网络,它们学会了相互协调,在 RTS 游戏 Dota 2 中击败了真正的人类。2018 年 8 月 5 日,由五个神经网络组成的团队与真实的、人类的、有竞争力的玩家进行了比赛,并赢得了三局两胜。游戏人工智能的巨大成就!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

OpenAI’s Five aren’t done yet either. This first competition they held was just the start of what they really hope to do: Compete at an international and professional level. They ended up doing this in late August, which they won one round and then lost against two other professional human competitors. A loss, but in a way, also still a win!

超参数调谐的 RL

谷歌开发了一种使用强化学习的超参数调整方法,他们称之为 AutoML。他们设置了一个问题,并基于潜在的网络突变(动作)进化出新的神经网络,并以新的网络性能的形式获得反馈。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Tweaking hyperparameters to get the best performance out of machine learning models is really hard. Google’s AutoML service can this for us using what we know about reinforcement learning to come up with better parameters and faster.

工业用盆景

Bonsai 是一家很酷的初创公司,最近被微软收购,专注于在工业和企业领域使用 RL。他们的重点是改进控制系统和实时决策,以提高机器人、制造、能源等领域的自动化和效率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bonsai’s idea was that we could train industrial grade machinery in simulation using machine learning. By doing so, we mitigate the risk of breaking anything which could cost a company a lot of money.

Pit.ai 了解交易策略

Pit.ai 是一个很酷的团队,它利用 RL 来更好地推理和理解交易算法。他们有一个崇高的使命,即使用 RL 来帮助取代投资管理人员,以帮助降低成本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Using RL to come up with good trading strategies… Sounds a lot like our example with the stock market. Do you think they frame their tasks as episodic or continuous?

DeepMind 降低冷却成本

使用 RL,谷歌的 DeepMind 帮助其数据中心降低了 40%的冷却成本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Think about how much 40% is at a Google-level scale… Oh my!

RL 中的障碍

不可否认,强化学习可以做很多很酷的事情。它提供了一种新的思考机器学习的方式;这是处理机器学习问题的不同方式。

这并不意味着这是解决所有问题的最佳方式。强化学习有时可能是解决问题最困难的方式。我们可以通过查看阻止围绕 RL 构建应用程序的一些障碍来最好地理解这一点。

数据

数据对于机器学习至关重要。句号。RL 需要大量数据才能正常工作。想想我们的代理通过马里奥玩。它必须一遍又一遍地玩这个游戏,以学习如何完成最基本的任务。没有所有的游戏数据,我们的代理将永远不会学会玩游戏,更不用说玩好游戏了。这是一个问题,尤其是在难以获得数据的情况下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Data is a big issue for all machine learning for sure. But where for supervised tasks, sometimes data is simply an input and label pair, RL tasks oftentimes require much more complex data in order to teach systems to do what we wish.

目标是什么

RL 算法需要有目标。因为他们是任务驱动的,他们总是需要努力实现目标,不管是赚最多的钱还是尽可能快地超越水平。在复杂的任务中,“目标是什么”的问题很快变得越来越难回答。如果没有恰当地考虑目标,代理可能会倾向于做一些你不希望它做的事情。

想象一个假设的算法被放置在一个负责保护人类安全的机器人中。假设它运行了一个模拟程序,并得出结论,保证人类安全的最好方法是消灭所有其他人类生命,并使有问题的人类镇静下来。这根本不是我们想要开始的,但这是算法根据其目标、策略和价值函数的定义方式计算出的尽可能长时间保持该人安全的最佳方式。因此,目标定义至关重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Making sure our algorithms and agents do what we want and expect them to do is critical for deploying systems in the real world. These are issues that touch security, ethics, safety, and more.

稀疏环境中的复杂任务

这个问题继承了前两个问题的最坏情况。我们如何在一个很少收到奖励信号的环境中,让一个需要学习做非常复杂的事情的智能体?有许多方法可以解决这个问题,例如创建一个复杂的策略来处理复杂的任务,或者将复杂的任务分解为更小、更明显的任务(参见 OpenAI with Dota 2,其中他们制定了代理可以收到的小奖励,这些小奖励自然会导致期望的大奖励)。这仍然是一个巨大的研究领域。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Think about the task of trying to teach a robot how to physically play the piano. This is an incredibly complex task that doesn’t necessarily feature a lot of feedback that can be turned into a reward signal. This would require some major goal engineering, which ties back into our previous issue.

大量的状态和动作

在 Mario 中,代理可以采取的动作数量是有限的。在现实世界中,代理可以采取的动作数量是无限的。可以观察到的环境状态的数量也是如此。代理如何处理这种情况?一个算法如何在数学上表现这一点?这些都是巨大的问题,巨大的研究领域,以及需要更好地理解以制造可以在现实世界中交互的复杂代理的关键事情。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The second we try to deploy an agent into the real world, the stakes are higher, and the problem becomes exponentially more difficult. Even teaching a robot to walk using RL can become very hard.

现在,你可能在想“哇,强化学习可以做这么多很酷的事情,还有这么多很酷的问题需要解决。怎么才能入门?”

考虑到这一点,我找到了一些我认为是学习 RL 的好地方的资源:

  • 强化学习:简介——如果你准备阅读大量的书籍,这是一本很好的书,可以深入了解强化学习背后的理论成分。它是由理查德·萨顿和安德鲁·巴尔托(他们在 RL 方面做了很多工作)写的,真的很好(我自己目前也在研究)。
  • 伦敦大学学院的强化学习课程——这是一门很好学习的课程(主要基于上一本书)。它也有幻灯片和视频讲座!
  • 加州大学伯克利分校——CS 294——这些是加州大学伯克利分校强化学习课程的视频。
  • Udacity 的深度强化学习课程 —感觉你想得到更多的机会?你通过实践学得更好吗?那么尝试 Udacity 的深度强化学习课程可能更适合你!
  • 强化学习 GitHub Repo —这个 Repo 有一系列用 Python 实现的强化学习算法。但更重要的是,它采用了萨顿和巴尔托的书以及 UCL 的视频,并将它们结合成一个带有一些练习的学习计划,以指导您如何使用这两种资源。如果这听起来更像你的速度,你应该检查一下!

结论

我相信,强化学习将会是一种带来机器学习新革命的技术,创造出真正智能的应用程序,使用监督和非监督学习的技术来观察智能体活动的环境。如果强化学习在未来,那将是一个光明的未来!

原载于 2018 年 9 月 5 日recast . ai

基于决策树的强化学习 Q-Learning 简介

原文:https://towardsdatascience.com/reinforcement-learning-q-learning-with-decision-trees-ecb1215d9131?source=collection_archive---------6-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Jachan DeVol on Unsplash

强化学习(RL)是机器学习中的一种范式,在这种范式中,计算机学习执行任务,如驾驶车辆玩雅达利游戏在围棋比赛中击败人类,几乎没有人类专家的监督。几个 RL 算法被评为 2017 年最有趣的突破。每个人都对新的可能性感到兴奋。我很兴奋。

然而,有一件事一直困扰着我。几乎所有的 RL 实现都依赖于深度神经网络。

诚然,我喜欢神经网络,但我更喜欢梯度增强树,只要我可以选择。我只是觉得设计、训练和测试神经网络很乏味,评估结果中有很多不确定性和波动。就个人而言,梯度增强树提供了更好的性能(至少在结构化数据集上),同时收敛得更快并给出一致的结果。因此,我开始了用梯度增强树实现 RL(这里是 Q-Learning)的旅程。

理论上,对于 Q-Learning 的底层机器学习算法没有限制。最基本的版本使用表格形式来表示(状态 x 行动 x 预期回报)三元组。但是,因为实际上这个表经常太大,所以我们需要一个模型来近似这个表。该模型可以是任何回归算法。在这个探索中,我尝试了线性回归、支持向量回归、KNN 回归、随机森林等等。相信我,它们都有效(程度不同)。

那么,深度神经网络为什么会在总体上主导 Q-Learning 和 RL 呢?有几个原因:

  1. 部分适合——有了神经网络,你可以要求网络只学习新的经验。即使有了经验回放,你通常也只能用一小部分记忆来训练网络。其他算法不支持部分拟合,必须用整体记忆训练。这导致在存储器变大的后续训练步骤中训练时间过长。
  2. 输入源——如果你的输入源是图像或视频,卷积网络是一个不错的选择。既然你已经在用 CNN 了,用 FCN 来做 Q-Learning 是有意义的。
  3. 文学——因为其他人都是用深度学习来做的,所以万一你卡住了,会有更多的文学。

好的。所以,深度学习是 RL 的灵魂伴侣?别急,我的朋友。

  1. 性能—并非所有问题都涉及非结构化数据。结构化数据是梯度推进的亮点。Kaggle 竞赛被 XGBoost 和它的朋友们所主宰是有充分理由的。
  2. 收敛——梯度增强树通常快速可靠地收敛,不像神经网络需要一点运气。

这两个是优于神经网络的主要优势,这使它们成为强有力的竞争者。但是将 GBT 引入 Q-Learning 可行吗?或者它会不会太慢,太消耗资源,或者对于任务来说表现太差?

在我们继续之前,我想为那些不熟悉强化学习和 Q-Learning 的人提供一些介绍。然而,有很多更好的作家已经优雅地解释了这些话题,所以我将简单地在这里放下链接。

[## 使用 Q-Learning 更深入地研究强化学习

本文是🕹️. tensor flow 深度强化学习课程的一部分点击这里查看教学大纲。

medium.freecodecamp.org](https://medium.freecodecamp.org/diving-deeper-into-reinforcement-learning-with-q-learning-c18d0db58efe) [## 深度 Q-Learning 简介:让我们玩毁灭战士

本文是🕹️. tensor flow 深度强化学习课程的一部分点击这里查看教学大纲。

medium.freecodecamp.org](https://medium.freecodecamp.org/an-introduction-to-deep-q-learning-lets-play-doom-54d02d8017d8) [## 强化学习介绍(DQN 深度 Q 学习)

在今天的文章中,我将向你介绍强化学习的热门话题。在这篇文章之后,你将…

towardsdatascience.com](/cartpole-introduction-to-reinforcement-learning-ed0eb5b58288) [## RL—深度强化学习简介

深度强化学习是从我们的所见所闻中采取最佳行动。不幸的是,强化…

medium.com](https://medium.com/@jonathan_hui/rl-introduction-to-deep-reinforcement-learning-35c25e04c199)

以及梯度增强树上的一些引物。

[## 从零开始的渐变提升

简化复杂的算法

medium.com](https://medium.com/mlreview/gradient-boosting-from-scratch-1e317ae4587d) [## 梯度增强与随机森林

在这篇文章中,我将比较两种流行的集成方法,随机森林(RM)和梯度推进机器…

medium.com](https://medium.com/@aravanshad/gradient-boosting-versus-random-forest-cfa3fa8f0d80) [## 梯度增强和 XGBoost

从我们结束的地方开始,让我们继续讨论不同的 boosting 算法。如果您还没有阅读…

hackernoon.com](https://hackernoon.com/gradient-boosting-and-xgboost-90862daa6c77)

问题定式化

这个项目开始于我对其他算法是否可以用于 Q 学习的纯粹好奇。因此,我们没有触及更深层次的问题,比如实现专门用于强化学习的决策树,或者对性能和速度的更深层次的分析等等。

我们要用一个最基本的 RL 问题来做实验——cart pole v 0。这个环境是由 OpenAI Gym 提供的——一个由各种环境组成的库,用于测试驱动强化学习框架。基本上,手推车上有一根杆子。你可以向左或向右移动。你的目标是尽可能长时间保持杆子不倒。

我从格雷戈·苏尔马那里获得了一个 GitHub 库,他在那里提供了一个 Keras 模型来解决 CartPole 问题。我重用了他的大部分代码——只修改需要修改的部分。我要感谢格雷戈·苏尔马的代码库。

[## gsurma/cartpole

OpenAI 的 cartpole env 解算器。在 GitHub 上创建一个帐户,为 gsurma/cartpole 的发展做出贡献。

github.com](https://github.com/gsurma/cartpole)

让我们一步一步地回顾一下苏尔马的模型是怎么做的。

  1. 掷骰子游戏初始化。记下行动次数。
  2. 在每一个时间步,给我们一个元组 (x1,x2,x3,x4) 。这个元组表示购物车和杆子的当前状态。
  3. 我们告诉游戏我们是想向左还是向右移动。决策来自我们的模型(一般是神经网络),通过询问模型在这种状态下执行每个动作的预期回报。
  4. 在动作执行之后,我们获得一个新的状态和一个奖励。
  5. 我们要求我们的模型预测新状态下每个行动的预期回报。取最高奖励作为处于这个新状态的预期奖励,用一个因子 GAMMA 折现,加到现在的奖励上。这是该状态和动作组合的新 q 值(或预期回报)。
  6. 将状态/动作/奖励/新状态元组放入某种缓冲区或内存中。
  7. 选择全部或部分内存。用回忆的记忆部分拟合模型。
  8. 回到步骤 2。重复,直到我们得到满意的结果。

正如你所看到的,当应用神经网络(或者至少是 Keras)时,整个过程很简单。我们可以要求神经网络对行动的预期回报进行预测,甚至在网络被训练之前(当然,你会得到随机数,但这对于第一轮来说是可以的。)一旦我们计算了新的 q 值,我们就可以从内存中选择一个实例,并将其拟合到神经网络,而不会丢失我们迄今为止已经训练的所有内容(诚然,会有退化。这是首先引入体验重放的基础。)

如果我们想用其他回归器代替神经网络,有几个要求。

  1. 回归器应该支持多标签。我用“应该”而不是“必须”,因为它不是必不可少的。通过几行代码,我们可以分别为每个动作实现一个单独回归器;但是原生的多标签支持使用起来更干净。SKLearn 中的大多数算法本身都支持多标签,因此您几乎可以放弃线性回归、支持向量回归和随机森林。梯度增强树有点棘手,因为流行的库,如 XGBoost、CatBoost 和 LightGBM,不提供多标签支持。幸运的是,我们可以将 SKLearn 的 MultiOutputRegressor 包裹在它们周围,解决这个问题。
  2. 因为 GBT 在打电话预测之前必须是健康的,我们必须为第一轮提供我们自己的预期奖励。这包括首先检查模型是否合适。如果不是这样,我们可以提供一个固定值或一个随机数。我选择提供 0 作为初始值。
  3. 我们不能和 GBT 做部分契合。我们必须构建整个内存以及一组 q 值,并在每个时间步完全重新训练回归变量,而不是一次拟合一个实例。
  4. 因为我们用整个记忆进行再训练,带有陈旧 q 值的陈旧经验永远不会自行消失。与神经网络不同,我们必须将内存的大小限制在一个小得多的数字。我选择了 1000。
  5. 作为一个副作用,我们必须提高最小探索率,以防止学习者陷入困境。很可能我们的小记忆会被低质量的经历填满,所以我们需要继续探索。

下图突出显示了我对原始代码所做的更改。鉴于 LightGBM 的性能和速度,我在实验中使用了它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Changes I made to the original code

备注 我通过 Jupyter 笔记本运行代码,令人惊讶的是,这比从命令行运行要快。可能与使用 Windows 机器有关。

代码也可以在 GitHub 上找到。

[## 掌上电脑/墨盒

OpenAI 的 cartpole env 解算器。在 GitHub 上创建一个帐户,为 palmbook/cartpole 的开发做出贡献。

github.com](https://github.com/palmbook/cartpole)

结果

它工作了。有时候效果出奇的好。有时,令人沮丧的是,它需要超过 1000 个时间步骤来解决问题。很少,它根本不能解决问题。

这是每次试验解决问题前的时间步骤图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Number of Rounds before the problem was considered “solved.”

从图中可以清楚地看出,平均而言,该方法不如神经网络。令人欣慰的是,即使在达到第 100 轮之前,LightGBM 也可以通过一些试验解决问题,这实际上意味着它可以从一开始就解决问题。这表明了这种方法的潜力。我相信我们需要更好的体验重放/内存管理来充分利用 Q-Learning 中的 LightGBM,这将使整个代码库变得更加复杂。

至少,我们现在知道 Q-Learning 也可以用其他回归变量来完成。但是为了实用的目的,我想在可预见的将来我会坚持使用神经网络。

未来作品

我喜欢在项目中实施提前停止技术。队列管理是另一个需要改进的领域。我们应该只删除 q 值失效的内存实例,而不是 FIFO。此外,我想知道我们是否可以应用类似的技术,可能结合卷积层,来玩视频游戏。

使用 Python 的强化学习(RL) 101

原文:https://towardsdatascience.com/reinforcement-learning-rl-101-with-python-e1aa0d37d43b?source=collection_archive---------1-----------------------

动态规划(DP)、蒙特卡罗(MC)和时间差分(TD)来求解 gridworld 状态值函数

在这篇文章中,我们将介绍经典 RL 的一些基本概念,这些概念应用于一个名为 gridworld 的非常简单的任务,以解决所谓的状态值函数,该函数告诉我们在某个状态 t 下有多好,这是基于从该状态可以实现的未来奖励。为此,我们将使用三种不同的方法:(1)动态规划,(2)蒙特卡罗模拟和(3)时间差分(TD)。

基础知识

强化学习是一门学科,它试图开发和理解算法,以建模和训练能够与其环境交互的代理,从而最大化特定目标。这个想法非常简单:代理知道它自己的状态 t ,采取动作 A t ,这导致它进入状态 t+1 并接收奖励 R t 。下面的方案总结了这个 St →At →Rt →St+1 →At+1 →Rt+1 →St+2…的迭代过程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Agent-environment interaction cycle. Source: Reinforcement Learning: An Introduction (Sutton, R., Barto A.).

这个过程的一个例子是一个机器人,它的任务是从地上收集空罐子。例如,机器人每捡一个罐头就可以得到 1 分,其余时间为 0 分。你可以想象机器人的动作可以是多种多样的,例如向前/向后/向左/向右移动,手臂向上/向下伸展等等。如果机器人足够花哨,环境的表现(感知为状态)可以是机器人前面街道的简单图片。机器人可以自由走动并学会捡罐子,为此我们会给每个罐子+1 的正奖励。然后我们可以设置一个终止状态,例如挑选 10 罐(达到奖励= 10)。机器人将在代理-环境循环中循环,直到达到终止状态,这将意味着任务或的结束,众所周知。

grid world 任务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A representation of the gridworld task. Source: Reinforcement Learning: An Introduction (Sutton, R., Barto A.).

gridworld 任务类似于前面提到的例子,只是在这种情况下,机器人必须在网格中移动,以终止状态(灰色方块)结束。每个方格代表一个州。可以采取的动作是向上、向下、向左或向右,我们假设这些动作是确定性的,这意味着每当机器人选择向上时,机器人就会向上。有一个例外,就是机器人碰壁的时候。在这种情况下,最终状态与初始状态相同(不能破壁)。最后,对于每一次对墙的移动或尝试,将给予-1 的奖励,除非初始状态是结束状态,在这种情况下,奖励将是 0,并且不需要采取进一步的行动,因为机器人将会结束游戏。

现在,机器人可以用不同的方式选择动作。机器人选择行动所依据的这些规则就是所谓的策略。在最简单的情况下,想象机器人将以相同的概率向每个方向移动,即有 25%的概率移动到顶部,25%移动到左侧,25%移动到底部,25%移动到右侧。让我们称之为随机政策。遵循这个随机策略,问题是:机器人在网格世界的每个状态/方格中有什么价值或有多好?

动态规划与政策迭代:评估与改进

如果目标是以灰色方块结束,很明显灰色方块旁边的方块更好,因为遵循随机策略,有更高的机会以最终状态结束。但是我们如何量化这些方块/状态中的每一个有多好呢?或者,同样的,我们如何计算一个函数 V(S t )(称为状态值函数),对于每个状态 S t 给我们它的真实值?

先说一下的概念。价值可以计算为从状态 t 可以获得的所有未来奖励的总和。价值和回报之间的直观区别就像幸福和快乐一样。虽然即时的快乐可以令人满足,但它并不能确保长久的快乐,因为它没有考虑到所有未来的回报,它只关心下一个即时的回报。在 RL 中,一个状态的价值是相同的:总价值不仅是眼前的回报,而且是所有未来可以实现的回报的总和。

解决上述状态值函数的一种方法是使用策略迭代,这是一种包含在数学领域动态规划中的算法。该算法显示在下面的框中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Iterative policy evaluation algorithm. Source: Reinforcement Learning: An Introduction (Sutton, R., Barto A.).

算法的关键是对 V(s)的赋值,你可以在这里找到注释:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: edited from Reinforcement Learning: An Introduction (Sutton, R., Barto A.)

这个想法是,我们从一个值函数开始,这个值函数是一个带有零的 4x4 维度(与网格一样大)的数组。现在,我们对每个状态进行迭代,并且我们将它的新值计算为奖励(-1)加上每个邻居状态的值的加权和(s’)。注意两件事:V(s’)是最终/邻居状态 s’的期望值(开始时,期望值为 0,因为我们用 0 初始化 value 函数)。最后, V(s’) 乘以一个γ,这就是折现因子。在我们的例子中,我们使用 gamma =1,但是贴现因子的概念是,即时回报(等式中的 r )比未来回报(由*s’*的值反映)更重要,我们可以调整 gamma 来反映这一事实。

最后,请注意,我们可以一遍又一遍地重复这个过程,其中我们“扫描”并更新所有状态的状态值函数。这些值可以迭代更新,直到达到收敛。事实上,在迭代策略评估算法中,您可以看到我们计算了一些增量,这些增量反映了状态值相对于之前值的变化程度。这些增量随着迭代而衰减,并且应该在无穷远处达到 0。

以下是如何更新值函数的示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: Reinforcement Learning: An Introduction (Sutton, R., Barto A.)

请注意,在右栏中,随着我们更新状态值,我们现在可以生成越来越有效的策略,直到我们达到机器人必须遵循的最佳“规则”,以尽可能快地结束终止状态。

最后,这里是迭代策略评估和更新的 Python 实现。最后观察当我们达到收敛时,每个状态的增量如何衰减到 0。

蒙特卡罗方法

虽然前面的方法假设我们对环境有完整的了解,但很多时候情况并非如此。蒙特卡罗(MC)方法能够直接从经验事件中学习,而不依赖于环境动力学的先验知识。

术语“蒙特卡洛”通常被广泛用于任何其操作包含显著随机成分的估计方法。

有趣的是,在许多情况下,有可能根据期望的概率分布产生经验样本,但不可能获得显式形式的分布。

下面是根据 MC 估计价值函数的算法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: Reinforcement Learning: An Introduction (Sutton, R., Barto A.)

解决 gridworld 任务的蒙特卡罗方法有些幼稚,但却是有效的。基本上,我们可以从网格的随机点开始产生 n 个模拟,并让机器人随机向四个方向移动,直到达到终止状态。对于每个模拟,我们保存 4 个值:(1)初始状态,(2)采取的行动,(3)收到的奖励和(4)最终状态。最终,模拟只是一个包含这些值的 x 数组的数组, x 是机器人在到达终点状态之前必须走的步数。

现在,从这些模拟中,我们从“体验”数组的末尾开始迭代,并将 G 计算为同一体验中的前一个状态值(由 gamma,折扣因子加权)加上该状态下收到的奖励。然后,我们将 G 存储在一个数组 Returns(St) 中。最后,对于每个状态,我们计算回报率(St)的平均值,并将其设置为特定迭代的状态值。

在这里,您可以找到这种方法的 Python 实现,它应用于前面的相同任务:worldgrid。

请注意,改变伽玛可以减少收敛时间,正如我们在伽玛=1 和伽玛=0.6 的最后两个图中看到的。这种方法好的一面是:

  1. 从技术上讲,如果我们不想的话,我们不必计算所有状态的所有状态值。我们可以只关注一个特定的网格点,并从该初始状态开始所有的模拟,以采样包括该状态的情节,忽略所有其他的。这可以从根本上减少计算费用。
  2. 如前所述,这种方法不需要完全了解环境动态,我们可以直接从经验或模拟中学习。

时差学习

最后,我们将探讨的最后一种方法是时间差分(TD)。据说第三种方法融合了动态规划和蒙特卡罗方法的优点。这里我们列举了它的一些优点:

  1. 作为动态规划方法,在优化初始状态的值函数时,我们使用下一个状态的期望值来丰富预测。这个过程称为引导。
  2. 和蒙特卡洛一样,我们不需要环境动力学的模型,可以直接从经验中学习。
  3. 再者,不像 MC,我们不用等到一集结束才开始学习。事实上,在 TD(0)或单步 TD 的情况下,我们在每一步都在学习。这一点尤为重要,因为:一方面,学习的本质是真正的“在线”,另一方面,我们可以处理没有明确终端状态的任务,学习和无限逼近价值函数(适用于非确定性、非偶发性或时变价值函数)。

以下是使用时间差计算值函数的算法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Source: Reinforcement Learning: An Introduction (Sutton, R., Barto A.)

这是带有 Python 实现的 jupyter 笔记本

请注意,在这种情况下,调整 alpha 和 gamma 参数对于达到收敛至关重要。

承认

最后,我想提一下,这里的大部分工作都是从安德鲁 g .和理查德 s .的最新版本的书《强化学习:简介》中得到启发或借鉴的,这本书是这些作者在这里公开的惊人的作品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值