Skip to content

Commit

Permalink
Create Markov Decision Process (MDP)
Browse files Browse the repository at this point in the history
Signed-off-by: aero <[email protected]>
  • Loading branch information
aerovfx authored Feb 2, 2025
1 parent eb95501 commit 2ab9fe8
Showing 1 changed file with 253 additions and 0 deletions.
253 changes: 253 additions & 0 deletions 5. ARTIFICIAL_INTELLIGENCE/Chuong1/Markov Decision Process (MDP)
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
Dưới đây là phân tích **sâu hơn về bước thiết lập MDP**, tập trung vào các khía cạnh kỹ thuật, ví dụ thực tế và thách thức khi áp dụng:

---

### **1. Chi tiết hóa các thành phần của MDP**

#### **a. States (Trạng thái)**
- **Định nghĩa**: Biểu diễn "tình huống" hiện tại của môi trường mà agent cần quan sát để ra quyết định.
- **Thách thức**:
- **Curse of Dimensionality**: Số lượng states tăng theo hàm mũ với số chiều dữ liệu (ví dụ: robot có 10 cảm biến, mỗi cảm biến có 100 giá trị → \(10^{10}\) states).
- **Partial Observability**: Trong thực tế, agent thường chỉ nhận được **observations** (ví dụ: camera hình ảnh) thay vì state đầy đủ → cần dùng **POMDP** (Partially Observable MDP).
- **Giải pháp**:
- **State Abstraction**: Gom nhóm các states tương tự nhau (ví dụ: phân loại tốc độ xe thành "chậm", "trung bình", "nhanh").
- **Feature Engineering**: Trích xuất đặc trưng quan trọng từ observations (ví dụ: khoảng cách đến vật cản, góc lái).

#### **b. Actions (Hành động)**
- **Loại hành động**:
- **Discrete Actions**: Hữu hạn lựa chọn (ví dụ: trái/phải/tăng tốc/phanh).
- **Continuous Actions**: Vô hạn (ví dụ: góc lái từ \(0^\circ\) đến \(360^\circ\)).
- **Thiết kế hành động**:
- **Hierarchical Actions**: Phân cấp hành động (ví dụ: "di chuyển đến phòng A" → gồm nhiều bước nhỏ).
- **Safe Actions**: Đảm bảo hành động không gây nguy hiểm (ví dụ: robot không đâm vào tường).

