WEBVTT

00:00.210 --> 00:02.220
Xin chào và chào mừng đến với hướng dẫn này.

00:02.370 --> 00:07.680
Được rồi, vì vậy trong các hướng dẫn trước, chúng tôi đã tạo ra bộ não hoặc nếu bạn muốn bộ não cho a3c, thì bây giờ

00:07.680 --> 00:09.440
chúng ta cần đào tạo bộ não này.

00:09.450 --> 00:12.900
Nhưng để đào tạo những bộ não này, chúng ta cần một trình tối ưu hóa.

00:12.930 --> 00:17.670
Đó là hai điều này sẽ sử dụng trong giảm độ dốc ngẫu nhiên để cập nhật trọng

00:17.670 --> 00:24.600
số theo mức độ chúng góp phần vào sai số giữa các dự đoán và mục tiêu và những gì chúng tôi đã làm cho đến bây giờ

00:24.600 --> 00:30.630
trong mô-đun thứ nhất và thứ hai, chúng tôi đã sử dụng trình tối ưu hóa nguyên tử bằng ngọn đuốc trong Đào tạo.

00:30.630 --> 00:38.190
Nhưng như tôi đã nói với bạn, chúng tôi đang giải quyết một vấn đề rất khó khăn đó là breakout và bản thân thuật

00:38.190 --> 00:41.310
toán a3c không đủ để giải quyết vấn đề này.

00:41.310 --> 00:48.390
Chúng tôi cần một số trình tối ưu hóa tùy chỉnh và rất nhiều thủ thuật khác nhau để giải quyết vấn đề này mà không

00:48.390 --> 00:49.290
cần đợi lâu.

00:49.290 --> 00:56.730
Vì vậy, đó là mục đích của việc này và đó là lý do tại sao chúng tôi có một trình tối ưu hóa tùy chỉnh riêng dựa trên

00:56.730 --> 01:01.110
trình tối ưu hóa nguyên tử và được chứa trong lớp nguyên tử được chia sẻ này.

01:01.110 --> 01:02.670
Và tại sao lại chia sẻ nguyên tử?

01:02.670 --> 01:07.980
Đó là bởi vì nó thực sự là trình tối ưu hóa nguyên tử, nhưng nó sẽ hoạt động trên các trạng thái được chia sẻ.

01:07.980 --> 01:11.130
Vì vậy, chúng tôi sẽ giải thích cách nó hoạt động trong hướng dẫn này.

01:11.130 --> 01:15.840
Vì vậy, chúng tôi sẽ đi qua các chức năng khác nhau ở đây mà không cần mã hóa chúng bởi vì, bạn biết đấy, chúng

01:15.840 --> 01:18.480
tôi muốn giữ lại một số năng lượng cho lần triển khai tiếp theo.

01:18.480 --> 01:22.950
Đó là tàu, tệp PI đó sẽ có hơn 100 dòng mã.

01:22.950 --> 01:24.330
Vì vậy, hãy sẵn sàng cho điều đó.

01:24.330 --> 01:30.210
Và do đó, chúng tôi sẽ cố gắng giải thích những gì đang xảy ra ở đây trong một hướng dẫn, hướng dẫn này.

01:30.210 --> 01:31.920
Và hãy bắt đầu ngay bây giờ.

01:32.650 --> 01:33.040
Được rồi.

01:33.040 --> 01:38.530
Vì vậy, trước tiên chúng tôi giới thiệu mục chia sẻ lớp này sẽ chứa ba hàm là hàm init, hàm

01:38.530 --> 01:40.750
bộ nhớ được chia sẻ và hàm bước.

01:40.960 --> 01:48.250
Vì vậy, những gì chúng tôi làm trước tiên là chúng tôi kế thừa từ nguyên tử, nguyên tử đó, tất nhiên là trình tối ưu hóa nguyên

01:48.250 --> 01:52.010
tử, và chúng tôi nhận được từ mô-đun Optim, từ thư viện ngọn đuốc.

