WEBVTT

00:00.150 --> 00:02.550
Xin chào và chào mừng bạn đến với hướng dẫn Python này.

00:02.580 --> 00:07.010
Được rồi, chúng ta có một hàm cuối cùng để triển khai trong lớp bộ nhớ phát lại của chúng ta.

00:07.020 --> 00:08.460
Đó là chức năng đơn giản.

00:08.460 --> 00:11.970
Và đó, tất nhiên, để lấy một số mẫu ngẫu nhiên từ bộ nhớ của chúng ta.

00:11.970 --> 00:15.570
Và do đó, hàm này sẽ trả về các mẫu ngẫu nhiên này.

00:15.900 --> 00:16.290
Được rồi.

00:16.290 --> 00:17.670
Vì vậy, chúng ta hãy thực hiện nó.

00:17.670 --> 00:20.370
Chúng tôi sẽ gọi nó là mẫu.

00:20.400 --> 00:21.240
Chúng ta bắt đầu.

00:21.240 --> 00:24.960
Và hàm này nhận hai đối số làm đầu vào.

00:24.990 --> 00:27.120
Người đầu tiên, như thường lệ, tự.

00:27.300 --> 00:29.970
Đối tượng tương lai của lớp bộ nhớ phát lại của chúng ta.

00:29.970 --> 00:33.320
Và lập luận thứ hai là, bạn có thể thử đoán xem?

00:33.330 --> 00:39.930
Chà, chúng tôi đang lấy một số mẫu, một kích thước cố định, và do đó chúng tôi cần chọn một kích thước cho các mẫu của chúng tôi.

00:39.930 --> 00:42.480
Và chính xác hơn, chúng tôi gọi nó là kích thước lô.

00:42.570 --> 00:47.880
Vì vậy, đó là tên mà chúng tôi sẽ đặt cho đối số thứ hai của chúng tôi, kích thước lô.

00:47.880 --> 00:49.440
Và chúng ta bắt đầu.

00:49.440 --> 00:53.670
Chúng ta có hai đối số và bây giờ chúng ta có thể triển khai hàm mẫu.

00:54.310 --> 01:00.450
Vì vậy, bây giờ tôi chỉ muốn cảnh báo bạn, điều này sẽ có một chút kỹ thuật, nhưng tôi sẽ cố gắng hết sức để giải thích.

01:01.000 --> 01:05.080
Vì vậy, chúng ta sẽ bắt đầu bằng cách tạo biến mẫu.

01:05.080 --> 01:08.860
Đây chỉ là biến sẽ chứa các mẫu của bộ nhớ.

01:09.430 --> 01:09.790
Được rồi.

01:09.790 --> 01:11.170
Vì vậy, các mẫu bằng nhau.

01:11.170 --> 01:13.870
Và vì vậy bây giờ chúng ta sẽ làm thế nào để có được những mẫu này?

01:14.200 --> 01:20.410
Trước hết, chúng ta phải lấy lại trí nhớ của mình vì chúng ta đang lấy những mẫu này từ trí nhớ của mình.

01:20.740 --> 01:27.580
Sau đó, chúng tôi có thể sẽ cần kích thước lô vì các mẫu chúng tôi muốn lấy có chứa các yếu tố kích thước lô.

01:27.580 --> 01:33.310
Vì vậy, chúng ta cần bộ nhớ, chúng ta cần kích thước lô, và sau đó chúng ta cần một số thủ thuật PyTorch hoặc Python để có được

01:33.310 --> 01:34.930
định dạng tốt của các mẫu này.

01:35.350 --> 01:40.720
Vì vậy, những gì tôi sẽ làm, tôi sẽ viết dòng mã và sau đó tôi sẽ giải thích nó

01:40.720 --> 01:41.590
từng phần tử.

01:41.680 --> 01:42.660
Vì vậy, chúng ta hãy làm điều đó.

01:42.670 --> 01:45.760
Tôi đang bắt đầu bằng cách sử dụng một chức năng zip.

01:45.970 --> 01:48.250
Tôi sẽ giải thích rất sớm những gì nó làm.

01:48.310 --> 01:51.810
Và bên trong hàm zip này, tôi sẽ thêm một ngôi sao.

