tek4

Deep Q-Network (DQN) – Học Tăng Cường

by - September. 21, 2021
Kiến thức
<p><img class="aligncenter wp-image-6403 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-3.jpg" alt="" width="1000" height="750" /></p> <p style="text-align: center;">Ảnh chụp bởi&nbsp;<a href="https://unsplash.com/@cristianpalmer">Cristian Palmer</a></p> <p>Deep Q-Network, được viết tắt l&agrave; DQN, được ph&aacute;t triển bởi nh&oacute;m DeepMind v&agrave;o năm 2015. N&oacute; c&oacute; thể giải quyết một loạt c&aacute;c tr&ograve; chơi Atari bằng c&aacute;ch kết hợp học tăng cường v&agrave; c&aacute;c mạng nơ-ron học s&acirc;u với quy m&ocirc; lớn. Thuật to&aacute;n được ph&aacute;t triển bằng c&aacute;ch n&acirc;ng cao thuật to&aacute;n học tăng cường (RL) cổ điển, được gọi l&agrave; Q-Learning, với c&aacute;c mạng nơ-ron học s&acirc;u v&agrave; một kỹ thuật l&agrave; Experience replay.</p> <p>Trong tr&ograve; chơi Seaquest dưới đ&acirc;y, DQN học c&aacute;ch đọc c&aacute;c điểm số, bắn kẻ th&ugrave; v&agrave; giải cứu thợ lặn từ những h&igrave;nh ảnh ở dạng th&ocirc;, tất cả đều được học bởi ch&iacute;nh n&oacute;. N&oacute; cũng t&igrave;m ra được những kiến thức m&agrave; ch&uacute;ng ta gọi l&agrave; chiến lược, chẳng hạn như thời điểm n&agrave;o n&ecirc;n đưa t&agrave;u ngầm ngoi l&ecirc;n mặt nước để lấy th&ecirc;m oxy.</p> <p><img class="aligncenter wp-image-6362 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-18.jpeg" alt="anh-minh-hoa" width="770" height="232" /></p> <p style="text-align: center;"><a href="https://jonathan-hui.medium.com/rl-dqn-deep-q-network-e207751f7ae4">Nguồn</a></p> <h1>Phương ph&aacute;p Q-learning</h1> <p>Q-learning sẽ học h&agrave;m gi&aacute; trị của h&agrave;nh động Q(s, a): thực hiện đ&aacute;nh gi&aacute; mức độ hiệu quả để thực hiện một h&agrave;nh động trong một trạng th&aacute;i cụ thể. V&iacute; dụ, đối với vị tr&iacute; tr&ecirc;n b&agrave;n cờ dưới đ&acirc;y, mức độ hiệu quả sẽ ra sao nếu di chuyển con tốt tiến về ph&iacute;a trước hai bước. Ch&uacute;ng ta sẽ g&aacute;n một gi&aacute; trị v&ocirc; hướng dựa tr&ecirc;n lợi &iacute;ch của việc thực hiện một bước đi. Q được gọi l&agrave; h&agrave;m gi&aacute; trị của h&agrave;nh động hay h&agrave;m gi&aacute; trị Q.</p> <p><img class="aligncenter wp-image-6363 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-12.png" alt="anh-minh-hoa" width="770" height="275" /></p> <p style="text-align: center;"><a href="https://jonathan-hui.medium.com/rl-dqn-deep-q-network-e207751f7ae4">Nguồn</a></p> <p>Trong phương ph&aacute;p Q-learning, ch&uacute;ng ta x&acirc;y dựng một bảng bộ nhớ Q[s, a] để lưu trữ c&aacute;c gi&aacute; trị Q cho tất cả c&aacute;c kết hợp c&oacute; thể c&oacute; giữa s v&agrave; a. V&agrave; đ&oacute; sẽ l&agrave; một bảng gian lận m&agrave; chứa c&aacute;c bước đi tốt nhất. Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta c&oacute; thể nhận ra rằng việc di chuyển con tốt tiến l&ecirc;n 2 bước sẽ c&oacute; gi&aacute; trị Q cao nhất so với c&aacute;c bước đi kh&aacute;c.</p> <p>Về mặt kỹ thu&acirc;t m&agrave; n&oacute;i, ch&uacute;ng ta sẽ lấy mẫu một h&agrave;nh động từ trạng th&aacute;i hiện tại. Ch&uacute;ng ta sẽ t&igrave;m ra phần thưởng R (nếu c&oacute;) v&agrave; trạng th&aacute;i mới s &rsquo;(vị tr&iacute; mới). Từ bảng bộ nhớ, ch&uacute;ng ta sẽ x&aacute;c định thực hiện h&agrave;nh động tiếp theo a&rsquo; m&agrave; c&oacute; gi&aacute; trị Q (s&rsquo;, a &rsquo;) l&agrave; cao nhất.</p> <p><img class="aligncenter wp-image-6386 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/Capture-167.png" alt="Deep-Q-Network" width="627" height="287" /></p> <p>Trong tr&ograve; chơi điện tử, ch&uacute;ng ta ghi điểm (tức l&agrave; c&oacute; được phần thưởng) bằng c&aacute;ch bắn c&aacute;c qu&acirc;n địch. Trong tr&ograve; chơi cờ vua, phần thưởng sẽ l&agrave; gi&aacute; trị +1 khi ch&uacute;ng ta thắng hoặc -1 nếu ch&uacute;ng ta thua. V&igrave; vậy, chỉ c&oacute; một phần thưởng được nhận v&agrave; sẽ phải mất một khoảng thời gian để c&oacute; được.</p> <p><strong>Ch&uacute; &yacute;: Q-learning ch&iacute;nh l&agrave; việc tạo ra bảng gian lận Q chứa sẵn c&aacute;c bước đi c&oacute; phần thưởng tốt nhất.</strong></p> <p>Ch&uacute;ng ta c&oacute; thể thực hiện một bước đi a v&agrave; xem phần thưởng R c&oacute; thể nhận được l&agrave; bao nhi&ecirc;u. Điều n&agrave;y tạo ra phương ph&aacute;p dự đo&aacute;n trước một bước, t&ecirc;n tiếng anh l&agrave; One-step look ahead. R + Q (s &rsquo;, a&rsquo;) sẽ l&agrave; điểm mục ti&ecirc;u. V&iacute; dụ, giả sử tất cả c&aacute;c gi&aacute; trị Q hiện tại bằng 1. Nếu ch&uacute;ng ta di chuyển cần điều khiển sang phải v&agrave; ghi được 2 điểm, ch&uacute;ng ta sẽ muốn dịch chuyển Q(s, a) gần bằng gi&aacute; trị 3.</p> <p>[latexpage]\[target = R(s,a,s') + \gamma max_{a'}Q_{k}(s',a')\]</p> <p>Nếu ch&uacute;ng ta tiếp tục chơi, ch&uacute;ng ta sẽ tiếp tục t&iacute;nh to&aacute;n c&aacute;c gi&aacute; trị trung b&igrave;nh cho Q. C&aacute;c gi&aacute; trị sẽ dần được cải thiện hơn v&agrave; c&ugrave;ng với một số thủ thuật, c&aacute;c gi&aacute; trị Q sẽ đạt tới điểm hội tụ hay điểm tối ưu.</p> <h2>Thuật to&aacute;n Q-learning</h2> <p>Sau đ&acirc;y l&agrave; thuật to&aacute;n để tối ưu Q với c&aacute;c phần thưởng đ&atilde; được lấy mẫu. Nếu &gamma;, hệ số khấu hao, nhỏ hơn 1, th&igrave; x&aacute;c suất để Q hội tụ hay đạt tới điểm tối ưu l&agrave; rất cao.</p> <p><em>Giải thuật:</em></p> <ul> <li>Bắt đầu với [latexpage]$Q_{0}(s,a)$ cho tất cả [latexpage]$s,a$</li> <li>Khởi tạo trạng th&aacute;i ban đầu [latexpage]$s$</li> <li>Thực hiện v&ograve;ng lặp k = 1,2,... cho tới điểm hội tụ <ul> <li>Lấy mẫu h&agrave;nh động [latexpage]$a$, đạt tới trạng th&aacute;i tiếp theo [latexpage]$s'$</li> <li>Trường hợp 1: Nếu trạng th&aacute;i [latexpage]$s'$ kết th&uacute;c: <ul> <li>[latexpage]$Target = R(s,a,s')$</li> <li>Lấy mẫu cho trạng th&aacute;i mới [latexpage]$s'$</li> </ul> </li> <li>Trường hợp 2: <ul> <li>[latexpage]$Target = R(s,a,s') + \gamma max_{a'}Q_{k}(s',a')$</li> <li>[latexpage]$Q_{k+1}(s,a) \leftarrow (1-\alpha)Q_{k}(s,a) +\alpha [Target]$</li> <li>[latexpage]$s \leftarrow s'$</li> </ul> </li> </ul> </li> </ul> <p>Tuy nhi&ecirc;n, nếu sự kết hợp giữa c&aacute;c trạng th&aacute;i v&agrave; c&aacute;c h&agrave;nh động qu&aacute; lớn, y&ecirc;u cầu về bộ nhớ v&agrave; việc t&iacute;nh to&aacute;n cho Q sẽ rất lớn. Để giải quyết vấn đề đ&oacute;, ch&uacute;ng ta sẽ chuyển sang mạng học s&acirc;u Q, tiếng anh l&agrave; Q deep network v&agrave; viết tắt l&agrave; DQN để t&iacute;nh to&aacute;n xấp xỉ gi&aacute; trị Q (s, a). Thuật to&aacute;n n&agrave;y được gọi l&agrave; Deep Q-learning. Với c&aacute;ch tiếp cận mới, ch&uacute;ng ta sẽ tổng qu&aacute;t h&oacute;a ph&eacute;p t&iacute;nh xấp xỉ của h&agrave;m gi&aacute; trị Q thay v&igrave; phải ghi lại v&agrave; lưu trữ lại c&aacute;c giải ph&aacute;p.</p> <h2><strong>Th&aacute;ch thức n&agrave;o m&agrave; Học tăng cường (RL) phải đối mặt so với Học s&acirc;u (DL)?</strong></h2> <p>Trong phương ph&aacute;p học c&oacute; gi&aacute;m s&aacute;t hay Supervised learning, ch&uacute;ng ta muốn đầu v&agrave;o c&oacute; t&iacute;nh độc lập v&agrave; được ph&acirc;n phối giống nhau, tức l&agrave;:</p> <ul> <li>C&aacute;c mẫu được lấy ngẫu nhi&ecirc;n trong c&aacute;c tập hợp mẫu v&agrave; do đ&oacute; mỗi tập hợp sẽ c&oacute; sự ph&acirc;n phối dữ liệu l&agrave; giống nhau.</li> <li>C&aacute;c mẫu độc lập với nhau trong c&ugrave;ng một tập hợp.</li> </ul> <p>Nếu kh&ocirc;ng, m&ocirc; h&igrave;nh c&oacute; thể sẽ qu&aacute; khớp hay c&ograve;n gọi l&agrave; Overfitting cho một số lớp (hoặc c&aacute;c nh&oacute;m) mẫu tại c&aacute;c thời điểm kh&aacute;c nhau v&agrave; do đ&oacute;, giải ph&aacute;p cho b&agrave;i to&aacute;n sẽ kh&ocirc;ng được tổng qu&aacute;t h&oacute;a.</p> <p>Ngo&agrave;i ra, đối với c&ugrave;ng một đầu v&agrave;o, c&aacute;c nh&atilde;n của n&oacute; sẽ kh&ocirc;ng thay đổi theo thời gian. C&aacute;c điều kiện ổn định cho đầu v&agrave;o v&agrave; đầu ra theo hướng n&agrave;y sẽ tạo c&aacute;c điều kiện cho việc học c&oacute; gi&aacute;m s&aacute;t hay Supervised learning c&oacute; thể được thực hiện tốt.</p> <p><strong>Ch&uacute; &yacute;: Trong học tăng cường, cả đầu v&agrave;o v&agrave; mục ti&ecirc;u sẽ đều thay đổi li&ecirc;n tục trong suốt qu&aacute; tr&igrave;nh đ&agrave;o tạo v&agrave; điều n&agrave;y khiến cho việc đ&agrave;o tạo trở n&ecirc;n kh&ocirc;ng ổn định.</strong></p> <p>Mục ti&ecirc;u kh&ocirc;ng ổn định: Ch&uacute;ng ta sẽ x&acirc;y dựng một mạng học s&acirc;u để học c&aacute;c gi&aacute; trị của Q nhưng c&aacute;c gi&aacute; trị mục ti&ecirc;u của n&oacute; sẽ thay đổi khi ch&uacute;ng ta học nhiều hơn. Như h&igrave;nh dưới đ&acirc;y, c&aacute;c gi&aacute; trị mục ti&ecirc;u cho Q phụ thuộc v&agrave;o ch&iacute;nh Q, do đ&oacute;, ch&uacute;ng ta đang đuổi theo một mục ti&ecirc;u bất định.</p> <p><img class="aligncenter wp-image-6374 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-13.png" alt="Deep-Q-Network" width="770" height="364" /></p> <p style="text-align: center;"><a href="https://drive.google.com/file/d/0BxXI_RttTZAhVUhpbDhiSUFFNjg/view">Nguồn</a></p> <p>Độc lập v&agrave; ph&acirc;n phối giống nhau, viết tắt l&agrave; i.i.d: C&oacute; một vấn đề kh&aacute;c li&ecirc;n quan đến c&aacute;c mối tương quan trong một đường quỹ đạo. Trong v&ograve;ng lặp qu&aacute; tr&igrave;nh đ&agrave;o tạo, ch&uacute;ng ta sẽ cập nhật c&aacute;c tham số của m&ocirc; h&igrave;nh để dịch chuyển Q (s, a) gần bằng nh&atilde;n của n&oacute;. Những cập nhật n&agrave;y sẽ ảnh hưởng đến c&aacute;c ph&eacute;p t&iacute;nh to&aacute;n kh&aacute;c. Khi ch&uacute;ng ta k&eacute;o c&aacute;c gi&aacute; trị Q l&ecirc;n trong mạng học s&acirc;u, c&aacute;c gi&aacute; trị Q ở c&aacute;c trạng th&aacute;i xung quanh cũng sẽ được k&eacute;o l&ecirc;n.</p> <p>Giả sử ch&uacute;ng ta chỉ nhận được một phần thưởng v&agrave; điều chỉnh Q-network để phản &aacute;nh lại điều đ&oacute;. Tiếp theo, ch&uacute;ng ta thực hiện một bước đi kh&aacute;c. Trạng th&aacute;i mới sẽ giống y như trạng th&aacute;i cuối c&ugrave;ng, nếu ch&uacute;ng ta sử dụng h&igrave;nh ảnh th&ocirc; để biểu thị c&aacute;c trạng th&aacute;i. Q (s &rsquo;, a&rsquo;) mới thu được sẽ cao hơn v&agrave; mục ti&ecirc;u mới cho gi&aacute; trị Q cũng sẽ cao hơn bất kể phần thưởng của h&agrave;nh động mới l&agrave; g&igrave;. Nếu ch&uacute;ng ta cập nhật Q-network bằng một chuỗi c&aacute;c h&agrave;nh động trong c&ugrave;ng một đường quỹ đạo, n&oacute; sẽ l&agrave;m tăng vượt qu&aacute; kết quả so với &yacute; định của ch&uacute;ng ta. Điều n&agrave;y sẽ g&acirc;y mất t&iacute;nh ổn định của qu&aacute; tr&igrave;nh học.</p> <p>Th&aacute;ch thức cơ bản trong qu&aacute; tr&igrave;nh đ&agrave;o tạo của học tăng cường l&agrave; g&igrave;? Trong RL, ch&uacute;ng ta thường phụ thuộc v&agrave;o chiến thuật&nbsp;hoặc c&aacute;c h&agrave;m gi&aacute; trị để lấy mẫu c&aacute;c h&agrave;nh động. Tuy nhi&ecirc;n, việc n&agrave;y sẽ thường xuy&ecirc;n thay đổi v&igrave; ch&uacute;ng ta sẽ c&agrave;ng ng&agrave;y c&agrave;ng biết r&otilde; hơn thứ để thăm d&ograve;. Khi chơi tr&ograve; chơi, ch&uacute;ng ta sẽ biết r&otilde; hơn về kết quả đầu ra thực sự của c&aacute;c trạng th&aacute;i v&agrave; h&agrave;nh động. V&igrave; vậy, đầu ra mục ti&ecirc;u của ch&uacute;ng ta cũng sẽ thay đổi. B&acirc;y giờ, ch&uacute;ng ta sẽ cố học sơ đồ f cho c&aacute;c đầu v&agrave;o v&agrave; đầu ra c&oacute; t&iacute;nh chất thay đổi li&ecirc;n tục.</p> <p>May mắn thay, cả đầu v&agrave;o v&agrave; đầu ra đều c&oacute; thể giao nhau. V&igrave; vậy, nếu ch&uacute;ng ta l&agrave;m chậm những sự thay đổi của cả đầu v&agrave;o v&agrave; đầu ra vừa đủ, ch&uacute;ng ta c&oacute; m&ocirc; h&igrave;nh h&oacute;a f trong khi vẫn để n&oacute; tiếp tục cải tiến.</p> <h2>C&aacute;c giải ph&aacute;p</h2> <p><strong>Experience replay:</strong> V&iacute; dụ: ch&uacute;ng ta đặt một triệu ph&eacute;p biến đổi cuối c&ugrave;ng v&agrave;o một bộ đệm v&agrave; lấy ra một tập hợp nhỏ c&aacute;c mẫu c&oacute; k&iacute;ch thước l&agrave; 32 từ bộ đệm n&agrave;y để đ&agrave;o tạo mạng học s&acirc;u. Điều n&agrave;y tạo ra một tập dữ liệu đầu v&agrave;o vừa đủ mức ổn định để đ&agrave;o tạo. Khi ch&uacute;ng ta lấy mẫu ngẫu nhi&ecirc;n từ bộ đệm ph&aacute;t lại, dữ liệu sẽ độc lập với nhau hơn v&agrave; sẽ đảm bảo t&iacute;nh độc lập v&agrave; ph&acirc;n phối như nhau.</p> <p><strong>Target network:</strong> Ch&uacute;ng ta sẽ tạo ra hai mạng học s&acirc;u &theta;- v&agrave; &theta;. Ch&uacute;ng ta sử dụng mạng đầu ti&ecirc;n để lấy ra c&aacute;c gi&aacute; trị Q trong khi mạng thứ hai chứa tất cả c&aacute;c cập nhật trong qu&aacute; tr&igrave;nh đ&agrave;o tạo. Sau 100.000 lần cập nhật, ch&uacute;ng ta sẽ đồng bộ h&oacute;a &theta;- với &theta;. Mục đ&iacute;ch l&agrave; để giữ nguy&ecirc;n cố định c&aacute;c gi&aacute; trị Q mục ti&ecirc;u tạm thời, do đ&oacute; ch&uacute;ng ta sẽ kh&ocirc;ng c&oacute; mục ti&ecirc;u thay đổi n&agrave;o để đi theo cả. Ngo&agrave;i ra, c&aacute;c thay đổi tham số sẽ kh&ocirc;ng ảnh hưởng &theta;- ngay lập tức v&agrave; do đ&oacute;, ngay cả đầu v&agrave;o c&oacute; thể kh&ocirc;ng phải l&agrave; 100% độc lập v&agrave; ph&acirc;n phối giống nhau, n&oacute; sẽ kh&ocirc;ng l&agrave;m sai lệch c&aacute;c kết quả như đ&atilde; đề cập trước đ&oacute;.</p> <p>[latexpage]\[L_{i}(\theta _{i})=E_{s,a,s',r&nbsp;\sim D}\left ( r+\gamma max_{a'}Q(s',a';\theta _{i}^{-})-Q(s,a;\theta _{i}) \right )^{2}\]</p> <p>Trong đ&oacute;,&nbsp;[latexpage]$r+\gamma max_{a'}Q(s',a';\theta _{i}^{-})$ l&agrave; biểu thức của mục ti&ecirc;u</p> <p>Với hai phương ph&aacute;p l&agrave; Experience replay v&agrave; Target network, ch&uacute;ng ta sẽ c&oacute; đầu v&agrave;o v&agrave; đầu ra ổn định hơn để đ&agrave;o tạo cho mạng v&agrave; hoạt động giống như việc đ&agrave;o tạo c&oacute; gi&aacute;m s&aacute;t.</p> <p>Experience replay c&oacute; hiệu suất được cải thiện cao nhất trong DQN. Sử dụng Target network l&agrave; kỹ thuật đem lại hiệu quả đ&aacute;ng kể nhưng kh&ocirc;ng tốt bằng Experience replay. Nhưng Target network sẽ trở n&ecirc;n ưu ti&ecirc;n hơn khi dung lượng của mạng nhỏ.</p> <p><strong>Deep Q-learning với Experience replay:</strong></p> <p>Giải thuật như sau:</p> <p><img class="aligncenter wp-image-6375 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-14.png" alt="Deep-Q-Network" width="770" height="525" /></p> <p>trong đ&oacute; ϕ tiền xử l&yacute; 4 frame cuối c&ugrave;ng để biểu diễn trạng th&aacute;i. Để ghi lại hoạt động, ch&uacute;ng ta sẽ sử dụng bốn frame để biểu thị một trạng th&aacute;i.</p> <h2>Chi tiết về c&aacute;ch thực hiện</h2> <h3>H&agrave;m mất m&aacute;t</h3> <p>H&atilde;y xem qua một số c&aacute;c chi tiết về c&aacute;ch thực hiện để cải thiện hiệu suất. DQN sử dụng gi&aacute; trị mất m&aacute;t Huber (đường cong m&agrave;u xanh l&aacute; c&acirc;y), trong đ&oacute; gi&aacute; trị mất m&aacute;t l&agrave; h&agrave;m bậc hai đối với c&aacute;c gi&aacute; trị nhỏ a v&agrave; l&agrave; h&agrave;m tuyến t&iacute;nh đối với c&aacute;c gi&aacute; trị lớn.</p> <p><img class="aligncenter wp-image-6376 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-15.png" alt="Deep-Q-Network" width="770" height="260" /></p> <p style="text-align: center;"><a href="http://Wikipedia.com">Nguồn</a></p> <p>[latexpage]\[L_{\delta }(a)=\left\{\begin{matrix}\frac{1}{2}a^{2} \;\;\;\; for |a| \leq \delta \\ \delta (|a|-\frac{1}{2}\delta ),\;\;\;otherwise\end{matrix}\right.\]</p> <p>Gi&aacute; trị mất m&aacute;t Huber cho ph&eacute;p những thay đổi &iacute;t nghi&ecirc;m trọng hơn hoặc kh&ocirc;ng đ&aacute;ng kể, v&igrave; những thay đổi như vậy sẽ l&agrave;m tổn hại tới qu&aacute; tr&igrave;nh học tăng cường.</p> <h3>Tối ưu h&oacute;a</h3> <p>Qu&aacute; tr&igrave;nh đ&agrave;o tạo RL dễ được t&aacute;c động bởi c&aacute;c phương ph&aacute;p tối ưu h&oacute;a. Nhiều qu&aacute; tr&igrave;nh đ&agrave;o tạo RL sử dụng tr&igrave;nh tối ưu h&oacute;a RMSProp hoặc Adam. DQN được đ&agrave;o tạo sử dụng phương ph&aacute;p RMSProp. Sử dụng phương ph&aacute;p tối ưu h&oacute;a cải tiến trong phương ph&aacute;p Policy Gradient cũng đang được nghi&ecirc;n cứu rất nhiều.</p> <h3>Giải thuật ϵ-greedy</h3> <p>DQN sử dụng giải thuật ϵ-greedy để tiến h&agrave;nh chọn h&agrave;nh động đầu ti&ecirc;n.</p> <p><img class="aligncenter wp-image-6377 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-19.jpeg" alt="Deep-Q-Network" width="770" height="192" /></p> <p style="text-align: center;">Phương ph&aacute;p Q-learning. <a href="http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/DP.pdf">Nguồn</a></p> <p>Để cải thiện qu&aacute; tr&igrave;nh đ&agrave;o tạo, ϵ sẽ bắt đầu từ 1 v&agrave; giảm đến 0,1 hoặc 0,05 trải qua một triệu frame đầu ti&ecirc;n bằng c&aacute;ch sử dụng chiến thuật sau:</p> <p>[latexpage]\[\pi(a|s)=\left\{\begin{matrix}\epsilon/m+1-\epsilon \;\;\;\;if a*=argmax_{a}Q(s,a) \\\epsilon/m \;\;\;\;\;\;\;otherwise\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\end{matrix}\right.\]</p> <p>Trong đ&oacute; m l&agrave; số h&agrave;nh động c&oacute; thể thực hiện được. Ở giai đoạn đầu của qu&aacute; tr&igrave;nh đ&agrave;o tạo, ch&uacute;ng ta&nbsp;c&ugrave;ng chọn c&aacute;c h&agrave;nh động c&oacute; thể thực hiện nhưng khi qu&aacute; tr&igrave;nh đ&agrave;o tạo diễn ra, ch&uacute;ng ta sẽ chọn h&agrave;nh động tối ưu a* thường xuy&ecirc;n hơn. Điều n&agrave;y cho ph&eacute;p việc thăm d&ograve; tối đa l&uacute;c ban đầu, v&agrave; cuối c&ugrave;ng chuyển sang việc khai th&aacute;c.</p> <p>Nhưng ngay cả trong qu&aacute; tr&igrave;nh thử nghiệm, ch&uacute;ng ta c&oacute; thể duy tr&igrave; ϵ đến một gi&aacute; trị nhỏ bằng 0,05. Một chiến thuật tất định c&oacute; thể sẽ dừng lại tại một điểm tối ưu cục bộ (tức l&agrave; chưa đạt tới điểm tối ưu nhất th&igrave; dừng lại). Một chiến thuật kh&ocirc;ng tất định sẽ gi&uacute;p cho đạt được mức tối ưu tốt hơn.</p> <p><img class="aligncenter wp-image-6378 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-16.png" alt="Deep-Q-Network" width="770" height="123" /></p> <p style="text-align: center;"><a href="http://rail.eecs.berkeley.edu/deeprlcourse-fa17/f17docs/lecture_14_transfer.pdf">Nguồn</a></p> <h1>Kiến tr&uacute;c của DQN</h1> <p>Sau đ&acirc;y l&agrave; cấu tr&uacute;c của Deep Q-Network. Ch&uacute;ng ta lấy 4 frame ở phần trước v&agrave; đưa ch&uacute;ng v&agrave;o c&aacute;c lớp t&iacute;ch chập, tiếp theo l&agrave; c&aacute;c lớp được kết nối to&agrave;n diện (fully connected layers) để t&iacute;nh to&aacute;n gi&aacute; trị Q cho mỗi h&agrave;nh động.</p> <p><img class="aligncenter wp-image-6388 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-20.png" alt="Deep-Q-Network" width="1050" height="293" /></p> <p style="text-align: center;"><a href="https://jonathan-hui.medium.com/rl-dqn-deep-q-network-e207751f7ae4">Nguồn</a></p> <p>Trong v&iacute; dụ dưới đ&acirc;y, nếu ch&uacute;ng ta kh&ocirc;ng di chuyển c&aacute;i m&aacute;i ch&egrave;o l&ecirc;n ở frame 3, ch&uacute;ng ta sẽ bỏ lỡ mất quả b&oacute;ng. Đ&uacute;ng như kỳ vọng, gi&aacute; trị Q khi di chuyển m&aacute;i ch&egrave;o l&ecirc;n sẽ cao hơn nhiều so với c&aacute;c h&agrave;nh động kh&aacute;c.</p> <p><img class="aligncenter wp-image-6379 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-17.png" alt="Deep-Q-Network" width="770" height="289" /></p> <p style="text-align: center;"><a href="https://jonathan-hui.medium.com/rl-dqn-deep-q-network-e207751f7ae4">Nguồn</a></p> <h1>C&aacute;c phương ph&aacute;p cải tiến cho&nbsp;Deep Q-Network</h1> <p>Nhiều phương ph&aacute;p cải tiến được thực hiện cho Deep Q-Network. Trong phần n&agrave;y, ch&uacute;ng ta sẽ tr&igrave;nh b&agrave;y một số phương ph&aacute;p sẽ chứng minh những cải tiến đ&aacute;ng kể.</p> <p><strong>1. Double Deep Q-Network</strong></p> <p>Trong Q-learning, ch&uacute;ng ta sử dụng c&ocirc;ng thức sau đ&acirc;y cho gi&aacute; trị mục ti&ecirc;u của Q.</p> <p>[latexpage]\[Y_{t}^{Q}=R_{t+1} + \gamma Q(S_{t+1},argmax_{a}Q(S_{t+1},a;\theta _{t});\theta _{t})\]</p> <p>Tuy nhi&ecirc;n, ph&eacute;p to&aacute;n max tạo ra độ ch&ecirc;nh lệch dương đối với c&aacute;c ph&eacute;p t&iacute;nh Q. C&aacute;c ph&eacute;p t&iacute;nh Q như sau:</p> <p>[latexpage]\[Q(s,a_{1})=1.05, Q(s,a_{2}) = 0.95&nbsp;\;\;\; time\;\;\; t_{0}\]</p> <p>[latexpage]\[Q(s,a_{1})=0.95, Q(s,a_{2}) = 1.05&nbsp;\;\;\; time\;\;\; t_{1}\]</p> <p>[latexpage]\[max_{a}Q(s,a)=1.05 \;\;\;for\;\;\; t_{0} \;\;\;and\;\;\; t_{1}\]</p> <p>[latexpage]\[Q(s,a_{1})=1.00, Q(s,a_{2}) = 1.00 \;\;\; time\;\;\; t_{1000}\]</p> <p>Từ v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta sẽ thấy gi&aacute; trị tối đa Q (s, a) cao hơn gi&aacute; trị hội tụ 1,0. tức l&agrave; ph&eacute;p to&aacute;n max t&iacute;nh to&aacute;n vượt qu&aacute; gi&aacute; trị Q. Theo l&yacute; thuyết v&agrave; thực nghiệm, hiệu suất DQN sẽ cải thiện nếu ch&uacute;ng ta sử dụng mạng trực tuyến &theta; để thực hiện việc chọn c&aacute;c h&agrave;nh động v&agrave; mạng mục ti&ecirc;u &theta;- để t&iacute;nh to&aacute;n gi&aacute; trị Q.</p> <p>[latexpage]\[L_{i}\theta _{i}=E_{s,a,s',r \;\;D}(r+ \gamma Q(s',argmax_{a'}Q(s',a',\theta);\theta _{i}^{-})-Q(s,a;\theta _{i}))^{2}\]</p> <p><strong>2. Prioritized Experience Replay</strong></p> <p>Deep Q-Network lấy mẫu đồng đều c&aacute;c ph&eacute;p biến đổi từ bộ đệm ph&aacute;t lại. Tuy nhi&ecirc;n, ch&uacute;ng ta n&ecirc;n &iacute;t quan t&acirc;m đến c&aacute;c mẫu đ&atilde; vốn dĩ gần bằng với gi&aacute; trị mục ti&ecirc;u. Ch&uacute;ng ta n&ecirc;n lấy mẫu c&aacute;c ph&eacute;p biến đổi c&oacute; khoảng c&aacute;ch xa hơn với gi&aacute; trị mục ti&ecirc;u:</p> <p>[latexpage]\[\left | r+ \gamma max_{a'}Q(s',a',\theta^{-})-Q(s,a;\theta) \right |\]</p> <p>Do đ&oacute;, ch&uacute;ng ta c&oacute; thể chọn c&aacute;c ph&eacute;p biến đổi từ bộ đệm đảm bảo điều kiện sau:</p> <ul> <li>Dựa tr&ecirc;n gi&aacute; trị sai số ở b&ecirc;n tr&ecirc;n (lựa chọn c&aacute;c ph&eacute;p biến đổi c&oacute; sai số cao thường xuy&ecirc;n hơn).</li> <li>Xếp hạng c&aacute;c ph&eacute;p biến đổi theo c&aacute;c gi&aacute; trị sai số v&agrave; chọn ch&uacute;ng dựa theo thứ hạng (chọn c&aacute;i c&oacute; thứ hạng cao hơn v&agrave; thường xuy&ecirc;n).</li> </ul> <p>Thao khảo th&ecirc;m tại:&nbsp;<a class="cq gv" href="https://arxiv.org/pdf/1511.05952.pdf" rel="noopener nofollow">Prioritized Experience Replay paper</a>.</p> <p><strong>3. Dueling Deep Q-Network</strong></p> <p>Trong Dueling Deep Q-Network, Q được t&iacute;nh theo một c&ocirc;ng thức kh&aacute;c như b&ecirc;n dưới c&ugrave;ng với h&agrave;m gi&aacute; trị V v&agrave; h&agrave;m lợi &iacute;ch của h&agrave;nh động phụ thuộc trạng th&aacute;i A trong c&ocirc;ng thức b&ecirc;n dưới:</p> <p>[latexpage]\[Q(s,a)=V(s)+A(s,a)-\frac{1}{|\Lambda |}\sum_{a=1}^{|\Lambda |}A(s,a)\]</p> <p><img class="aligncenter wp-image-6383 size-full" src="https://tek4.vn/wp-content/uploads/2020/11/a-18.png" alt="Anh-minh-hoa" width="1050" height="436" /></p> <p style="text-align: center;"><a href="https://drive.google.com/file/d/0BxXI_RttTZAhVUhpbDhiSUFFNjg/view">Nguồn</a></p> <p>Thay v&igrave; học Q, ch&uacute;ng ta sẽ t&iacute;nh V v&agrave; A. C&aacute;c th&iacute; nghiệm cho thấy hiệu suất được cải thiện. Deep Q-Network cập nhật h&agrave;m gi&aacute; trị Q của một trạng th&aacute;i chỉ cho một h&agrave;nh động cụ thể. Dueling Deep Q-Network cập nhật gi&aacute; trị V, c&aacute;c cập nhật Q (s, a &rsquo;) kh&aacute;c cũng c&oacute; thể tận d&ugrave;ng điều n&agrave;y. V&igrave; vậy, mỗi qu&aacute; tr&igrave;nh lặp lại đ&agrave;o tạo Dueling Deep Q-Network được cho l&agrave; sẽ c&oacute; kết quả lớn hơn.</p> <p><strong>4. Noisy Nets sử dụng trong việc thăm d&ograve;</strong></p> <p>Deep Q-Network sử dụng ϵ-Greedy để thực hiện chọn c&aacute;c h&agrave;nh động. Thay v&agrave;o đ&oacute;, NoisyNet sẽ thay thế n&oacute; bằng c&aacute;ch th&ecirc;m c&aacute;c gi&aacute; trị nhiễu chứa tham số v&agrave;o lớp tuyến t&iacute;nh để hỗ trợ việc thăm d&ograve;. Trong NoisyNet, &epsilon;-greedy sẽ kh&ocirc;ng được sử dụng. N&oacute; sử dụng một phương ph&aacute;p tham lam để chọn c&aacute;c h&agrave;nh động từ h&agrave;m gi&aacute; trị Q. Nhưng đối với c&aacute;c lớp được li&ecirc;n kết to&agrave;n diện (fully connected layers) của bộ t&iacute;nh to&aacute;n Q, ch&uacute;ng ta sẽ th&ecirc;m c&aacute;c gi&aacute; trị nhiễu chứa tham số c&oacute; thể đ&agrave;o tạo được như b&ecirc;n dưới để thực hiện thăm d&ograve; c&aacute;c h&agrave;nh động. Th&ecirc;m gi&aacute; trị nhiễu v&agrave;o mạng học s&acirc;u thường bằng hoặc tốt hơn việc th&ecirc;m gi&aacute; trị nhiễu v&agrave;o một h&agrave;nh động giống như trong phương ph&aacute;p ϵ-greedy. Phương ph&aacute;p như sau.</p> <p>Giả sử một lớp tuyến t&iacute;nh của một mạng rơ-ron với đầu v&agrave;o p v&agrave; đầu ra q, được biểu diễn bởi h&agrave;m:</p> <p>[latexpage]\[y=wx+b,\]</p> <p>trong đ&oacute; x \in&nbsp;\mathbb{R} ^{p} l&agrave; đầu v&agrave;o, w \in&nbsp;\mathbb{R}^{qxp} l&agrave; ma trận trọng số, v&agrave; b \in&nbsp;\mathbb{R}^{q} l&agrave; độ ch&ecirc;nh lệch, lớp tuyến t&iacute;nh c&oacute; chứa nhiễu được định nghĩa như sau:</p> <p>[latexpage]\[y \overset{def}{=} (\mu ^{w}+\sigma ^{w}\odot \varepsilon ^{w})x + \mu ^{b} + \sigma ^{b}\odot \varepsilon ^{b},\]</p> <p>C&aacute;c tham số&nbsp;[latexpage]$\mu ^{w}\in \mathbb{R}^{qxp},\mu^{b} \in\mathbb{R}^{q},\sigma ^{w}\in \mathbb{R}^{qxp},\sigma^{b} \in \mathbb{R}^{q}$ c&oacute; thể học được, trong khi đ&oacute;&nbsp;[latexpage]$\varepsilon ^{w}\in\mathbb{R}^{qxp}$ v&agrave;&nbsp; [latexpage]$\varepsilon ^{b}\in \mathbb{R}^{q}$ l&agrave; c&aacute;c biến ngẫu nhi&ecirc;n chứa gi&aacute; trị nhiễu</p> <p>Kết luận: DQN l&agrave; một lớp quan trọng của RL, cụ thể l&agrave; phương ph&aacute;p học gi&aacute; trị. Trong thực tế, ch&uacute;ng ta thường kết hợp Policy gradient với phương ph&aacute;p học gi&aacute; trị trong việc giải quyết c&aacute;c vấn đề thực tiễn.</p> <p>Đến đ&acirc;y l&agrave; kết th&uacute;c của b&agrave;i n&agrave;y, mọi người c&oacute; thể xem c&aacute;c phần tiếp theo của series về Học tăng cường trong tek4 nh&eacute;.</p> <p>P/s: Mong mọi người lu&ocirc;n ủng hộ <a href="http://tek4.vn">tek4</a> nh&eacute;!</p> <hr /> <p style="text-align: center;"><em><strong>Fanpage Facebook:</strong>&nbsp;<a href="https://www.facebook.com/tek4.vn/">TEK4.VN</a></em>&nbsp;</p> <p style="text-align: center;"><em><strong>Tham gia cộng đồng để chia sẻ, trao đổi v&agrave; thảo luận:</strong>&nbsp;<a href="https://www.facebook.com/groups/tek4.vn/">TEK4.VN - Học Lập Tr&igrave;nh Miễn Ph&iacute;</a></em></p>