01:52.030 --> 01:57.000
Vì vậy, ở đây chúng tôi áp dụng kế thừa để có được tất cả các công cụ liên quan đến trình tối ưu hóa nguyên tử.

01:57.010 --> 01:59.080
Và sau đó chúng ta bắt đầu với hàm init.

01:59.080 --> 02:00.340
Vậy điều gì xảy ra ở đây?

02:01.040 --> 02:08.420
Đầu tiên, chúng tôi sử dụng một siêu hàm để kế thừa từ tất cả các công cụ và tất cả các tham số cơ bản từ lớp

02:08.450 --> 02:09.020
nguyên tử.

02:09.020 --> 02:16.000
Và các thông số cơ bản ở đây là tham số, tỷ lệ học tập, betas, epsilon và phân rã trọng lượng.

02:16.010 --> 02:20.360
Và sau đó chúng tôi bắt đầu một vòng lặp for này đầu tiên vòng lặp for này cho nhóm tự.

02:20.660 --> 02:21.610
Các nhóm tham số.

02:21.620 --> 02:23.940
Vậy trước tiên, nhóm params là gì?

02:23.960 --> 02:28.280
Bản thân nhóm tham số chứa tất cả các thuộc tính của trình tối ưu hóa.

02:28.280 --> 02:32.480
Và trong số các thuộc tính này, chúng tôi có các tham số mà chúng tôi phải tối ưu hóa.

02:32.480 --> 02:38.840
Các thông số mà chúng tôi muốn tối ưu hóa này là trọng số của mạng được chứa trong

02:38.840 --> 02:40.730
các nhóm params tự chấm.

02:40.730 --> 02:42.100
Vậy là xong.

02:42.110 --> 02:44.690
Nhóm thuộc về tự mà params nhóm.

02:44.690 --> 02:50.840
Và ở đây chúng ta có vòng lặp for thứ hai này sẽ lấy các tham số này mà chúng ta muốn tối ưu hóa

02:50.840 --> 02:54.560
và được chứa chính xác trong các tham số nhóm tham số tự chấm.

02:54.650 --> 03:00.980
Vì vậy, về cơ bản chúng ta đi qua các nhóm tham số tự chứa tất cả các tham số và đối với mỗi nhóm

03:00.980 --> 03:06.350
tham số trong các nhóm tham số tự chấm, chúng tôi sẽ đi qua các tham số mà chúng tôi muốn

03:06.350 --> 03:07.280
tối ưu hóa.

03:07.310 --> 03:14.210
Do đó, đối với p trong các thông số nhóm ở đây có nghĩa là đối với mỗi cảm biến trọng lượng mà chúng ta muốn tối ưu hóa.

03:14.210 --> 03:16.940
Vì vậy, đối với mỗi tensor trọng lượng mà chúng tôi muốn tối ưu hóa.

03:16.940 --> 03:21.350
Và sau đó điều gì xảy ra bên trong vòng lặp này với bốn dòng mã này?

03:21.650 --> 03:28.970
Về cơ bản những gì sẽ xảy ra là bản cập nhật do Atom Optimizer thực hiện dựa trên đường trung bình

03:28.970 --> 03:30.800
động hàm mũ của gradient.

03:31.160 --> 03:32.810
Đó là dòng mã này ở đây.

03:32.810 --> 03:38.210
Đó là đường trung bình động hàm mũ của gradient thời điểm, một đường trung bình có bậc một.

03:38.210 --> 03:44.960
Nhưng bản cập nhật do Atom thực hiện không chỉ dựa trên điều đó, nó còn dựa trên đường trung bình động hàm mũ

03:44.990 --> 03:46.790
của căn bậc hai của gradient.

03:47.000 --> 03:51.650
Đó là một đường trung bình động hàm mũ của gradient chuyển động hai hoặc hai.

03:51.800 --> 03:57.320
Vì vậy, đây là đường trung bình động hàm mũ của bậc một và đây là đường trung bình động hàm mũ của

03:57.320 --> 04:00.530
bậc hai cho mỗi người trong số chúng, đường EMA của gradient.