01:51.820 --> 01:53.620
Tôi cũng sẽ mở rộng điều đó.

01:53.800 --> 01:57.670
Ngôi sao và mẫu chấm ngẫu nhiên.

01:58.030 --> 02:03.240
Vì vậy, ngẫu nhiên, như bạn có thể đoán, là thư viện ngẫu nhiên mà chúng tôi đã nhập ở đây.

02:03.250 --> 02:08.830
Vì vậy, đó là lý do chính tại sao chúng tôi phải nhập thư viện ngẫu nhiên này, bởi vì chúng tôi đang lấy một số

02:08.830 --> 02:09.550
mẫu ngẫu nhiên.

02:09.760 --> 02:15.250
Vì vậy, từ thư viện ngẫu nhiên này, chúng ta sẽ sử dụng hàm mẫu.

02:15.250 --> 02:17.860
Vì vậy, đây là các biến của chúng tôi và đây là một hàm.

02:17.860 --> 02:19.900
Vì vậy, tôi sẽ thêm một số dấu ngoặc đơn.

02:19.900 --> 02:24.520
Và bây giờ như bạn thấy, mẫu là một hàm và chúng ta phải nhập một số đối số.

02:25.350 --> 02:27.660
Vì vậy, như bạn có thể thấy, lập luận đầu tiên là bản thân.

02:27.660 --> 02:34.710
Và thực sự nói về bản thân, điều này tương ứng với bộ nhớ bản thân, bộ nhớ của phiên bản tương lai của chúng ta, đối tượng của

02:34.710 --> 02:36.910
lớp bộ nhớ phát lại của chúng ta.

02:36.930 --> 02:40.530
Vì vậy, tôi sẽ thêm vào đây tự kỷ niệm đó.

02:41.130 --> 02:46.320
Và sau đó đối số thứ hai là, như bạn có thể đoán, kích thước của lô mà chúng tôi muốn

02:46.320 --> 02:51.280
lấy ngẫu nhiên từ bộ nhớ của mình và chúng tôi đã đặt tên cho nó là kích thước lô.

02:51.300 --> 02:55.650
Vì vậy, đối số thứ hai sẽ là kích thước lô.

02:55.680 --> 02:56.250
Được rồi.

02:56.250 --> 03:00.720
Vì vậy, dòng mã đã được nhập và bây giờ tôi sẽ giải thích những gì nó làm.

03:01.260 --> 03:08.400
Vì vậy, trước hết, với chức năng lấy mẫu ngẫu nhiên này, chúng tôi đang lấy một số mẫu ngẫu nhiên từ bộ

03:08.550 --> 03:11.670
nhớ có kích thước cố định của kích thước lô.

03:12.340 --> 03:13.920
Vì vậy, đó là điều dễ hiểu.

03:13.930 --> 03:18.070
Nhưng sau đó chức năng lưu trữ zip này làm gì?

03:18.280 --> 03:20.320
Chà, không có gì bí ẩn về nó.

03:20.350 --> 03:22.580
Nó chỉ giống như một chức năng định hình lại.

03:22.600 --> 03:28.030
Vì vậy, ví dụ, tôi sẽ thêm một chút phổ biến ở đây chỉ để giải thích rằng tôi sẽ xóa nó.

03:28.210 --> 03:33.490
Vì vậy, giả sử rằng, ví dụ, chúng ta có một danh sách các phần tử sau.

03:33.490 --> 03:42.400
Ví dụ, đầu tiên là một, hai, ba, và sau đó là phần tử thứ hai, bốn, năm, sáu.

03:43.000 --> 03:47.770
Vì vậy, chúng tôi có một danh sách gồm hai bộ giá trị của ba phần tử một, hai, ba và bốn, năm, sáu.

03:48.160 --> 03:54.370
Vậy nếu tôi áp dụng chức năng zip với ngôi sao trên đó, thì, nó sẽ trở thành gì?

03:54.490 --> 04:03.100
Vì vậy, danh sách sao zip sẽ giống với một danh sách mới, nhưng có hình dạng khác.

04:03.100 --> 04:11.410
Và hình dạng khác nhau này sẽ là một bốn, sau đó hai, ba, và sau đó là năm, sáu.

