大家好, 欢迎学习本教程｡
这个特别的教程将会非常令人兴奋, 因为我们离a3c算法越来越近了｡
您将看到, 我们即将实现的称为资格跟踪或源代码的功能实际上是异步活动批评､
代理和算法的算法, 但我们不能将其视为A3
C,
因为我们仍将使用一个代理, 但您仍将看到, 我们即将实现的功能实际上摘自以下文章, 本文将其作为深度强化学习的同步方法｡
在本文中, 您将看到我们将实现的三个关键算法, 这是本课程的最后一个收获｡
但正如我所说的, 我们离它越来越近了, 因为我们现在要实现的模型实际上就是这个,
异步和单步｡
Q学习｡
就是这个｡
这差不多就是三把钥匙了, 也就是后面的一把, 但是只有一个代理｡
这一步的强大之处在于Q步学习, 我们将学习累积奖励和累积目标,
而不是像之前那样一步完成.
这将使训练更有表现力, 因此我们的人工智能也更强大｡
所以我们有了这个算法的伪代码｡
这是一个算法｡
单击它, 就可以了｡
这就是我们将要实现的算法｡
但请记住, 在只有一个代理的情况下, 不同之处在于, 在这里,
他们根据Epsilon贪婪策略采取行动, 该策略基于当前状态的Q值和所采取的行动｡
但在所有情况下, 我们都没有实施一个ε贪婪策略｡
我们实现了一个软最大化, 但其余部分是相同的｡
如你所见, 我们要计算最后一步的累积奖励, 实际上是十步, 请记住.
而步数等于十｡
所以我们将在我们的算法中实现这行代码, 我们现在就要实现｡
我们会得到这个, 而且我们也会实现这个｡
您将看到, 我们将获得当前状态和当前操作的最大Q值｡
这里的θ就是目标参数｡
让我们来做这个, 来攻击这个算法｡
这一个叫做异步和步着色, 但就我们而言我们无权说异步,
因为我们只有一个代理, 但因此我们可以称之为N步Q学习的资格､ 迹甚至源｡
好吧, 我们开始吧｡
会很有趣的｡
我们基本上可以遵循这里的伪代码, 这就是我们要做的｡
如你所见, 我们需要的一个参数是gamma, gamma参数是衰变参数｡
因此, 我们将首先为该gamma参数引入一个变量, 并选择一个值｡
所以我们开始吧｡
我们实际上不需要一个类来实现它｡
我们可以简单地用一个函数来实现它, 因为您知道, 我们实际上并不需要为这个资格跟踪模型创建对象｡
一个函数就足够了,
因为基本上我们要做的是返回输入和目标, 这样在训练人工智能时, 我们就可以最小化预测和目标之间的距离｡
为了得到预测, 我们需要输入, 因为我们要用大脑处理输入, 得到输出信号｡
这将是我们的预测｡
然后, 一旦我们有了预测和目标,
我们就可以通过尽量减小预测和目标之间的平方距离来训练人工智能｡
所以这就是我们要做的｡
现在就去
我们实现此函数是为了能够在这些目标中返回这些输入, 以便我们可以准备好进行训练,
以最小化距离预测值减去目标值的平方｡
好吧, 我们开始吧｡
正如我们所说的, 我们要实现一个函数｡
我们从def开始｡
这个函数, 我们称之为易读性下划线跟踪.
您也可以称之为源｡
你也可以称之为coloring, 但我们称之为qualibility trace｡
这个函数有一个参数, 它是一个批处理, 以及为什么要批处理.
这是因为我们将获得一些输入和一些目标, 因为我们将在批处理上训练人工智能｡
因此输入和目标将进入一些批处理｡
因此, 这里的输入参数是这个批处理, 它将包含几个输入, 然后是我们要计算的几个目标｡
好了, 我们走吧｡
这是我们唯一需要的论据｡
现在, 让我们进入函数内部, 定义需要执行的操作｡
因此, 正如我们在论文的伪代码中看到的, 我们需要一个gamma参数｡
正如我们所说的, 我们首先引入gamma参数, 所以gamma等于, 我们已经可以决定值了,
我们将选择4｡ 99.
这是一个典型的好价值的伽玛｡
而且不用担心, 我检查了一下, 这对我们的人工智能来说是一个很好的价值｡
好吧, 那下一步｡
下一步是准备我们的意见｡
我们的目标因为那正是我们想要的回报｡
我们希望返回输入和目标以准备培训｡
所以我们可以用一个空列表初始化它们｡
因为, 当然, 在批处理中的这些输入中, 我们将有几个输入都放到一个列表中｡
这就是为什么我把输入初始化为一个列表和目标｡
我们走吧｡
因此, 我们在目标中初始化输入｡
最后, 这个资格跟踪函数将返回｡
-没错—没错
当然, 这些投入和目标都是填写好的｡
在函数返回的内容中, 我们将有几个输入和关联的几个目标｡
好吧, 我会的
下一步｡
下一步是存储for循环｡
这正是因为我们遵循了论文中的伪代码, 这组代码｡
正如你所看到的, 这是一个重复代码部分, 重复一个完整的循环｡
我们要计算的累积奖励的代码是在十步中累积的.
它是如何计算的？
嗯, 每一步, 那都不是最后一步｡
我们将在此和步骤运行期间获得当前状态的最大Q值｡
如果我们走到最后一组十步, 那么, 这将等于零｡
也就是说, 我们不想再更新它｡
然后是for循环, 这是另一个for循环｡
这里没有重复, 但那是一样的｡
这将是我们算法中的第二个for循环｡
我们用这种方法更新奖励, 乘以衰减参数gamma, 再加上奖励.
所以我们开始吧｡
让我们回到Python, 开始for循环｡
那么四, 迭代变量是什么？
这就是我们的十步系列, 我们的十个转变系列｡
所以我们把这个变量序列叫做, 它代表了一个十个跃迁的序列, 就像一个十个跃迁的序列｡
所以四个系列｡
然后你怎么想？
好吧, 我们的系列将属于我们的批次, 也就是我们将训练人工智能的批次｡
所以对于批处理中的序列, 也就是对于输入批处理中的所有10个跃迁的序列｡
那我们该怎么办｡
为了得到累积的奖励, 你会在伪代码中看到, 我们需要序列的第一个跃迁的状态,
也需要序列的最后一个跃迁的状态｡
所以我们现在要做的就是得到这些输入状态｡
我们将把这两个输入状态放入一个变量中, 我们称之为input,
我们将得到这两个输入状态, 第一个输入状态和最后一个输入状态, 我们将把它们放入一个非bios数组中｡
不过不用担心, 我们不会一直守着这个数阵｡
我们当然会把它转换成一个总变量｡
但第一步是把这些状态输入到第一个状态中, 把最后一个输入到一个数组中｡
在这个numpy数组中, 我们加入了第一个输入, 它是序列的第一个跃迁的输入状态,
这就是序列｡
第一次跃迁, 我们取数列的指数0｡
这是第一个转变｡
然后我们可以通过获取它的属性来访问它, 也就是state｡
这是因为在我们的经验回放文件中, 我们为每个转变定义了一个特殊的结构, 你知道, 这个结构,
每个转变都由一个状态, 一个动作, 一个奖励组成｡
但最后一个元素也完成了｡
所以我们现在可以使用的这个特殊结构来自于我们在经验回放中定义转换的方式｡
好吧, 我会的
这样, 我们就得到了第一个跃迁的输入状态, 现在我们也得到了这个序列的最后一个跃迁的输入状态｡
而要做到这一点, 那是一样的｡
我们可以复制这个｡
以这个序列的最后一个指数为基, 用这个指数来代替0,
我们可以用这个技巧减去一个序列, 减去一个状态, 得到序列最后一个跃迁的输入状态｡
好的, 然后我们需要把这两个元素放在方括号里｡
因为这是裁判所期望的｡
接下来要做的一件很重要的事情, 因为我们要把它转换成火炬张量和火炬变量｡
好吧, 记住, 火炬张量的定义是一个特殊的数组, 包含一个单一的类型｡
所以我们需要强制拥有一种类型｡
像往常一样, 我们选择浮点型｡
所以我在这里加上这个参数, D, type, equals, P, dot, float, 32,
可以取这个, 现在我们可以把它转换成火炬张量和火炬变量｡
为了做好这一点, 首先, 我们将其转换为手电筒传感器｡
记住, 我们可以用NumPy火炬
然后我们把所有两个输入态的数组, 放入火炬张量中, 火炬张量是从它们的函数中得到的｡
好极了｡
因此, 这将把该阵列的输入状态转换为焊炬传感器｡
现在我们把这个火炬张量放到火炬变量中, 用变量类｡
所以input将是变量类的一个对象｡
事实上, 正如你所理解的, 这个变量类把所有这些都作为一个参数, 这样就创建了这个对象｡
好了, 现在我们应该没事了｡
我们有我们需要的两个输入｡
即第一个转换的输入状态和最后一个转换的输入状态｡
现在, 既然我们有了输入, 那么, 我们能得到什么呢？
我们可以得到眼睛大脑的输出信号｡
这就是预言｡
但我们称之为输出｡
这是输出信号, 并得到输出｡
这很简单, 因为我们已经创造了一个大脑, 这就是我们的卷积神经网络｡
所以我们可以简单地把我们的大脑扫描应用到输入上, 它会返回预测, 也就是输出, 就这么简单｡
现在我们已经准备好进入下一步｡
下一步就是开始计算这个累积奖励｡
所以现在我们要做的和我们的SE 2算法完全一样, 源代码, 或者我们应该称之为和步骤｡
Q学习｡
我们将引入累积奖励变量, 即累积奖励｡
让我们回到报纸上｡
正如你现在所看到的, 我们要做的就是得到这个累积的奖励, 也就是我们在这里｡
在十步中的每一步, 我们都需要在这个累积奖励上加一个零｡
如果我们达到了系列的最后一个日期或Q值的最大值, 如果我们还没有达到系列的最后一个状态,
那就是说对于除最后一步以外的所有步骤｡
让我们简单地实现它｡
让我们回到Python｡
所以这个累积奖励, 就像我们刚才看到的, 将等于0｡ 0.
如果｡
我们到了最后一个日期, 我们可以骑这种情况下这样做｡
如果索引序列减一, 这是该序列的最后一次传输, 那么我们加上done, 因为done实际上是我们定义的,
体验重放, 体验重放文件的过渡结构的一个属性.
这些都是从露天建筑中完成的, 因为如果我们去开放式健身房网站, 就在这里,
我准备了它｡
这就是零的平方根｡
如果我们去看文档, 然后如果我们这样, 这就是教程｡
我真的鼓励你去看看｡
你可以运行一个环境, 但你可以看到我们的观察, 也就是我们的转变是由一个观察,
一个奖励来定义的｡
在这里完成了这个, 这个完成了, 意味着一个过渡或步骤结束了｡
所以我们要把这里的结果作为if条件｡
因此, 如果系列减去一个点, 则表示如果系列的最后一个过渡结束, 则它已完成｡
所以这个累积奖励将等于零如果序列的最后一个跃迁完成了或者如果我们还没有到达最后一个跃迁.
正如我们所说的, 累积奖励将根据Q值的最大值进行更新｡
因为这里的输出是大脑的输出, 那就是神经网络的预测｡
如您所知, 神经网络的预测就是预测的队列值｡
这个输出包含Q值｡
因为我们需要取Q值的最大值,
所以我们需要先添加这个索引, 因为这个结构包含索引1中的Q值, 然后我们需要添加数据来访问这个输出结构的数据｡
你知道, 它有着火炬变量的特殊结构｡
这样, 我们就得到了Q值, 然后我们想取Q值的最大值｡
所以我们简单地加上最大值, 现在我们得到了我们在论文中想要的, 这个非终结态的Q值的最大值｡
现在我们要做的是, 创建第二个for循环, 它是这个序列的十个步骤｡
我们将更新累积奖励, 首先乘以衰减参数, 我们已经有了,
然后再加上奖励｡
所以我们开始吧｡
我们实际上要做的和伪代码中的完全一样｡
正如你所注意到的, 他们从右边开始, 所以他们不是从第一步开始, 然后走到最后一步｡
他们从最后一步开始, t减一向上到第一步开始｡
这正是我们要做的,
因为我们想在最后得到, 累积奖励等于, 等于, 一加, 平方或二加,
点加, 十的幂次, 其中的一, 二或十是在这个系列的最后一步得到的奖励｡
在进行第二个循环之前, 让我们稍作休息, 我们将在下一个教程中再见｡
在那之前, 好好享受吧｡
一､