WEBVTT

00:00.390 --> 00:02.370
Xin chào và chào mừng đến với hướng dẫn này.

00:02.490 --> 00:04.470
Bây giờ chúng ta có bộ não của mô hình.

00:04.500 --> 00:06.170
Chúng tôi cũng có trình tối ưu hóa.

00:06.180 --> 00:09.810
Vì vậy, về cơ bản, chúng tôi đã sẵn sàng đào tạo các đặc vụ khác nhau của mình.

00:09.810 --> 00:11.520
Đó là bộ não khác nhau của chúng ta.

00:11.520 --> 00:18.180
Vì vậy, đó là từ bây giờ chúng ta sẽ tạo ra hàm tàu lớn này sẽ chứa tất cả các thuật toán a3c.

00:18.180 --> 00:25.080
Và do đó, những gì chúng ta sắp thực hiện trong chuyến tàu này, tệp P đó chỉ là hàm tàu lớn này.

00:25.080 --> 00:29.220
Họ sẽ chỉ là chức năng tàu lớn này, không có gì khác, không có lớp học.

00:29.220 --> 00:33.840
Nhưng chúng tôi sẽ sử dụng chức năng đào tạo này trong bước cuối cùng của mô-đun này với mã chính.

00:33.840 --> 00:34.850
Vậy là xong.

00:34.860 --> 00:39.000
Nhưng trước khi chúng tôi bắt đầu, bạn có thể nhận thấy rằng, tốt, trước tiên chúng tôi nhập một số thư viện.

00:39.000 --> 00:44.700
Vì vậy, đó là các thư viện cổ điển với mô-đun ngọn đuốc, ý tôi là thư viện ngọn đuốc, sau

00:44.700 --> 00:48.900
đó là thư viện cuối để tạo môi trường Atari, sẽ là đột phá.

00:48.900 --> 00:55.710
Sau đó, tất nhiên chúng tôi sẽ nhập lớp đang hoạt động của chúng tôi từ tệp mô hình này.

00:56.130 --> 01:03.960
Và cuối cùng, chúng tôi sẽ sử dụng biến từ torch undergrad để chạy các tính toán hiệu suất cao của gradient nhờ

01:03.960 --> 01:05.550
các đồ thị động.

01:05.730 --> 01:11.880
Và sau đó, chúng tôi có chức năng này đảm bảo chia sẻ grats mà tôi không muốn dành quá nhiều thời gian cho việc này

01:11.880 --> 01:17.550
bởi vì trước tiên đây chỉ là một chức năng sẽ đảm bảo mọi thứ hoạt động chính xác nếu mô hình được đại

01:17.550 --> 01:20.250
lý sử dụng không có bất kỳ chia sẻ nào dốc.

01:20.250 --> 01:22.980
Vì vậy, đó là lý do tại sao nó được gọi là ensure shared grats.

01:22.980 --> 01:27.870
Và lý do khác là tôi không nghĩ rằng chức năng này là cần thiết, nhưng chúng ta không bao giờ biết.

01:27.870 --> 01:32.820
Và ít nhất với điều này sẽ chắc chắn 100% rằng mã sẽ thực thi đúng cách.

01:32.820 --> 01:34.620
Nhưng điều đó không thực sự quan trọng.

01:34.620 --> 01:40.410
Những gì chúng ta phải tập trung vào là chức năng đào tạo này mà chúng ta sẽ bắt đầu thực hiện ngay bây giờ.

01:40.770 --> 01:44.280
Vì vậy, chúng tôi bắt đầu, Dev và đào tạo.

01:44.280 --> 01:45.960
Chúng tôi sẽ gọi nó đơn giản là tàu hỏa.

01:45.960 --> 01:48.720
Và hàm train này sẽ nhận một số đối số.

01:48.810 --> 01:50.220
Đầu tiên là thứ hạng.

01:50.220 --> 01:52.440
Tôi sẽ giải thích nó là gì trong phần thứ hai.

01:52.710 --> 01:59.670
Tham số thứ hai là tham số để tất cả các tham số của môi trường, sau đó tham số

01:59.670 --> 02:02.640
thứ ba sẽ được chia sẻ mô hình.

02:02.910 --> 02:08.910
Vì vậy, bạn biết đấy, mô hình được chia sẻ là những gì đại lý sẽ nhận được để thực hiện khám phá nhỏ của mình trên một

02:08.910 --> 02:09.990
số bước nhất định.

02:10.410 --> 02:14.910
Và cuối cùng, đối số cuối cùng sẽ là trình tối ưu hóa.