04:12.370 --> 04:12.700
Được rồi.

04:12.700 --> 04:13.840
Vì vậy, đó chỉ là những gì nó làm.

04:13.840 --> 04:16.360
Nó chỉ định hình lại danh sách của bạn.

04:17.050 --> 04:17.280
Được chứ.

04:17.320 --> 04:23.650
Vì vậy, bây giờ bạn đã hiểu danh sách sao zip này làm gì, và bây giờ hãy giải thích lý do tại sao chúng ta phải làm điều

04:23.650 --> 04:24.040
đó.

04:24.370 --> 04:31.000
Vì vậy, như bạn đã hiểu, chúng tôi sẽ thêm các sự kiện vào bộ nhớ và các sự kiện có dạng, đầu tiên là

04:31.000 --> 04:34.450
trạng thái, sau đó là hành động và sau đó là phần thưởng.

04:34.570 --> 04:37.060
Nhưng đối với thuật toán của chúng tôi, chúng tôi không muốn định dạng này.

04:37.060 --> 04:43.480
Chúng tôi thực sự muốn các mẫu của mình có định dạng sau, một định dạng bao gồm ba mẫu, một mẫu

04:43.480 --> 04:48.370
cho trạng thái, một mẫu cho các hành động và một mẫu cho phần thưởng.

04:48.520 --> 04:55.360
Vì vậy, ví dụ, giả sử rằng 1 đến 3 này là trạng thái một, hành động một, thưởng cho một và sau đó nêu

04:55.360 --> 04:57.520
lên hành động và thưởng cho hai.

04:57.550 --> 05:04.720
Chà, những gì chúng tôi muốn là một đợt cho mỗi đợt cho trạng thái một và ở lại hai đợt một cho đợt một cho hành

05:04.720 --> 05:08.710
động một trong hành động hai và một đợt thứ ba cho một phần thưởng.

05:08.710 --> 05:09.700
Và chúng tôi là hai.

05:10.030 --> 05:15.670
Đó chỉ là định dạng sẽ được mong đợi tiếp theo vì sau đó chúng tôi sẽ gói các lô này

05:15.670 --> 05:16.990
thành một biến PyTorch.

05:16.990 --> 05:23.290
Và một biến python, hãy nhớ, là một biến chứa cả tensor và gradient.

05:23.290 --> 05:29.470
Và đó là để có thể phân biệt với tensor, để có thể phân biệt với

05:29.470 --> 05:35.260
tensor, chúng ta cần cấu trúc của một biến có chứa tensor và gradient.

05:35.350 --> 05:37.590
Một lần nữa, đó là cách PyTorch hoạt động.

05:37.600 --> 05:44.290
Vì vậy, để tóm tắt, chúng tôi đang tạo một lô cho mỗi hành động và phần thưởng trạng thái, sau đó chúng tôi

05:44.290 --> 05:49.870
sẽ đặt từng lô này riêng biệt thành một số biến PyTorch, mỗi biến sẽ nhận được một gradient để

05:49.870 --> 05:54.220
cuối cùng chúng ta sẽ có thể phân biệt từng người trong số họ.

05:54.430 --> 05:54.880
Được rồi.

05:54.880 --> 05:57.370
Vì vậy, đó là mục đích của chức năng này.

05:57.370 --> 06:00.310
Vì vậy, hãy để tôi chỉ cần xóa bình luận này.

06:00.310 --> 06:05.950
Và bây giờ điều duy nhất mà chúng tôi phải làm còn lại là trả lại các mẫu.

06:05.950 --> 06:12.010
Vì vậy, như tôi vừa giải thích, chúng tôi không thể trả về các mẫu trực tiếp vì lý do đơn giản

06:12.010 --> 06:15.280
là chúng tôi muốn đặt các mẫu vào một biến PyTorch.

06:15.430 --> 06:22.540
Vì vậy, để làm điều này cho mỗi mẫu, chúng ta sẽ sử dụng hàm bản đồ và hàm

06:22.540 --> 06:29.860
bản đồ này sẽ thực hiện ánh xạ từ các mẫu để chạm vào các biến sẽ chứa tensor và gradient.

