WEBVTT

00:00.210 --> 00:06.870
大家好, 欢迎来到本课程的第三个模块, A3C异步行为对代理人的评价｡ 

00:06.870 --> 00:11.760
所以现在我可以说欢迎来到最先进的机器学习｡ 

00:11.910 --> 00:16.500
当时我这么说是因为你们中的一些人可能会在一两年内修这门课｡ 

00:16.500 --> 00:23.070
但在当时我说这在2017年, 虽然你即将工作的一个最强大的模型在人工智能,

00:23.070 --> 00:28.530
但有更多的是不是唯一的特殊的东西关于这个模块｡

00:28.560 --> 00:34.620
我们不仅要使用最强大的人工智能模型,

00:34.620 --> 00:42.180
而且要实现这个算法的最强大版本, 也就是最优化的版本, 实现了a3c模型的版本,

00:42.180 --> 00:50.730
因为你可以想象, 这是三C算法的核心, 但接下来我们可以使用很多工具来优化整个模型｡

00:50.730 --> 00:55.650
所以你不仅要有算法的核心, 还要围绕它实现所有这些工具,

00:55.650 --> 00:59.340
使模型超级强大｡

00:59.340 --> 01:01.380
我为什么要这么做？

01:01.380 --> 01:02.900
有两个原因｡ 

01:02.910 --> 01:06.090
第一个原因是我们即将接近本课程的结尾｡ 

01:06.090 --> 01:11.550
本课程是ML､ DL､ AI和Z三门课程中最高级别的课程｡ 

01:11.550 --> 01:14.160
所以现在我想你已经准备好更进一步了｡ 

01:14.160 --> 01:18.900
第二个原因是, 解决突破实际上是超级具有挑战性的｡ 

01:18.930 --> 01:24.210
请记住, 在宣传视频中, 我们想把突破作为第一个模块, 因为我们认为这将是最简单的挑战,

01:24.210 --> 01:26.490
但根本不是｡

01:26.490 --> 01:28.680
这其实是最难的挑战｡ 

01:28.710 --> 01:35.460
一个简单的解释是, 在厄运中, 怪物很大, 因此更容易被发现,

01:35.460 --> 01:37.560
因此更容易杀死或避免｡

01:37.560 --> 01:44.850
但在突破时, 我们有一个人工智能也必须检测到的小球, 因为人工智能在这里仍然有眼睛｡

01:44.850 --> 01:47.640
我们还是要做深度强化学习｡ 

01:47.640 --> 01:55.740
所以这实际上是非常具有挑战性的, 这就是为什么我们没有选择来实现三个C语言中最强大的版本｡

01:55.770 --> 01:58.980
现在, 为什么我说这是最强大的版本？

01:58.980 --> 02:00.240
那是有原因的

02:00.240 --> 02:06.330
我并不是说我要实现最强大的3C版本, 现在不是这个了｡

02:06.330 --> 02:11.490
我这么说的原因是我们要实现的版本,

02:11.490 --> 02:18.030
这是我们要做的非常特别的东西, 实际上是C语言的一个版本, 它是由某人实现的,

02:18.030 --> 02:24.300
但被当今机器学习领域最有影响力的人之一修正了, 他碰巧是PyTorch的创造者｡

02:24.600 --> 02:26.790
他叫亚当·帕克｡ 

02:27.420 --> 02:33.120
现在我们要做的是, 我们要进入GitHub的PyTorch主页, 如果你向下滚动,

02:33.120 --> 02:40.560
向下滚动到最后, 向下滚动到底部, 你会看到团队, PyTorch的创建者和贡献者的团队｡

02:40.560 --> 02:45.390
你可以看到PyTorch目前由Adam Pascal维护｡ 

02:45.420 --> 02:53.040
这就是我们应该真正感谢的人, 因为很少有三个关键的版本, 以及工作的突破｡

02:53.040 --> 02:58.020
他更正了RC的一个代码, 使突破工作得很好｡ 

02:58.170 --> 03:03.450
因此, 亚当·帕斯卡不仅是维护PyTorch, 而且他是创造性的PyTorch之一｡ 

03:03.630 --> 03:07.980
就像我今天说的, 他是机器学习领域十大最有影响力的人物之一｡ 

03:07.980 --> 03:14.670
所以我们可以有信心地认为, 我们即将实现的版本可能是当今三C中功能最强大的版本｡

03:14.970 --> 03:17.490
那么这个实现是什么呢？

03:17.490 --> 03:22.900
它最初来自一个叫伊利亚·斯托伊奇科夫的开发商｡ 

03:22.920 --> 03:29.310
正如你所看到的, 他用PyTorch实现了a3c, 最初它并不适用于breakout,

03:29.310 --> 03:32.820
但后来有人提出了pull请求｡

