Xin chào và chào mừng bạn đến với hướng dẫn Python này.
Được rồi, vì vậy trong hướng dẫn này, chúng ta sẽ tạo hàm sẽ chọn hành động phù hợp tại
mỗi thời điểm.
Vì vậy, về cơ bản, chúng ta sẽ thực hiện phần làm cho chiếc xe di chuyển bên phải tại mỗi thời điểm
đi sang trái, đi thẳng hoặc đi sang phải để đạt được mục tiêu và tránh các chướng ngại
vật đang đổ xuống.
Vì vậy, chúng ta hãy làm điều này ngay bây giờ.
Chúng ta sẽ bắt đầu như bình thường với một định nghĩa để xác định một hàm và sau đó chúng ta đặt tên cho hàm
của mình, chúng ta sẽ gọi là select.
Hoạt động.
Sau đó, một số dấu ngoặc và hàm hành động chọn này sẽ có hai đối số.
Cái đầu tiên là self như thường lệ để chỉ đối tượng.
Và đối số thứ hai, theo bạn sẽ là đối số nào?
Chà, nó có thể là gì?
Nếu bạn nghĩ về nó, hành động chúng tôi chọn đến từ đầu ra của mạng nơ-ron, vì đầu ra của mạng
nơ-ron là giá trị gợi ý cho mỗi trong ba hành động có thể xảy ra và do đó hành động
mà chúng tôi thực hiện, hành động sẽ là đầu ra của mạng nơ-ron phụ thuộc vào trạng thái
đầu vào.
Và trạng thái đầu vào chính xác là đối số thứ hai mà chúng ta cần cho hàm hành động chọn.
Đó là bởi vì chúng ta thực sự sẽ lấy đầu ra của mạng nơ-ron.
Và tất nhiên đầu ra của mạng nơ-ron trực tiếp phụ thuộc vào đầu vào của mạng nơ-ron.
Vì vậy, đó sẽ là lập luận của chúng tôi.
Và bây giờ chúng ta có thể đặt cho nó bất kỳ cái tên nào.
Chúng ta thực sự sẽ gọi nó là trạng thái bởi vì đầu vào của mạng nơ-ron là trạng thái đầu vào
được mã hóa bởi một vectơ năm chiều, hướng ba tín hiệu và định hướng trừ.
Và vì vậy bây giờ mọi thứ sẽ trở nên dễ dàng.
Chúng ta sẽ cung cấp trạng thái đầu vào vào mạng nơ-ron, trạng thái mà chúng ta đã xây dựng ở trên, ngay
tại đây với lớp mạng.
Và sau đó chúng ta sẽ nhận được các kết quả đầu ra, là các giá trị cue cho mỗi hành động trong số ba hành
động có thể.
Và sau đó sử dụng phương pháp soft max, mà tôi sẽ giải thích trong hướng dẫn này, chúng ta sẽ thực hiện
hành động cuối cùng để chơi.
Vì vậy, chúng ta hãy làm điều này.
Hãy đi vào hàm và thực hiện tất cả những điều này.
Vì vậy, điều đầu tiên chúng ta cần bắt đầu là về những gì tôi vừa đề cập đến nhồi bông.
Tối đa Ý tưởng về mức tối đa mềm là chúng tôi sẽ cố gắng có được hành động tốt nhất để chơi tại mỗi thời
điểm, nhưng đồng thời chúng tôi sẽ khám phá các hành động khác nhau.
Và làm thế nào chúng ta có thể làm điều đó?
Làm thế nào chúng ta có thể có được hành động tốt nhất để chơi trong khi vẫn khám phá các hành động khác?
Chà, chúng tôi sử dụng ý tưởng này về max mềm, bao gồm việc tạo ra phân phối xác suất cho mỗi
giá trị Q hành động Trạng thái Q.
Bạn biết đấy, chúng tôi có một giá trị Q cho mỗi hành động.
Đi sang trái, đi thẳng hoặc đi sang phải.
Nhưng giá trị Q này cũng phụ thuộc vào trạng thái đầu vào.
Đó chính xác là hàm Q mà bạn đã thấy và các bài giảng về trực giác.
Hàm Q này là một hàm của trạng thái và hành động.
Vì vậy, vì ở đây chúng ta có một trạng thái đầu vào, là trạng thái ở đây, và ba hành động có thể xảy ra, nên chúng ta có
ba.
Giá trị Q.
Q Trạng thái hành động một.
Q Trạng thái hành động hai và Q Trạng thái hành động ba.
Và chúng tôi sẽ tạo ra một phân phối xác suất đối với ba giá trị Q này.
Nghĩa là, chúng ta sẽ có một xác suất cho giá trị Q đầu tiên, một xác suất khác cho giá trị
Q thứ hai và một xác suất thứ ba cho giá trị Q thứ ba.
Và tất cả ba xác suất này sẽ cộng lại thành một.
Và vì vậy chúng ta sẽ làm tất cả điều này với Max mềm và Max mềm sẽ quy ra một xác suất lớn cho giá
trị Q cao nhất.
Đó là lý do tại sao một giải pháp thay thế cho tự tối đa là giá trị tối đa đơn giản, bạn biết đấy, trực tiếp lấy giá
trị tối đa Q.
Nhưng trong trường hợp đó, chúng tôi không khám phá các hành động khác.
Nhờ những xác suất này, chúng ta có thể khám phá một nơi khác bằng cách sử dụng một thông số nhiệt độ mà chúng
ta sẽ thấy rất nhanh.
Chúng ta vẫn có thể khám phá chúng bằng cách cấu hình thông số nhiệt độ này.
Đó là lý do tại sao nói chung, đối với học sâu, tôi thực sự khuyên bạn nên sử dụng soft max hơn là arg
max đơn giản.
Được rồi, hãy triển khai soft max.
Và do đó, như bạn đã hiểu, vì Soft Max trả về xác suất của mỗi trong ba giá
trị Q cho ba hành động có thể xảy ra, nên biến đầu tiên chúng ta sẽ tạo là các probs đề
cập tất nhiên, đến các xác suất này.
Vì vậy, đạo cụ bằng.
Và bây giờ chúng ta sẽ sử dụng hàm max mềm của chúng ta.
Và theo bạn, chúng ta sẽ lấy nó từ đâu?
Tất nhiên.
Hãy nhớ rằng, chúng tôi đã nhập mô-đun phụ chức năng chấm ngọn đuốc và chấm, mà tôi nhắc nhở là
mô-đun chứa hầu hết các hành động để triển khai mạng nơ-ron.
Chúng tôi đã cho nó đường tắt.
F Và đó chính xác là từ mô-đun phụ chức năng này mà chúng ta sẽ sử dụng chức năng tự tối đa của chúng ta.
Nhưng vì chúng tôi đã cho nó phím tắt f, chúng tôi bắt đầu ở đây với một F đại diện cho chức năng mà từ đó chúng
tôi lấy hàm max mềm của chúng tôi.
Nó đây.
Đó là cái đầu tiên.
Và dấu ngoặc đơn.
Được rồi.
Và bây giờ chúng ta cần nhập những gì trong hàm self max này?
Tất nhiên, đó là các thực thể mà chúng ta muốn tạo phân phối xác suất.
Và những thực thể này là gì?
Tất nhiên, đây là các giá trị Q.
Vì vậy, bây giờ câu hỏi là, làm thế nào chúng ta có thể nhận được các giá trị Q?
Tất nhiên, các giá trị Q là đầu ra của mạng nơ-ron.
Và để có được những đầu ra này của mạng nơ-ron, chúng ta bắt đầu.
Chúng ta cần sử dụng mạng nơ-ron của mình.
Nhưng trên thực tế, chúng tôi đã có nó bởi vì đó là những gì.
Được khởi tạo trong hàm init, chúng tôi đã tạo mô hình self dot, không có gì khác ngoài mạng nơ-ron của chúng tôi
vì nó là một đối tượng của lớp mạng.
Và vì vậy điều đó thật hoàn hảo.
Chúng ta chỉ có thể lấy mô hình của mình ở đây và tự áp dụng tối đa mô hình này cho trạng thái đầu vào, đó là đối số
ở đây và điều đó sẽ trả về kết quả đầu ra mà chúng ta đang tìm kiếm.
Đó là các giá trị Q.
Và bây giờ trực giác của bạn tại sao chúng tôi phải lấy mô hình ở đây để giới thiệu nó trong hàm init có thể trở
nên tốt hơn.
Đối với những bạn bắt đầu với lập trình hướng đối tượng, bạn sẽ thấy rằng tất cả những điều này sẽ trở nên
tự nhiên.
Vậy tự max rồi.
Vì vậy, chúng tôi lấy mô hình tự chấm mô hình của chúng tôi bởi vì đây phải là mô hình của đối tượng mà chúng tôi đã tạo ở đây.
Nhưng sau đó chúng ta cần lấy đầu ra của mô hình mạng nơ-ron và do đó chúng ta sẽ thêm vào đây một
số dấu ngoặc đơn mà chúng ta sẽ nhập tốt, trạng thái đầu vào có tên là trạng thái ở đây.
Vì vậy, những gì chúng tôi muốn làm lúc đầu là nhập trạng thái, nhưng bây giờ chúng tôi phải cẩn thận với một số thứ.
Trạng thái trông giống như một trạng thái đơn giản ngay bây giờ, nhưng hãy nhớ rằng trạng thái đó thực sự sẽ trở
thành một bó đuốc bởi vì sau này chúng ta sẽ sử dụng trạng thái self less này để đặt nó làm đối số của hàm hành động
chọn, đối số trạng thái đó là ở đây thực sự sẽ trở thành sau này tự này, trạng thái ít
hơn đó.
Và vì đây là một máy căng đuốc, nên mô hình sẽ chấp nhận nó, vì vậy điều đó tốt.
Nhưng bây giờ chúng tôi có thể cải thiện thuật toán.
Vì vậy, như bạn đã hiểu, State là một ngọn đuốc.
Và như chúng tôi đã nói trước đó, hầu hết các cảm biến được bao bọc thành một biến cũng sẽ chứa một gradient.
Vì vậy, ngay bây giờ những gì chúng ta sẽ làm đầu tiên là quấn trạng thái đầu vào này là một tensor vào một biến ngọn đuốc.
Nhưng vì đây là trạng thái đầu vào, nên sẽ không có sự khác biệt nào.
Chúng tôi sẽ không sử dụng gradient của trạng thái này đối với biến trong các tính toán.
Và do đó những gì chúng ta sẽ làm bây giờ là chuyển đổi trạng thái tensor ngọn đuốc này thành một biến ngọn đuốc.
Như vậy.
Nhưng sau đó để xác định rằng chúng tôi không muốn các gradient trong đồ thị của tất cả các tính toán của
mô-đun PN.
Vâng, chúng tôi sẽ thêm ở đây đưa ra giá trị biến động bằng true.
Vì vậy, bây giờ chúng ta có tensor ngọn đuốc trạng thái của chúng ta thành một biến ngọn đuốc.
Nhưng nhờ tham số bằng true dễ bay hơi này, chúng tôi sẽ không đưa gradient liên quan đến trạng
thái đầu vào này vào biểu đồ của tất cả các phép tính của mô-đun.
Vì vậy, đó là một thủ thuật kỹ thuật khác.
Điều này sẽ giúp chúng ta tiết kiệm một số bộ nhớ và do đó điều này sẽ cải thiện hiệu suất.
Vì vậy, tôi thực sự khuyên bạn nên làm điều này và bây giờ chúng ta sẽ thêm một cái gì đó thú vị hơn.
Đó là về thông số nhiệt độ này mà tôi vừa đề cập.
Vì vậy, tham số nhiệt độ này là tham số cho phép chúng ta điều chỉnh cách mạng
nơ-ron chắc chắn về hành động mà nó sẽ quyết định phát.
Vì vậy, tham số nhiệt độ này sẽ là một số dương, và càng gần 0, mạng nơ-ron càng kém chắc
chắn khi thực hiện một hành động.
Và thông số nhiệt độ này càng cao thì mạng nơ-ron càng chắc chắn về hành động mà nó
quyết định phát.
Và để thêm thông số này, tôi sẽ nhân các đầu ra, là giá trị cue với thông số nhiệt độ
này.
Vì vậy, hãy bắt đầu ví dụ, với bảy và tôi sẽ chỉ rõ ở đây nhận xét nhỏ T bằng bảy.
Vì vậy, đó là thông số nhiệt độ mà tôi đang đặt bằng bảy.
Chúng tôi sẽ thử một số cái khác, nhưng tôi chỉ muốn bắt đầu với một cái nhỏ vì bạn sẽ
thấy điều đó với một cái nhỏ.
Xe của chúng ta vẫn sẽ hoạt động như một loại côn trùng nào đó.
Nhưng sau đó bằng cách tăng thông số nhiệt độ này, mã của chúng ta sẽ giống một chiếc ô tô hơn.
Và bên cạnh đó, việc điều khiển ô sẽ tốt hơn rất nhiều.
Và điều đó có ý nghĩa vì thông số nhiệt độ này càng cao thì xác suất giá trị Q
thắng sẽ càng cao.
Vì ví dụ, nếu chúng ta có max mềm của các giá trị Q, hãy lấy một số con số đơn giản.
Một hai ba.
Ví dụ: nếu nhồi tối đa từ 1 đến 3 bằng 0. 04, oh điểm 11 và 0. 85.
Sau đó, bằng cách tăng nhiệt độ bằng cách lấy nhiệt độ cao hơn, ngay bây giờ nhiệt độ bằng
một.
Bằng cách lấy nhiệt độ cao hơn chẳng hạn như hai.
Vì vậy, tối đa mềm.
Hãy sao chép nó và nhân nó với.
Ví dụ: hai hoặc ba máy Mac nhồi bông có cùng giá trị Q, nhưng nhân với thông số nhiệt độ
này của ba.
Chà, chúng ta sẽ nhận được một cái gì đó giống như 0 cho giá trị Q đầu tiên vì điều này có xác suất rất thấp.
Vì vậy, đó là một cái gì đó xung quanh 0 sau đó là một cái gì đó rất nhỏ đối với xác suất thứ hai bởi vì
đây vẫn là một xác suất thấp.
Vì vậy, giả sử, ví dụ, 0. 02 nhưng sau đó là xác suất thứ ba vì nó là xác suất lớn nhất
và khá cao, bằng cách tăng nhiệt độ, xác suất này sẽ còn lớn hơn vì chúng ta sẽ
chắc chắn hơn rằng đây là giá trị Q phù hợp tương ứng với hành động chúng ta phải
chơi.
Và do đó đây sẽ là một cái gì đó giống như điểm 98.
Bây giờ bằng cách tăng thông số nhiệt độ này, nơi chúng tôi thậm chí còn chắc chắn hơn rằng hành động thứ ba
ở đây phải là hành động để chơi, bởi vì xác suất cho giá trị Q của hành động này không chỉ
là lớn nhất mà còn rất cao.
Vì vậy, đó là những gì thông số nhiệt độ này là tất cả về.
Đó là về sự chắc chắn của hành động mà chúng ta nên quyết định chơi.
Được rồi.
Vì vậy, tôi sẽ xóa bình luận này.
Điều này chỉ để giải thích.
Và bây giờ chúng ta hãy bắt đầu hành động.
Vì vậy, làm thế nào chúng ta sẽ làm điều đó?
Chà, nguyên tắc của phương pháp soft max không chỉ là tạo ra phân phối xác suất cho từng giá trị
Q, mà còn và đó là bước thứ hai của phương pháp soft max này.
Chúng tôi rút thăm ngẫu nhiên từ phân phối này để có hành động cuối cùng của chúng tôi.
Và tất nhiên, chúng ta sẽ có cơ hội cao để nhận được hành động tương ứng với giá trị Q có xác
suất cao nhất, bởi vì đó chính xác là cách hoạt động của một phân phối.
Vậy là xong.
Hãy bắt đầu hành động của chúng tôi.
Vì vậy, chúng tôi sẽ giới thiệu một biến mới mà chúng tôi sẽ gọi là hành động.
Và hành động này sẽ là một phép rút ngẫu nhiên của phân phối xác suất mà chúng ta vừa tạo ở dòng này
trước đó.
Và vậy làm thế nào để chúng ta có được một lượt rút thăm ngẫu nhiên như vậy?
Chà, chúng ta sẽ tính xác suất đạo cụ của mỗi giá trị Q.
Chúng tôi lấy đạo cụ và sau đó chấm, và sau đó chúng tôi sẽ sử dụng chức năng đa danh nghĩa và điều đó sẽ cho chúng tôi
một lượt rút thăm ngẫu nhiên từ các đạo cụ phân phối này.
Vậy đó là tất cả.
Đó là những gì mang lại cho chúng tôi hành động.
Hoàn hảo.
Và tất nhiên bây giờ, chúng ta sẽ quay lại hành động mà có một mẹo nhỏ ở đây.
Chà, thực tế là đạo cụ này trả về nhiều năm cho biến pytorch với một lô giả mà bạn biết thứ
nguyên giả này tương ứng với lô và do đó, để có được kết quả phù hợp mà chúng ta
muốn, đó là hành động không một hoặc hai.
Chúng tôi chỉ cần thêm vào đây dữ liệu và sau đó một số dấu ngoặc và hành động không một hoặc hai mà chúng tôi
đang tìm kiếm được chứa trong các chỉ mục, số không và số không.
Được rồi.
Và chúng ta bắt đầu.
Bây giờ chúng tôi có hành động của chúng tôi.
Nhờ chức năng hành động được chọn này, AI giờ đây sẽ biết hành động nào cần thực hiện tại mỗi thời điểm.
Khủng khiếp.
Vì vậy, bây giờ chúng ta có thể chuyển sang hàm tiếp theo, đó sẽ là hàm học.
Và đó là nơi chúng ta sẽ đào tạo toàn bộ mạng nơ-ron với tất cả sự lan truyền về phía trước và sau đó
là sự lan truyền trở lại bằng cách sử dụng descent gradient ngẫu nhiên.
Về cơ bản, chúng tôi sẽ triển khai toàn bộ quá trình đào tạo mô hình học sâu, vốn là trung tâm của trí
tuệ nhân tạo của chúng tôi.
Vì vậy, tôi không thể chờ đợi để làm điều đó.
Đây sẽ là một hướng dẫn thú vị và vì vậy tôi sẽ gặp lại bạn trong hướng dẫn tiếp theo.
Cho đến lúc đó, hãy tận hưởng.
TÔI.