Xin chào và chào mừng đến với hướng dẫn này.
Được rồi.
Và nói về chúng, điều duy nhất mà chúng ta phải làm bây giờ chỉ là tạo ra hai kết nối tuyến tính, đầy đủ, một
cho diễn viên và một cho nhà phê bình.
Nhưng trước khi làm điều đó, chúng ta cần nhận được số lượng các hành động có thể thực hiện được.
Và vì vậy tôi sẽ gọi một biến mới ở đây sẽ không phải là một biến của đối tượng.
Vì vậy, tôi sẽ không sử dụng self ở đây, nhưng tôi sẽ tạo các đầu ra biến num sẽ đại diện cho số lượng các hành
động có thể xảy ra và để lấy nó ở nơi chúng ta có thể lấy nó từ không gian hành động.
Vì vậy, chúng tôi có không gian hành động của chúng tôi.
Đó sẽ là đầu vào của hàm init khi chúng ta tạo đối tượng và sau đó chúng ta thêm dấu chấm
n để có được số hành động có thể này và bây giờ tác nhân và nhà phê bình sẽ lấy riêng cùng một đầu vào.
Đó là đầu ra của toàn bộ quá trình này ở đây với các chập và LCM.
Vì vậy, nó sẽ lấy cùng một đầu vào, đó là một trạng thái được mã hóa, nhưng sau đó chúng sẽ có hai kết nối thực phẩm
tuyến tính khác nhau để cuối cùng chúng ta thực sự nhận được hai mạng thần kinh, một cho tác nhân và
một cho acrylic.
Vì vậy, hãy tạo hai mạng nơ-ron riêng biệt này.
Nhưng vì chúng tôi đã làm được công việc lớn với mã hóa ở đây, nên những gì chúng tôi cần làm chỉ đơn giản là tạo
ra hai đối tượng, một kết nối tuyến tính, đầy đủ cho tác nhân và một kết nối tuyến tính đầy đủ khác cho
nhà phê bình.
Và đó chính xác là những gì tôi sẽ làm.
Bây giờ tôi sẽ tạo hai đối tượng, một đối tượng đầu tiên cho kết nối thực phẩm tuyến tính của nhà phê
bình, mà tôi sẽ gọi nhà phê bình gạch dưới tuyến tính.
Và để tạo ra kết nối thực phẩm tuyến tính này, bạn biết cách làm.
Chúng ta chỉ cần lấy mô-đun RN và sau đó là lớp tuyến tính mà chúng ta phải
nhập vào, nơi các nơ-ron đầu vào, là đầu ra của tất cả mã hóa này ở đây với
các chập và LCM, tức là 256 nơ-ron.
Vì vậy, đầu vào 256 ở đây và sau đó chúng ta sẽ có một đầu ra vì hãy nhớ đầu ra của mạng nơ-ron cho người chỉ trích là giá trị
của hàm V được áp dụng cho trạng thái đầu vào, cho trạng thái mã hóa đầu vào mà chúng ta
đã thực hiện ở đây.
Vì vậy, nếu chúng ta gọi trạng thái đầu vào se là đầu ra của tất cả điều này.
Đầu ra của mạng nơ-ron của nhà phê bình sẽ là s và do đó nó có một chiều, nó chỉ là
một giá trị.
Và vì vậy ở đây chúng tôi nhập một.
Và hãy nhớ VSE là những gì được chia sẻ giữa các diễn viên để họ có thể nhận được một số thông tin chung mà họ có thể
sử dụng để thực hiện hành động của họ theo cách phù hợp hơn.
Vì vậy, đó là cho mạng lưới thần kinh của nhà phê bình.
Và bây giờ chúng ta hãy tạo mạng lưới diễn viên mới và do đó tôi thêm ở đây tự, diễn viên chấm, tuyến tính và
giống nhau.
Chúng tôi đã có trạng thái mã hóa đầu vào, vì vậy bây giờ chúng tôi chỉ cần thêm một kết nối tuyến
tính đầy đủ và do đó nói rằng chúng tôi lấy mô-đun RN, sau đó là lớp tuyến tính và bây giờ là như vậy.
Mạng nơ-ron của tác nhân này sẽ có trạng thái được mã hóa có kích thước là 256.
Vì vậy, 256 ở đây.
Nhưng sau đó đầu ra sẽ khác vì tất nhiên bạn biết nó là đầu ra của mạng nơ-ron cho tác nhân
là các giá trị Q, giá trị Q của trạng thái đầu vào, trạng thái mà chúng ta đã mã hóa ở đây
và tấm hành động.
Vì vậy, một lần nữa, nếu chúng ta gọi trạng thái được mã hóa này mà chúng ta có thể nghe thấy SW và hành động đóng vai trò đầu
ra của tuyến tính hoạt động mạng nơ-ron này sẽ là Q khảo nghiệm.
Và vì bạn biết đấy, chúng tôi có một giá trị cho mỗi hành động, do đó chúng tôi không có đầu ra.
Giá trị Q và do đó đầu ra ở đây sẽ không có giá trị nào.
Kết quả đầu ra vì không có đầu ra nào thực sự là số giá trị Q.
Được rồi, hoàn hảo.
Vì vậy, nếu bạn muốn, tôi có thể viết cho bạn.
Đầu ra ở đây đối với nhà phê bình là s trong đó s là trạng thái được mã hóa và đối với tác nhân, đầu ra là Q là a.
Được rồi.
Vì vậy, điều rất quan trọng là phải hiểu sự khác biệt này ở đây và hiểu rằng do đó chúng ta có hai mạng
nơ-ron riêng biệt, một dành cho nhà phê bình và một dành cho tác nhân.
Được rồi, hoàn hảo.
Vì vậy, chúng tôi gần như đã hoàn thành điều này trong chức năng này.
Bây giờ điều quan trọng nhất đã xong.
Việc còn lại duy nhất mà chúng ta phải làm là khởi tạo tất cả trọng số của hai mạng nơ-ron đó và
tất cả độ lệch.
Và tất nhiên, để làm điều đó, chúng ta sẽ sử dụng hai hàm mà chúng ta đã thực hiện trước đó,
đó là khởi tạo cột chuẩn hóa và trọng số trong đó.
Vì vậy, chúng ta hãy làm điều đó nhanh chóng.
Nó sẽ khá dễ dàng và khá nhanh chóng.
Vì vậy, trước tiên chúng ta sẽ khởi tạo một số trọng số ngẫu nhiên và để làm điều này, chúng ta sẽ áp dụng hàm
init weights cho đối tượng của chúng ta.
Vì vậy, ở đây chúng ta phải tự lấy đối tượng của mình và đối với đối tượng của chúng ta, chúng ta đã áp dụng hàm weights init.
Vì vậy, bên trong chúng ta chỉ cần nhập hàm weights init và chúng ta bắt đầu.
Điều đó sẽ áp dụng chức năng này cho đối tượng của chúng tôi.
Và bằng cách làm này, chúng tôi chỉ khởi tạo một số trọng số ngẫu nhiên để có được kết quả học tập tối ưu trong tương lai về các
trọng số này.
Và bây giờ những gì chúng ta phải làm là chuẩn hóa đặc biệt cho diễn viên và nhà phê bình.
Nhưng hãy nhớ, tôi nghĩ rằng tôi đã nói điều này trong các hướng dẫn trước, chúng ta sẽ không đặt một phương sai giống
nhau cho tác nhân trong nhà phê bình.
Tác nhân sẽ nhận được độ lệch chuẩn nhỏ, phương sai nhỏ, và nhà phê bình sẽ nhận được độ lệch lớn.
Và tại sao chúng tôi làm điều này?
Mục đích của việc đưa ra độ lệch chuẩn nhỏ của các trọng số cho tác nhân và độ lệch chuẩn lớn của các trọng
số cho nhà phê bình là gì?
Chà, điều đó cho phép quản lý việc khám phá giao dịch và khai thác.
Đó chính xác là mục đích của việc làm này.
Bằng cách đưa ra một phương sai nhỏ cho tác nhân và một phương sai lớn cho nhà phê bình, chúng tôi sẽ
quản lý tốt việc khám phá và khai thác.
Vì vậy, chúng ta hãy làm điều này.
Đầu tiên chúng ta hãy quan tâm đến diễn viên để chúng ta tự nhận hay phản đối.
Sau đó, chúng ta sẽ lấy mạng nơ-ron của tác nhân của chúng tôi, đó là tác nhân tuyến tính.
Sau đó, chúng ta sẽ truy cập các trọng số của mạng nơ-ron này của tác nhân, và nhớ truy cập dữ liệu
của các trọng số.
Chúng tôi cần thêm dữ liệu đó.
Được rồi.
Vì vậy, với điều này, chúng tôi nhận được các trọng số và bây giờ chúng tôi sẽ sử dụng chức năng khởi tạo các cột chuẩn hóa của chúng tôi.
Vì vậy, tôi đang sao chép điều này dựa trên điều đó ở đây.
Và chúng ta sẽ nhập làm đối số độ lệch chuẩn mà chúng ta muốn các trọng số này có.
Nhưng trước tiên, hãy nhớ rằng, hàm này có hai đối số.
Đầu tiên là các trọng số chúng ta muốn khởi tạo.
Vì vậy, chúng ta chỉ cần lấy nó một lần nữa và dán nó vào đây.
Và đối số thứ hai là độ lệch chuẩn này mà chúng ta muốn các trọng số này có.
Vì vậy, như chúng tôi đã nói, chúng tôi muốn một độ lệch chuẩn nhỏ cho diễn viên và độ lệch chuẩn nhỏ sẽ bằng 0. 01 hoàn hảo.
Vì vậy, đó là trọng số của mạng lưới thần kinh của tác nhân.
Bây giờ chúng ta hãy quan tâm đến độ lệch của mạng thần kinh của tác nhân.
Và do đó, ở đây chúng ta sẽ làm gần như tương tự.
Chúng tôi sẽ sao chép điều này dựa trên ở bên dưới, thay thế trọng số bằng độ chệch để đánh giá độ chệch.
Và sau khi dữ liệu, chúng tôi chỉ cần thêm điền đó và ghi nhớ bên trong đầu vào là số 0 vì chúng tôi muốn tất cả
độ lệch được khởi tạo bằng 0.
Vì vậy, thực ra tôi không nghĩ dòng này là cần thiết vì như bạn nhớ, độ lệch đã được khởi
tạo bằng 0 với hàm điền này trong hàm weights init.
Vì vậy, bạn biết đấy, chúng tôi đang làm điều này chỉ để đảm bảo rằng độ lệch thực sự được khởi tạo bằng 0, nhưng tôi nghĩ rằng nó
đã được thực hiện ở đây.
Nhưng dù sao, bây giờ chúng tôi chắc chắn 100%.
Được rồi.
Và bây giờ chúng ta sẽ làm điều tương tự đối với nhà phê bình.
Vì vậy, hãy hiệu quả và hãy sao chép hai dòng này.
Hãy dán chúng ở đây và ở đây.
Chúng tôi sẽ thay thế diễn viên bằng nhà phê bình.
Ở đây và bây giờ cũng vậy.
Điều duy nhất mà chúng ta phải thay đổi chỉ là độ lệch chuẩn.
Chúng tôi muốn các nhà phê bình có trọng số của mạng lưới mới.
Và như bạn nhớ, chúng tôi muốn lần này là một độ lệch chuẩn lớn và thay vì. 01, chúng tôi sẽ nhập
một.
Vậy là xong.
Chúng ta có độ lệch chuẩn nhỏ đối với trọng số của mạng mới của tác nhân và độ lệch chuẩn lớn đối với
trọng số của mạng nơ-ron của tác nhân phê bình.
Và tất nhiên, chúng ta đừng quên thay thế diễn viên ở đây bằng cách tạo.
Được rồi.
Và bây giờ chúng tôi tốt.
Mát mẻ.
Vì vậy, bây giờ chúng ta có hai việc còn lại để làm.
Đầu tiên là khởi tạo thiên vị của STM.
Và để làm điều này, chúng ta lấy đối tượng của mình vì LCM thuộc về đối tượng của chúng ta.
Sau đó, chúng tôi lấy STM của chúng tôi, sau đó DOT, và sau đó chúng tôi sẽ nhận được hai loại thiên vị có
trong STM.
Đó là bias gạch dưới i h và một còn lại là bias gạch dưới h h.
Vì vậy, đó là hai loại thiên vị trong LCM và giống nhau, chúng sẽ được khởi tạo bằng 0.
Vì vậy, trước tiên chúng tôi truy cập vào dữ liệu và sau đó chúng tôi sử dụng hàm điền dấu gạch dưới để điền vào tất cả sự thiên vị này bằng các
số không.
Khởi tạo chúng bằng các số không.
Được rồi.
Và bây giờ đối với nhóm thiên vị thứ hai, chúng tôi thêm vào đây.
Cùng một bit, chúng tôi thay thế i h bằng h h.
Được rồi, vì vậy điều đó khởi tạo thiên vị của nhóm LSB bằng các số không.
Và bây giờ điều cuối cùng chúng ta cần làm là sử dụng một phương thức được kế thừa từ NAT module, đó
là phương thức train.
Và về cơ bản đó chỉ là một phương pháp đặt mô-đun ở chế độ tàu.
Vậy công dụng của nó là gì?
Chà, việc sử dụng là nó cho phép kích hoạt nếu có bất kỳ trường hợp bỏ qua và chuẩn hóa hàng loạt.
Và do đó, để sử dụng nó, chúng tôi chỉ cần thêm tự chấm tàu và điều đó đặt mô-đun ở chế độ đào tạo hoàn hảo.
Vậy là chúng ta đã thực hiện xong với hàm init.
Chúng tôi có sự phức tạp của chúng tôi, chúng tôi có lshtm, chúng tôi có hai mạng thần kinh riêng biệt dành cho nhà
phê bình và tác nhân và tất cả các trọng số và thiên vị đều được khởi tạo tốt.
Vì vậy, đó là tất cả tốt.
Chúng tôi đã sẵn sàng để chuyển sang bước tiếp theo, đó là làm cho chức năng chuyển tiếp, tất nhiên
sẽ truyền tín hiệu về phía trước ngay từ đầu với các hình ảnh đầu vào ban đầu trong toàn bộ não cho đến
khi chúng tôi nhận được đầu ra.
Vì vậy, hãy làm điều đó trong hướng dẫn tiếp theo.
Và cho đến khi đó, hãy tận hưởng tôi.