大家好, 欢迎学习本教程｡
现在我们要做一个完整的循环来计算保单损失和价值损失｡
一旦我们有这两个损失, 我们将能够使用我们的优化器, 以应用随机梯度下降,
以减少损失｡
好吧, 我会的
好了, 我们走吧｡
我们从这里开始
顺便说一下, 在上一个教程中, 我们实现了这一节, 我忘记删除缩进｡
对不起, 我很抱歉
所以从r开始, 这里不是for循环, 现在我们开始一个新的for循环.
我从四个开始, 现在我们要做的是, 从过期期间完成的最后一步开始,
我们要在时间上向后移动｡
这就是为什么我在这里做了四个I, 在反向范围内, 因为奖励是一个列表｡
因为探索的每一步都有奖励, 因为每一步我们都有奖励,
当Len的奖励是这个步数时, 这里使用了相反的方法, 这样我们就可以回到过去｡
好了, 我们走吧｡
现在我们要做的是更新累积奖励R我们要这样更新它.
这实际上和我们为Doom做的一样｡
它将等于gamma, 我们从参数中得到｡
我先取参数gamma乘以R, 再加上步骤的奖励, 我们可以通过取列表奖励和取高索引来得到.
首先, 这将是最后一步的奖励, 然后是前一步的奖励,
等等｡ 每次我们更新的时候, 都是把它乘以gamma, 然后在这一步加上这个奖励｡
记住, 通过这样做, 我们最终会得到｡
所以我打算把它写成评论｡
在循环结束时,
我们得到的累积奖励等于r 0, 第0步的奖励加上γ乘以r
1, 第一步的奖励加上γ的平方乘以R, 第二步的奖励加上γ的n次幂减去1乘以在第一步得到的奖励, 再减去1其中n是步数｡
但以后要小心｡
最后, 我们会得到步数的幂｡
将该值乘以应用于最后一个状态的V函数的值｡
这是我们在最后应该得到的, 这是我们得到的, 因为这里我们得到了最后一步的值,
因为这是在for循环的最后完成的｡
所以我们得到了这个值, 并把我们的设为等于这个值｡
所以现在在第二个for循环开始的时候, 这里等于这个状态的值｡
但是这样做的话, 我们最后得到的是等于或者零加上γ
r, 一加上γ的平方或者二加上γ的n次幂减一乘以步骤n的奖励减一加上γ的步数的幂,
乘以这个较小的状态的值｡
所以这是在计算累积奖励时要理解的主要事情｡
这就是为什么从这里开始, 用这里的值初始化我们的, 然后执行这个反向的for循环,
以使最后的方程完美｡
现在我们有了累积奖励的正确值, 我们来计算一下优势.
这里的优势就是获得奖励的优势与价值相比｡
所以我将引入一个新的可变优势它等于这个累积奖励减去在第二步得到的V函数的值.
因此, 这是误差减去值, 即完美｡
而既然我们有了累积奖励和优势, 那么我们就可以得到价值损失｡
这是我们现在能得到的第一个类, 我们将得到价值损失变量, 它将按照下面的方式更新.
记住到目前为止, 值损失被初始化为0所以我们要再次取值损失并加0.
5倍于优势的平方根所以我们可以这样得到｡
优势点战俘二号｡
所以这只意味着平方的优势, 优势在2的幂｡
而这正是价值损失, 即批评者对V函数输出的价值的预测所产生的损失｡
所以这是价值损失是有道理的, 因为记住, 在状态状态中,
行动A的优势, 是Q值和V函数值的差｡
所以当我们很好地发挥最优作用时, 我们得到的定态为｡
Q优的最优动作是一个明星在状态中扮演的角色｡
等于我们存储的状态的最佳值｡
所以很容易理解当优势不等于零时, 两者之间会有差别,
这就是损失的衡量方法.
所以价值损失少算了一个下来｡
我们现在还有一个要去｡
这就是保单损失, 这就是我们现在要计算的.
为了计算它, 我们需要再次考虑广义收益估计, 因为要计算策略损失,
我们需要广义收益估计, 而要得到广义收益估计,
我们首先需要状态值的时间差｡
所以我们有很多东西要计算｡
我们从这个时间差开始｡
一旦我们得到时间差, 我们将得到广义优势估计｡
而一旦我们得到了广义收益估计, 我们就会得到保单损失｡
好吧, 我会的
让我们从时间差异开始｡
所以t等于第二步的奖励加上gamma, 这要归功于我们的参数列表｡
所以参数γ乘以第二步的值加1, 然后加上这个数据, 减去第一步的值.
同样, 我们添加这些数据
好吧, 我会的
这就是状态值的时间差的公式｡
现在我们可以更新到广义优势估计｡
它是如何更新的, 我们把气体乘以伽马参数, 伽马乘以单元格, 我们也用参数访问单元格｡
所以我们取params单元格, 加上状态值的时间差｡
所以要小心｡
我们在一个for循环中, 每次我们把气体乘以gamma和tau, 然后加上时间差｡
所以重要的是要明白,
在这个循环的最后, 这个广义的优势估计将等于太阳在所有步骤上的gamma倍｡
Tau的威力是AI的两倍｡
步进时的时间差｡
好吧, 我会的
记住这一点非常重要｡
现在我们有了广义优势, 估计和时间差, 我们可以最终计算保单损失｡
所以我们开始吧｡
我们将用下面的方法更新保单损失, 取旧的保单损失,
减去第二步得到的对数概率, 再乘以广义收益估计, 然后我们要输入一个变量, 因为我们要计算梯度.
因此, 它必须附加到动态图中的梯度｡
然后再加上负0｡ 01乘以熵, 即在for循环的步骤II中获得的熵｡
再说一遍, 现在要小心｡
这是for循环中的计算, 这意味着在for循环结束时,
我们将得到的是策略丢失｡
等于步骤的负和｡
第二步的策略的乘积log乘以广义收益估计加上这个0｡
01.
有时熵在台阶高处｡
好了, 我们走吧｡
现在的政策是什么？
这是动作的软最大概率和步骤的熵｡
你们知道它是什么, 它是我们之前计算的, 我们附加到列表中的｡
所以我们已经有了｡
但这个饼图是这些动作的软最大概率｡
我们为什么要在这里加减号呢？
这是因为概率的对数和熵都是负值｡
既然我们想最小化它们的绝对值, 我们就必须把最后一个看作是对数似然, 而不是距离｡
你知道, 我们想最大化的概率采取行动, 将最大化的优势｡
这就是它背后的全部想法｡
我们希望最大化采取行动的概率, 从而使优势最大化｡
你们可能想知道, 熵系数的作用是什么, 也就是这个系数｡
在这儿吗？
它的目的只是为了防止太快落入一个陷阱, 在这个陷阱中, 除了一个概率为1的行为外,
所有行为的概率分布都为零｡
如果发生这种情况, 熵就会最小化｡
这就是为什么我们要加上这个系数｡ 01在这里这将使熵在梯度下降中增加｡
好吧, 我会的
所以现在好消息是最困难的部分已经完成了｡
我们有两个损失, 因此我们现在只需要做的, 我们已经知道怎么做, 就是执行随机梯度下降,
以减少这两个损失｡
我们现在要做的是退出这个循环, 使用我们单独创建的优化器｡
然后记住, 我们要做的第一件事是把所有梯度参数初始化为零｡
为了做到这一点, 我们添加点, 然后零下划线网格方法｡
好吧, 那就这样吧｡
现在我们要执行反向传播, 但我们要给予保单的重要性是损失价值的两倍,
因为保单损失更小.
所以为了做到这一点, 我们要在括号里加上一个策略, 在loss加0下面划线｡ 5.价值损失｡
所以4. 5倍的价值损失｡
我们在这里加上一个点, 然后用向后的方法来执行向后传播｡
多亏了这个技巧, 保单损失加上一半的价值损失, 我们对保单的重视程度是损失价值的两倍.
然后我们要使用另一个技巧, 就是防止梯度取非常大的值,
从而生成算法｡
要做到这一点, 首先要得到我们的torch库, 然后是torch库的内部模块,
最后是utils子模块｡
现在我们要使用函数clip, 在score范数上用下划线格拉德, 我们要输入模型参数,
第二个输入值是40｡
这个技巧基本上可以确保梯度不会取非常大的值, 然后生成算法｡
对于那些可能想知道这40年到底是什么的人｡
这就意味着我们使用这个值, 使得梯度的范数保持在0和40之间｡
因此, 这就是我们如何防止梯度取太大的值｡
现在我们差不多完成了｡
请记住,
我们在文件的开头创建了这个确保共享函数, 这是为了确保代理和共享模型共享相同的梯度, 并且这样做是为了确保我们可以在这里应用这个函数｡
因此, 我们将添加“确保共享梯度”, 以确保模型和共享模型共享相同的梯度｡
好吧, 我会的
那只是预防措施｡
我不确定这是否有必要, 但是, 你知道, 至少我们在这里不会有任何问题｡
最后, 最后一行代码, 当然, 我们将执行优化步骤以减少损失,
您知道如何执行｡
当然, 我们使用优化器, 并在括号中添加该步骤, 这样就可以了｡
我们大脑的训练结束了｡
所以恭喜你
我希望这不是太沉重｡
别担心, 我会提供代码和所有注释｡
所以如果你错过了任何细节, 你可以看看评论｡
如果你还不明白什么也不用担心｡
这是非常先进的｡
不过放心, 这也是最强大的｡
记住, 它是由谁创造出来的PyTorch｡
所以我们真的是在用最好的东西, 最先进的东西｡
所以, 如果你第一次没有得到所有的东西, 这是完全正常的, 但是通过多次的努力,
你肯定会越来越舒服｡
现在我们完成了训练｡
所以基本上我们做了所有最重要的东西｡
你知道, 我们通过构建神经网络的结构来制造大脑, 神经网络有回旋结构,
LSHTM和完全连接的层｡
我们通过编写训练代码来训练大脑｡
所以基本上算法的核心已经完成了｡
你成功了, 恭喜你.
现在我们还有几件事要做, 但那只是为了得到有趣的部分｡
你知道, 我们需要做这个测试, 人们失败, 这将测试代理人, 并提供视频的人工智能发挥突破｡
所以这将是非常有趣的观看｡
我们不会在PI文件中对该测试的所有行进行编码, 因为正如我们所说, 我们做了最重要的事情｡
我将把它与a3c联系起来, 但我当然会解释代码｡
最后我们有了这个主要的da pi文件, 它将执行代码｡
从我们执行这段代码的那一刻起, 所有的代码都会生成｡
所以大脑会被制造出来, 训练会发生, 人工智能会玩新的突破游戏, 我们会得到所有的视频｡
所以我迫不及待地想最终看他们｡
我们要看看人工智能是否足够聪明, 能接住球｡
所以现在我将在下一个教程中看到你对PI的测试, 这样我们就可以在一些新的游戏中测试AI, 在那之前,
享受AI｡