Xin chào và chào mừng bạn đến với hướng dẫn Python này.
Được rồi, bây giờ trong chức năng tiếp theo mà chúng tôi sắp triển khai, chúng tôi sẽ đào tạo mạng
nơ-ron sâu bên trong trí tuệ nhân tạo của chúng tôi.
Vì vậy, về cơ bản, chúng ta sẽ thực hiện toàn bộ quá trình nhân giống chuyển tiếp và sau đó nhân giống ngược
để chúng ta có được đầu ra của mình, chúng ta sẽ đạt được mục tiêu.
Chúng tôi sẽ so sánh kết quả đầu ra với mục tiêu để tính toán lỗi cuối cùng.
Sau đó, chúng tôi sẽ truyền lại lỗi cuối cùng này vào mạng nơ-ron.
Và sử dụng descent gradient ngẫu nhiên, chúng tôi sẽ cập nhật các trọng số theo mức độ mà chúng đã góp phần làm
cho ít lỗi hơn.
Vì vậy, chúng ta hãy làm tất cả những điều này.
Đối với những bạn tham gia khóa học học sâu, đây sẽ là thứ trẻ con, nhưng đối với những người khác, đừng lo
lắng, tôi sẽ giải thích điều đó một lần nữa.
Vì vậy, chúng tôi sẽ gọi chức năng mới này là học.
Và hàm học tập này sẽ nhận một số đối số.
Tất nhiên, bản thân đầu tiên sẽ tham chiếu đến đối tượng của lớp khác.
Sau đó, chúng tôi sẽ lấy trạng thái lô của chúng tôi cho trạng thái hiện tại, sau đó là trạng thái tiếp theo của lô của chúng tôi, sau đó là phần
thưởng hàng loạt của chúng tôi và cuối cùng là hành động hàng loạt của chúng tôi.
Vậy tại sao chúng ta lại lấy cái này?
Bạn có thể nhận ra bộ truyện là gì?
Tất nhiên, đó là một bước chuyển tiếp, quá trình chuyển đổi của quá trình quyết định Markov là
nền tảng của học sâu.
Và tại sao tất cả chúng ta lại lấy chúng thành một số đợt?
Đó là bởi vì, hãy nhớ rằng, chúng tôi không xem xét các chuyển đổi theo một loạt các trạng thái tiếp theo của trạng
thái hiện tại hàng đầu, phần thưởng hiện tại và hành động hiện tại.
Chúng tôi đã tạo một số lô mẫu ở đây nhờ chức năng mẫu.
Và vì vậy, bây giờ các chuyển đổi của chúng ta đang ở dạng, đợt đầu tiên cho trạng thái, đợt thứ hai
cho ngày tiếp theo, một đợt cho phần thưởng và một đợt cho hành động.
Đó là hình thức của quá trình chuyển đổi của chúng tôi bây giờ và tất cả chúng đều được điều chỉnh tốt theo thời
gian, nhờ vào sự ghép nối này mà chúng tôi đã thực hiện ở đây đối với chiều thứ nhất.
Vì vậy, vấn đề là bây giờ chúng ta có quá trình chuyển đổi các đợt, một đợt cho mỗi bang, phần thưởng và hành động
của các bang tiếp theo.
Và chúng tôi làm tất cả những điều này bởi vì chúng tôi đang sử dụng thủ thuật phát lại trải nghiệm này để mạng nơ-ron sâu của chúng tôi có
thể học được điều gì đó.
Hãy nhớ rằng, nếu chúng ta chỉ có những chuyển đổi một mình, tốt, đó sẽ là một số học tập ngay lập tức.
Hoặc nếu bạn muốn học một số trí nhớ rất ngắn, và do đó mô hình sẽ không học được gì.
Vì vậy, chúng ta phải lấy các lô này từ bộ nhớ trở thành quá trình chuyển đổi của chúng ta, và sau đó cuối cùng chúng ta sẽ nhận được
các kết quả đầu ra khác nhau cho mỗi trạng thái của trạng thái lô đầu vào.
Và chúng tôi sẽ làm điều này cho trạng thái lô và cho trạng thái tiếp theo bởi vì chúng tôi sẽ cần cả hai để tính
toán khoản lỗ.
Tôi sẽ sớm nhắc lại phương trình cân bằng là trọng tâm của thuật toán học sâu.
Vì vậy, bây giờ chúng ta hãy đi vào hàm và đầu tiên chúng ta hãy lấy kết quả đầu ra của trạng thái lô.
Vì vậy, tôi sẽ gọi đây là đầu ra biến đầu tiên.
Và sau đó, tất nhiên, chúng ta sẽ lấy mô hình bản thân của chúng ta.
Vì vậy, mô hình tự học bởi vì chúng tôi muốn nhận được đầu ra mô hình của chúng tôi về các trạng thái đầu vào của trạng thái lô.
Và vì mô hình của chúng tôi thực sự đang mong đợi một loạt các trạng thái đầu vào, tốt, chúng tôi hoàn toàn có thể nhập trạng thái lô
ngay bây giờ cho đầu vào của mô hình.
Đó chính xác là cách chúng tôi khởi tạo các trạng thái đi vào mạng bằng máy căng ngọn đuốc với
thứ nguyên giả này cho lô.
Vì vậy, đó là hoàn hảo.
Bây giờ chúng ta có được kết quả đầu ra của mô hình, nhưng sau đó có một thủ thuật kỹ thuật khác.
Nếu chúng ta chỉ tự thực hiện rằng lô mô hình hoạt động tốt, chúng ta sẽ nhận được kết quả đầu ra của tất cả các hành động có thể, bạn
biết đấy, không một và hai.
Nhưng đó không phải là điều chúng tôi muốn.
Chúng tôi chỉ quan tâm đến các hành động đã được chọn, các hành động đã được quyết định bởi mạng
để chơi tại mỗi thời điểm.
Và vì vậy, để có được những hành động này, chúng tôi quan tâm đến đó là những hành động được thực hiện tốt.
Chúng ta phải sử dụng hàm tập hợp này trong đó chúng ta nhập một hàm vì chúng ta chỉ muốn hành động đã được chọn.
Và sau đó chúng tôi thêm hành động hàng loạt với hành động này, một và hành động hàng loạt mà chúng tôi sẽ thu thập mỗi lần hành động tốt nhất để
chơi cho mỗi trạng thái đầu vào của trạng thái hàng loạt.
Chúng tôi chỉ muốn hành động được chơi, hành động được chọn và chúng tôi nhận được điều này với hành động tập hợp
một và hàng loạt này.
Nhưng sau đó hãy cẩn thận.
Trạng thái hàng loạt ở đây có thứ nguyên giả này tương ứng với hàng loạt và hành động hàng loạt không có nó trở
lại, trạng thái có nó?
Bởi vì chúng tôi sử dụng các mục ở đây, nhưng chúng tôi chưa sử dụng bất kỳ mục nào trên bóp cho các hành động.
Vì vậy, chúng ta phải thêm nó vào đây để hành động hàng loạt có cùng thứ nguyên chính xác với trạng thái hàng loạt.
Vì vậy, chúng tôi sẽ thêm một dấu chấm vào bóp số 0.
Ngay tại đây.
Và thực ra, đây không phải là không, mà là một vì số không tương ứng với chiều đức tin của trạng thái và
một sẽ tương ứng với chiều giả của các hành động.
Và cuối cùng, việc cuối cùng chúng ta cần làm ở đây là chúng ta cần diệt lô hàng giả này bằng một cái bóp.
Và tại sao chúng ta cần làm điều đó?
Bởi vì bây giờ chúng ta đang ở ngoài mạng nơ-ron.
Chúng tôi có kết quả đầu ra của mình, nhưng chúng tôi không muốn chúng xuất hiện trong một loạt sản phẩm.
Chúng tôi muốn chúng ở dạng tensor đơn giản, vector đơn giản, vector đầu ra.
Lô chỉ là khi chúng ta làm việc trong mạng nơ-ron, bởi vì mạng nơ-ron đang mong đợi định dạng
của các cảm biến thành một lô.
Nhưng bây giờ chúng tôi có kết quả đầu ra của mình và trong phương trình cân bằng tiếp theo của học sâu, chúng tôi sẽ không cần
chúng thành một loạt.
Vì vậy, tôi đang giết hàng loạt ở đây.
Tôi đang giết thứ nguyên giả để lấy lại dạng đầu ra đơn giản của chúng ta.
Vì vậy, tôi chỉ thêm ở đây, chấm và sau đó bóp.
Và sau đó vì tôi muốn giết thứ nguyên giả tương ứng với loạt hành động.
Chà, vì thứ nguyên giả này có chỉ mục một, tôi sẽ thêm một thứ nguyên ở đây.
Được rồi.
Và bây giờ, chúng ta bắt đầu.
Chúng tôi có đầu ra của chúng tôi, OC.
Chúng tôi có một cảnh báo nhỏ.
Nó là gì?
Đầu ra biến cục bộ được chỉ định nhưng không bao giờ được sử dụng.
Không sao đâu.
Chúng tôi sẽ sử dụng nó rất nhanh chóng.
Vì vậy, đó là kết quả đầu ra của chúng tôi.
Và bây giờ chúng tôi muốn có được tiếp theo của chúng tôi.
Kết quả đầu ra.
Vì vậy, bây giờ bạn có thể đang nghĩ, tại sao chúng ta cần đầu ra tiếp theo?
Để hiểu điều này, chúng ta cần quay lại thuật toán học sâu, ở ngay đây.
Đó là một phần của sổ tay logic.
Vì vậy, đó là toàn bộ quá trình học sâu.
Khi bắt đầu, chúng tôi đang khởi tạo tất cả các giá trị và sau đó tại mỗi thời điểm.
T Chà, chúng ta bắt đầu.
Chúng tôi chọn hành động với giá thầu tối đa mềm.
Đó là những gì chúng tôi đã làm với chức năng Chọn Hành động.
Sau đó, chúng tôi nối quá trình chuyển đổi và sau đó như bạn có thể thấy, chúng tôi nhận được dự đoán, chúng tôi nhận được mục tiêu và chúng
tôi tính toán khoản lỗ.
Vậy tại sao chúng ta cũng cần các đầu ra tiếp theo?
Đó là vì mục tiêu.
Mục tiêu bằng gamma lần, kết quả đầu ra tiếp theo cộng với phần thưởng và chúng tôi sẽ tính mục tiêu
ngay sau đó.
Nhưng vì chúng ta cần đầu ra tiếp theo cho mục tiêu, hãy tính toán điều này trước.
Vì vậy, một lần nữa, để có được đầu ra tiếp theo, điều đó rất đơn giản.
Đầu ra tiếp theo sẽ là kết quả của mạng nơ-ron của chúng ta khi lô ngày tiếp theo nhập nó
làm đầu vào.
Rất đơn giản, chúng tôi lấy mô hình của chúng tôi là mạng nơ-ron của chúng tôi, và lần này đầu vào
của mạng nơ-ron sẽ là đợt vào ngày tiếp theo.
Các lô ngày sau.
Nhưng bây giờ, hãy nhớ rằng, nếu chúng ta quay lại thuật toán học sâu, bạn có thể thấy rằng đầu ra tiếp
theo là giá trị hàng đợi tối đa cho tập tiếp theo đối với tất cả các hành động.
Vì vậy, ngay bây giờ, để có đầu ra tiếp theo, chúng ta cần lấy giá trị Q tối đa.
Và do đó, tôi sẽ thực hiện ở đây một phép tách, bạn biết đấy, để tách tất cả các đầu ra của mô hình bởi vì chúng ta có một số trạng thái
trong lô này là các trạng thái tiếp theo, đó là lô của tất cả các trạng thái tiếp theo trong tất cả các chuyển đổi
được thực hiện từ mẫu ngẫu nhiên của bộ nhớ của chúng tôi.
Vì vậy, tôi đang tách tất cả chúng bằng cách sử dụng hàm tách và sau đó tôi đang lấy giá trị tối đa của tất cả các giá trị hàng
đợi này.
Và vì chúng tôi đang sử dụng tối đa các giá trị Q này đối với hành động, nên chúng tôi phải
chỉ rõ rằng đó là đối với hành động.
Và vì hành động được đại diện bởi chỉ mục một, tốt, một lần nữa, chúng ta phải đặt chỉ mục ở đây và sau đó chúng
ta phải xác định rằng chúng ta đang lấy các giá trị Q của s t cộng với một giá trị là trạng thái tiếp theo.
Và trạng thái tiếp theo được biểu diễn bằng chỉ số không vì chỉ số không tương ứng với trạng thái.
Và do đó ở đây chúng ta cần thêm dấu ngoặc với chỉ số bằng không.
Bằng cách đó, chúng ta nhận được tối đa giá trị Q của trạng thái tiếp theo được biểu thị bằng chỉ số 0 theo tất
cả các hành động được biểu thị bằng chỉ số một.
Và bây giờ hoàn hảo.
Chúng tôi nhận được đầu ra tiếp theo của chúng tôi.
Đây là một trạng thái mới.
Đó là nơi chúng tôi đã cảnh báo.
Nhưng điều đó không sao cả.
Chúng tôi sẽ sử dụng nó ngay bây giờ để tính toán mục tiêu.
Và nói về mục tiêu, đó là bước tiếp theo của chức năng học tập này.
Vậy là xong.
Mục tiêu bằng.
Bây giờ chúng ta hãy quay lại sổ tay AI của chúng ta.
Mục tiêu bằng phần thưởng cộng với số lần gamma.
Đầu ra tiếp theo là giá trị Q tối đa của ngày tiếp theo theo các hành động.
Vậy là xong.
Hãy tính toán điều đó.
Vì vậy, nó bằng với self, gamma đó và self, gamma đó đã được khởi tạo ở đây nó được giới thiệu.
Vì vậy, đó là một biến GQ của chúng tôi và đối tượng tự mà gamma nhân với sản lượng tiếp theo như chúng tôi vừa nói cộng với phần thưởng là phần
thưởng hàng loạt mà chúng tôi đang làm việc với các lô ở đây cộng với hàng loạt.
Giải thưởng.
Và đó là mục tiêu trong một mẫu bộ nhớ.
Gamma nhân với các kết quả đầu ra tiếp theo, cộng với phần thưởng.
Được rồi, hoàn hảo.
Vì vậy, bây giờ chúng tôi có kết quả đầu ra của mình.
Chúng tôi cũng có mục tiêu của mình.
Và do đó, chúng ta có thể tính toán khoản lỗ, khoản lỗ đại diện cho sai số của dự đoán.
Vì vậy, chúng ta hãy gọi đây là mất mát.
Tất nhiên, TD mất TD là sự khác biệt theo thời gian lại là trọng tâm của quá trình học CU và tổn thất
TD này sẽ bằng với sự mất mát của Huber giúp cải thiện nhiều việc học Q.
Đó là chức năng cuối cùng chúng tôi sẽ chọn cho trí tuệ nhân tạo của mình.
Đối với những bạn đến từ khóa học học sâu, đó thực sự là mất mát mà tôi khuyên bạn nên áp
dụng nếu bạn muốn triển khai học sâu.
Và vậy chúng ta sẽ làm thế nào để có được khoản lỗ Huber này?
À, một lần nữa, chúng ta sẽ lấy một hàm từ mô-đun chức năng được đại diện bởi F.
Và do đó ở đây tôi sẽ sử dụng mô-đun chức năng F
dot của chúng tôi và Hubble có thể có được nhờ chức năng
trơn tru.
Nó thực sự cải thiện việc học Q, nhưng đây là một chức năng.
Vì vậy, tôi đang thêm một số dấu ngoặc đơn và bây giờ không có gì đơn giản hơn đối số mà chúng ta cần để nhập
các dự đoán và mục tiêu của mình.
Vì vậy, các dự đoán tất nhiên là kết quả đầu ra của chúng ta vì đó là đầu ra của mạng nơ-ron.
Bạn biết đấy, đầu ra của mạng nơ-ron là những gì mạng nơ-ron dự đoán.
Vì vậy, đó là dự đoán.
Vì vậy, đối số đầu tiên ở đây là kết quả đầu ra.
Và sau đó, đối số thứ hai, tất nhiên, là mục tiêu.
Thứ mà chúng tôi đang cố gắng đạt được và nó đã được tính toán hoàn hảo, chúng tôi có thể nhập trực tiếp mục tiêu hoàn hảo vào và
bây giờ chúng tôi thua lỗ.
Chỉ cần quên một chút t ở đây.
Chúng ta bắt đầu.
Bây giờ cảnh báo sẽ biến mất.
Vâng, hoàn hảo.
Và bây giờ chúng ta có lỗi cuối cùng, chúng ta có thể truyền lại lỗi này vào mạng để cập nhật
các trọng số với gốc gradient ngẫu nhiên.
Và đó chính xác là những gì chúng ta sẽ làm trong bước tiếp theo.
Vì vậy, tất nhiên, bây giờ những gì chúng tôi phải làm, như bạn có thể đoán, là sử dụng trình tối ưu hóa của chúng tôi.
Trình tối ưu hóa của chúng tôi, một lần nữa, chúng tôi đã giới thiệu ở đây, chúng tôi đã khởi tạo nó và đó là trình tối ưu hóa nguyên tử,
thực sự là một đối tượng của lớp nguyên tử và nó đã được trang bị với các tham số của mô hình của chúng tôi và chúng
tôi đã chọn tốc độ học là 0. 1 phần trăm.
Quá hoàn hảo, trình tối ưu hóa của chúng tôi đã sẵn sàng, nhưng bây giờ chúng tôi cần áp dụng nó cho lỗi cuối cùng để thực hiện giảm độ
dốc ngẫu nhiên và trọng số dữ liệu.
Vì vậy, khi làm việc với PyTorch, điều đầu tiên chúng ta cần làm là khởi tạo lại nó ở mỗi lần lặp lại của vòng
lặp.
Chúng ta phải khởi tạo lại trình tối ưu hóa từ lần lặp này sang lần lặp khác trong vòng lặp của đường xuống dốc ngẫu
nhiên và khởi tạo lại nó ở mỗi khoảng thời gian của vòng lặp.
Chúng ta sẽ sử dụng phương pháp sau đây là lưới không.
Ở đây chúng ta bắt đầu, lưới số không sẽ khởi tạo lại trình tối ưu hóa của bạn ở mỗi lần lặp lại của vòng lặp.
Sau đó, chúng ta đừng quên dấu ngoặc đơn.
Hoàn hảo.
Và bây giờ nó đã được khởi tạo lại, tốt, chúng ta có thể thực hiện truyền ngược với trình tối ưu hóa của mình.
Và làm thế nào để chúng tôi làm điều đó?
Chà, chúng ta lấy mất TD của mình và chúng ta sẽ truyền ngược nó trở lại mạng và để truyền
ngược nó vào mạng, chúng ta cần sử dụng chức năng quay ngược.
Và bên trong hàm quay ngược này, tôi khuyên bạn nên nhập, giữ lại, gạch dưới các biến và đặt
nó bằng true.
Tôi khuyên bạn nên làm điều này vì điều này sẽ cải thiện sự lan truyền ngược lại.
Việc sử dụng các biến trả về bằng true là để giải phóng một số bộ nhớ và chúng ta cần giải
phóng bộ nhớ vì chúng ta sẽ mất vài lần.
Vì vậy, điều đó chắc chắn sẽ cải thiện hiệu suất đào tạo.
Và cuối cùng, bước cuối cùng của chức năng học tập này là cập nhật trọng số theo sự lan truyền
ngược, tức là theo trọng số đã góp phần gây ra lỗi.
Và để làm điều này, chúng tôi sử dụng lại trình tối ưu hóa của chúng tôi, trình tối ưu hóa này đã được khởi tạo và khởi tạo lại
và chúng tôi sử dụng hàm bước và đơn giản với dòng mã này bằng cách sử dụng hàm bước, điều này sẽ cập nhật trọng số.
Đó là dòng mã cập nhật trọng lượng.
Dòng mã trở lại này truyền lỗi vào mạng nơ-ron và dòng mã này sử dụng trình tối ưu hóa để cập nhật
các trọng số.
Và chúng ta bắt đầu.
Chúng tôi có mạng nơ-ron học tập.
Được rồi.
Vì vậy, xin chúc mừng.
Đây có lẽ là phần kỹ thuật và khó nhất của mô hình học sâu này.
Tôi biết PyTorch đôi khi có thể phức tạp với những thứ này và bóp và bóp, nhưng cuối cùng tôi
hứa bạn sẽ có được một mạng nơ-ron rất chức năng và do đó là mô hình học sâu và cuối cùng là một
trí tuệ nhân tạo tuyệt vời.
Vì vậy, bây giờ chúng ta hãy chuyển sang bước tiếp theo của mô hình học sâu của chúng tôi, đó sẽ là
chức năng cập nhật rõ ràng sẽ cập nhật khi AI phát hiện ra trạng thái mới.
Vì vậy, bạn biết đấy, nó sẽ phát hiện ra trạng thái mới và sau đó nó sẽ nhận được phần thưởng tùy thuộc
vào hành động mà nó vừa chơi và trạng thái mới này.
Vì vậy, chúng tôi sẽ giải quyết vấn đề này với chức năng cập nhật và chúng tôi sẽ thực hiện điều này trong hướng dẫn tiếp theo.
Cho đến lúc đó, hãy tận hưởng.
TÔI.