02:14.910 --> 02:16.980
Đó là một trong những chúng tôi đã thực hiện trước đó.

02:17.620 --> 02:18.480
Rất hoàn hảo.

02:18.490 --> 02:19.930
Đó là bốn lập luận của chúng tôi.

02:19.930 --> 02:23.870
Và bây giờ chúng tôi đã sẵn sàng để bắt đầu thực hiện chức năng tàu này.

02:23.890 --> 02:28.840
Vì vậy, điều đầu tiên chúng ta sẽ làm là, bạn biết đấy, bạn nhớ a3c là viết tắt của gì.

02:28.840 --> 02:32.320
Nó là viết tắt của một tác nhân phê bình tích cực đồng bộ.

02:32.320 --> 02:34.780
Vì vậy, trong a3c, có một đồng bộ.

02:34.780 --> 02:40.900
Vì vậy, như bạn đã hiểu, chúng tôi phải đồng bộ hóa từng tác nhân huấn luyện và để đồng bộ hóa chúng,

02:40.900 --> 02:45.460
chúng tôi sẽ sử dụng thứ hạng để chuyển từng hạt giống với thứ hạng này.

02:45.460 --> 02:52.030
Vì vậy, tham số thứ hạng này ở đây chỉ là thay đổi hạt giống để mỗi tác nhân đào tạo được đồng bộ hóa.

02:52.360 --> 02:59.200
Vì vậy, ví dụ, nếu có n nhân viên đào tạo, thì các cấp bậc sẽ đi từ một đến N và sẽ có

02:59.200 --> 03:02.360
một số nguyên cho mỗi đại lý từ một đến n.

03:02.380 --> 03:08.800
Vì vậy, khi chúng ta chuyển hạt giống theo một chuỗi, tất cả các số giả ngẫu nhiên được tạo bởi chuỗi sẽ hoàn

03:08.800 --> 03:10.990
toàn độc lập với các chuỗi khác.

03:11.320 --> 03:18.550
Tuy nhiên, hạt giống là những con số cố định, vì vậy khi chúng ta tái tạo trải nghiệm, chúng ta sẽ tìm thấy chính xác những

03:18.550 --> 03:23.440
sự kiện giống nhau và đó là bởi vì nó có tính xác định đối với hạt giống.

03:23.440 --> 03:25.390
Vì vậy, điều quan trọng là phải hiểu điều đó.

03:25.390 --> 03:31.510
Và đó là lý do tại sao điều đầu tiên chúng ta cần làm là đồng bộ hóa từng tác nhân đào tạo bằng cách sử dụng

03:31.510 --> 03:34.120
cấp bậc ở đây để chuyển hạt giống với cấp bậc.

03:34.120 --> 03:35.020
Vì vậy, chúng ta hãy làm điều này.

03:35.020 --> 03:38.710
Để làm điều đó, chúng tôi sẽ sử dụng thư viện ngọn đuốc của chúng tôi.

03:39.010 --> 03:45.250
Sau đó, chúng ta sẽ lấy hạt giống bằng dấu gạch dưới thủ công, dấu ngoặc đơn hạt giống.

03:45.250 --> 03:46.420
Đây là một chức năng.

03:46.420 --> 03:53.020
Và bây giờ chúng ta sẽ lấy hạt giống của tất cả các tác nhân mà chúng ta có thể truy cập bằng params dot seed và

03:53.020 --> 03:56.620
thay đổi chúng theo thứ hạng để đồng bộ hóa từng tác nhân này.

03:56.620 --> 03:59.650
Chúng tôi sẽ chỉ thêm ở đây cộng với thứ hạng.

04:00.340 --> 04:07.390
Và điều đó sẽ thay đổi hạt giống có cấp bậc để tước quyền của mỗi đại lý đào tạo vì có một hạt giống

04:07.390 --> 04:09.370
cho mỗi đại lý đào tạo.

04:09.820 --> 04:11.380
Được rồi, điều đầu tiên đã xong.

04:11.380 --> 04:13.090
Và bây giờ là bước tiếp theo.

04:13.090 --> 04:15.310
Bước tiếp theo là lấy môi trường.

04:15.310 --> 04:20.770
Vì vậy, chúng ta sẽ tạo một biến mới mà chúng ta sẽ gọi là env và bây giờ

04:20.770 --> 04:25.990
chúng ta sẽ sử dụng hàm create Atari end từ mô-đun cuối để tạo môi trường cho breakout.

04:25.990 --> 04:27.930
Đó là để có được môi trường của sự đột phá.

