@@ -166,9 +166,14 @@ $$Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (R_{t+1} + \gamma \max_{a \in A} Q
166166
167167จากตัวอย่างข้างบน ผู้อ่านอาจจะคิดว่า โห แล้วในชีวิตจริงมันไม่เหมือนตัวอย่างของ Grid world นี่นา ถ้าเรานึกถึงภาพของหุ่นยนต์ทำความสะอาดในบ้าน เราสามารถมีชุดตัวอย่างของ state มากกว่าแค่ใน Grid world `(ซ้ายล่าง, ซ้ายบน, ขวาล่าง, ขวาบน)` แต่เป็นตำแหน่งที่หุ่นยนต์ทำความสะอาดในห้อง หน้าตาอาจจะเป็น `(0.1 เมตร, 0.3 เมตร)`, `(0.2 เมตร, 0.5 เมตร)` จากจุดเริ่มต้นแทน ซึ่งตำแหน่งเหล่านี้อาจจะมีค่าเท่าไหร่ก็ได้ มีคู่ของตำแหน่งให้เลือกไม่สิ้นสุด
168168
169- จริงๆแล้ววิธีที่ง่ายที่สุดที่ทำให้เราสามารถใช้เทคนิคที่เพิ่งคุยกันไปมาใช้ก็คือการแบ่ง continuous state space เป็นช่วงๆหรือการ discretization นั่นเอง เราสามารถแบ่งช่องยิ่งเล็กก็จะยิ่งประมาณ continuous space ได้ดีขึ้น แต่ข้อเสียก็คือว่าขนาดของ Q-table ที่เราต้องสร้างก็จะใหญ่ขึ้นไปอีก และเมื่อ Q-table มีขนาดใหญ่มากๆ ก็อาจจะอัพเดทได้ไม่ทั่วถึงนั่นเอง
169+ เราสามารถแก้ปัญหาใน Continuous Space ได้สองวิธีหลักๆดังนี้
170170
171- ยังมีอีกหลายวิธีที่เราสามารถแทนตำแหน่งใน continuous space ด้วยตัวเลขที่น้อยกว่าพิกัดจริงๆ เช่น การวาดวงกลมหลายๆวงไปบนพื้นผิว แล้วแทนตำแหน่งด้วยวงกลมที่ agent อยู่ แต่ถึงอย่างไรเราก็ต้องกำหนดขนาดของวงกลม กำหนดระยะการซ้อนและอีกหลายปัจจัย ซึ่งต้องใช้ความรู้พื้นฐานถึงจะออกแบบได้ดี
171+ - Discretization หรือการแบ่ง continuous state space ให้เป็นช่วงๆ
172+ - Function Approximation หรือใช้ฟังก์ชันประมาณ state value \\ (\hat(v)(s) \\ ) และ action value \\ (\hat(q)(s, a)\\ ) โดยตรง
173+
174+ วิธีที่ง่ายที่สุดที่ทำให้เราสามารถใช้เทคนิคที่เพิ่งคุยกันไปมาใช้ก็คือการแบ่ง continuous state space เป็นช่วงๆหรือการ discretization นั่นเอง เราสามารถแบ่งช่องยิ่งเล็กก็จะยิ่งประมาณ continuous space ได้ดีขึ้น แต่ข้อเสียก็คือว่าขนาดของ Q-table ที่เราต้องสร้างก็จะใหญ่ขึ้นไปอีก และเมื่อ Q-table มีขนาดใหญ่มากๆ ก็อาจจะอัพเดทได้ไม่ทั่วถึงนั่นเอง
175+
176+ ยังมีอีกหลายวิธีที่เราสามารถแทนตำแหน่งใน continuous space ด้วยมิติที่มีขนาดน้อยกว่าพิกัดจริงๆ เช่น การวาดวงกลมหลายๆวงไปบนพื้นผิว แล้วแทนตำแหน่งด้วยวงกลมที่ agent อยู่ แต่ถึงอย่างไรเราก็ต้องกำหนดขนาดของวงกลม กำหนดระยะการซ้อนและอีกหลายปัจจัย ซึ่งต้องใช้ความรู้พื้นฐานถึงจะออกแบบได้ดี
172177
173178<figure ><center >
174179 <img width =" 600 " src =" /images/post/rl/discretize-grid-world.png " data-action =" zoom " />
@@ -180,6 +185,10 @@ $$Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (R_{t+1} + \gamma \max_{a \in A} Q
180185 </figcaption >
181186</center ></figure >
182187
188+ อีกวิธีนึงที่เราสามารถทำได้คือการประมาณฟังก์ชัน state value \\ (\hat{v}(s) \\ ) และ action value \\ (\hat{q}(s, a)\\ ) นั่นเอง ในกรณีนี้ก็ไม่ต้องใช้การแบ่ง continuous space เป็นช่วงๆแบบเดิม จะเห็นว่าสิ่งที่เราต้องใส่เพิ่มขึ้นมาขึ้นพารามิเตอร์ \\ (W \\ ) ที่ใช้สำหรับ map ฟังก์ชันจาก \\ (s\\ ) ไปเป็น \\ (v\\ ) และ \\ ((s, a)\\ ) ไปเป็น \\ (q\\ )
189+
190+ ในกรณีที่เราเขียนฟังก์ชันเส้นตรง: \\ ( \hat{v}(s, W) = X(s)^T W_ {v} \\ ) และ \\ ( \hat{q}(s, a, W) = X(s, a)^T W_ {q} \\ ) หรือถ้าเป็นฟังก์ชันไม่เชิงเส้น (nonlinear) ก็จะได้หน้าตาประมาณนี้: \\ ( \hat{v}(s, W) = f_v(X(s)^T W_ {v}) \\ ) และ \\ ( \hat{q(s, a, W)} = f_q(X(s)^T W_ {q}) \\ ) ซึ่งฟังก์ชัน \\ (f(.)\\ ) ในที่นี้เราอาจจะเลือกใช้ Neural Network มาช่วยในการประมาณฟังก์ชันไม่เชิงเส้นที่เรามีนี่เอง ตัวอย่วงของการใช้ Neural Network มาประมาณฟังก์ชันได้แก่ Deep Q-Network หรือ DQN ที่จะพูดในหัวข้อถัดไป
191+
183192## Deep Q-Network (DQN)
184193
185194แน่นอนว่าการแบ่ง state space เป็นช่วง (discretization) สามารถประยุกต์มาใช้แก้ปัญหาที่มีขนาดใหญ่ประมาณนึงได้ แต่เมื่อขนาดของ state เริ่มเป็นไปได้หลายรูปแบบและใหญ่มากขึ้น การใช้เทคนิคการแบ่งช่วงอาจจะทำได้ไม่ง่ายนัก ด้วยประเด็นนี้นี่เองที่ Deep Neural Network จึงถูกนำมาใช้นั่นเอง ข้อดีของ Deep Neural Network คือมันสามารถประมาณฟังก์ชั่นสำหรับ state ได้ในความซับซ้อนที่สูงการฟังก์ชันทั่วไป ซึ่งทำให้เราสามารถประมาณฟังก์ชั่นจาก state ที่มีหลายมิติไปยัง action ได้โดยไม่ต้องใช้การคำนวณหา Q-table เลย
0 commit comments