Xin chào và chào mừng đến với hướng dẫn này.
Hướng dẫn đặc biệt này sẽ cực kỳ thú vị vì chúng ta đang tiến gần hơn đến thuật toán a3c.
Bạn sẽ thấy rằng những gì chúng tôi sắp triển khai, và được gọi là nguồn hoặc dấu vết đủ điều
kiện, thực sự là một thuật toán của các chỉ trích, tác nhân, thuật toán hoạt động không đồng bộ, nhưng
chúng tôi không thể coi nó là A3 C vì chúng tôi vẫn sẽ có một tác nhân, nhưng
bạn vẫn sẽ thấy rằng những gì chúng tôi sắp triển khai thực sự được lấy từ bài báo sau, bài báo này là
phương pháp đồng bộ để học tăng cường sâu.
Và chính trong bài báo này, bạn sẽ tìm thấy ba thuật toán chính mà chúng tôi sẽ triển khai như là phần thưởng cuối cùng
của khóa học này.
Nhưng như tôi đã nói, chúng tôi đang tiến gần hơn đến nó bởi vì mô hình mà chúng tôi sẽ triển khai ngay bây giờ thực sự
là mô hình này, không đồng bộ và từng bước.
Q Học tập.
Đó là một trong những.
Vì vậy, đó gần như là ba chìa khóa, là chìa khóa sau đó, nhưng với một tác nhân.
Và điều mạnh mẽ là đây và bước Q học, chúng ta sẽ tìm hiểu phần thưởng tích lũy và
tìm hiểu mục tiêu tích lũy ở các bước cuối thay vì một bước như trước đây.
Và đó là những gì sẽ làm cho việc đào tạo hiệu quả hơn nhiều và do đó AI của chúng ta mạnh mẽ hơn nhiều.
Vì vậy, chúng tôi thực sự có mã giả cho thuật toán này.
Đây là thuật toán ngay tại đây.
Vì vậy, hãy nhấp vào nó và bắt đầu.
Đó là thuật toán mà chúng tôi sắp thực hiện.
Nhưng hãy nhớ rằng, chỉ với một tác nhân, sự khác biệt là ở đây họ thực hiện một hành động theo chính sách
tham lam Epsilon dựa trên các giá trị Q cho trạng thái hiện tại và hành động được thực hiện.
Nhưng trong mọi trường hợp, chúng tôi đã không thực hiện chính sách tham lam của epsilon.
Chúng tôi đã triển khai mức tối đa mềm, nhưng phần còn lại vẫn như cũ.
Như bạn có thể thấy, chúng tôi sẽ tính toán phần thưởng tích lũy trên các bước kết thúc, thực tế là mười bước, hãy nhớ điều đó.
Và các bước bằng mười.
Và vì vậy, chúng tôi sẽ triển khai dòng mã này trong thuật toán mà chúng tôi sắp triển khai ngay bây giờ.
Chúng tôi sẽ đạt được điều này và chủ yếu là chúng tôi cũng sẽ thực hiện điều này.
Bạn sẽ thấy rằng chúng tôi sẽ nhận được tối đa giá trị Q cho trạng thái hiện tại và hành động hiện tại.
Và theta này ở đây chỉ là tham số mục tiêu.
Vì vậy, chúng ta hãy làm điều này, hãy tấn công thuật toán này.
Cái này được gọi là không đồng bộ và tô màu theo bước, nhưng chúng ta không có quyền nói không đồng bộ khi chúng ta liên
quan, bởi vì chúng ta chỉ có một tác nhân, nhưng do đó chúng ta có thể gọi nó là tính đủ điều kiện
học N bước Q, theo dõi hoặc nguồn chẵn.
Được rồi, hãy làm điều này.
Nó sẽ khá vui.
Về cơ bản chúng ta có thể theo dõi mã giả ở đây và đó là những gì chúng ta sẽ làm.
Và như bạn có thể thấy, một tham số mà chúng ta cần là gamma, tham số gamma là tham số
phân rã.
Và do đó, chúng tôi sẽ bắt đầu bằng cách giới thiệu một biến cho tham số gamma này và chọn một giá trị.
Vì vậy, chúng ta hãy làm điều này.
Chúng tôi thực sự không cần một lớp để thực hiện điều này.
Chúng tôi có thể thực hiện điều này một cách đơn giản với một hàm vì bạn biết đấy, chúng tôi không thực sự cần tạo các đối
tượng cho mô hình theo dõi tính đủ điều kiện này.
Một chức năng sẽ là đủ vì về cơ bản những gì chúng ta muốn làm là trả lại đầu vào và
mục tiêu để sau này khi đào tạo AI, chúng ta sẵn sàng giảm thiểu khoảng cách giữa dự đoán và
mục tiêu.
Và để có được các dự đoán, chúng ta cần đầu vào vì chúng ta sẽ áp dụng bộ não của mình vào đầu vào để
nhận tín hiệu đầu ra.
Đó sẽ là dự đoán của chúng tôi.
Và sau đó khi chúng tôi có dự đoán và mục tiêu của mình, chúng tôi sẽ sẵn sàng đào tạo AI bằng
cách cố gắng giảm thiểu khoảng cách bình phương giữa dự đoán và mục tiêu.
Vì vậy, đó là toàn bộ điểm của việc này.
Ngay lập tức.
Chúng tôi đang triển khai chức năng này để có thể trả lại các đầu vào này trong các mục tiêu này để chúng tôi có
thể sẵn sàng cho việc đào tạo để giảm thiểu các dự đoán khoảng cách bình phương trừ đi các mục tiêu.
Được rồi, hãy làm điều này.
Như chúng tôi đã nói, chúng tôi muốn triển khai một chức năng.
Chúng tôi bắt đầu với def.
Chức năng này, chúng tôi sẽ gọi nó là một dấu vết gạch dưới tính dễ đọc.
Bạn cũng có thể gọi nó là nguồn.
Bạn cũng có thể gọi nó và gõ màu, bất cứ điều gì bạn muốn, nhưng hãy gọi nó là dấu vết đủ điều kiện.
Và hàm này sẽ nhận một đối số sẽ là một lô và lý do tại sao bạn thực hiện hàng loạt.
Đó là bởi vì chúng tôi sẽ nhận được một số đầu vào và một số mục tiêu vì chúng tôi sẽ đào tạo AI theo
từng đợt.
Và do đó, các đầu vào và mục tiêu sẽ đi vào bên trong một số lô.
Và do đó, đối số đầu vào ở đây là lô này sẽ chứa một số đầu vào và sau đó là một số mục tiêu mà
chúng ta sẽ tính toán.
Vậy là xong.
Đó là lý lẽ duy nhất mà chúng tôi cần.
Bây giờ, hãy vào bên trong hàm và xác định những gì chúng ta cần làm.
Vì vậy, như chúng ta đã thấy trong mã giả của bài báo, chúng ta cần một tham số gamma.
Vì vậy, như chúng tôi đã nói, chúng tôi bắt đầu bằng cách giới thiệu tham số gamma này để gamma bằng và chúng tôi đã có thể quyết định giá
trị và chúng tôi sẽ chọn 4. 99.
Đó là một giá trị tốt cổ điển cho gamma.
Và đừng lo lắng, tôi đã kiểm tra rằng đây là một giá trị tốt cho AI của chúng tôi.
Được rồi, vậy bước tiếp theo.
Bước tiếp theo là chuẩn bị đầu vào của chúng tôi.
Và mục tiêu của chúng tôi vì đó chính xác là những gì chúng tôi muốn trả lại.
Chúng tôi muốn trả lại các đầu vào và các mục tiêu để chuẩn bị đào tạo.
Và vì vậy chúng tôi đã có thể khởi tạo chúng với một danh sách trống.
Tất nhiên, bởi vì trong các đầu vào này bên trong lô, chúng ta sẽ có một số đầu vào tất cả vào một
danh sách.
Và đó là lý do tại sao tôi đang khởi tạo các đầu vào dưới dạng danh sách cũng như các mục tiêu.
Chúng ta bắt đầu.
Vì vậy, chúng tôi đã khởi tạo đầu vào trong mục tiêu của mình.
Và cuối cùng, chức năng theo dõi tính đủ điều kiện này sẽ trở lại.
Một cách chính xác.
Tất nhiên, những đầu vào và những mục tiêu này đã được điền vào.
Chúng tôi sẽ có một số đầu vào và một số mục tiêu được liên kết trong những gì sẽ được trả về bởi hàm.
Được rồi.
Bước tiếp theo.
Bước tiếp theo là lưu trữ vòng lặp for.
Và đó chính xác là vì chúng tôi đang theo dõi mã giả của bài báo, bộ mã này.
Và như bạn thấy, có phần mã lặp lại này và lặp lại chính xác một vòng lặp đầy đủ.
Vì vậy, mã chúng tôi sẽ tính toán phần thưởng tích lũy ngay tại đây được tích lũy qua mười bước.
Và nó được tính toán như thế nào?
Vâng, trong mỗi bước, đó không phải là bước cuối cùng.
Chúng tôi sẽ nhận được tối đa giá trị Q của trạng thái hiện tại mà chúng tôi đang ở trong quá trình này và các bước sẽ chạy.
Và nếu chúng ta đạt đến bộ mười bước cuối cùng, thì, điều này sẽ bằng không.
Tức là chúng tôi không muốn cập nhật nó nữa.
Và sau đó chúng ta có vòng lặp for này, sẽ là một vòng lặp for khác.
Họ không nói lặp lại ở đây, nhưng đó là giống nhau.
Nó sẽ là một vòng lặp thứ hai trong thuật toán của chúng tôi.
Chà, chúng tôi sẽ cập nhật phần thưởng theo cách này bằng cách nhân nó với gamma tham số phân rã và thêm
phần thưởng.
Vì vậy, chúng ta hãy làm điều này.
Hãy quay lại Python và bắt đầu vòng lặp for của chúng ta.
Vì vậy, bốn và những gì sẽ là biến được lặp lại?
Chà, đó sẽ là chuỗi mười bước của chúng tôi, chuỗi mười bước chuyển tiếp của chúng tôi.
Vì vậy, chúng tôi sẽ gọi chuỗi biến này đại diện cho một chuỗi mười chuyển đổi giống như một chuỗi
mười chuyển đổi.
Vì vậy, bốn loạt trong.
Và sau đó bạn nghĩ gì?
Chà, loạt bài của chúng tôi sẽ thuộc về nhóm của chúng tôi, đó là các nhóm mà chúng tôi sẽ đào tạo AI.
Và như vậy đối với chuỗi theo lô, đó là đối với tất cả chuỗi mười chuyển tiếp trong lô đầu vào của chúng tôi.
Chúng ta sẽ làm gì.
Để nhận được phần thưởng tích lũy, bạn sẽ thấy trong mã giả rằng chúng ta cần trạng thái của quá trình chuyển
đổi đầu tiên của bộ truyện và cũng là trạng thái của quá trình chuyển đổi cuối cùng của bộ truyện.
Vì vậy, những gì chúng ta phải làm ngay bây giờ là lấy các trạng thái đầu vào này.
Và vì vậy chúng ta sẽ đặt hai trạng thái đầu vào này vào một biến mà chúng ta sẽ gọi là đầu vào, và chúng
ta sẽ nhận được hai trạng thái đầu vào này, trạng thái đầu tiên của chuỗi và trạng thái cuối cùng mà
chúng ta sẽ đặt thành một mảng không phải sinh học.
Nhưng đừng lo lắng, chúng tôi sẽ không ở lại với dãy số này.
Tất nhiên chúng tôi sẽ chuyển đổi đó thành một biến tổng.
Nhưng bước đầu tiên là đặt chúng vào trạng thái đầu vào, trạng thái đầu tiên trong trạng thái cuối cùng vào một mảng.
Và vì vậy ngay tại đây trong mảng numpy này, chúng ta thêm đầu vào đầu tiên, đó là trạng thái đầu vào của
quá trình chuyển đổi đầu tiên của chuỗi và đó là chuỗi.
Và sau đó để thực hiện chuyển đổi đầu tiên, chúng tôi lấy chỉ số 0 của chuỗi.
Đó là bước chuyển tiếp đầu tiên.
Và sau đó chúng ta có thể truy cập nó bằng cách lấy thuộc tính của nó, đó là trạng thái.
Và đó là bởi vì trong tệp phát lại trải nghiệm của chúng tôi, chúng tôi đã xác định một cấu trúc đặc biệt cho mỗi quá trình
chuyển đổi và bạn biết đấy, cấu trúc, mỗi lần chuyển đổi bao gồm một trạng thái, một hành động, một phần thưởng.
Nhưng sau đó yếu tố cuối cùng được thực hiện.
Vì vậy, cấu trúc đặc biệt này mà chúng tôi được phép sử dụng ngay bây giờ xuất phát từ cách chúng tôi xác định quá trình chuyển đổi
trong phát lại trải nghiệm.
Được rồi.
Vì vậy, với điều này, chúng ta nhận được trạng thái đầu vào của quá trình chuyển đổi đầu tiên và bây giờ chúng ta cũng nhận được trạng
thái đầu vào của quá trình chuyển đổi cuối cùng của chuỗi.
Và để làm được điều này, cũng giống như vậy.
Chúng ta chỉ có thể sao chép cái này.
Và căn cứ vào đó và thay thế số 0 ở đây bằng chỉ số cuối cùng của chuỗi, mà chúng ta có thể truy cập bằng thủ
thuật này trừ đi một chuỗi, trừ đi một trạng thái sẽ nhận được trạng thái đầu vào của quá trình chuyển đổi cuối cùng
của chuỗi.
Được rồi, chúng ta cần đặt hai yếu tố này bên trong một số dấu ngoặc vuông.
Bởi vì đó là những gì được mong đợi bởi chức năng trọng tài.
Và sau đó, một điều quan trọng cần làm vì chúng ta sẽ chuyển đổi nó thành một bộ căng ngọn đuốc và một biến
ngọn đuốc.
Hãy nhớ rằng, một tensor ngọn đuốc theo định nghĩa là một mảng đặc biệt chứa một loại duy nhất.
Và vì vậy chúng ta cần bắt buộc có một loại duy nhất.
Và như thường lệ, chúng ta sẽ chọn kiểu float.
Và vì vậy tôi đang thêm tham số này ở đây D type = bằng và P dot float 32 có thể lấy tham số này và bây giờ chúng ta có thể chuyển đổi tham
số đó thành một tenxơ ngọn đuốc và một biến ngọn đuốc.
Vì vậy, chúng ta hãy làm điều này để làm tốt điều này, trước tiên, chúng ta hãy chuyển đổi nó thành một cảm biến ngọn đuốc.
Và hãy nhớ rằng, chúng ta có thể sử dụng ngọn đuốc từ NumPy.
Sau đó, chúng tôi đi và chúng tôi đặt tất cả các mảng của hai trạng thái đầu vào bên trong bộ căng ngọn đuốc này với ngọn đuốc từ
chúng theo chức năng.
Hoàn hảo.
Vì vậy, điều đó sẽ chuyển đổi các mảng này của trạng thái đầu vào thành một cảm biến ngọn đuốc.
Và bây giờ chúng ta đặt tensor ngọn đuốc này vào một biến ngọn đuốc bằng cách sử dụng lớp biến.
Vì vậy đầu vào sẽ là một đối tượng của lớp biến.
Và trên thực tế, như bạn đã hiểu, lớp biến này nhận tất cả điều này làm đối số và tạo ra
đối tượng.
Được rồi, bây giờ chúng ta nên ngoan.
Chúng tôi có hai đầu vào mà chúng tôi cần.
Đó là trạng thái đầu vào của quá trình chuyển đổi đầu tiên và trạng thái đầu vào của quá trình chuyển đổi cuối cùng.
Và bây giờ, chúng ta đã có đầu vào rồi, chúng ta có thể nhận được gì?
Chúng ta có thể nhận được tín hiệu đầu ra của não bộ của mắt.
Đó là dự đoán.
Nhưng chúng ta sẽ gọi nó là đầu ra.
Đó là tín hiệu đầu ra và để có được đầu ra.
Chà, bây giờ điều đó rất dễ dàng bởi vì chúng ta đã có một bộ não được tạo ra, đó là mạng nơ-ron phức hợp
của chúng ta.
Và vì vậy, chúng ta có thể chỉ cần quét não áp dụng cho đầu vào sẽ trả về dự đoán là
đầu ra đơn giản như vậy.
Và bây giờ chúng ta đã sẵn sàng để chuyển sang bước tiếp theo.
Và bước tiếp theo là bắt đầu tính phần thưởng tích lũy này.
Vì vậy, bây giờ chúng ta sẽ thực hiện giống hệt như thuật toán SE hai của chúng ta, nguồn hay chúng ta nên gọi nó và
các bước.
Q Học tập.
Chúng tôi sẽ giới thiệu biến phần thưởng tích lũy, đây sẽ là phần thưởng tích lũy.
Và chúng ta hãy quay trở lại bài báo.
Như bạn có thể thấy ngay bây giờ, những gì chúng tôi phải làm để nhận được phần thưởng tích lũy này, đó là của chúng tôi ở đây.
Chà, ở mỗi bước trong số mười bước chạy, chúng ta cần cập nhật nó bằng cách thêm số 0 vào phần thưởng tích
lũy này.
Nếu chúng tôi đã đến ngày cuối cùng của chuỗi hoặc giá trị Q tối đa, nếu chúng tôi chưa đạt đến trạng thái cuối cùng của chuỗi,
đó là đối với tất cả các bước ngoại trừ bước cuối cùng.
Vì vậy, hãy đơn giản thực hiện điều này.
Hãy quay lại Python.
Vì vậy, phần thưởng tích lũy này, như chúng ta vừa thấy, sẽ bằng 0. 0.
Nếu.
Chúng tôi đã đến ngày cuối cùng và chúng tôi có thể đi theo điều kiện này theo cách này.
Nếu chuỗi chỉ mục trừ đi một chỉ mục là lần truyền cuối cùng của chuỗi, thì chúng tôi thêm chỉ số đó đã xong vì thực sự được thực hiện là một thuộc tính của
cấu trúc chuyển tiếp này mà chúng tôi đã xác định một lần phát lại có kinh nghiệm, tệp phát lại có kinh
nghiệm của chúng tôi.
Và điều này thực sự đến từ các cấu trúc ngoài trời bởi vì nếu chúng ta truy cập trang web của phòng tập thể dục mở,
thực sự ở đây, tôi đã chuẩn bị cho nó.
Vì vậy, đó là căn bậc hai của không.
Và nếu chúng ta đi đến tài liệu và sau đó nếu chúng ta làm như vậy thì đó là hướng dẫn.
Tôi thực sự khuyến khích bạn hãy xem qua nó.
Bạn có thể điều hành một môi trường, nhưng chủ yếu bạn có thể thấy rằng những quan sát của chúng tôi, đó là những chuyển
đổi của chúng tôi được xác định bởi một quan sát, một phần thưởng.
Và điều này được thực hiện ở đây và điều này được thực hiện chính xác có nghĩa là một quá trình chuyển đổi hoặc một bước đã kết thúc.
Và vì vậy chúng tôi sẽ sử dụng điều này được thực hiện ở đây cho điều kiện if của chúng tôi.
Do đó, nếu chuỗi trừ đi một chấm được thực hiện có nghĩa là nếu quá trình chuyển đổi cuối cùng của chuỗi kết thúc, thì nó đã hoàn thành.
Và do đó, phần thưởng tích lũy này sẽ bằng 0 nếu quá trình chuyển đổi cuối cùng của chuỗi được
thực hiện và khác nếu chúng ta chưa đạt đến lần chuyển đổi cuối cùng.
Như chúng tôi đã nói, phần thưởng tích lũy sẽ được cập nhật với giá trị Q tối đa.
Và vì đầu ra này ở đây là đầu ra của não, đó là các dự đoán của mạng nơ-ron.
Và như bạn đã biết, các dự đoán của mạng nơ-ron là các giá trị hàng đợi được dự đoán.
Chà, đầu ra này chứa các giá trị Q.
Và vì chúng ta cần lấy giá trị Q lớn nhất, nên trước tiên chúng ta cần thêm chỉ mục này vì cấu
trúc chứa các giá trị Q trong chỉ mục một, và sau đó chúng ta cần thêm dữ liệu để truy cập dữ liệu của
cấu trúc đầu ra này.
Bạn biết đấy, nó có cấu trúc đặc biệt của một biến ngọn đuốc.
Vì vậy, với điều này, chúng tôi nhận được các giá trị Q và sau đó chúng tôi muốn lấy giá trị Q lớn nhất.
Và đơn giản là chúng tôi thêm Max đó và bây giờ chúng tôi nhận được chính xác những gì chúng tôi muốn như trong bài báo, giá trị
Q tối đa này cho các trạng thái không phải là T hoàn hảo.
Và bây giờ những gì chúng ta sẽ làm là tạo vòng lặp thứ hai cho vòng lặp thứ hai dành cho mười bước của loạt bài.
Chúng tôi sẽ cập nhật phần thưởng tích lũy theo cách này bằng cách nhân trước với gamma tham số phân rã, mà chúng
tôi đã có, sau đó thêm phần thưởng.
Vì vậy, chúng ta hãy làm điều này.
Chúng tôi thực sự sẽ làm giống hệt như trong mã giả.
Như bạn có thể nhận thấy, họ bắt đầu từ bên phải, vì vậy họ không bắt đầu với bước đầu tiên và đi đến
các bước cuối cùng.
Họ bắt đầu với bước cuối cùng, trừ đi một đến bước đầu tiên để bắt đầu.
Vì vậy, đó chính xác là những gì chúng tôi sẽ làm và
đó là vì chúng tôi muốn đạt được cuối cùng, phần thưởng tích lũy bằng R bằng R bằng không cộng với gamma r một cộng với gamma bình phương hoặc hai dấu
chấm cộng với gamma theo lũy thừa của mười hoặc mười, trong đó một hoặc hai hoặc mười của chúng tôi là phần thưởng nhận được trong mỗi
bước cuối của chuỗi.
Vì vậy, chúng ta hãy giải lao nhanh trước khi thực hiện vòng lặp thứ hai, và 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.