06:29.950 --> 06:33.460
Vì vậy, như bạn có thể thấy, hàm bản đồ này có một số đối số.

06:33.460 --> 06:38.530
Đối số đầu tiên là một hàm và hàm này sẽ là hàm sẽ chuyển đổi các mẫu

06:38.530 --> 06:40.480
thành một số biến được dạy.

06:40.510 --> 06:45.280
Và đối số thứ hai là những gì chúng ta muốn áp dụng hàm này.

06:45.310 --> 06:48.400
Vì vậy, đó sẽ là đối số của hàm này.

06:48.610 --> 06:50.350
Và do đó, nó sẽ là gì?

06:50.350 --> 06:52.570
Đó là tất nhiên sẽ là các mẫu.

06:52.570 --> 06:58.540
Vì vậy, đối số thứ hai ở đây sẽ là các mẫu, nhưng sau đó hãy xác định hàm mà chúng

06:58.540 --> 07:00.490
ta muốn áp dụng từng mẫu.

07:00.790 --> 07:06.520
Vì vậy, để định nghĩa một hàm ở đây, trước tiên chúng ta cần đặt tên cho hàm mà chúng ta sẽ gọi là Lambda.

07:06.880 --> 07:14.170
Đó chỉ là tên của lambda, sau đó là x, sẽ là biến của hàm này.

07:14.170 --> 07:18.310
Vì vậy, đó chỉ là tên tôi đang đặt cho biến và sau đó là dấu hai chấm.

07:18.310 --> 07:21.010
Và ở đây chúng tôi đưa ra biểu thức của hàm.

07:21.010 --> 07:24.250
Đó là những gì chúng ta muốn hàm lambda này trả về.

07:25.180 --> 07:32.110
Và vì vậy, những gì nó sẽ xảy ra, tốt, nó phải là một thứ gì đó sẽ chuyển đổi hoặc lấy mẫu thành

07:32.110 --> 07:33.280
một biến ngọn đuốc.

07:33.640 --> 07:39.160
Và để làm điều này, chúng tôi đã đề cập đến nó trong một số hướng dẫn trước đây, nơi chúng tôi có hàm biến cho

07:39.160 --> 07:39.700
điều đó.

07:39.820 --> 07:46.600
Hàm biến sẽ thực hiện chuyển đổi đó từ tensor ngọn đuốc sang một biến sẽ chứa

07:46.600 --> 07:48.490
tensor này và gradient.

07:48.580 --> 07:55.840
Vì vậy, điều đầu tiên tôi sẽ thêm ở đây là biến biến bên trong mà tôi sẽ chuyển đổi X

07:55.840 --> 08:01.480
vì X sẽ là các mẫu khi lambda sẽ được áp dụng vào các mẫu.

08:02.230 --> 08:03.430
Nhưng đó không phải là tất cả.

08:03.460 --> 08:07.180
Có một điều kỹ thuật cuối cùng mà chúng ta cần thực hiện.

08:07.420 --> 08:13.000
Thực tế là đối với mỗi lô chứa trong mẫu, ví dụ, lô của các

08:13.000 --> 08:19.660
hành động một, một, hai, ba và các hành động khác, chúng ta phải nối nó với thứ

08:19.660 --> 08:22.720
nguyên đầu tiên tương ứng với nhà nước.

08:22.930 --> 08:25.120
Và tại sao chúng ta phải thực hiện nối này?

08:25.330 --> 08:27.510
Nó chỉ để mọi thứ được liên kết tốt.

08:27.520 --> 08:33.940
Tức là ở mỗi hàng trạng thái, hành động và phần thưởng tương ứng với thời gian.

08:33.970 --> 08:42.180
T Vì vậy, cuối cùng chúng ta nhận được một danh sách các lô đều được căn chỉnh tốt và mỗi lô là một biến pytorch.

08:42.190 --> 08:44.600
Vì vậy, làm thế nào chúng ta có thể thực hiện nối này?

08:44.620 --> 08:47.950
Chà, chúng ta cần sử dụng hàm mèo từ thư viện bó đuốc.

