By Pau Labarta Bajo, Nhà toán học và nhà khoa học dữ liệu
Chào mừng bạn đến với khóa học tăng cường của tôi ❤️
Đây là phần 3 trong khóa học thực hành của tôi về học tăng cường, đưa bạn từ con số XNUMX trở thành NGƯỜI HÙNG 🦸♂️. Hôm nay chúng ta sẽ tìm hiểu về SARSA, một thuật toán RL mạnh mẽ.
Chúng ta vẫn đang ở giai đoạn đầu của cuộc hành trình, giải quyết những vấn đề tương đối dễ dàng.
In phần 2 chúng tôi đã triển khai Q-learning rời rạc để đào tạo một nhân viên trong Taxi-v3
môi trường.
Hôm nay, chúng ta sẽ tiến thêm một bước nữa để giải quyết vấn đề MountainCar
môi trường 🚃 sử dụng thuật toán SARSA.
Hãy giúp chiếc xe tội nghiệp này chiến thắng trong cuộc chiến chống lại trọng lực nhé!
Tất cả mã cho bài học này đều có trong repo Github này. Git sao chép nó để giải quyết vấn đề ngày nay.
1. Vấn đề xe miền núi 🚃
Vấn đề Xe leo núi là một môi trường tồn tại trọng lực (thật bất ngờ) và mục tiêu là giúp một chiếc xe kém chiến thắng trong cuộc chiến chống lại nó.
Chiếc xe cần phải thoát khỏi thung lũng nơi nó bị mắc kẹt. Động cơ của ô tô không đủ mạnh để leo lên núi chỉ trong một đường chuyền nên cách duy nhất để vượt qua là phải lái xe tới lui và tạo đủ đà.
Hãy xem nó trong hành động:
Đặc vụ Sarsa đang hành động!
Video bạn vừa xem tương ứng với SarsaAgent
chúng ta sẽ xây dựng ngày hôm nay.
Vui lắm phải không?
Bạn có thể tự hỏi.
Điều này có vẻ hay, nhưng tại sao bạn lại chọn vấn đề này ngay từ đầu?
Tại sao lại có vấn đề này?
Triết lý của khóa học này là tăng dần độ phức tạp. Từng bước một.
Môi trường ngày nay thể hiện sự gia tăng nhỏ nhưng có liên quan về độ phức tạp khi so sánh với môi trường hiện nay.Taxi-v3
môi trường ở phần 2
Nhưng, Chính xác thì điều gì khó hơn ở đây?
Như chúng ta đã thấy trong phần 2, độ khó của bài toán học tăng cường liên quan trực tiếp đến kích thước của
- không gian hành động: Tác nhân có thể chọn bao nhiêu hành động ở mỗi bước?
- không gian trạng thái: trong bao nhiêu cấu hình môi trường khác nhau mà tác nhân có thể tự tìm thấy?
Trong môi trường nhỏ với số lượng hành động và trạng thái hữu hạn (và nhỏ), chúng tôi có sự đảm bảo chắc chắn rằng các thuật toán như Q-learning sẽ hoạt động tốt. Chúng được gọi là môi trường dạng bảng hoặc rời rạc.
Hàm Q về cơ bản là các ma trận có số hàng là trạng thái và số cột là hành động. Trong này nhỏ thế giới, các đặc vụ của chúng tôi có thể dễ dàng khám phá các tiểu bang và xây dựng các chính sách hiệu quả. Khi không gian trạng thái và (đặc biệt) không gian hành động trở nên lớn hơn, vấn đề RL trở nên khó giải quyết hơn.
Môi trường ngày nay là KHÔNG dạng bảng. Tuy nhiên, chúng ta sẽ sử dụng một “thủ thuật” rời rạc để chuyển nó thành dạng bảng rồi giải.
Đầu tiên chúng ta hãy làm quen với môi trường nhé!
2. Môi trường, hành động, trạng thái, phần thưởng
👉🏽 notebook/00_environment.ipynb
Hãy tải môi trường:
Và vẽ một khung:
Hai số xác định nhà nước của chiếc xe ôtô:
- Vị trí của nó nằm trong khoảng từ -1.2 đến 0.6
- Tốc độ của nó dao động từ -0.07 đến 0.07.
Trạng thái được cho bởi 2 số liên tục. Đây là điểm khác biệt đáng chú ý so với Taxi-v3
môi trường từ phần 2. Sau này chúng ta sẽ xem cách xử lý việc này.
Là gì hành động?
Có 3 hành động có thể thực hiện:
0
Tăng tốc sang trái1
không làm gì cả2
Tăng tốc sang phải
Và phần thưởng?
- Phần thưởng -1 được trao nếu vị trí của xe nhỏ hơn 0.5.
- Tập phim kết thúc khi vị trí của ô tô trên 0.5 hoặc đã đạt đến số bước tối đa:
n_steps >= env._max_episode_steps
Phần thưởng âm mặc định là -1 khuyến khích xe thoát khỏi thung lũng càng nhanh càng tốt.
Nói chung, tôi khuyên bạn nên kiểm tra Môi trường phòng tập thể dục AI mở' triển khai trực tiếp trong Github để hiểu trạng thái, hành động và phần thưởng.
Mã này được ghi chép đầy đủ và có thể giúp bạn nhanh chóng hiểu mọi thứ bạn cần để bắt đầu làm việc với các nhân viên RL của mình. MountainCar
việc thực hiện là Ở đây, ví dụ.
Tốt. Chúng tôi đã làm quen với môi trường.
Hãy xây dựng một tác nhân cơ bản cho vấn đề này!
3. Đường cơ sở tác nhân ngẫu nhiên 🤖🍷
👉🏽 notebook/01_random_agent_baseline.ipynb
Các vấn đề về học tăng cường có thể trở nên phức tạp khá dễ dàng. Mã có cấu trúc tốt là đồng minh tốt nhất của bạn để kiểm soát độ phức tạp.
Hôm nay chúng ta sẽ nâng cao kỹ năng Python của mình và sử dụng một BaseAgent
lớp học cho tất cả các đại lý của chúng tôi. Từ đây BaseAgent
lớp học, chúng ta sẽ rút ra RandomAgent
và SarsaAgent
các lớp học.
BaseAgent
là một lớp trừu tượng chúng tôi xác định trong src/base_agent.py
Nó có 4 phương pháp.
Hai trong số các phương thức của nó là trừu tượng, có nghĩa là chúng ta buộc phải triển khai chúng khi chúng ta bắt nguồn từ RandomAgent
và SarsaAgent
từ BaseAgent:
get_action(self, state)
→ trả về hành động cần thực hiện, tùy thuộc vào trạng thái.update_parameters(self, state, action, reward, next_state)
→ điều chỉnh các thông số tác nhân bằng kinh nghiệm. Ở đây chúng ta sẽ triển khai công thức SARSA.
Hai phương pháp còn lại cho phép chúng ta lưu/tải tác nhân đã được đào tạo vào/từ đĩa.
save_to_disk(self, path)
load_from_disk(cls, path)
Khi chúng tôi bắt đầu triển khai các mô hình phức tạp hơn và thời gian đào tạo tăng lên, việc lưu các điểm kiểm tra trong quá trình đào tạo sẽ là một ý tưởng tuyệt vời.
Đây là mã hoàn chỉnh cho chúng tôi BaseAgent
lớp học:
Từ đây BaseAgent
lớp, chúng ta có thể định nghĩa RandomAgent
như sau:
Hãy đánh giá điều này RandomAgent
kết thúc n_episodes = 100
để xem giá vé tốt như thế nào:
Và tỷ lệ thành công của chúng tôi RandomAgent
Là…
0% 🤭…
Chúng ta có thể thấy tác nhân đã đi được bao xa trong mỗi tập với biểu đồ sau:
Trong những 100
điều hành của chúng tôi RandomAgent
đã không vượt qua 0.5 đánh dấu. Không một lần nào cả.
Khi bạn chạy mã này trên máy cục bộ của mình, bạn sẽ nhận được kết quả hơi khác, nhưng tỷ lệ phần trăm các tập đã hoàn thành trên 0.5 sẽ rất xa so với 100% trong mọi trường hợp.
Bạn có thể xem sự khốn khổ của chúng tôi RandomAgent
trong hành động sử dụng cái đẹp show_video
chức năng trong src/viz.py
Một tác nhân ngẫu nhiên là không đủ để giải quyết môi trường này.
Hãy thử điều gì đó thông minh hơn 😎…
4. Tác nhân SARSA 🚃🧠
👉🏽 notebook/02_sarsa_agent.ipynb
dịch SARS (bởi Rummery và Niranjan) là một thuật toán để đào tạo các tác nhân học tăng cường bằng cách học hàm giá trị q tối ưu.
Nó được xuất bản vào năm 1994, hai năm sau Q-học tập (của Chris Walkins và Peter Dayan).
SARSA là viết tắt của State Action Rphần thưởng State Action.
Cả SARSA và Q-learning đều khai thác phương trình Bellman để tìm ra các giá trị gần đúng tốt hơn cho hàm giá trị q tối ưu Q*(các, a)
Nếu bạn còn nhớ ở phần 2 thì công thức cập nhật cho Q-learning là
Công thức này là một cách để tính toán ước tính mới của giá trị q gần với
Số lượng này là một mục tiêu 🎯 chúng tôi muốn sửa lại ước tính cũ của mình về phía. Đó là một ước lượng về giá trị q tối ưu mà chúng tôi nên hướng tới, giá trị đó sẽ thay đổi khi chúng tôi đào tạo tác nhân và ma trận giá trị q của chúng tôi được cập nhật.
Các vấn đề về học tăng cường thường trông giống như các vấn đề ML được giám sát với di chuyển mục tiêu 🏃 🎯
SARSA có công thức cập nhật tương tự nhưng có công thức khác mục tiêu
mục tiêu của SARSA
còn phụ thuộc vào hành động một ' đại lý sẽ nhận ở trạng thái tiếp theo S'. Đây là trận chung kết A ở bệnh SARSA 'tên của.
Nếu bạn khám phá đủ không gian trạng thái và cập nhật ma trận q của mình bằng SARSA, bạn sẽ có được chính sách tối ưu. Tuyệt vời!
Có thể bạn đang nghĩ…
Q-learning và SARSA trông gần giống với tôi. Sự khác biệt là gì? ????
Thuật toán chính sách và chính sách ngoài chính sách
Có một điểm khác biệt chính giữa SARSA và Q-learning:
👉 Cập nhật của SARSA phụ thuộc vào hành động tiếp theo Một', và do đó về chính sách hiện tại. Khi bạn đào tạo và giá trị q (và chính sách liên quan) được cập nhật, chính sách mới có thể tạo ra một hành động tiếp theo khác Một'' cho cùng một trạng thái s '.
Bạn không thể sử dụng kinh nghiệm trong quá khứ (s, a, r, s', a') để cải thiện ước tính của bạn. Thay vào đó, bạn sử dụng mỗi trải nghiệm một lần để cập nhật giá trị q rồi vứt nó đi.
Vì lý do này, SARSA được gọi là chính sách phương pháp
👉 Trong Q-learning, công thức cập nhật không phụ thuộc vào hành động tiếp theo Một', nhưng chỉ trên (s, a, r, s'). Bạn có thể sử dụng lại kinh nghiệm trong quá khứ (s, a, r, s'), được thu thập bằng phiên bản cũ của chính sách để cải thiện giá trị q của chính sách hiện tại.Q-learning là một ngoài chính sách phương pháp.
Các phương pháp ngoài chính sách cần ít kinh nghiệm hơn để học so với các phương pháp trong chính sách vì bạn có thể sử dụng lại các kinh nghiệm trong quá khứ nhiều lần để cải thiện ước tính của mình. Họ còn nhiều mẫu hiệu quả.
Tuy nhiên, các phương pháp ngoài chính sách có vấn đề hội tụ về hàm giá trị q tối ưu Q*(s, a) khi trạng thái, không gian hành động tăng lên. Chúng có thể phức tạp và không ổn định.
Chúng ta sẽ gặp phải những sự đánh đổi này sau này khi chúng ta bước vào lãnh thổ RL sâu 🤓.
Quay trở lại vấn đề của chúng ta…
Trong tạp chí MountainCar
môi trường, trạng thái không rời rạc mà là một cặp giá trị liên tục (vị trí s1
, vận tốc s2
).
liên tiếp về cơ bản có nghĩa là giá trị vô hạn có thể trong ngữ cảnh này. Nếu có vô số trạng thái khả dĩ thì không thể đi thăm hết chúng để đảm bảo rằng SARSA sẽ hội tụ.
Để khắc phục điều đó chúng ta có thể sử dụng một thủ thuật.
Hãy rời rạc hóa vectơ trạng thái thành một tập hữu hạn các giá trị. Về cơ bản, chúng tôi không thay đổi môi trường mà là thay đổi trạng thái mà tác nhân sử dụng để chọn hành động của nó.
Của chúng tôi SarsaAgent
rời rạc hóa trạng thái (s1, s2)
từ liên tục đến rời rạc, bằng cách làm tròn vị trí [-1.2 … 0.6]
đến gần nhất 0.1
dấu và vận tốc [-0.07 ...0.07]
đến gần nhất 0.01
dấu.
Hàm này thực hiện chính xác điều đó, dịch liên tục sang các trạng thái rời rạc:
Sau khi tác nhân sử dụng trạng thái rời rạc, chúng ta có thể sử dụng công thức cập nhật SARSA ở trên và khi tiếp tục lặp lại, chúng ta sẽ tiến gần hơn đến giá trị q tối ưu.
Đây là toàn bộ quá trình thực hiện của SarsaAgent
Lưu ý 👆 rằng hàm giá trị q là một ma trận có 3 chiều: 2 cho trạng thái (vị trí, vận tốc) và 1 cho hành động.
Hãy chọn các siêu tham số hợp lý và huấn luyện điều nàySarsaAgent
cho n_episodes = 10,000
Hãy âm mưu rewards
và max_positions
(đường màu xanh) với đường trung bình động 50 tập (đường màu cam)
Siêu! Có vẻ như của chúng tôi SarsaAgent
đang học.
Ở đây bạn có thể thấy nó hoạt động:
Nếu bạn quan sát max_position
Biểu đồ trên bạn sẽ nhận thấy rằng ô tô thỉnh thoảng không leo được lên núi.
Điều đó xảy ra thường xuyên như thế nào? Hãy đánh giá đại lý trên 1,000
các tập ngẫu nhiên:
Và tính tỷ lệ thành công:
95.2% là khá tốt. Tuy nhiên, không hoàn hảo. Hãy ghim vào phần này, chúng tôi sẽ quay lại sau trong khóa học.
Lưu ý: Khi bạn chạy mã này, bạn sẽ nhận được kết quả hơi khác một chút, nhưng tôi cá là bạn sẽ không đạt được hiệu suất 100%.
Bạn đã làm rất tốt! Chúng tôi đã triển khai một SarsaAgent
học được điều đó 🤟
Đây là thời điểm tốt để tạm dừng…
5. Hãy tạm dừng và thở ⏸🧘
👉🏽 notebooks/03_momentum_agent_baseline.ipynb
Điều gì sẽ xảy ra nếu tôi nói với bạn rằng MountainCar
môi trường có một giải pháp đơn giản hơn nhiều…
nó hoạt động 100% thời gian? 😅
Chính sách tốt nhất để làm theo là đơn giản.
Chỉ cần theo đà:
- tăng tốc sang phải khi xe đang di chuyển sang phải
velocity > 0
- tăng tốc sang trái khi xe đang di chuyển sang trái
velocity <= 0
Nhìn bề ngoài, chính sách này trông như thế này:
Đây là cách bạn viết nó MomentumAgent
bằng Python:
Bạn có thể kiểm tra kỹ xem nó đã hoàn thành từng tập chưa. Tỷ lệ thành công 100%.
Nếu bạn vẽ sơ đồ được đào tạoSarsaAgent
Mặt khác, chính sách của bạn sẽ thấy một cái gì đó như thế này:
Cái nào có sự trùng lặp 50% với cái hoàn hảo MomentumAgent
điều luật
Điều này có nghĩa là của chúng tôi SarsaAgent
đúng có thể 50% thời gian.
Hay đấy…
Tại sao vậy SarsaAgent
thường xuyên sai nhưng vẫn đạt hiệu quả tốt?
Điều này là do MountainCar
vẫn là một môi trường nhỏ nên việc đưa ra những quyết định sai lầm trong 50% thời gian không quá nghiêm trọng. Đối với những vấn đề lớn hơn, việc mắc lỗi thường xuyên là không đủ để xây dựng các tác nhân thông minh.
Bạn có mua một chiếc ô tô tự lái đúng 95% không? 😱
Ngoài ra, bạn có nhớ thủ thuật rời rạc chúng ta đã từng áp dụng SARSA? Đó là một thủ thuật đã giúp chúng tôi rất nhiều nhưng cũng gây ra lỗi/sai lệch cho giải pháp của chúng tôi.
Tại sao chúng ta không tăng độ phân giải của phép rời rạc hóa cho trạng thái và vận tốc để có được lời giải tốt hơn?
Vấn đề của việc làm này là sự tăng trưởng theo cấp số nhân về số lượng các trạng thái, còn được gọi là lời nguyền của chiều. Khi bạn tăng độ phân giải của từng thành phần trạng thái, tổng số trạng thái sẽ tăng theo cấp số nhân. Không gian trạng thái phát triển quá nhanh để tác nhân SARSA có thể hội tụ về chính sách tối ưu trong một khoảng thời gian hợp lý.
Được rồi, nhưng có thuật toán RL nào khác có thể giải quyết vấn đề này một cách hoàn hảo không?
Vâng, có. Và chúng tôi sẽ đề cập đến chúng trong các bài giảng sắp tới. Nói chung, không có thuật toán nào phù hợp cho tất cả mọi người khi nói đến thuật toán RL, vì vậy bạn cần thử một vài trong số chúng cho vấn đề của mình để xem cái nào hoạt động tốt nhất.
Trong tạp chí MountainCar
môi trường, chính sách hoàn hảo trông đơn giản đến mức chúng ta có thể thử tìm hiểu nó một cách trực tiếp mà không cần tính toán các ma trận giá trị q phức tạp. MỘT tối ưu hóa chính sách phương pháp có thể sẽ hoạt động tốt nhất.
Nhưng chúng ta sẽ không làm điều này ngày hôm nay. Nếu bạn muốn giải quyết môi trường này một cách hoàn hảo bằng RL, hãy theo dõi khóa học.
Hãy tận hưởng những gì bạn đã làm được ngày hôm nay.
6. Tóm tắt ✨
Ồ! Chúng tôi đã đề cập đến rất nhiều thứ ngày hôm nay.
Đây là 5 điều rút ra:
- SARSA là một thuật toán theo chính sách mà bạn có thể sử dụng trong môi trường dạng bảng.
- Các môi trường liên tục nhỏ có thể được coi là dạng bảng, sử dụng sự rời rạc hóa trạng thái và sau đó được giải quyết bằng SARSA dạng bảng hoặc Q-learning dạng bảng.
- Các môi trường lớn hơn không thể được rời rạc hóa và giải quyết vì lời nguyền của chiều.
- Đối với môi trường phức tạp hơn
MountainCar
chúng ta sẽ cần các giải pháp RL tiên tiến hơn. - Đôi khi RL không phải là giải pháp tốt nhất. Hãy ghi nhớ điều đó khi bạn cố gắng giải quyết những vấn đề mà bạn quan tâm. Đừng kết hôn với các công cụ của bạn (trong trường hợp này là RL), thay vào đó hãy tập trung vào việc tìm kiếm một giải pháp tốt. Đừng bỏ lỡ rừng vì cây 🌲🌲🌲.
7. Bài tập về nhà 📚
Đây là điều tôi muốn bạn làm:
- Bản sao Git repo vào máy cục bộ của bạn.
- Thành lập môi trường cho bài học này
02_mountain_car
- Mở
02_mountain_car/notebooks/04_homework.ipynb
và cố gắng hoàn thành 2 thử thách.
Trong thử thách đầu tiên, tôi yêu cầu bạn điều chỉnh các siêu thông số SARSA alpha
(tỷ lệ học tập) và gamma
(hệ số chiết khấu) để tăng tốc độ đào tạo. Bạn có thể lấy cảm hứng từ phần 2.
Trong thử thách thứ hai, hãy thử tăng độ phân giải của phép rời rạc hóa và tìm hiểu hàm giá trị q với SARSA dạng bảng. Như chúng tôi đã làm ngày hôm nay.
Hãy cho tôi biết nếu bạn xây dựng một đại lý đạt được hiệu suất 99%.
8. Tiếp theo là gì? ❤️
Trong bài học tiếp theo, chúng ta sẽ đi vào một lĩnh vực nơi Học tăng cường và Học máy có giám sát giao nhau 🤯.
Nó sẽ khá tuyệt, tôi hứa.
Cho đến lúc đó,
Hãy tận hưởng thêm một ngày nữa trên hành tinh tuyệt vời mang tên Trái đất này 🌎
Yêu
Và tiếp tục học hỏi 📖
Nếu bạn thích khóa học, hãy chia sẻ nó với bạn bè và đồng nghiệp.
Bạn có thể liên hệ với tôi dưới [email protected]
. Tôi rất muốn kết nối.
Hẹn gặp lại!
Tiểu sử: Pau Labarta Bajo (@paulabartabajo_) là một nhà toán học và diễn giả tự do về AI/ML, với hơn 10 năm kinh nghiệm xử lý các con số và mô hình cho các vấn đề khác nhau, bao gồm giao dịch tài chính, chơi game trên thiết bị di động, mua sắm trực tuyến và chăm sóc sức khỏe.
Nguyên. Đăng lại với sự cho phép.
Nguồn: https://www.kdnuggets.com/2022/01/handson-reinforcement-learning-course-part-3-sarsa.html