04:27.940 --> 04:33.460
Vì vậy, chúng tôi sử dụng chức năng này, tạo Atari và.

04:34.040 --> 04:39.680
Và bây giờ chúng ta chỉ phải nhập một đối số, là các tham số của môi trường và chúng ta có chúng

04:39.680 --> 04:42.550
vì đây là một trong những đầu vào của hàm train.

04:42.560 --> 04:47.270
Đây là tham số này sẽ là tham số của môi trường breakout.

04:47.270 --> 04:54.920
Và do đó để có được môi trường đột phá, chúng tôi lấy đối số tham số này, sau đó chấm và sau

04:54.920 --> 05:01.910
đó chúng tôi nhận được tên env mà trong tương lai nằm trong mã tiếp theo với hàm chính sẽ thực

05:01.910 --> 05:05.020
thi toàn bộ mã sẽ là năm đột phá.

05:05.850 --> 05:06.180
Được rồi.

05:06.180 --> 05:08.940
Vì vậy, điều đó mang lại cho chúng tôi môi trường hoàn hảo.

05:09.330 --> 05:15.810
Và bây giờ bước tiếp theo là sắp xếp hạt giống của môi trường trên một trong các tác nhân.

05:15.900 --> 05:17.340
Và tại sao chúng tôi làm điều đó?

05:17.370 --> 05:24.150
Đó là bởi vì, hãy nhớ rằng, mỗi tác nhân của mô hình a3c có tầm nhìn riêng về môi trường, giống như bản sao

05:24.150 --> 05:25.770
môi trường của chính nó.

05:25.770 --> 05:31.890
Và do đó, chúng ta cần sắp xếp từng tác nhân trên một phiên bản môi trường cụ thể.

05:31.890 --> 05:37.230
Và để làm điều đó, chúng ta sẽ sử dụng hạt giống vì mỗi hạt giống xác định một môi trường cụ thể.

05:37.230 --> 05:42.060
Vì vậy, bằng cách liên kết một hạt giống khác nhau cho mỗi tác nhân, chúng ta sẽ nhận được chính xác những gì chúng ta muốn.

05:42.090 --> 05:45.960
Đó là mỗi đại lý sẽ có môi trường riêng.

05:46.350 --> 05:47.730
Và vì vậy làm thế nào chúng ta có thể làm điều đó?

05:47.730 --> 05:55.740
Chúng ta có thể lấy môi trường của chúng ta, sau đó thêm nó, sau đó sử dụng chức năng hạt giống để chọn hạt giống mà chúng ta

05:55.740 --> 05:57.270
muốn lấy cho môi trường.

05:57.270 --> 06:02.460
Và bây giờ để sắp xếp hạt giống của môi trường với hạt giống của tác nhân, chúng ta

06:02.460 --> 06:10.380
chỉ cần lấy nó vì nó tương ứng với hạt giống của tác nhân đã được chuyển đổi nhờ cấp bậc để có được tác nhân đào tạo đồng bộ

06:10.380 --> 06:13.800
này bởi vì họ tất cả trên các hạt giống khác nhau.

06:13.950 --> 06:16.350
Vì vậy, chúng ta chỉ cần đặt nó ở đây.

06:16.350 --> 06:20.220
Và điều này sẽ sắp xếp hạt giống của môi trường với một trong những tác nhân.

06:20.970 --> 06:21.530
Được chứ.

06:21.990 --> 06:26.940
Bây giờ chúng ta sẽ lấy mô hình của chúng ta, đó là ba bộ não quan trọng của chúng ta.

06:26.940 --> 06:32.070
Và đó là bây giờ chúng ta sẽ sử dụng lớp phê bình tích cực từ tệp mô hình của chúng ta.

06:32.070 --> 06:38.970
Vì vậy, về cơ bản chúng ta sẽ tạo một đối tượng của lớp diễn viên này và chúng ta sẽ gọi đây là mô hình đối

06:38.970 --> 06:40.950
tượng hoặc bộ não, nếu bạn muốn.

06:40.950 --> 06:47.190
Nhưng về cơ bản đối tượng này sẽ chứa tất cả các chập, STM, kết nối đầy đủ tuyến tính và chức

06:47.190 --> 06:49.350
năng chuyển tiếp để truyền tín hiệu.

06:49.350 --> 06:55.590
Vì vậy, về cơ bản nó sẽ chứa bộ não của diễn viên và nhà phê bình với khả năng truyền tín hiệu

06:55.590 --> 06:58.590
khắp bộ não để có được đầu ra cuối cùng.