08:47.950 --> 08:53.800
Vì vậy, chúng tôi sẽ thêm ở đây ngọn đuốc mà chúng tôi thêm con mèo đó áp dụng cho X.

08:53.950 --> 08:59.170
Nhưng sau đó trong hàm cat này, chúng ta cần chỉ định thứ nguyên liên quan đến thứ mà chúng ta muốn

08:59.170 --> 09:00.340
thực hiện nối đó.

09:00.670 --> 09:05.110
Và như tôi vừa đề cập, đây là thứ nguyên đầu tiên có chỉ số bằng không.

09:05.660 --> 09:06.600
Và chúng ta bắt đầu.

09:06.620 --> 09:08.600
Chúng tôi đã sẵn sàng chức năng của mình.

09:08.630 --> 09:14.300
Hàm lambda này sẽ lấy các mẫu, nối chúng với kích thước đầu tiên và sau đó cuối

09:14.300 --> 09:20.930
cùng chúng tôi chuyển đổi các cảm biến thành một số biến ngọn đuốc có chứa cả cảm biến và gradient, để

09:20.930 --> 09:26.810
sau này khi chúng tôi áp dụng lưới ngẫu nhiên theo nghĩa chúng ta sẽ có thể phân biệt để

09:26.810 --> 09:28.070
cập nhật trọng số.

09:28.520 --> 09:30.170
Được rồi, vậy là chức năng này đã sẵn sàng.

09:30.170 --> 09:38.090
Và đây là đối số thứ hai của hàm bản đồ, chúng ta cần chỉ định những gì chúng ta muốn áp dụng hàm lambda này

09:38.090 --> 09:45.680
và đó là trên tất cả các mẫu của chúng ta mà chúng ta sử dụng, chúng ta sẽ áp dụng hàm lambda này

09:45.680 --> 09:53.210
trên tất cả các mẫu để cuối cùng chúng ta lấy danh sách các lô trong đó mỗi lô là một biến pytorch.

09:53.690 --> 09:54.080
Được rồi.

09:54.080 --> 09:58.040
Vì vậy, đó là khá kỹ thuật, nhưng bây giờ ít nhất mọi thứ sẽ hoạt động.

09:58.040 --> 10:00.440
Chà, chúng tôi sẽ không sử dụng kỹ thuật này sau đó.

10:00.440 --> 10:01.730
Chúng tôi chỉ sử dụng nó ở đây.

10:01.730 --> 10:06.320
Vì vậy, nếu bạn không muốn hiểu sâu về các chi tiết kỹ thuật ở đây, thì tốt thôi.

10:06.320 --> 10:10.520
Bạn chỉ có thể sao chép ba dòng mã này để lấy mẫu bộ nhớ của mình.

10:10.520 --> 10:14.390
Nếu bạn muốn tạo trí thông minh nhân tạo với PyTorch, nó sẽ như bạn muốn.

10:14.390 --> 10:21.200
Nhưng bây giờ tin tốt là chúng ta đã hoàn tất việc phát lại trải nghiệm lớp bộ nhớ phát lại này hiện đã được triển khai và

10:21.200 --> 10:26.720
chúng ta có thể chuyển sang lớp tiếp theo và lớp cuối cùng, đây sẽ là toàn bộ mô hình học sâu.

10:26.720 --> 10:32.900
Vì vậy, trong mô hình học sâu này, tất nhiên chúng ta sẽ có mạng lưới của mình, những người sẽ thêm kinh nghiệm, phát lại

10:32.900 --> 10:36.380
và sau đó là tất cả phần còn lại của thuật toán học sâu.

10:36.380 --> 10:38.990
Vì vậy, nó sẽ là một lớp học lớn hơn nhiều.

10:38.990 --> 10:44.150
Chúng tôi sẽ tạo ra khoảng mười hàm, nhưng đó chỉ là vì chúng tôi đang làm điều này từng bước để bạn có thể

10:44.150 --> 10:45.830
hiểu rõ hơn những gì đang xảy ra.

10:46.310 --> 10:49.100
Vì vậy, tôi rất nóng lòng muốn triển khai mô hình học sâu của chúng tôi.

10:49.100 --> 10:50.930
Và cho đến lúc đó, hãy tận hưởng tôi.
