WEBVTT

00:00.240 --> 00:05.250
大家好, 欢迎来到第二部分, 通过深度卷积学习训练人工智能｡ 

00:05.250 --> 00:06.090
没错, 我是说...

00:06.090 --> 00:11.460
现在我们已经用神经网络的架构､

00:11.460 --> 00:16.980
身体､ 动作的方式等等构建了人工智能, 现在是时候用深度卷积学习来训练这个人工智能了｡

00:16.980 --> 00:22.740
因此, 从现在开始, 我们将实施经验回放,

00:22.740 --> 00:28.950
处理线索值, 处理奖励, 甚至会有一个奖金, 这将大大改善训练过程,

00:28.950 --> 00:31.410
这就是所谓的资格跟踪｡

00:31.530 --> 00:38.940
资格追踪是一种强大的技术, 它包括在几个步骤中累积奖励, 并且在奖励的累积上学习线索值,

00:38.940 --> 00:44.700
而不是以前, 在每次转换之后学习线索值,

00:44.700 --> 00:50.250
因此, 在获得每个奖励之后,

00:50.250 --> 00:54.390
这次我们将在获得几个奖励而不是仅仅一个奖励之后学习线索值｡

00:54.390 --> 01:01.020
因此, 不是一个转换接一个转换, 每次都更新提示值,

01:01.020 --> 01:07.590
而是每和步更新一次提示值, 因为资格跟踪被称为和步资格跟踪, MN是这个数字,

01:07.590 --> 01:12.570
在此之后, 将更新提示值｡

01:12.570 --> 01:15.390
在我们的模型中我们会得到一个等于10的数｡ 

01:15.390 --> 01:20.910
这意味着我们将进行10步资格追踪, 因此, 在累积了这10步的奖励后,

01:20.910 --> 01:25.470
我们将每10步更新和学习一次提示值｡

01:25.470 --> 01:29.490
所以这是一个额外的好处, 它将使我们的模型更加强大｡ 

01:29.490 --> 01:33.000
而且你会看到, 最终我们会取得出色的成绩｡ 

01:33.000 --> 01:35.820
当我看到最后的结果时, 我真的很惊讶｡ 

01:35.820 --> 01:40.200
我曾经研究过一些需要花费大量时间才能执行的模型｡ 

01:40.200 --> 01:44.280
你知道, 人工智能花了很多时间来训练, 但你会看到这一点｡ 

01:44.280 --> 01:50.400
再加上我们制作的神经网络, 也就是我们的大脑和我们的身体, 麦克斯, 我们将得到一个非常强大的道德,

01:50.400 --> 01:56.460
因此非常强大的人工智能, 因为你会看到它会激进｡

01:56.490 --> 01:58.920
你明白我在说什么吗？

01:59.100 --> 02:06.510
正如您在第二部分中所看到的, 我们从获取Doom环境开始, 我实际上为您准备了代码行｡

02:06.540 --> 02:12.690
我们只是使用工作目录文件夹中的图像预处理外部文件｡ 

02:12.690 --> 02:19.980
所以基本上顺序是先取这行代码, 吉姆, 使厚皮动物的代码为零｡ 

02:19.980 --> 02:24.270
所以毁灭代码0是我们所玩游戏的环境名称｡ 

02:24.270 --> 02:26.910
首先, 我们用这个导入环境｡ 

02:26.910 --> 02:35.250
你可以在开放的Jim教程中找到, 但是我们使用了这个预处理图像类, 它是一个从图像预处理到预处理图像的类, 这些图像将进入神经网络,

02:35.250 --> 02:42.300
我们对它们进行预处理, 使它们具有80 ×

02:42.300 --> 02:48.930
80的正方形格式｡

02:48.930 --> 02:56.400
这是因为在我们的神经网络中, 我们将输入图像的维数设置为1 × 80 ×

02:56.400 --> 03:00.360
80, 记住1是通道的数量｡

03:00.360 --> 03:03.360
这意味着我们在处理白色图像｡ 

03:03.420 --> 03:06.150
这就是这里的灰度｡ 

03:06.600 --> 03:14.670
80 × 80意味着我们输入图像的尺寸是80 × 80, 这就是我们在神经网络中设置的｡

03:14.670 --> 03:22.950
当然, 我们需要在输入图像时指定这一点, 这正是我们在这里对这个预处理图像类所做的｡

03:23.400 --> 03:32.250
然后在我们导入环境与正确格式的输入图像, 好吧, 我们导入整个游戏与视频与这行代码.