06:59.010 --> 07:00.000
Vì vậy, chúng ta hãy làm điều này.

07:00.000 --> 07:02.520
Hãy tạo mô hình của chúng tôi.

07:02.520 --> 07:06.570
Vì vậy, như chúng tôi đã nói, chúng tôi muốn gọi đây là mô hình đối tượng.

07:06.900 --> 07:14.940
Và do đó, chúng tôi tạo một đối tượng của lớp hành động và do đó chúng tôi lấy lớp, tác nhân, nhà phê bình của mình, và bây giờ nhớ

07:14.940 --> 07:17.130
những đối số nào chúng tôi cần nhập.

07:17.130 --> 07:22.350
Đó thực sự là các đối số của hàm init nên chúng ta không cần phải nhập nó vào.

07:22.560 --> 07:26.250
Đó là những gì chúng ta phải làm để sử dụng đối tượng trong phương thức init.

07:26.250 --> 07:31.500
Nhưng sau đó các đối số mà chúng ta phải nhập là đầu vào nom là hình dạng đầu vào.

07:31.500 --> 07:37.770
Đó là kích thước của đầu vào, hình ảnh của chúng tôi và không gian hành động chứa tập hợp các hành động, bạn

07:37.770 --> 07:38.460
biết đấy.

07:38.460 --> 07:42.480
Vì vậy, hãy nhập các đối số này trong hàm train.

07:42.480 --> 07:49.770
Vì vậy, điều đầu tiên, chúng tôi có thể lấy nó bằng môi trường của chúng tôi và chấm và sau đó chúng tôi sử dụng không gian quan sát.

07:50.980 --> 07:56.800
Vì vậy, đó là không gian của các quan sát sau đó dut và sau đó để có được số lượng đầu vào mà chúng ta có được hình dạng.

07:57.470 --> 07:58.970
Dấu ngoặc nhọn số 0.

07:59.000 --> 07:59.390
Được rồi.

07:59.390 --> 08:01.010
Vì vậy, đó là bốn đầu vào tê liệt.

08:01.010 --> 08:04.550
Và bây giờ là không gian hành động.

08:04.580 --> 08:06.080
Chà, điều đó cũng gần giống nhau.

08:06.080 --> 08:09.620
Nhưng chúng ta cần lấy nó từ môi trường của chúng ta mà chúng ta được nhập khẩu.

08:09.620 --> 08:11.900
Sau đó dut và sau đó là không gian hành động.

08:12.740 --> 08:13.160
Được rồi.

08:13.160 --> 08:17.770
Và điều đó cung cấp cho chúng ta các đối số mà chúng ta cần nhập khi tạo một đối tượng.

08:17.780 --> 08:20.030
Đạo đức của hành vi để tạo ra một giai cấp.

08:20.630 --> 08:25.000
Vì vậy, bây giờ chúng ta có mô hình của mình, và bây giờ bước tiếp theo là chuẩn bị trạng thái đầu vào của chúng ta.

08:25.010 --> 08:27.530
Vì vậy, hãy nhớ rằng, chúng tôi vẫn đang thực hiện học tập củng cố sâu.

08:27.530 --> 08:34.340
Vì vậy, các trạng thái đầu vào là các hình ảnh đầu vào và do đó đây ban đầu sẽ là một mảng numpy sẽ chứa một

08:34.340 --> 08:39.260
kênh vì chúng ta sẽ làm việc với các hình ảnh đen trắng và nó sẽ có kích thước

08:39.260 --> 08:40.580
là 42 x 42.

08:40.730 --> 08:46.250
Nhưng điều quan trọng là phải hiểu và ghi nhớ ở đây rằng các trạng thái đầu vào là hình ảnh đầu vào.

08:46.400 --> 08:51.800
Vì vậy, đầu tiên, những gì chúng ta phải làm là lấy số, sau đó chúng ta sẽ chuyển nó thành một máy căng ngọn đuốc.

08:51.800 --> 08:58.190
Nhưng bước đầu tiên như những gì chúng ta đã làm trước đây, là để có được một đế chế đúng đắn và để có được nó, nó thực sự

08:58.190 --> 08:58.880
khá đơn giản.

08:58.880 --> 09:05.030
Đầu tiên, chúng ta cần tạo một biến cho trạng thái đầu vào, mà chúng ta sẽ gọi là trạng thái

09:05.030 --> 09:12.770
và điều này để lấy mảng, chúng ta chỉ cần lấy môi trường của chúng ta rồi thêm vào đó và sau đó sử dụng hàm đặt lại.

