WEBVTT

00:00.360 --> 00:02.700
大家好, 欢迎学习本教程｡ 

00:02.850 --> 00:06.940
好了, 现在我们要从头开始实现我们的人工智能｡ 

00:06.960 --> 00:08.790
我们将逐行调用它｡ 

00:08.790 --> 00:12.300
在第一段代码中, 我们将导入库｡ 

00:12.300 --> 00:20.310
但是在我们开始第一段代码之前, 我想解释一下AI和我们的地图P文件之间的联系｡

00:20.340 --> 00:23.940
也就是说, 我们为什么要为地图实现这一点？

00:23.940 --> 00:27.620
人工智能的用途是什么？我们将在哪里使用它？

00:27.630 --> 00:29.940
所以这其实很简单｡ 

00:29.940 --> 00:39.030
我们只是让我们的人工智能在每次选择正确的动作, 所以我们从我们的人工智能文件导入类中｡

00:39.030 --> 00:49.560
因此, 我们将在此文件中创建此文档类, 但导入它只是为了每次选择要播放的正确操作｡

00:49.590 --> 00:52.830
我们在这一行选择这个动作｡ 

00:52.860 --> 00:54.900
行动等于大脑更新｡ 

00:54.900 --> 00:56.910
少了奖励, 少了信号｡ 

00:56.940 --> 01:00.510
较少的信号将是神经网络的输入｡ 

01:00.930 --> 01:05.880
它由传感器的三个信号组成, 加上方向和减去方向｡ 

01:05.880 --> 01:07.170
这就是输入｡ 

01:07.170 --> 01:14.670
但输出就是要玩的动作, 这只是我们从我们的我觉得我们要做的事情中得到的｡

01:15.060 --> 01:16.230
所以请记住这一点｡ 

01:16.230 --> 01:17.340
这很简单｡ 

01:17.340 --> 01:26.130
我们首先从人工智能中导入类, 然后从文档类中创建对象大脑, 它将五个维度状态的编码向量作为输入,

01:26.130 --> 01:33.570
即三个信号加上方向加上方向减去方向｡

01:33.570 --> 01:36.810
这三个动作是向左､ 直行或向右｡ 

01:36.810 --> 01:42.210
然后这个gamma参数, 是我们要创建的类的唯一参数｡ 

01:42.210 --> 01:49.950
一旦我们创建了这个对象, 我们就在游戏类中选择每次要玩的动作｡ 

01:49.950 --> 01:53.670
这取决于最后的奖励和最后的信号, 也就是输入｡ 

01:53.670 --> 02:00.990
这就是制作这个人工智能的唯一目的, 为了让一个真实的人工智能做出正确的动作, 每次都是正确的动作,

02:00.990 --> 02:07.830
而不是像我们在上一个教程中观察到的那样随机动作｡

02:08.340 --> 02:09.600
好吧, 我们开始吧｡ 

02:09.600 --> 02:12.510
让我们实现我们的人工智能｡ 

02:12.510 --> 02:18.210
如前所述, 我们将从导入用于实现它的所有库开始｡

02:18.210 --> 02:20.760
这样我们就有了所有需要的工具｡ 

02:21.000 --> 02:21.330
好吧, 我会的

02:21.330 --> 02:22.680
让我们从第一个开始｡ 

02:22.680 --> 02:25.830
第一个是必然的｡ 

02:25.830 --> 02:27.360
NumPy库｡ 

02:27.360 --> 02:28.710
NumPy库｡ 

02:28.710 --> 02:30.630
我总是建议导入它｡ 

02:30.630 --> 02:35.160
它是一个库, 允许我们使用数组｡ 

02:35.370 --> 02:39.900
这里的这个和B只是一个快捷方式, 当我们想用numpy的时候更方便｡ 

02:40.380 --> 02:41.220
好吧, 那么｡ 

02:41.220 --> 02:43.800
第二个库是随机的｡ 

02:43.800 --> 02:51.690
这只是因为我们在实现体验回放时将从不同批次中随机抽取一些样本｡

02:51.690 --> 02:54.210
所以我们还得导入这个随机库｡ 

02:54.630 --> 02:58.070
然后我们将导入OSS｡ 

02:58.080 --> 03:03.210
这在我们想要加载模型时非常有用, 因为您知道,

03:03.210 --> 03:08.610
一旦模型准备就绪, 我们将执行一些代码来保存模型, 然后执行另一个代码来加载模型｡

03:08.610 --> 03:13.950
这时候我们就想, 你知道, 保存大脑, 加载大脑,