03:32.250 --> 03:37.650
记住, 最酷的一点是, 最后我们会看到我们的人工智能玩末日游戏的视频｡ 

03:37.650 --> 03:41.880
所以我们将看看它将如何杀死怪物, 试图达到背心和一切｡ 

03:41.910 --> 03:43.290
所以这将是超级令人兴奋的｡ 

03:43.290 --> 03:47.940
请记住, 这些视频将进入此视频文件夹｡ 

03:48.480 --> 03:49.050
好吧, 我会的

03:49.050 --> 03:52.980
这是最后一行, 但我想给你们看一下, 因为这很重要｡ 

03:52.980 --> 03:56.610
这与我们正在构建的人工智能有更大的关系｡ 

03:56.610 --> 04:02.610
记住, 我们的神经网络把动作数作为输入｡ 

04:02.610 --> 04:07.710
这是因为, 你知道, 我们想做一个人工智能, 我们可以很容易地测试在几个环境,

04:07.710 --> 04:09.390
在几个厄运环境｡

04:09.390 --> 04:15.040
因为不同的毁灭环境有不同的动作数量, 我们把这个动作数量变量指定为CNN的输入,

04:15.060 --> 04:19.080
大脑｡

04:19.080 --> 04:29.040
因此, 现在我们要做的是使用刚刚导入并创建到该变量中的末日环境来获得该number actions变量｡

04:29.040 --> 04:34.410
稍后我们要创建的这个数字动作变量将成为大脑的输入｡ 

04:34.620 --> 04:35.820
所以我们开始吧｡ 

04:35.820 --> 04:40.230
我引入了这个真实的变量的动作｡ 

04:40.230 --> 04:42.420
所以动作数等于｡ 

04:42.450 --> 04:45.630
现在, 我们将采用厄运环境｡ 

04:45.630 --> 04:47.730
这是我们创建的变量｡ 

04:47.880 --> 04:52.590
所以在这个环境下, 我们在这里加上一个点, 然后我们开始｡ 

04:52.590 --> 04:54.780
我们先在这里采取行动空间｡ 

04:54.780 --> 04:56.970
这就是你的行动｡ 

04:56.970 --> 04:59.910
我鼓励你去看看这个开场白｡ 

05:00.060 --> 05:05.430
去看看它是如何工作的, 你知道, 去了解露天健身房的环境是如何工作的｡ 

05:05.430 --> 05:07.800
但基本上这是一套动作｡ 

05:07.800 --> 05:12.750
从这一组动作中, 我们可以访问环境中的动作数量｡ 

05:12.750 --> 05:21.000
为了做到这一点, 我们在这里加上DN, 是动作的个数, 因此doom,

05:21.000 --> 05:23.790
动作空间n会返回7｡

05:23.790 --> 05:26.520
它将返回7, 因为有7个操作｡ 

05:26.520 --> 05:32.250
我知道我们可以在第一页看到厄运环境中的六个动作, 但我认为我们也可以跑, 所以我们可以向前,

05:32.250 --> 05:38.820
向左, 向右, 向左, 向右, 然后射击｡

05:38.820 --> 05:39.990
而且我们还能跑｡ 

05:39.990 --> 05:41.370
所以一共有七个动作｡ 

05:42.140 --> 05:42.520
好吧, 我会的

05:42.530 --> 05:48.350
这就是我们得到的末日环境, 末日环境中我们有行动的数量｡

05:48.350 --> 05:52.640
所以到目前为止, 我们已经拥有了大脑所需要的一切｡ 

05:52.640 --> 05:58.220
然后我们创建一个对象, 一个大脑对象, 我们称之为CNN和最小字母｡ 

05:58.220 --> 06:03.860
由于init函数将许多操作作为参数, 因此,

06:03.860 --> 06:06.890
我们将在将要创建的CNN对象中输入操作的数量｡

06:07.310 --> 06:11.630
当然, 我们会创造身体, 最终死去｡ 

06:11.630 --> 06:18.940
这就是为什么下一节, 我将称之为构建人工智能, 因为现在我们可以构建我们想要的任意多的眼睛｡

06:18.950 --> 06:21.950
这就是面向对象编程的美妙之处｡ 

06:21.950 --> 06:31.370
我们可以根据自己的需要构建任何眼睛, 所以我们要构建一个拥有复杂大脑的人工智能, 这正是我们在下一个教程中要做的｡

06:31.670 --> 06:32.930
在那之前, 好好享受吧｡ 

06:32.930 --> 06:33.320
一､ 