03:32.820 --> 03:38.670
如果我们转到这里的拉取请求, 我们可以看到在接近的一个, 我们去, 我们有这个,

03:38.670 --> 03:40.950
一个更干净的解决方案毕业的问题｡

03:40.950 --> 03:43.560
猜猜这个泳池申请是谁提出的？

03:43.770 --> 03:47.220
它是由PyTorch的创造者亚当·帕斯卡制造的｡ 

03:47.220 --> 03:54.480
这就解决了使人权委员会在突破上工作得很好的问题, 而不需要等待一天又一天｡

03:54.930 --> 04:01.470
因此, 如果我们回到这个实现, 我们可以看到这个最强大的实现的四个贡献者,

04:01.470 --> 04:04.410
这里是贡献者｡

04:04.410 --> 04:06.450
所以非常感谢他们所有人｡ 

04:06.450 --> 04:12.570
我们要特别感谢亚当·帕施克修正了梯度共享问题｡ 

04:12.570 --> 04:18.030
他首先做了一个fork, 这是代码的一个子分支,

04:18.030 --> 04:25.080
然后他向开发者做了一个pull请求来修复代码中的这个问题, 这是一个很好的共享问题, 这就是他如何成为这个实现的主要贡献者,

04:25.080 --> 04:30.210
使整个事情完美地运行｡

04:30.450 --> 04:34.290
相信我, 我在3C模型上做了很多实验｡ 

04:34.350 --> 04:36.240
我实际上实现了五个模型｡ 

04:36.240 --> 04:40.920
我甚至绝望, 它没有工作得很好, 所以我做了我自己的突破曲线有一个更大的球,

04:40.920 --> 04:44.070
因此更容易预处理的图像｡

04:44.070 --> 04:53.220
然后我又回到了开放API, 并制作了我自己的HRC实现, 但这需要很长时间才能在一台相当强大的计算机上运行和训练｡

04:53.220 --> 04:56.760
所以我想找到一个更好的方法, 这就是它的方式｡ 

04:56.760 --> 04:59.820
这是a3c模型的一个非常强大的实现｡ 

05:00.130 --> 05:04.090
其中一个主要贡献者是PyTorch的创建者｡ 

05:04.300 --> 05:13.800
在本模块中, 我想大家已经准备好了, 我们要做的是实现RC的最高级别代码｡

05:13.810 --> 05:19.660
因此, 我们基本上将重新实现所有这些文件,

05:19.660 --> 05:24.410
并且我们将主要坚持使用与RC直接相关的文件作为与RC直接相关的所有部件｡

05:24.430 --> 05:27.670
我们将逐行实现其他代码｡ 

05:27.670 --> 05:29.220
我将解释代码｡ 

05:29.230 --> 05:33.460
因此, 我们应该能够解决这个问题, 而不会觉得它太压倒性｡ 

05:33.580 --> 05:34.560
好了, 我们走吧｡ 

05:34.570 --> 05:36.040
相当特别的模块｡ 

05:36.040 --> 05:41.650
我们不仅致力于最先进的人工智能模型, 而且在我发言的时候,

05:41.650 --> 05:45.550
我非常有信心我们正在实现最强大的RC版本｡

05:45.820 --> 05:46.890
那就开始吧｡ 

05:46.900 --> 05:50.230
让我们回到Python, 开始这一切｡ 

05:50.500 --> 05:56.770
在开始之前, 我们将执行本模块中最简单的操作, 即设置工作目录文件夹｡

05:56.860 --> 05:59.580
现在, 让我们转到A-Z模板文件夹｡ 

05:59.590 --> 06:03.700
第三单元, 拿出最具挑战性的一个, 我们开始吧｡ 

06:03.700 --> 06:05.050
这是我们所有的文件｡ 

06:05.050 --> 06:14.200
让我们看看哪些是与a3c直接相关的, 哪些是我们要逐行实现的, 并将精力集中在上面｡

06:14.590 --> 06:16.270
所以实际上有两个文件｡ 

06:16.270 --> 06:19.390
第一个是在PI建模的, 就是这个｡ 

06:19.390 --> 06:22.840
因此, 我们将逐行重新实现它, 因为这是最重要的｡ 

06:22.840 --> 06:25.330
那是我们制造三个关键大脑的地方

06:25.330 --> 06:30.550
这里最重要的是, 我们将有一个共享的模型,

06:30.550 --> 06:34.150
它将对演员和评论家的权重进行相同的更新｡

06:34.150 --> 06:39.550
这是RC的特殊版本的一部分, 共享模型, 共享权重的更新｡

06:39.880 --> 06:51.160
然后我们将逐行实现的另一个最重要的文件是PI掉下来的火车, 当然是在我们制作RC的大脑之后｡