03:13.950 --> 03:18.810
每当你想关闭你的电脑, 重新使用之前训练过的大脑进行一些新的实验｡

03:18.960 --> 03:20.160
所以这很重要｡ 

03:20.460 --> 03:27.090
然后我们要导入火炬库必备｡ 

03:27.090 --> 03:32.130
这是因为我们将使用PyTorch来实现我们的神经网络, 我推荐使用PyTorch, 因为它可以处理动态图,

03:32.130 --> 03:36.450
比其他人工智能的神经网络要多得多｡

03:36.450 --> 03:37.920
所以我们用火炬｡ 

03:38.310 --> 03:44.880
然后, 从Torch导入Torch DOT和NW｡ 

03:44.970 --> 03:47.280
NW模块是最基本的模块｡ 

03:47.280 --> 03:51.510
这个模块包含了实现神经网络的所有工具｡ 

03:51.510 --> 03:57.300
当然, 还有一个深层神经网络, 它将三个传感器的三个信号作为输入,

03:57.300 --> 04:03.870
加上方向和减去方向, 并将返回动作作为输出, 以发挥好, 实际上,

04:03.870 --> 04:07.440
它将返回不同动作的Q值｡

04:07.440 --> 04:15.030
使用软最大值, 我们将返回动作, 只玩一个, 最相关的一个完成课程目标｡

04:15.030 --> 04:17.640
所以托尔斯滕是最重要的一个｡ 

04:17.910 --> 04:24.300
然后我们要给予函数式一个捷径｡ 

04:25.430 --> 04:29.720
我们从这里开始, PN模块中的功能包｡ 

04:29.720 --> 04:36.080
所以这个函数包包含了我们在实现神经网络时使用的不同函数｡ 

04:36.080 --> 04:42.170
通常, 最后一个功能我们将使用Uber plus,

04:42.170 --> 04:47.000
因为它可以提高收敛性, Uber损失包含在GN模块的这个功能子模块中｡

04:47.000 --> 04:53.600
因为这些都很长, 我们给予它一个捷径, 我们简单地称它为F｡ 

04:54.210 --> 04:57.050
然后只剩下三个模块要导入｡ 

04:57.060 --> 05:02.430
所以下一个是另一个重要的, 是上升的｡ 

05:02.430 --> 05:06.720
蒂姆和我们把它从静止的火炬库然后向上｡ 

05:06.720 --> 05:08.280
蒂姆我们走吧｡ 

05:08.580 --> 05:10.650
让我们把它调出来｡ 

05:10.650 --> 05:15.150
而不是燃烧, 当然这是优化器的问题.

05:15.150 --> 05:21.570
我们将导入一些优化器来执行随机梯度下降, 所以我们肯定会需要它｡

05:21.570 --> 05:28.560
然后我们需要导入auto, 这只是从grad中取变量class｡ 

05:28.950 --> 05:31.380
所以它的目的有点技术性｡ 

05:31.410 --> 05:38.670
基本上, 我们需要导入变量类, 以进行一些转换,

05:38.670 --> 05:42.930
从像更高级的数组的传感器到包含梯度的变量｡

05:42.930 --> 05:46.470
这就像我们不想只有一个张量｡ 

05:46.470 --> 05:50.730
我们想把张量放进一个变量中, 这个变量也包含梯度｡ 

05:50.730 --> 05:58.230
要做到这一点, 我们需要使用变量类, 把这个张量转换成一个包含张量和梯度的变量｡

05:58.230 --> 06:02.460
所以这有点技术性, 但这是我们在使用PyTorch时必须做的｡ 

06:02.460 --> 06:08.010
这要归功于变量类,

06:08.160 --> 06:13.860
但是在得到变量类之前, 我们需要导入到R2的格拉德中, 我们也给予一个快捷方式｡

06:14.340 --> 06:17.310
本科毕业后又从｡ 

06:18.300 --> 06:21.060
亲笔签名的火炬｡ 

06:22.180 --> 06:25.240
我们进口排球｡ 

06:25.660 --> 06:26.410
我们走吧｡ 

06:26.410 --> 06:33.850
现在, 我们已经拥有了将用于实现API的所有库, 因此我们无需再导入任何其他库｡

06:33.850 --> 06:39.610
我们有了所有需要的工具, 现在我们准备好创建神经网络的架构了｡ 

06:39.760 --> 06:42.550
这正是我们在下一个教程中要做的｡ 

06:42.550 --> 06:43.900
在那之前, 好好享受吧｡ 

06:43.900 --> 06:44.470
一､ 
