Xin chào và chào mừng đến với hướng dẫn này.
Đượ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ờ
chúng ta cần đào tạo bộ não này.
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.
Đó 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
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ờ
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.
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
toán a3c không đủ để giải quyết vấn đề này.
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
cần đợi lâu.
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
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.
Và tại sao lại chia sẻ nguyên tử?
Đó 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ẻ.
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.
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
tôi muốn giữ lại một số năng lượng cho lần triển khai tiếp theo.
Đó là tàu, tệp PI đó sẽ có hơn 100 dòng mã.
Vì vậy, hãy sẵn sàng cho điều đó.
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.
Và hãy bắt đầu ngay bây giờ.
Được rồi.
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
bộ nhớ được chia sẻ và hàm bước.
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
tử, và chúng tôi nhận được từ mô-đun Optim, từ thư viện ngọn đuốc.
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ử.
Và sau đó chúng ta bắt đầu với hàm init.
Vậy điều gì xảy ra ở đây?
Đầ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
nguyên tử.
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.
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ự.
Các nhóm tham số.
Vậy trước tiên, nhóm params là gì?
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.
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.
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
các nhóm params tự chấm.
Vậy là xong.
Nhóm thuộc về tự mà params nhóm.
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
và được chứa chính xác trong các tham số nhóm tham số tự chấm.
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
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
tối ưu hóa.
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.
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.
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?
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
động hàm mũ của gradient.
Đó là dòng mã này ở đây.
Đó 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.
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ũ
của căn bậc hai của gradient.
Đó là một đường trung bình động hàm mũ của gradient chuyển động hai hoặc hai.
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
bậc hai cho mỗi người trong số chúng, đường EMA của gradient.
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
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 để
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
thuật toán ở đây.
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ẽ
hữu ích.
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ử.
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
ta sẽ thực hiện sau đó.
Đượ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ớ.
Vì vậy, bây giờ tôi chỉ nói một vài từ.
Ý 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
dựa trên GPU.
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ớ
ở đây, ở đây và ở đây hoạt động hơi giống Tensor, Cuda đó.
Vì vậy, bạn biết đấy, hãy tăng tốc tính toán.
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
GPU hoặc CPU có thể truy cập vào tất cả các luồng bị tê liệt.
Vì vậy, về cơ bản đó là những gì nó được thực hiện ở đây.
Đó 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
luồng đường song song.
Được rồi.
Và sau đó chúng ta có bước chức năng cuối cùng.
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
trong khóa học này.
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.
Vì vậy, thuật toán này.
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
khuyến khích bạn nên xem qua thuật toán này qua bài báo này.
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
thức bước của lớp nguyên tử được tối ưu hóa.
Vì vậy, về cơ bản những gì được thực hiện ở đây?
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.
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 ở
đây dưới dạng bình luận.
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.
Lớp Atom sau đó là đối tượng của chúng ta.
Và ở đây chúng tôi chỉ thêm bước với dấu ngoặc đơn.
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.
Đó 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.
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
ta có thể nhận được chính xác điều tương tự.
Được rồi.
Vì vậy, điều đó thật thú vị khi có một cái nhìn nhanh về nó.
Về cơ bản, bạn có thể xem đây là trình tối ưu hóa nguyên tử.
Nó giống như chúng tôi đã có một cái nhìn sâu hơn về nó.
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ì
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.
Tôi sẽ đặt liên kết trong các bình luận ở đây.
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.
Vì vậy, thật tốt nếu bạn có thể xem qua nó.
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
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ó
trình tối ưu hóa của mình.
Vì vậy, hãy nghỉ ngơi thật tốt, ngủ một giấc thật ngon nhé.
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.
Cho đến lúc đó, hãy tận hưởng.
TÔI.