06:51.280 --> 06:55.870
我们必须训练他们, 我们训练他们在这列火车上, 在PI文件中｡ 

06:55.870 --> 07:02.410
这是一段很长的代码, 但这是a3c模型的核心,

07:02.410 --> 07:09.010
它会有两个损失来减少价值损失, 一个是与评论家的预测有关的损失, 另一个是政策损失,

07:09.010 --> 07:14.590
最后一个与参与者的预测有关｡

07:14.590 --> 07:15.700
所以这是相当新的｡ 

07:15.700 --> 07:23.050
但你知道, 那是因为在a3t中, 我们基本上是与几个代理一起工作, 每个代理都有自己的环境副本｡

07:23.050 --> 07:31.270
但我们也有一个完全连接的层, 它输出V函数的值, 这基本上是对游戏中发生的事情的一个共同看法｡

07:31.270 --> 07:34.060
所以这将是相当具有挑战性的｡ 

07:34.060 --> 07:38.170
所以一定要保持良好的状态, 并为其余的文件｡ 

07:38.170 --> 07:43.210
好吧, 我只会详细解释, 但不会花太多时间｡ 

07:43.210 --> 07:45.670
相信我, 你要保持你的能量为这个｡ 

07:45.670 --> 07:47.020
这就已经很多了｡ 

07:47.020 --> 07:55.330
所以这些文件是针对PI的, 这是一个改善健身房环境感谢宇宙｡ 

07:55.330 --> 08:00.880
因此, 基本上,

08:00.880 --> 08:07.090
该文件只是利用Universe改善了健身房环境, 并且允许对图像进行最佳预处理, 并且还对环境的所有值进行归一化,

08:07.090 --> 08:10.030
例如颜色强度或奖励强度｡

08:10.030 --> 08:12.070
嗯, 环境的所有价值观｡ 

08:12.070 --> 08:17.890
这个文件规范化所有这些值, 并确保我们有一个最佳的图像预处理｡ 

08:17.890 --> 08:24.610
正如你所看到的, 这是从这个开放的GitHub页面, 在那里宇宙存储代理｡ 

08:24.610 --> 08:27.340
所以我们不会在这方面花太多时间｡ 

08:27.340 --> 08:28.720
我们就到这里吧｡ 

08:28.720 --> 08:36.220
你只需要知道我们用Universe改善了健身房的环境, 以获得图像的最佳预处理｡

08:36.220 --> 08:39.520
剩下的就没那么重要了, 尤其是对C三来说｡ 

08:40.120 --> 08:45.040
然后是主API, 它是执行整个过程的代码｡ 

08:45.040 --> 08:50.140
所以你知道运行整个程序的代码, 创建大脑, 训练大脑, 输出视频｡

08:50.140 --> 08:53.680
因为它会运行所有这些代码｡ 

08:54.070 --> 08:56.710
所以我们看到了当时模型

08:56.710 --> 09:00.130
我的最优pi是一个特殊的优化器｡ 

09:00.130 --> 09:06.070
这基本上就是原子优化器, 但要使其适应我们正在实现的共享模型｡ 

09:06.070 --> 09:08.860
因此, 我们将在一个教程中解释所有这些代码｡ 

09:09.040 --> 09:11.380
然后我们测试圆周率｡ 

09:11.410 --> 09:12.790
这是最后一个了｡ 

09:12.790 --> 09:17.290
因此, test pi基本上是实现测试代理的文件｡ 

09:17.290 --> 09:22.270
这是一个代理, 将发挥突破, 而不更新模型｡ 

09:22.270 --> 09:24.670
所以这完全独立于训练｡ 

09:24.670 --> 09:27.370
我们还将详细解释这段代码｡ 

09:27.370 --> 09:33.550
此外, 好消息是, 您将有两个代码一个代码, 这将是我们在教程中实现的代码,

09:33.550 --> 09:36.010
但没有任何注释｡

09:36.010 --> 09:41.860
其中一个代码文件夹包含了所有的命令代码,

09:41.860 --> 09:50.950
所以这六个文件都是命令文件, 所以如果你错过了教程中的内容, 你可以查看代码中的命令来了解发生了什么｡

09:50.950 --> 09:51.970
好了, 我们走吧｡ 

09:51.970 --> 09:54.340
我希望您对实现这一点感到兴奋｡ 

09:54.340 --> 09:59.530
你现在真的是在山顶上, 或者只是在山顶之下, 因为你需要首先理解这一点｡

10:00.010 --> 10:02.860
你要去那里好好呼吸一下氧气｡ 

10:02.860 --> 10:05.410
我们开始了这段激动人心的旅程｡ 

10:05.470 --> 10:06.810
在那之前, 好好享受吧｡ 

10:06.820 --> 10:07.360
一､ 