04:00.530 --> 04:06.110
Vì vậy, những gì xảy ra ở đây và bây giờ nếu bạn muốn hiểu sâu hơn về cách hoạt động

04:06.110 --> 04:12.260
của đường trung bình động hàm mũ, tôi rất khuyến khích bạn xem bài báo nghiên cứu này, Adam, một phương pháp để

04:12.260 --> 04:19.370
tối ưu hóa ngẫu nhiên, bởi vì về cơ bản là trình tối ưu hóa nguyên tử mà chúng tôi đang triển khai ngay bây giờ dựa trên

04:19.370 --> 04:20.480
thuật toán ở đây.

04:20.630 --> 04:26.660
Vì vậy, nếu bạn muốn biết thêm chi tiết về cách thức hoạt động của thuật toán, thì bài báo này chắc chắn sẽ

04:26.660 --> 04:27.380
hữu ích.

04:27.380 --> 04:32.600
Và sau đó bạn có một số giải thích thêm về thuật toán với các quy tắc cập nhật nguyên tử.

04:32.600 --> 04:37.790
Và vì vậy, bạn biết đấy, đó là chỉ khi bạn muốn tấn công điều này trước khi tấn công chức năng tàu lớn mà chúng

04:37.790 --> 04:38.990
ta sẽ thực hiện sau đó.

04:39.230 --> 04:45.740
Được rồi, hãy quay lại Python và bây giờ chúng ta hãy chuyển sang chức năng thứ hai, chia sẻ bộ nhớ.

04:46.010 --> 04:47.810
Vì vậy, bây giờ tôi chỉ nói một vài từ.

04:47.810 --> 04:54.530
Ý tưởng của chức năng bộ nhớ chia sẻ này giống như tensor mà Cuda, bạn biết đấy, CUDA là một bộ tăng tốc

04:54.530 --> 04:55.610
dựa trên GPU.

04:55.640 --> 05:03.110
Và về cơ bản những gì xảy ra ở đây là chúng ta có những cảm biến trạng thái chia sẻ bộ nhớ

05:03.110 --> 05:07.790
ở đây, ở đây và ở đây hoạt động hơi giống Tensor, Cuda đó.

05:07.970 --> 05:10.160
Vì vậy, bạn biết đấy, hãy tăng tốc tính toán.

05:10.160 --> 05:17.000
Nhưng sự khác biệt là ở đây tensor là bộ nhớ chia sẻ, gửi các tính toán đến một phần của

05:17.000 --> 05:21.950
GPU hoặc CPU có thể truy cập vào tất cả các luồng bị tê liệt.

05:21.950 --> 05:23.510
Vì vậy, về cơ bản đó là những gì nó được thực hiện ở đây.

05:23.510 --> 05:30.170
Đó là một chút giống như Tensor Cuda, nhưng nó chỉ được gửi đến một phần của GPU hoặc CPU có thể truy cập vào các

05:30.170 --> 05:31.460
luồng đường song song.

05:31.910 --> 05:32.390
Được rồi.

05:32.390 --> 05:34.940
Và sau đó chúng ta có bước chức năng cuối cùng.

05:34.940 --> 05:40.460
Vì vậy, bạn biết đấy, hàm này, nó giống như phương pháp bước của trình tối ưu hóa nguyên tử mà chúng ta đã sử dụng

05:40.460 --> 05:41.330
trong khóa học này.

05:41.630 --> 05:47.060
Và một lần nữa, điều này dựa trên thuật toán, một trong cùng một bài báo mà chúng ta đã thấy trước đây.

05:47.060 --> 05:48.500
Vì vậy, thuật toán này.

05:48.590 --> 05:53.600
Vì vậy, một lần nữa, nếu bạn muốn hiểu chi tiết các dòng mã sau đây, một lần nữa, tôi

05:53.600 --> 05:57.170
khuyến khích bạn nên xem qua thuật toán này qua bài báo này.

