Xin chào và chào mừng bạn đến với phần cực kỳ thú vị trong quá trình sáng tạo của chúng tôi, phần mà chúng tôi làm cho nó trở nên thông minh.
Vì vậy, đó chính xác là những gì sẽ xảy ra khi đào tạo AI sẽ đào tạo trí thông minh của nó để đạt được mục tiêu mà chúng
ta muốn nó hoàn thành.
Và để làm được điều này, về cơ bản chúng ta sẽ huấn luyện mạng lưới thần kinh để đưa ra các dự đoán
đúng và sau đó mọi thứ đã sẵn sàng vì những tín hiệu đầu ra này từ não đã được truyền
đúng đến cơ thể để thực hiện các hành động cuối cùng.
Vì vậy, về cơ bản bây giờ những gì chúng tôi sắp làm là những gì chúng tôi đã làm trước đây.
Chúng tôi sẽ chỉ lấy một số lô ngẫu nhiên từ bộ nhớ, lấy đầu vào của chúng tôi từ
các mẫu này, lấy kết quả đầu ra, lấy mục tiêu, lấy dự đoán, tính toán khu vực cuối cùng giữa
dự đoán và mục tiêu, sau đó thực hiện lan truyền ngược với stochastic gradient descent để cập nhật trọng
số theo mức độ mà chúng đã đóng góp vào lỗi cuối cùng này.
Vì vậy, chúng ta hãy làm tất cả những điều này.
Bạn sẽ thấy nó sẽ trở nên dễ dàng như thế nào vì chúng tôi đã có tất cả các công cụ để thực hiện
điều này.
Chúng tôi không chỉ có các công cụ PyTorch như Trình tối ưu hóa và các chức năng bị mất, mà còn có tất cả các lớp mà chúng
tôi đã thực hiện trước đây, tất nhiên là bộ não của chúng tôi, mà chúng tôi sẽ sử dụng để nhận các dự đoán.
Sau đó, kinh nghiệm của chúng tôi, phát lại, triển khai, theo dõi tính đủ điều kiện và tất cả các công cụ này được kết hợp với các công
cụ PyTorch sẽ làm cho quá trình đào tạo siêu hiệu suất và do đó cuối cùng chúng tôi sẽ có được một
AI siêu mạnh mẽ.
Vì vậy, chúng ta hãy làm cho khóa đào tạo này diễn ra.
Hãy làm cho AI của chúng ta trở nên thông minh.
Và điều đầu tiên chúng tôi sẽ làm bây giờ là lấy chức năng cuối cùng mà chúng tôi sẽ sử dụng trong quá trình
đào tạo khi tính toán lỗi và trình tối ưu hóa, đó là điều đầu tiên chúng tôi sẽ làm.
Vì vậy, hãy tạo một biến cho hàm cuối cùng.
Chúng ta sẽ gọi nó là mất mát.
Và điều này sẽ bằng với hàm mất mát MSI từ mô-đun RN.
Và sau đó là trận thua MSI, đó là chức năng cuối cùng chúng tôi sẽ sử dụng vì về cơ bản các dự đoán của chúng tôi là giá
trị Q.
Chúng tôi đang dự đoán giá trị Q của các hành động khác nhau.
Và do đó, vì đây là các số thực, chúng ta đang thực hiện một số mạng nơron để hồi quy, và
do đó hàm cuối cùng là lỗi bình phương trung bình.
Đó là hàm cuối cùng mà chúng tôi sử dụng nói chung để hồi quy.
Được rồi.
Vì vậy, bây giờ chúng ta đã có chức năng cuối cùng, hãy lấy trình tối ưu hóa của chúng ta.
Vì vậy, trình tối ưu hóa ở đây, đó là biến chúng tôi tạo cho trình tối ưu hóa.
Và chúng tôi sẽ thực hiện như thường lệ.
Đối với xe tự lái, Atom Optimizer, đó là một công cụ tối ưu hóa rất mạnh mẽ sẽ mang lại hiệu quả tuyệt vời cho
quá trình đào tạo.
Vì vậy, hãy đưa cái này lên tới nguyên tử kia.
Và hãy nhớ rằng, đó chính xác là dành cho xe tự lái.
Chúng ta phải nhập hai đối số thiết yếu.
Cái đầu tiên là cái sẽ tạo kết nối giữa trình tối ưu hóa và các tham số của mạng nơ-ron của chúng
ta, tức là trọng lượng của các nơ-ron trong não của chúng ta.
Và để làm điều này, chúng tôi sử dụng bộ não của mình, cái mà chúng tôi gọi là CNN.
Đó là vật thể chúng ta đã tạo ra cho bộ não của mình.
Và vì vậy CNN không nhớ các thông số.
Chúng ta bắt đầu.
Và một số dấu ngoặc đơn.
Vì vậy, điều đó tạo ra kết nối giữa trình tối ưu hóa và trọng lượng của các tế bào thần kinh trong não của AI
của chúng ta.
Và sau đó đối số thứ hai là tỷ lệ học tập, và điều đó được đưa ra bởi lỗi.
Và vì vậy ở đây chúng ta phải lấy một tỷ lệ học tập nhỏ bởi vì chúng tôi không muốn hội tụ quá nhanh và chúng
tôi muốn có một số khám phá và do đó tỷ lệ học tập tốt mà chúng tôi có thể đạt được
ở đây là một tỷ lệ nhỏ là 0. 01 đó là mở 1%.
Tôi nghĩ đó cũng là điều chúng tôi đã sử dụng cho xe tự lái.
Được rồi, bây giờ chúng ta có một chức năng cuối cùng, một trình tối ưu hóa.
Vì vậy, chúng tôi gần như đã sẵn sàng để bắt đầu vòng lặp đầy đủ.
Thực ra, chúng ta sẽ bắt đầu vòng lặp đầy đủ ngay bây giờ.
Nhưng ngay trước khi chúng tôi làm điều đó, chúng tôi sẽ quyết định kích thước của số kỷ nguyên.
Chúng tôi sẽ đào tạo AI và do đó tôi đang tạo một biến mới ở đây sẽ tương ứng với
số kỷ nguyên này.
Và hãy đặt nó bằng 100.
Đó sẽ là cách đủ để luyện mắt.
Và tôi thậm chí còn đặt cược rằng AI sẽ đạt được cách tốt nhất trước 100, như 20 hoặc 30.
Hãy xem nào.
Nhưng bây giờ, hãy lấy 100.
Và nếu chúng tôi cần, chúng tôi sẽ tăng nó lên.
Nhưng tôi không nghĩ rằng điều đó sẽ cần thiết.
Được chứ.
Vì vậy, bây giờ chúng ta đã có số kỷ nguyên của mình, chúng ta có thể bắt đầu tạo vòng lặp for này là vòng lặp for chính của quá
trình huấn luyện khi chúng ta huấn luyện qua các kỷ nguyên.
Vì vậy, biến được lặp lại sẽ là kỷ nguyên.
Đó là những gì chúng tôi chọn cho kỷ nguyên.
Tất nhiên, bây giờ chúng ta sẽ sử dụng hàm phạm vi để nói rằng chúng ta muốn đi từ
kỷ nguyên đầu tiên đến số kỷ nguyên.
Thêm một, bởi vì hãy nhớ rằng, giới hạn trên của một dải ô không được bao gồm.
Và do đó, nếu chúng ta muốn tăng lên 100, tốt, chúng ta phải chỉ định và là một hộp cộng với một để
tăng lên 100.
Được rồi, Colin.
Và bây giờ chúng ta hãy đi vào vòng lặp.
Được rồi.
Vì vậy, điều đầu tiên chúng ta sẽ làm là thực hiện 200 lần chạy trong 10 bước.
Vì vậy, mỗi kỷ nguyên sẽ là 200 lần chạy, nối tiếp nhau trong mười bước.
Và để làm điều này, chúng tôi có chức năng các bước chạy này từ lớp phát lại có kinh nghiệm của chúng tôi.
Và do đó, để sử dụng hàm này, thực ra là một phương thức vì chúng ta sẽ lấy nó từ
đối tượng bộ nhớ của mình, là một đối tượng từ lớp bộ nhớ phát lại để tạo ra 200 lần chạy trong 10 bước này, nơi chúng ta phải
lấy đối tượng bộ nhớ của mình.
Điều đó tôi nhắc nhở chúng tôi đã tạo ra ngay tại đây.
Bộ nhớ là một đối tượng của lớp bộ nhớ phát lại với các bước MN là mười bước và dung lượng 10.000.
Chúng tôi đã tạo đối tượng này và từ đối tượng này, chúng tôi thực hiện tốt, bước chạy này, bước, chức năng, các bước chạy
và chúng tôi chỉ định 200 lần chạy liên tiếp trong 10 bước.
Vì vậy, về cơ bản mỗi kỷ nguyên sẽ chạy 200 bước.
Và bây giờ chúng ta có 200 bước này đang chạy ở mỗi kỷ nguyên, tốt, đã đến lúc lấy mẫu một số lô từ những
lần chạy này.
Và để lấy mẫu các lô này.
Chúng tôi có một chức năng khác từ bộ nhớ của mình, đó là lô mẫu và chính xác sẽ tạo ra
một số lô từ 200 lần chạy này.
Nhưng hãy nhớ rằng, các đợt này là các đợt thời gian của chuỗi chuyển tiếp.
Đó là một loạt mười bước so với trước đây, trong đó các lô chỉ là một số loạt chuyển đổi
đơn lẻ ở đây.
Lần này chúng sẽ là các lô gồm mười bước, mười chuyển tiếp, và do đó bây giờ đã
đến lúc lấy từ bộ nhớ của chúng ta những lô ngẫu nhiên này và để lấy chúng, chúng ta sử dụng hàm lô mẫu mà chúng ta
phải áp dụng kích thước lô.
Và đối với kích thước lô, chúng tôi có thể lấy 32 hoặc thậm chí 64 hoặc thậm chí 128.
Hãy nhớ rằng, đối với kích thước lô, đó là một thực tế phổ biến để sử dụng.
32 Đó là những gì bạn sẽ thấy nói chung trong kiến trúc mạng nơ-ron khi thực hiện một số học theo lô.
Nhưng lần này thì hoàn toàn khác.
Chúng tôi chỉ lấy mẫu một số lô gồm mười bước, vì vậy tốt hơn nên lấy các lô với kích thước lớn hơn.
Vì vậy, đó là lý do tại sao chúng ta có thể lấy 64 hoặc 128.
Vì vậy, chúng tôi sẽ lấy 128.
Và thực sự điều này sẽ nằm trong vòng lặp bốn bởi vì chúng tôi muốn lấy một số lô và chúng tôi đang
lấy chúng trong những gì được trả về bởi hàm lô mẫu này.
Vì vậy, vòng lặp for này đối với lô trong bộ nhớ mẫu lô 128 có nghĩa là cứ 128 bước, tốt, bộ nhớ của chúng ta
sẽ cung cấp cho chúng ta một lô có kích thước 128, thực sự sẽ chứa 128 bước cuối cùng vừa được chạy.
Chúng tôi chỉ nhận được một số lô có kích thước 128 và việc học sẽ diễn ra trên các lô này.
Và bên cạnh đó, bên trong các đợt này, chúng ta sẽ có đủ điều kiện, bạn biết đấy, để học
mười bước một lần.
Được rồi.
Vì vậy, bây giờ bên trong vòng lặp này, vẫn đang diễn ra trong một kỷ nguyên, nhưng bây giờ lần này chúng ta đang ở trong một đợt
cụ thể.
Và vì vậy, điều đầu tiên chúng tôi sẽ làm là chúng tôi sẽ nhận được đầu vào và mục tiêu của chúng tôi một cách riêng biệt.
Và điều đó, như tôi đã nói với bạn, nó rất dễ dàng.
Chúng tôi có thể làm điều đó bằng một trong những công cụ mà chúng tôi đã triển khai, đó là theo dõi tính đủ điều kiện.
Như bạn có thể thấy ở đây, chức năng theo dõi tính đủ điều kiện này lấy một lô làm đầu vào và bây giờ chúng
ta có lô và trả về dưới dạng đầu ra, đầu vào và mục tiêu.
Vì vậy, ngay bây giờ những gì chúng ta có thể làm đơn giản là tạo ra hai biến mới
sẽ là đầu vào và mục tiêu và làm cho đầu vào này đến đúng mục tiêu.
Bằng nhau.
Chính xác những gì trả về chức năng theo dõi tính đủ điều kiện này áp dụng cho một lô.
Vì vậy, chúng tôi sẽ áp dụng chức năng này cho hàng loạt vòng lặp của chúng tôi.
Và vì vậy những gì chúng tôi sẽ làm chỉ là tính đủ điều kiện.
Dấu vết được áp dụng cho loạt vòng lặp của chúng tôi.
Được rồi, để chúng tôi có được thông tin đầu vào và mục tiêu.
Nhưng trong PyTorch, luôn có nhiều việc chúng ta phải làm.
Và tất nhiên, điều này là để chuyển đổi các đầu vào của mạng nơ-ron và cả các mục tiêu thành một số biến
tra tấn, nhưng không được giải phóng.
Không có gì là mới.
Chúng tôi biết cách để làm nó.
Chúng ta có thể làm theo cách này.
Chúng tôi lấy đầu vào của chúng tôi, sau đó là mục tiêu của chúng tôi, và tốt, chúng sẽ bằng với đầu vào biến đổi.
Đó là cho các đầu vào và các mục tiêu biến đổi và đó là cho các mục tiêu.
Được rồi.
Vì vậy, các đầu vào của bộ não được chuyển đổi thành một số biến ngọn đuốc và các mục tiêu cũng được chuyển đổi thành
một số biến ngọn đuốc.
Vì vậy, bây giờ chúng ta có thể nhận các đầu vào vào mạng nơ-ron.
Và tại sao chúng ta cần làm điều này?
Đó là bởi vì bước tiếp theo là lấy các dự đoán mà chúng ta có, các yếu tố đầu vào mà chúng ta phải nhắm mục tiêu.
Tất nhiên, bây giờ chúng ta cần những dự đoán của mình, bởi vì sau đó điều xảy ra là chúng ta sẽ
tính toán thiệt hại giữa dự đoán và mục tiêu.
Vì vậy, chúng ta hãy lấy những dự đoán để có được chúng.
Vâng, một lần nữa, điều này rất đơn giản.
Bây giờ chúng ta chỉ cần lấy bộ não của mình, đó là CNN, mạng nơ-ron phức hợp của chúng ta, và áp dụng
nó vào đầu vào của chúng ta.
Chúng ta bắt đầu.
Các đầu vào đi vào mạng nơ-ron và mạng nơ-ron sẽ đưa ra các dự đoán.
Hoàn hảo.
Vì vậy, bây giờ chúng tôi có dự đoán, chúng tôi có mục tiêu để chúng tôi có thể nhận được lỗ.
Và đó là bước tiếp theo.
Chúng ta sẽ giới thiệu một biến mới vì ngay bây giờ chúng ta sẽ gặp lỗi cuối cùng,
khác với hàm cuối cùng, vì chúng ta sử dụng hàm cuối cùng để nhận lỗi cuối cùng.
Vì vậy, ít lỗi hơn ở đây và chúng tôi sẽ nhận được nó với chức năng cuối cùng được áp dụng cho các dự đoán của chúng tôi.
Và các mục tiêu.
Chúng ta bắt đầu.
Xem mọi thứ trôi chảy như thế nào bây giờ.
Mọi thứ đều logic.
Chúng tôi lấy mục tiêu đầu vào trước tiên.
Sau đó, nhờ đầu vào, chúng tôi có được các dự đoán.
Và sau đó nhờ vào các dự đoán và các mục tiêu, chúng tôi nhận được ít lỗi hơn.
Vì vậy, rất hợp lý và trôi chảy.
Và bây giờ bước tiếp theo là gì?
Chà, cùng một con đường hợp lý.
Bây giờ chúng ta có những gì cuối cùng mà chúng ta có thể quay lại, hãy truyền ít lỗi này trở lại mạng nơ-ron để cập
nhật trọng số.
Và chúng tôi làm điều đó với giảm độ dốc ngẫu nhiên và để thực hiện giảm độ dốc ngẫu nhiên, chúng tôi cần trình tối
ưu hóa của mình, nhưng chúng tôi đã có nó ở đây, trình tối ưu hóa nguyên tử của chúng tôi.
Nhưng bây giờ ở thời điểm này, hãy nhớ những gì chúng ta phải làm.
Chúng ta phải khởi tạo nó và khởi tạo nó.
Hãy nhớ rằng, chúng tôi lấy đối tượng trình tối ưu hóa của chúng tôi và sau đó chúng tôi áp dụng phương pháp lưới số không.
Sau đó chúng tôi đi.
Chúng tôi không quên dấu ngoặc đơn khởi tạo nó.
Và bây giờ bước tiếp theo là truyền lại lỗi cuối cùng trở lại mạng nơ-ron.
Và để làm điều này, chúng tôi lấy lỗi cuối cùng của mình và chúng tôi áp dụng phương pháp quay ngược lại trên đó.
Vì vậy, đó là chính xác để áp dụng truyền ngược.
Và cuối cùng, bây giờ lỗi cuối cùng đã được lan truyền trở lại trong mạng mới, chúng ta có thể cập nhật
các trọng số với gốc gradient ngẫu nhiên.
Và để làm điều này, hãy nhớ rằng, chúng tôi sử dụng trình tối ưu hóa của mình và sau đó chúng tôi áp dụng phương pháp bước này.
Chúng ta bắt đầu.
Các trọng lượng hiện đã được cập nhật.
Như tôi đã nói với bạn, không chỉ chúng tôi đã làm điều đó, mà bây giờ nó có vẻ rất đơn giản và tự nhiên.
Vì vậy, bây giờ chúng ta sẽ làm một cái gì đó vui vẻ.
Chúng tôi sẽ in phần thưởng trung bình, mỗi kỷ nguyên để chúng tôi có thể theo dõi hoạt động của AI, quá trình đào tạo
diễn ra như thế nào.
Chúng tôi muốn thấy phần thưởng trung bình tăng lên qua các bước của kỷ nguyên.
Và lúc đầu, tất nhiên, có giai đoạn thăm dò này.
Vì vậy, phần thưởng trung bình có thể không tăng vào lúc đầu, nhưng sau đó khi nó đạt đến giai đoạn khai
thác, thì chúng ta sẽ thấy phần thưởng trung bình chắc chắn tăng lên và nó sẽ tăng lên đến một mức nhất định, đó là
khi nó đạt đến chiếc áo nhanh như khả thi.
Vì vậy, hãy bắt đầu với bản in.
Bạn biết đấy, chúng tôi đang làm điều này trong một kỷ nguyên, vì vậy chúng tôi phải quay lại vòng lặp ở
đây in và sau đó chúng tôi sẽ in tốt kỷ nguyên đầu tiên một cột sau đó đến phần trăm se bởi vì chúng tôi sẽ chuyển đổi mọi thứ thành
một chuỗi tốt hơn.
Và sau đó chúng tôi sẽ thêm phần thưởng trung bình.
Và sau đó chúng tôi cũng thêm phần trăm.
Sau đó, chúng ta sẽ kết thúc phần trích dẫn.
Và sau đó chúng tôi thêm một phần trăm.
Và ở phía bên kia, bạn biết đấy, chúng tôi nhập các biến sẽ là người đầu tiên sẽ là EPC
ở đây và biến thứ hai tương ứng với phần thưởng trung bình mà chúng tôi sẽ tính toán ngay bây
giờ.
Vì vậy, biến phần thưởng trung bình chưa tồn tại.
Chúng tôi sẽ tạo nó ngay bây giờ.
Vì vậy, chúng tôi sẽ sử dụng kỷ nguyên STR.
Ngay cả khi epoch là một số, chúng tôi sẽ chuyển đổi nó thành một chuỗi.
Điều đó tốt hơn và.
Chúng tôi sẽ thêm một ngôi sao có thể là phần thưởng trung bình.
Và vì vậy chúng tôi sẽ tạo một biến mà chúng tôi sẽ gọi là phần thưởng VG, và bây giờ chúng tôi sẽ
tạo biến này và tính toán nó.
Vì vậy, chúng ta hãy làm điều này.
Đó là điều duy nhất chúng tôi phải làm còn lại.
Vì vậy, kỷ nguyên chúng tôi đã có.
Bây giờ chúng ta hãy tính toán phần thưởng trung bình và chúng ta cần tính nó ngay tại đây.
Vẫn trong vòng lặp nhưng ra khỏi vòng lặp hàng loạt bởi vì bây giờ chúng tôi đã lấy mẫu theo lô và chúng tôi đang đào tạo
diễn ra trong lô.
Nhưng bây giờ nhân giống thuận cộng với nhân giống lùi được thực hiện theo lô.
Vì vậy, chúng tôi đang quay trở lại vòng lặp kỷ nguyên và bây giờ chúng tôi có thể tính toán phần thưởng tích lũy mà chúng tôi
có thể thực hiện với đối tượng bước kết thúc vì đối tượng bước kết thúc của chúng tôi có chứa hàm này.
Chúng tôi sẽ thực hiện các bước cho phép chúng tôi nhận được phần thưởng tích lũy xảy ra trong các bước trong quá trình chạy
các bước.
Vì vậy, chúng tôi sẽ sử dụng nó ngay bây giờ để cập nhật phần thưởng mới của các bước và sau đó chúng tôi sẽ cập nhật
đối tượng trung bình động bằng cách thêm phần thưởng tích lũy vào đối tượng trung bình động và sau đó tính toán lại giá
trị trung bình.
Và đó là cách chúng tôi sẽ nhận được phần thưởng trung bình.
Vì vậy, chúng ta hãy làm điều này.
Điều đầu tiên chúng ta cần là phần thưởng được cập nhật.
Vì vậy, chúng ta hãy gọi chúng là phần thưởng.
Các bước.
Và sau đó, như chúng tôi đã nói, chúng tôi thực hiện các bước PN của mình.
Đối tượng là một lời nhắc được tạo ở đây, một đối tượng của lớp Tiến trình bước PN từ tệp phát lại trải
nghiệm của chúng tôi để đối tượng bước PN.
Sau đó, chúng tôi thêm các bước phần thưởng và sau đó là một số dấu ngoặc đơn.
Được rồi, điều đó sẽ giúp chúng tôi nhận được phần thưởng tích lũy mới của các bước.
Được rồi, nhưng sau đó chúng ta cần thêm những phần thưởng tích lũy mới này vào đối tượng trung bình động của chúng ta.
Và để làm điều này, chúng ta có một phương thức, lần này là trong lớp trung bình động, đó là phương pháp ADD.
Vì vậy, điều đó rất đơn giản.
Chúng tôi lấy đối tượng trung bình động của chúng tôi, mà chúng tôi đã tạo ở đây với 100 bước, sau đó chúng tôi sẽ
sử dụng phương pháp THÊM và sau đó trong phương pháp quảng cáo, chúng tôi nhập các bước thưởng của mình và điều này sẽ thêm phần thưởng của các
bước vào đường trung bình động .
Được rồi.
Và cuối cùng, chúng tôi có thể tính toán phần thưởng trung bình, và bạn biết đấy, đó là cùng một biến
ở đây.
Vì vậy, đó là những gì sẽ tương đương với phần thưởng trung bình.
Và để có được nó, chúng ta chỉ cần sử dụng phương pháp trung bình lần này từ đối tượng trung bình động của chúng ta.
Và đó là chúng tôi thực hiện một điểm trung bình giống như vậy bởi vì trung bình động của chúng tôi đã được cập nhật với các bước phần thưởng
mới mà chúng tôi vừa thêm vào nhờ phương pháp ADD.
Tuyệt quá.
Vì vậy, bây giờ chúng tôi có phần thưởng trung bình của mình để chúng tôi sẽ điền vào đây.
Và điều này sẽ được in mỗi kỷ nguyên.
Được rồi.
Vậy là chúng ta đã hoàn thành.
Vì vậy, tôi rất vui mừng để xem kết quả.
Và thực ra, tôi sẽ có một điều bất ngờ cho bạn trong phần hướng dẫn tiếp theo khi xem kết quả.
Vì vậy, nó sẽ khá thú vị.
Và vì vậy, bây giờ tôi đoán đã đến lúc chơi với AI và vui chơi.
Được rồi, vậy hãy chuẩn bị cho mình một ly cà phê ngon hoặc một ly trà ngon.
Bây giờ là lúc để ngồi thoải mái trên ghế của chúng tôi và xem một số video rất thú vị về AI của chúng tôi chơi Doom.
Vì vậy, hãy làm điều đó trong hướng dẫn tiếp theo.
Và cho đến khi đó, hãy tận hưởng.
TÔI.