09:12.920 --> 09:22.340
Và điều này sẽ khởi tạo trạng thái dưới dạng một mảng kích thước lần lượt là 42 x 42, một có nghĩa là một kênh, vì vậy hình ảnh màu

09:22.340 --> 09:28.220
đen trong màu trắng và 42 x 42 tất nhiên là kích thước của hình ảnh, số pixel trên chiều

09:28.220 --> 09:30.620
rộng và số pixel trên chiều cao.

09:30.620 --> 09:34.490
Vì vậy, về cơ bản đó chỉ là các thứ nguyên và đó là những thứ mà chúng tôi sẽ làm việc với.

09:34.520 --> 09:41.270
Và bây giờ, chúng ta đã thực sự có điều này, bởi vì điều này sẽ giúp chúng ta có được những hình ảnh có kích thước như vậy

09:41.270 --> 09:45.320
trong các mảng, bây giờ chúng ta có thể chuyển đổi chúng thành cảm biến ngọn đuốc.

09:45.320 --> 09:50.750
Và để làm tốt điều này, chúng tôi sẽ cập nhật lại trạng thái vì chúng tôi không cần giữ lại vi-rút.

09:50.930 --> 09:54.950
Và đó là nơi chúng tôi sử dụng mô-đun ngọn đuốc.

09:54.950 --> 09:57.470
Và hãy nhớ rằng, chúng tôi đã làm điều đó vì sự diệt vong.

09:57.590 --> 10:05.080
Chúng tôi sử dụng hàm từ dấu gạch dưới num bằng dấu ngoặc đơn và bên trong hàm này, chúng tôi cần nhập số mà

10:05.100 --> 10:08.300
chúng tôi muốn chuyển đổi thành một tensor ngọn đuốc.

10:08.300 --> 10:09.950
Và đó là trạng thái.

10:09.950 --> 10:16.100
Phiên bản trước của trạng thái trong mảng numpy sẽ trở thành bằng cách áp dụng từ chúng bằng chức năng một bộ

10:16.100 --> 10:17.030
căng ngọn đuốc.

10:17.030 --> 10:24.740
Vì vậy, điều đó chỉ tạo ra một tensor từ trạng thái và bây giờ chúng ta chỉ cần khởi tạo biến done.

10:24.740 --> 10:29.900
Hãy nhớ rằng biến thực hiện thường là biến cho biết nếu một tập kết thúc hoặc nếu trò chơi

10:29.900 --> 10:36.590
kết thúc, ở đây chúng tôi chỉ muốn giới thiệu biến đã hoàn thành này và khởi tạo nó thành true để chỉ định rằng

10:36.590 --> 10:40.580
biến đã hoàn thành này sẽ bằng true khi trò chơi được thực hiện.

10:41.000 --> 10:45.650
Vì vậy, điều đó sẽ hữu ích cho sau này để AI không chơi vô thời hạn để bùng phát.

10:46.690 --> 10:47.230
Được rồi.

10:47.230 --> 10:54.250
Vì vậy, về cơ bản đó là sự khởi đầu của hàm train này với một số khởi tạo và một số việc mà chúng

10:54.250 --> 10:55.150
ta phải làm.

10:55.180 --> 11:00.370
Phần quan trọng nhất ở đây là chúng tôi phải đồng bộ hóa từng tác nhân đào tạo.

11:00.370 --> 11:04.870
Vậy đó là nguyên tắc 1/1 của mô hình a3c mà chúng ta phải áp dụng.

11:04.870 --> 11:09.660
Và bây giờ trong phần hướng dẫn tiếp theo chúng ta sẽ tiến hành đồng bộ hóa với mô hình được chia sẻ.

11:09.670 --> 11:14.530
Đừng quên rằng có các mô hình khác nhau, nhưng cũng có mô hình dùng chung, đó là mô hình mà tất

11:14.530 --> 11:15.940
cả các đại lý chia sẻ.

11:15.940 --> 11:21.850
Và vì vậy chúng ta phải đồng bộ hóa với mô hình chia sẻ này để mỗi tác nhân có thể nhận được mô hình

11:21.850 --> 11:25.420
chia sẻ này để tiến hành thăm dò nhỏ ở một số bước nhất định.

11:25.720 --> 11:27.940
Vì vậy, đó là những gì chúng ta sẽ làm trong hướng dẫn tiếp theo.

11:27.940 --> 11:29.260
Và cho đến khi đó, hãy tận hưởng.

11:29.260 --> 11:29.770
TÔI.