05:57.320 --> 06:04.280
Và bên cạnh đó, những gì được thực hiện ở đây không hoàn toàn bắt buộc vì đây thực sự là một bản sao chép của phương

06:04.280 --> 06:06.980
thức bước của lớp nguyên tử được tối ưu hóa.

06:06.980 --> 06:09.470
Vì vậy, về cơ bản những gì được thực hiện ở đây?

06:09.470 --> 06:15.350
Chúng tôi có thể đã làm điều đó bằng cách sử dụng kế thừa của chúng tôi bởi vì ở đây chúng tôi kế thừa từ nguyên tử được tối ưu hóa.

06:15.350 --> 06:21.650
Và vì vậy, để sử dụng tốt tài sản thừa kế của mình, những gì chúng ta có thể làm thay vì làm tất cả những điều này, tôi sẽ viết ở

06:21.650 --> 06:22.640
đây dưới dạng bình luận.

06:22.670 --> 06:27.530
Nó chỉ sử dụng chức năng siêu mà chúng tôi áp dụng cho chia sẻ của chúng tôi.

06:28.290 --> 06:31.410
Lớp Atom sau đó là đối tượng của chúng ta.

06:31.410 --> 06:34.640
Và ở đây chúng tôi chỉ thêm bước với dấu ngoặc đơn.

06:34.650 --> 06:40.470
Bước là phương thức của lớp mục được tối ưu hóa và điều đó hoàn toàn giống nhau.

06:40.470 --> 06:46.410
Đó là lý do tại sao tôi chỉ nói rằng đây chỉ là một bản sao chép của phương pháp bước của lớp nguyên tử Optim.

06:46.710 --> 06:53.580
Vì vậy, tôi nghĩ rằng nếu bạn thay thế tất cả điều này bằng siêu hàm này được áp dụng cho chia sẻ nguyên tử và phương pháp bước, thì, chúng

06:53.580 --> 06:55.920
ta có thể nhận được chính xác điều tương tự.

06:57.090 --> 06:57.450
Được rồi.

06:57.450 --> 06:59.720
Vì vậy, điều đó thật thú vị khi có một cái nhìn nhanh về nó.

06:59.730 --> 07:02.670
Về cơ bản, bạn có thể xem đây là trình tối ưu hóa nguyên tử.

07:02.700 --> 07:04.410
Nó giống như chúng tôi đã có một cái nhìn sâu hơn về nó.

07:04.410 --> 07:09.630
Nhưng một lần nữa, nếu bạn muốn đi chi tiết hơn về điều này và nếu bạn muốn hiểu những gì

07:09.630 --> 07:13.950
xảy ra đằng sau hậu trường, tôi khuyến khích bạn nên xem bài báo nghiên cứu này.

07:13.980 --> 07:15.900
Tôi sẽ đặt liên kết trong các bình luận ở đây.

07:15.900 --> 07:19.800
Bạn biết đấy, hãy nhớ rằng, bạn sẽ có tất cả các mã được nhận xét rất chi tiết.

07:19.800 --> 07:21.900
Vì vậy, thật tốt nếu bạn có thể xem qua nó.

07:22.320 --> 07:30.270
Và bây giờ tôi hy vọng bạn có một số năng lượng tuyệt vời vì chúng ta sẽ chuyển sang tệp tàu chứa hàm tàu khổng lồ này và về cơ bản

07:30.270 --> 07:35.790
sẽ đào tạo bộ não của chúng ta, điều này bây giờ chúng ta có thể làm được vì chúng ta có

07:35.790 --> 07:37.440
trình tối ưu hóa của mình.

07:37.440 --> 07:40.080
Vì vậy, hãy nghỉ ngơi thật tốt, ngủ một giấc thật ngon nhé.

07:40.080 --> 07:43.980
Và bất cứ khi nào bạn cảm thấy thân hình tuyệt vời, hãy chuyển sang bước tiếp theo.

07:44.220 --> 07:45.420
Cho đến lúc đó, hãy tận hưởng.

07:45.420 --> 07:45.900
TÔI.