#### **c. Transition Probability (Xác suất chuyển trạng thái)**
- **Mô hình hóa**:
- **Deterministic**: \(P(s'|s,a) = 1\) (ví dụ: di chuyển trong Grid World không nhiễu).
- **Stochastic**: \(P(s'|s,a) < 1\) (ví dụ: robot trượt khi di chuyển với xác suất 10%).
- **Ước lượng**:
- **Model-Based RL**: Dùng dữ liệu để học \(P(s'|s,a)\) (ví dụ: thuật toán **Dyna-Q**).
- **Model-Free RL**: Bỏ qua \(P(s'|s,a)\), học trực tiếp policy hoặc Q-values (ví dụ: Q-Learning).

#### **d. Reward Function (Hàm phần thưởng)**
- **Nguyên tắc thiết kế**:
- **Sparse Rewards**: Phần thưởng chỉ ở mục tiêu cuối (ví dụ: +1 khi thắng game, 0 ở các bước khác) → Khó học do ít feedback.
- **Dense Rewards**: Phần thưởng từng bước (ví dụ: +0.1 mỗi lần đến gần đích) → Dễ học hơn nhưng dễ gây **reward hacking** (agent lợi dụng lỗ hổng để kiếm điểm).
- **Ví dụ phức tạp**:
- Trong bài toán **tối ưu hóa lộ trình giao hàng**, reward có thể là:
\[
R = - (\text{thời gian di chuyển} + \text{chi phí nhiên liệu} - \text{doanh thu})
\]

---

### **2. Case Study: MDP trong Autonomous Driving**
#### **Bài toán**: Xe tự lái cần di chuyển từ điểm A đến B an toàn.
- **States**:
- Vị trí GPS, tốc độ, góc lái, khoảng cách đến xe trước, tín hiệu đèn giao thông.
- **Actions**:
- Tăng tốc, giảm tốc, rẽ trái/phải, dừng.
- **Transition Model**:
- Xác suất tai nạn nếu đổi làn đường khi có xe gần đó.
- Xác suất phanh thành công trên đường trơn.
- **Reward Function**:
- \( R = +10 \) nếu đến đích an toàn.
- \( R = -100 \) nếu xảy ra tai nạn.
- \( R = -0.1 \) cho mỗi giây di chuyển (khuyến khích nhanh).
- \( R = -5 \) nếu vượt đèn đỏ.

#### **Thách thức**:
- **Không gian liên tục**: States và actions liên tục → Cần dùng **Deep RL** (DQN, A3C).
- **Partial Observability**: Camera không nhìn thấy xe bị khuất → Dùng **LSTM** để ghi nhớ context.

---

### **3. Giải MDP bằng Dynamic Programming (DP)**
#### **Ví dụ**: Bài toán **Inventory Management** (Quản lý tồn kho).
- **States**: Số lượng hàng trong kho (0-100 sản phẩm).
- **Actions**: Đặt thêm \( a \) sản phẩm (0 ≤ \( a \) ≤ 20).
- **Reward**: Lợi nhuận = Doanh thu - Chi phí lưu kho - Chi phí đặt hàng.
- **Transition**: Nhu cầu khách hàng mỗi ngày là ngẫu nhiên (theo phân phối Poisson).

**Giải bằng Value Iteration**:
1. Khởi tạo \( V(s) = 0 \) ∀s.
2. Lặp lại cho đến khi hội tụ:
\[
V_{k+1}(s) = \max_a \left[ \sum_{s'} P(s'|s,a) \left( R(s,a,s') + \gamma V_k(s') \right) \right]
\]
3. Policy tối ưu: \( \pi(s) = \arg\max_a Q(s,a) \).

**Kết quả**:
- Policy sẽ quyết định đặt hàng dựa trên mức tồn kho hiện tại và dự đoán nhu cầu.

---

### **4. Mở rộng MDP trong thực tế**
#### **a. Multi-Agent MDP**
- **Bài toán**: Nhiều agent tương tác trong cùng môi trường (ví dụ: game đối kháng DOTA 2).
- **Thách thức**:
- **Non-stationarity**: Hành động của một agent thay đổi môi trường cho các agent khác.
- **Equilibrium**: Tìm cân bằng Nash thay vì policy tối ưu đơn lẻ.

#### **b. Hierarchical MDP**
- **Ý tưởng**: Phân tách bài toán thành các subtask (ví dụ: lái xe → định vị, tránh vật cản, đỗ xe).
- **Công cụ**: **Options Framework** (macro-actions) và **MAXQ** decomposition.

#### **c. Inverse Reinforcement Learning (IRL)**
- **Mục tiêu**: Suy luận reward function từ demonstrations (ví dụ: học lái xe bằng cách xem con người lái).
- **Ứng dụng**: Dạy robot qua quan sát.

---

### **5. Công cụ và Thư viện**
- **Mô phỏng MDP**:
- **OpenAI Gym**: Môi trường tiêu chuẩn như CartPole, MountainCar.
- **PyBullet**: Mô phỏng robot với vật lý chân thực.
- **Giải MDP**:
- **MDPSuite** (Python): Hỗ trợ DP, Value Iteration.
- **PRISM** (Tool): Phân tích MDP probabilistic.

---

### **6. Lỗi thường gặp khi thiết kế MDP**
| **Lỗi** | **Hậu quả** | **Cách khắc phục** |
|-----------------------|---------------------------------|-----------------------------------|
| **Reward Hacking** | Agent tìm cách "gian lận" để kiếm điểm (ví dụ: tự đâm vào tường để kết thúc sớm). | Thiết kế reward kỹ lưỡng, thêm penalty cho hành vi không mong muốn. |
| **State Aliasing** | Hai states khác nhau được gom thành một → Agent không phân biệt được. | Tăng chi tiết biểu diễn state (ví dụ: thêm tốc độ vào state). |
| **Discount Factor γ quá cao/thấp** | Agent chỉ tập trung vào phần thưởng ngắn hạn/dài hạn cực đoan. | Thử nghiệm γ trong khoảng [0.9, 0.99] và điều chỉnh theo bài toán. |

---

### **Kết luận**
MDP là **nền tảng không thể thiếu** để chuyển bài toán thực tế thành bài toán RL. Để thành công:
1. **Thiết kế states và actions** phải cân bằng giữa độ chi tiết và tính khả thi.
2. **Reward function** cần được kiểm tra kỹ để tránh hành vi lệch lạc.
3. **Lựa chọn phương pháp giải** (DP, MC, TD, Deep RL) dựa trên đặc thù bài toán.

Bước tiếp theo: Áp dụng các thuật toán **Monte Carlo** hoặc **Q-Learning** để học policy khi không biết model!

---

### **1. Chi tiết hóa các thành phần của MDP**

#### **a. States (Trạng thái)**
- **Định nghĩa**: Biểu diễn "tình huống" hiện tại của môi trường mà agent cần quan sát để ra quyết định.
- **Thách thức**:
- **Curse of Dimensionality**: Số lượng states tăng theo hàm mũ với số chiều dữ liệu (ví dụ: robot có 10 cảm biến, mỗi cảm biến có 100 giá trị → \(10^{10}\) states).
- **Partial Observability**: Trong thực tế, agent thường chỉ nhận được **observations** (ví dụ: camera hình ảnh) thay vì state đầy đủ → cần dùng **POMDP** (Partially Observable MDP).
- **Giải pháp**:
- **State Abstraction**: Gom nhóm các states tương tự nhau (ví dụ: phân loại tốc độ xe thành "chậm", "trung bình", "nhanh").
- **Feature Engineering**: Trích xuất đặc trưng quan trọng từ observations (ví dụ: khoảng cách đến vật cản, góc lái).

#### **b. Actions (Hành động)**
- **Loại hành động**:
- **Discrete Actions**: Hữu hạn lựa chọn (ví dụ: trái/phải/tăng tốc/phanh).
- **Continuous Actions**: Vô hạn (ví dụ: góc lái từ \(0^\circ\) đến \(360^\circ\)).
- **Thiết kế hành động**:
- **Hierarchical Actions**: Phân cấp hành động (ví dụ: "di chuyển đến phòng A" → gồm nhiều bước nhỏ).
- **Safe Actions**: Đảm bảo hành động không gây nguy hiểm (ví dụ: robot không đâm vào tường).

#### **c. Transition Probability (Xác suất chuyển trạng thái)**
- **Mô hình hóa**:
- **Deterministic**: \(P(s'|s,a) = 1\) (ví dụ: di chuyển trong Grid World không nhiễu).
- **Stochastic**: \(P(s'|s,a) < 1\) (ví dụ: robot trượt khi di chuyển với xác suất 10%).
- **Ước lượng**:
- **Model-Based RL**: Dùng dữ liệu để học \(P(s'|s,a)\) (ví dụ: thuật toán **Dyna-Q**).
- **Model-Free RL**: Bỏ qua \(P(s'|s,a)\), học trực tiếp policy hoặc Q-values (ví dụ: Q-Learning).

#### **d. Reward Function (Hàm phần thưởng)**
- **Nguyên tắc thiết kế**:
- **Sparse Rewards**: Phần thưởng chỉ ở mục tiêu cuối (ví dụ: +1 khi thắng game, 0 ở các bước khác) → Khó học do ít feedback.
- **Dense Rewards**: Phần thưởng từng bước (ví dụ: +0.1 mỗi lần đến gần đích) → Dễ học hơn nhưng dễ gây **reward hacking** (agent lợi dụng lỗ hổng để kiếm điểm).
- **Ví dụ phức tạp**:
- Trong bài toán **tối ưu hóa lộ trình giao hàng**, reward có thể là:
\[
R = - (\text{thời gian di chuyển} + \text{chi phí nhiên liệu} - \text{doanh thu})
\]

---

### **2. Case Study: MDP trong Autonomous Driving**
#### **Bài toán**: Xe tự lái cần di chuyển từ điểm A đến B an toàn.
- **States**:
- Vị trí GPS, tốc độ, góc lái, khoảng cách đến xe trước, tín hiệu đèn giao thông.
- **Actions**:
- Tăng tốc, giảm tốc, rẽ trái/phải, dừng.
- **Transition Model**:
- Xác suất tai nạn nếu đổi làn đường khi có xe gần đó.
- Xác suất phanh thành công trên đường trơn.
- **Reward Function**:
- \( R = +10 \) nếu đến đích an toàn.
- \( R = -100 \) nếu xảy ra tai nạn.
- \( R = -0.1 \) cho mỗi giây di chuyển (khuyến khích nhanh).
- \( R = -5 \) nếu vượt đèn đỏ.

#### **Thách thức**:
- **Không gian liên tục**: States và actions liên tục → Cần dùng **Deep RL** (DQN, A3C).
- **Partial Observability**: Camera không nhìn thấy xe bị khuất → Dùng **LSTM** để ghi nhớ context.

---

### **3. Giải MDP bằng Dynamic Programming (DP)**
#### **Ví dụ**: Bài toán **Inventory Management** (Quản lý tồn kho).
- **States**: Số lượng hàng trong kho (0-100 sản phẩm).
- **Actions**: Đặt thêm \( a \) sản phẩm (0 ≤ \( a \) ≤ 20).
- **Reward**: Lợi nhuận = Doanh thu - Chi phí lưu kho - Chi phí đặt hàng.
- **Transition**: Nhu cầu khách hàng mỗi ngày là ngẫu nhiên (theo phân phối Poisson).

**Giải bằng Value Iteration**:
1. Khởi tạo \( V(s) = 0 \) ∀s.
2. Lặp lại cho đến khi hội tụ:
\[
V_{k+1}(s) = \max_a \left[ \sum_{s'} P(s'|s,a) \left( R(s,a,s') + \gamma V_k(s') \right) \right]
\]
3. Policy tối ưu: \( \pi(s) = \arg\max_a Q(s,a) \).

**Kết quả**:
- Policy sẽ quyết định đặt hàng dựa trên mức tồn kho hiện tại và dự đoán nhu cầu.

---

### **4. Mở rộng MDP trong thực tế**
#### **a. Multi-Agent MDP**
- **Bài toán**: Nhiều agent tương tác trong cùng môi trường (ví dụ: game đối kháng DOTA 2).
- **Thách thức**:
- **Non-stationarity**: Hành động của một agent thay đổi môi trường cho các agent khác.
- **Equilibrium**: Tìm cân bằng Nash thay vì policy tối ưu đơn lẻ.

#### **b. Hierarchical MDP**
- **Ý tưởng**: Phân tách bài toán thành các subtask (ví dụ: lái xe → định vị, tránh vật cản, đỗ xe).
- **Công cụ**: **Options Framework** (macro-actions) và **MAXQ** decomposition.

#### **c. Inverse Reinforcement Learning (IRL)**
- **Mục tiêu**: Suy luận reward function từ demonstrations (ví dụ: học lái xe bằng cách xem con người lái).
- **Ứng dụng**: Dạy robot qua quan sát.

---

### **5. Công cụ và Thư viện**
- **Mô phỏng MDP**:
- **OpenAI Gym**: Môi trường tiêu chuẩn như CartPole, MountainCar.
- **PyBullet**: Mô phỏng robot với vật lý chân thực.
- **Giải MDP**:
- **MDPSuite** (Python): Hỗ trợ DP, Value Iteration.
- **PRISM** (Tool): Phân tích MDP probabilistic.

---

### **6. Lỗi thường gặp khi thiết kế MDP**
| **Lỗi** | **Hậu quả** | **Cách khắc phục** |
|-----------------------|---------------------------------|-----------------------------------|
| **Reward Hacking** | Agent tìm cách "gian lận" để kiếm điểm (ví dụ: tự đâm vào tường để kết thúc sớm). | Thiết kế reward kỹ lưỡng, thêm penalty cho hành vi không mong muốn. |
| **State Aliasing** | Hai states khác nhau được gom thành một → Agent không phân biệt được. | Tăng chi tiết biểu diễn state (ví dụ: thêm tốc độ vào state). |
| **Discount Factor γ quá cao/thấp** | Agent chỉ tập trung vào phần thưởng ngắn hạn/dài hạn cực đoan. | Thử nghiệm γ trong khoảng [0.9, 0.99] và điều chỉnh theo bài toán. |

---

### **Kết luận**
MDP là **nền tảng không thể thiếu** để chuyển bài toán thực tế thành bài toán RL. Để thành công:
1. **Thiết kế states và actions** phải cân bằng giữa độ chi tiết và tính khả thi.
2. **Reward function** cần được kiểm tra kỹ để tránh hành vi lệch lạc.
3. **Lựa chọn phương pháp giải** (DP, MC, TD, Deep RL) dựa trên đặc thù bài toán.

Bước tiếp theo: Áp dụng các thuật toán **Monte Carlo** hoặc **Q-Learning** để học policy khi không biết model!

0 comments on commit 2ab9fe8

Please sign in to comment.