Xin chào và chào mừng bạn đến với hướng dẫn Python này.
Được rồi, chúng tôi vừa cập nhật bộ nhớ sau khi đạt đến trạng thái mới.
Và bây giờ chúng ta hãy quan tâm đến bản cập nhật tiếp theo.
Theo bạn bây giờ, đâu sẽ là bản cập nhật tiếp theo?
Về cơ bản, chúng ta đã thực hiện xong một quá trình chuyển đổi.
Chúng tôi đã xác định ngày thành phần cuối cùng của quá trình chuyển đổi, đó là trạng thái mới.
Vì vậy, bây giờ giống như chúng ta đang bắt đầu lại từ đầu.
Và khi chúng ta bắt đầu lại từ đầu, bạn biết đấy, chúng ta đang ở trong tình trạng môi
trường mới này.
Và vì vậy chúng ta cần làm gì bây giờ một cách tự nhiên?
Tất nhiên, đó là để chơi một hành động vì chúng tôi đã có quan sát về trạng thái mới.
Vì vậy, bây giờ điều mà chúng ta phải làm là chơi một hành động.
Và do đó, điều chúng ta cần làm bây giờ tất nhiên là sử dụng chức năng select action để chơi action.
Vì vậy, chúng ta hãy làm điều đó.
Hãy tạo một hành động biến mới và hãy chơi hành động với hàm hành động chọn.
Vì vậy, trước tiên tôi đang tự xác định rằng hàm hành động chọn là một phương thức của đối tượng của
lớp khác sẽ được tạo.
Vì vậy, tự chấm hành động chọn.
Ở đây chúng tôi bắt đầu, tự chấm chọn hành động.
Và tất nhiên vì hàm hành động chọn lấy trạng thái làm đầu vào vì tất nhiên hàm hành
động chọn sẽ trả về đầu ra của mạng nơ-ron khi trạng thái đầu vào hiện tại đi vào
mạng nơ-ron.
Vì vậy, chúng ta phải nhập trạng thái đầu vào ở đây.
Và vì đó là trạng thái mà chúng ta vừa đạt được trong môi trường hiện tại mà trạng thái đầu vào
tất nhiên là trạng thái mới bởi vì trạng thái mà chúng ta vừa đạt được vào thời điểm hiện tại là trạng thái mới.
Vì vậy, trong chức năng hành động chọn, tôi đang nhập trạng thái mới.
Được rồi.
Vì vậy, với dòng mã này, chúng tôi chỉ cần chơi hành động mới sau khi đạt đến trạng thái mới.
Được chứ.
Và bây giờ chúng tôi chơi nó trong thực tế, chúng tôi nhận được phần thưởng và do đó chúng tôi nhận được phản hồi với
phần thưởng.
Và do đó, nếu chúng ta có hơn 100 phần tử trong bộ nhớ thì đã đến lúc phải học.
Và do đó, những gì chúng ta phải làm bây giờ là những gì đến một cách hợp lý sau khi lựa chọn một hành
động, tất nhiên, đó là tìm hiểu nhu cầu, bắt đầu học nếu hành động đó đang thực hiện đúng cách.
Và bây giờ vì nó chỉ đóng vai trò hành động mà chúng tôi sẽ làm cho AI học hỏi từ các hành động của nó trong
100 sự kiện vừa qua.
Nhưng trước khi áp dụng chức năng học này, chúng ta phải tạo điều kiện if này để đảm bảo rằng chúng ta đã đạt hơn
100 sự kiện bởi vì, bạn biết đấy, chúng ta đang học từ các mẫu ngẫu nhiên của
bộ nhớ.
Bạn biết đấy, chúng tôi có bộ nhớ khổng lồ gồm 10.000 phần tử.
Chúng tôi đang lấy một số mẫu ngẫu nhiên của bộ nhớ gồm 100 phần tử.
Và AI đang học hỏi từ thông tin có trong 100 mẫu chuyển đổi ngẫu nhiên này.
Vì vậy, hãy cứ làm điều kiện này nếu để đảm bảo rằng số phần tử của bộ nhớ, bộ nhớ tự
chấm rồi hãy cẩn thận.
Chỉ cần một mẹo nhỏ ở đây.
Bộ nhớ tự chấm là đối tượng của lớp bộ nhớ phát lại, nhưng sau đó lớp bộ nhớ phát lại có một
thuộc tính là bộ nhớ.
Vì vậy, trên thực tế, chúng ta cần phải tự ghi nhớ.
Bộ nhớ đó, bộ nhớ đầu tiên là đối tượng của lớp bộ nhớ phát lại và bộ nhớ thứ hai là thuộc tính ở
đây là bộ nhớ tự.
Vì vậy, nếu số phần tử trong bộ nhớ là những gì chúng ta muốn nó lớn hơn 100 thì được tô màu.
Và sau đó điều gì xảy ra?
Chà, chúng ta có thể học, nhưng trước khi học, chúng ta cần lấy mẫu ngẫu nhiên gồm 100 phép chuyển đổi.
Và điều này chúng ta có thể nhận được với hàm mẫu.
Và vì hàm mẫu trả về các lô khác nhau, các trạng thái đặt thời gian t các trạng thái là 20 cộng
với một.
Các hành động là thời gian t và phần thưởng cho thời gian t.
Chà, những gì chúng ta cần làm bây giờ là tạo một số biến mới sẽ là lô các trạng thái tại
thời điểm t là lô các trạng thái tiếp theo, lô phần thưởng và loạt các hành động.
Và chúng ta có thể chỉ cần đặt tên giống như chúng ta đã đặt cho các đối số ở đây và dán nó vào đây.
Và các biến này sẽ bằng với những gì hàm mẫu trả về vì nó trả về chính xác các lô
trạng thái này.
Tiếp theo nêu phần thưởng và hành động.
Vì vậy, những gì chúng ta đơn giản cần làm bây giờ là lấy đối tượng bộ nhớ của chúng ta trước.
Và sau đó từ đối tượng bộ nhớ này, chúng ta sẽ sử dụng phương thức mẫu sẽ lấy làm đầu vào.
Chà, số lượng chuyển đổi mà chúng tôi muốn AI của mình học được từ đó là 100.
Đó là lý do tại sao chúng tôi đảm bảo rằng bộ nhớ có hơn 100 lần chuyển đổi.
Vì vậy, nó sẽ học từ 100 quá trình chuyển đổi của bộ nhớ.
Như vậy việc học sẽ tốt hơn rất nhiều.
Và vì vậy bây giờ chúng ta hãy biến việc học này thành hiện thực.
Chà, vì phương thức học là một phương thức của lớp khuếch tán của chúng ta, nên chúng ta cần truy cập
phương thức học này từ các đối tượng trong tương lai sẽ được tạo từ lớp khác.
Và do đó, những gì chúng ta cần lấy là bản thân.
Vì vậy, bản thân tham chiếu đối tượng đó đến lớp và sau đó học như phương pháp học này, phương pháp học mà chúng ta
nhập vào.
Tất nhiên những người này ở đây, lô ghi lô, ngày tiếp theo, phần thưởng theo lô và hành động theo lô.
Vì vậy, đây là các lô của chúng tôi được lấy mẫu từ bộ nhớ của chúng tôi và chúng tôi nhận được 100 trong số đó bởi vì chúng tôi có 100 lần chuyển đổi.
Và từ 100 lần chuyển đổi này, chúng tôi có 100 trạng thái, 106 trạng thái, 100 phần thưởng và 100 hành động.
Vì vậy, chúng ta hãy chơi ở đây và ở đó chúng ta đi.
Bây giờ việc học sẽ diễn ra.
Nó sẽ xảy ra từ tất cả các lô ngẫu nhiên này.
Hoàn hảo.
Và bây giờ những gì chúng ta cần làm là cập nhật cuối cùng, bạn biết đấy, đạt đến trạng thái mới và chơi một
hành động.
Chà, chúng tôi đã có hành động để chơi, nhưng chúng tôi vẫn không cập nhật hành động đó là bản thân của chúng tôi, biến hành động
cuối cùng đó.
Vì vậy, hãy chắc chắn rằng chúng ta không quên điều này.
Hãy làm điều đó ngay bây giờ.
Chúng tôi sẽ cập nhật hành động cuối cùng tự chấm hành động cuối cùng bằng và tất nhiên hành động mà chúng tôi vừa chơi ở đây với
chức năng hành động chọn.
Được rồi.
Vì vậy, bây giờ hành động cuối cùng được cập nhật sau đó.
Tương tự cho trạng thái mới.
Chúng tôi đã đạt đến trạng thái mới, nhưng chúng tôi vẫn chưa cập nhật trạng thái cuối cùng vì tất nhiên trạng thái cuối
cùng là trước trạng thái lúc 20.
Nhưng kể từ bây giờ chúng tôi đạt đến trạng thái mới là T cộng một tại một thời điểm T cộng một.
Chà, trạng thái cuối cùng trở thành trạng thái mới này ở đây và do đó chúng tôi cũng cần cập nhật nó.
Tự chấm trạng thái cuối cùng bằng trạng thái mới của chúng tôi.
Chúng ta bắt đầu.
Và bây giờ chúng ta cần cập nhật những gì?
Chà, chỉ còn một thứ.
Tất nhiên, đó là phần thưởng.
Và phần thưởng chính xác là phần thưởng mà chúng ta nhận được trong thực tế.
Vì vậy, đó sẽ là đối số của chức năng cập nhật này, nếu chúng tôi thực hiện kết nối với bản đồ
của mình, sẽ là phần thưởng cuối cùng.
Đó là phần thưởng chúng ta nhận được ngay sau khi chơi hành động ở trạng thái mới đạt được này.
Vì vậy, nếu chúng ta tiếp tục với một số đã gửi, phần thưởng cuối cùng này sẽ bị trừ đi một phần.
Nếu chúng tôi tiến xa hơn mục tiêu, chúng tôi sẽ nhận được phần thưởng tốt hơn một chút.
Trừ 0. 2.
Nếu chúng ta tiến gần hơn đến mục tiêu, chúng ta sẽ nhận được một phần thưởng nhẹ.
Và nếu chúng tôi đến quá gần một mép của bản đồ, thì đó sẽ là một hình phạt tồi tệ.
Chúng tôi sẽ nhận được trừ một cho mỗi cạnh.
Vì vậy, đó là cái cuối cùng chúng tôi nhận được.
Trong thực tế, đó là điều xảy ra thực tế trên bản đồ.
Và đây sẽ là đối số của hàm cập nhật.
Lời cuối cùng này đây, chính xác là lời này.
Và vì đây là đối số của hàm cập nhật tương ứng với phần thưởng này
ở đây và do đó, biến phần thưởng cuối cùng được khởi tạo ở đầu trong hàm init này sẽ trở thành phần thưởng mới mà
chúng ta nhận được.
Trong thực tế, đó là phần thưởng hoặc đó là phần thưởng ít hơn.
Được rồi.
Vì vậy, bây giờ chúng tôi đã cập nhật phần thưởng cuối cùng của mình.
Và bây giờ vì chúng tôi vừa nhận được phần thưởng cuối cùng của mình, nên giờ chúng tôi có thể cập nhật cửa sổ phần thưởng.
Bạn nhớ cửa sổ phần thưởng mà chúng ta đã khởi tạo ở đây là một trong những biến của đối tượng của lớp chúng ta.
Đó là cửa sổ để theo dõi quá trình đào tạo này diễn ra như thế nào bằng cách lấy điểm trung bình
của 100 phần thưởng cuối cùng.
Vì vậy, nó sẽ giống như một cửa sổ trượt cho chúng ta thấy ý nghĩa của phần thưởng đang phát triển như thế nào.
Và vì chúng tôi vừa nhận được phần thưởng cuối cùng của mình, nên chúng tôi có thể cập nhật cửa sổ phần thưởng.
Và vậy làm thế nào để chúng tôi cập nhật nó?
Chà, chúng ta chỉ cần thêm phần thưởng cuối cùng này vào cửa sổ.
Và do đó, những gì tôi sẽ làm là giành lấy phần thưởng của mình.
Phục vụ cửa sổ phần thưởng đó.
Nó đây.
Và sau đó tôi sẽ sử dụng hàm append.
Và bên trong hàm append, chúng ta cần nhập phần tử vào.
Chúng tôi muốn thêm vào cửa sổ phần thưởng.
Và đó là tất nhiên, phần thưởng.
Được rồi.
Hoàn hảo.
Và vì cửa sổ phần thưởng này sẽ có kích thước cố định, bạn biết đấy, nó sẽ không phải là một cửa sổ
đang phát triển.
Nó sẽ là một cửa sổ có kích thước cố định trượt theo thời gian để cho chúng ta thấy sự phát triển của phần thưởng.
Và vì vậy bây giờ chúng ta cần quyết định kích thước của cửa sổ này.
Và nó chỉ đơn giản là số lượng phần thưởng mà chúng ta sẽ có trong cửa sổ này.
Và vì vậy, ví dụ, chúng ta hãy lấy, bạn biết đấy, 1000 cuối cùng có nghĩa là 100 từ cuối cùng.
Và để đảm bảo điều đó, chúng ta sẽ thêm nếu sau đó, Len, thì chúng ta sẽ nhận phần thưởng của mình.
Cửa sổ.
Và chúng tôi chỉ cần thêm vào đây nếu số phần tử trong cửa sổ phần thưởng lớn hơn 1000, tốt,
những gì chúng tôi muốn làm là xóa phần tử đầu tiên của cửa sổ phần thưởng này.
Và phần tử đầu tiên của cửa sổ phần thưởng này có chỉ số bằng không.
Được rồi.
Và bây giờ chúng tôi đảm bảo rằng cửa sổ phần thưởng này sẽ không bao giờ nhận được nhiều hơn 1000 phần tử.
Đó là 1000 nghĩa là 100 phần thưởng cuối cùng.
Thật hoàn hảo.
Đây sẽ là một cửa sổ có kích thước cố định để chúng ta có thể xem liệu phần thưởng có tăng lên hay không và do đó
việc đào tạo có diễn ra tốt đẹp hay không.
Và theo đó, nếu thẻ làm những gì chúng ta muốn.
Hoàn hảo.
Và bây giờ còn lại một việc nhỏ cần làm theo bạn.
Nó sẽ ra sao?
Chà, hãy nhớ rằng chức năng cập nhật này không chỉ cập nhật các yếu tố khác nhau của quá trình chuyển đổi
trong cửa sổ phần thưởng mà còn trả về hành động đã chơi khi đạt đến trạng thái mới này.
Đó là lý do tại sao chúng tôi có trong bản đồ hành động ngang bằng với cập nhật chấm não.
Lời cuối cùng, tín hiệu cuối cùng.
Và do đó nó phải trả lại một cái gì đó và có một cái gì đó nó phải trả lại tất
nhiên là hành động.
Vì vậy, điều đơn giản cuối cùng chúng ta cần làm ở đây chỉ là hành động trở lại.
Hành động được hiển thị khi đạt đến trạng thái mới.
Và đó là nó.
Chức năng cập nhật của chúng tôi đã sẵn sàng.
Nó sẽ thực hiện tất cả các cập nhật được yêu cầu và nó sẽ trả lại hành động khi đạt đến trạng thái mới.
Thật hoàn hảo.
Đó là hành động khó khăn cuối cùng phải thực hiện cho tất cả quá trình này.
Bây giờ phần còn lại sẽ là đồ trẻ con.
Chúng tôi sẽ chỉ tạo một chức năng tính điểm để trả về phương tiện của phần thưởng và cửa sổ phần thưởng.
Sau đó chúng ta sẽ thực hiện chức năng lưu để lưu lại bộ não của ô tô bất cứ khi nào bạn muốn thoát ứng
dụng và quay lại nó.
Và tất nhiên, vì bạn muốn có thể tải bộ não của chiếc xe của mình khi bạn quay trở lại nó,
hãy quay lại ứng dụng.
Chà, chúng ta sẽ kết thúc bằng cách tạo một hàm tải, hàm này sẽ tải mô hình của bạn sau khi bạn lưu mô hình của mình
bằng chức năng lưu.
Vì vậy, ba chức năng để làm bên trái, nhưng nó sẽ đơn giản.
Và sau đó chúng ta sẽ có phần thú vị nhất của mô-đun đầu tiên này.
Đó là bản demo.
Chúng tôi sẽ xem liệu API có hoạt động hay không.
Chúng tôi sẽ xem liệu chiếc xe có đạt được mục tiêu hay không và chúng tôi sẽ xem chúng tôi có thể cải thiện nó như thế nào.
Và cuối cùng bạn sẽ xây dựng được AI đầu tiên của mình.
Vì vậy, tôi không thể chờ đợi để bắt đầu bản demo.
Trước tiên, hãy thực hiện ba chức năng này.
Và cho đến khi đó, hãy tận hưởng.
TÔI.