大家好, 欢迎学习本教程｡
我非常兴奋因为我们即将制造出A3大脑也就是我们眼睛的大脑｡
说到大脑, 我想强调一些东西｡
还记得在第一个模块中, 我们做了一个简单的大脑, 只有完全连接的层｡
然后在《毁灭战士》的第二个模块中, 我们制作了一个大脑, 它不仅有完全连接的层,
还有眼睛, 因为我们添加了卷积层, 这给了眼睛眼睛, 因为它可以观察图像,
理解里面发生了什么｡
现在我们甚至要在更高的层次上进行研究, 因为我们要制造一个不仅有眼睛和完全连接各层的大脑,
而且还有记忆的大脑｡
因为正如我在上一节课中所说的,
我们将在这个大大脑中添加一个神经网络的记录, 这将给予我们的大脑一个长时间的记忆, 这样它就可以理解时间关系, 输入图像的时间属性｡
好了, 我们走吧｡
更强大的大脑, 我可以告诉你, 我们现在要实现的模型真的, 真的很强大｡
我们可以看到如何建造眼睛和做深度学习, 做深度强化学习是为了越来越接近人类大脑的工作方式｡
你知道, 我们从大脑的基本关系开始, 从线性食物连接开始｡
然后我们加了眼睛, 然后我们加了记忆｡
谁知道我们会在未来的模型中添加什么？
你知道, 在2018年, 也许他们会添加一些东西, 使大脑看起来更像一个人的大脑｡
但是已经有了完全连接的层, 眼睛和记忆, 我们已经有了一个真正好的和功能性的大脑｡
那就开始吧｡
让我们把这个大脑｡
像往常一样, 我们要为它创建一个类, 因为它有很多关于卷积和LCMS的性质｡
所以我们要用init函数初始化所有这些, 创建所有这些连接,
然后当然我们会有forward函数, 它会在大脑内部传播信号, 这样我们就可以最终得到输出｡
好了, 准备好了吗？
我们开始吧
所以, 我们引入了一个新的课程, 我们称之为演员评论家｡
因为, 当然, 我说的是大脑｡
但我们不要忘记我们正在制作a3c模型, 它是基于主动批评原则, 演员和批评者是分开的｡
所以我们实际上会为演员和评论家建立一个线性的, 完整的联系｡
你会看到我们是如何做到的｡
其实很简单｡
演员评论家, 这个演员评论家类继承自尾注模块, 这样我们就可以使用所有的PyTorch工具了｡
因此, 让我们这样做以从节点模块继承｡
好吧, 我们得先拿下火炬图书馆, 然后再拿下那个｡
然后就｡
还有那个和模块｡
好吧, 我会的
这样我们就能继承它｡
好吧, 我会的
这就是我们的第一个函数, 当然, 也就是init函数｡
所以我们从双下划线开始, 然后这个init函数将把self和对象作为参数,
然后是输入形状,
也就是我们输入图像的维度, 我们称之为输入和动作空间, 基本上是包含所有动作的空间｡
我们也可以, 从这个动作空间, 我们可以得到动作的数量,
也就是可能的动作的数量, 我们很快就会得到｡
所以我们也需要它｡
这就是我们需要的论据｡
然后让我们进入函数内部, 创建所有适合我们大脑的变量｡
但是在我们这么做之前, 记住我们要做什么来激活继承,
我们可以使用输入模块中的所有工具｡
我们必须以这种方式使用超级函数, 在其中输入actor｡
批判者认为是我们的类然后自我为对象上来的｡
好吧, 那么, 圆圆｡
我们再次使用init｡
功能｡
我们走吧｡
这给了我们所有的工具, 我们将需要从火炬建立我们的大脑｡
好吧, 那么｡
好了, 是时候让眼睛的眼睛｡
这就是回旋｡
所以我们会很快地做, 因为我们已经详细解释过了, 因为记住末日之眼是有眼睛的｡
所以完全一样｡
我们要做一些卷积, 我们将使用一个非常简单的架构, 有32个大小为3 × 3的特征检测器,
步长为2, 填充为1｡
这是一个非常经典的架构, 但这实际上足以确保眼睛了解在突破游戏中发生了什么｡
好吧, 我会的
让我们来做这些回旋｡
所以我们从self开始因为卷积是对象的变量｡
所以self, 我们可以称之为conf, 这里有四个卷积｡
所以我把这个叫做conf 1, 我们取GN模块点, 然后取conf 2,
d类因为实际上con 1是这个类的一个对象.
然后在里面首先输入图像的形状｡
这就是我们现在所拥有的, 我们可以复制它, 并将其作为第一个输入｡
那么第二个参数是特征检测器的数量或者也是内核的数量｡
所以我们要选32个, 就像我们刚才说的, 经典的选择｡
然后我们需要选择内核的大小｡
这是将在输入图像上滑动的单元格的数量｡
所以, 记住, 我们可以选择三个, 四个或五个｡
这是常见的选择｡
现在我们选三个｡
然后我们将选择步幅2和｡
填充值为1｡
我们走吧｡
这是从输入图像到由32个卷积图像组成的第一个卷积层的第一个卷积｡
现在我们准备进行第二次卷积｡
所以实际上几乎是一样的｡
所以我复制这条线, 粘贴到下面, 但是再粘贴到下面, 最后一次粘贴,
因为我们有四个卷积, 几乎没有什么要改变的｡
所以我们已经可以把这里的, 一个一个数转换成一个一个三, 然后一个一个四｡
这将是我们的四个回旋｡
现在我们当然需要做一些改变, 但不会太多, 因为我们将保留一个字符串, 每个字符串为2,
填充为1｡
它们都有32个特征探测器｡
这是32个输出卷积图像｡
但是这里, 记住这对应于卷积的左边部分｡
所以实际上, 这对应于前面卷积的右边部分｡
你知道, 记住, 这就像多米诺骨牌｡
所以这真的很简单｡
因此这里我们必须输入32, 这里也是｡
我们很容易看到32和32｡
好吧, 我会的
总而言之, 我们从输入维数为num的输入图像开始｡
通过第一次卷积, 我们得到32个卷积图像, 每个图像检测一个特定特征｡
然后, 从这32个卷积图像中, 我们应用第二次卷积以得到32个新的卷积图像｡
这32张新的图像也是一样｡
我们应用第三次卷积再次得到32个新的卷积图像｡
最后, 从这32个卷积图像中, 我们应用第四个卷积来得到图像｡
好吧, 我会的
这就够了, 不然我就有监护人了｡
它会很好地探测到球｡
好吧, 我会的
这就是卷积｡
眼睛就这样了｡
现在让我们来处理一下记忆｡
我们正在实现的这个大脑的新功能与之前的tune相反｡
它不仅会有一个监督,
而且它会有一个超级记忆, 一个长记忆, 因为我们要实现一个STM长短期记忆,
这是一种常规的神经网络, 它给你的模型某种长记忆, 这样它就可以从过去学习一些长时间的关系｡
同样我们也要创建一个新变量｡
我从self和这个新变量开始, 我们将把它简称为lshtm,
因为它对应于大脑中的Lshtm网络.
所以Lshtm｡
现在在我们写STM的代码之前, 让我们确保我们理解了大脑的lshtm部分将做什么｡
因此, 正如我们所理解的, lshtm被用于学习输入图像的输入的时间属性｡
例如, 如果球击中砖块, lshtm会对反弹进行编码｡
所以这是首先要了解的｡
它会对游戏中发生的事情进行编码｡
然后, 当我们实现LSHTM时, 需要理解的下一件重要事情是,
我们需要选择时态依赖关系的顺序｡
在这里, 因为我们要给我们的神经网络输入一个四幅图像的序列,
那么这意味着我们已经可以学习一些顺序的时间依赖性｡
因为这是一些时间依赖关系, 在90加1发生的事情取决于在时间发生的事情｡
倒数一, 倒数二, 倒数三.
所以我们绝对可以做到｡
但好消息是, 我们将使用lshtm, 因此,
我们将能够学习一些更复杂的时间关系｡
也就是说, 例如, 我们可以学习一些时间属性, 在时间t加1发生的事情,
将取决于在时间t发生的事情｡
减一, 减二, 减三, 减到, 减n.
这是lshtm中的长时间部分, 长时间, 短时间记忆｡
通过Lshtm团队, 我们可以了解一些非常复杂的时间关系｡
好吧, 我们把名单加起来｡
为此, 我们将使用RN模块, 然后添加Class Lshtm单元格,
这将创建此Lshtm对象, 它将表示新网络的Lshtm部分｡
因为现在还有一个重要的事情需要理解, 那就是我们正在做一个C, R和n, 你知道,
一个卷积神经网络｡
雅顿的部分在CNN之后｡
因此, 现在, 我们需要在Lshtm单元中输入的是卷积后输出的大小｡
所以是32次, 3乘3｡
所以这32乘以3乘以3实际上是四次卷积后的输出｡
但这变成了R和Lshtm网络的输入｡
现在为什么四个卷积的输出是32倍, 3乘以3？
别担心, 没那么直接｡
这实际上不是一个简单的公式｡
但是, 有一个公式可以在将卷积的合并图像和卷积图像展平后计算输出神经元的数量｡
但是如果我们把这个大公式的项集合起来, 我们得到32次, 三乘三｡
我不想在这上面花太多时间, 因为我们还有很多事情要做｡
另外, 我们已经做了一个函数来计算这个数｡
记住, 这是为了极速
神经元的功能是让你可以重复使用它, 如果你想, 如果你不相信｡
但这只是我们在收集了这个大公式计算的项后得到的结果, 输出的数量｡
这是第一个论点｡
第二个参数是lshtm的输出神经元的数量我们取256个.
好吧, 我会的
那么现在这意味着什么呢？
这意味着现在我们有了一个向量来编码博弈中的每个事件, 换句话说, 我们有了一个编码状态.
所以现在我们可以把演员和评论家分开了, 因为, 你知道, 我们要做两个独立的神经网络,
一个给演员, 一个给评论家｡
但是, 这两个神经网络的图像编码和时间关系是相同的｡
这是我们为这两个神经网络做的共同部分｡
这将是两个神经网络的相同开始｡
但是现在演员和评论家的关系要改变了因为我们要为演员建立一个线性的,
完整的联系, 为评论家建立一个不同的线性的, 完整的联系｡
我们先休息一下, 在下一个教程中再讲｡
在那之前, 好好享受吧｡
一､