Logo Zephyrnet

Khóa học thực hành củng cố phần 3: SARSA

Ngày:

By Pau Labarta Bajo, Nhà toán học và nhà khoa học dữ liệu

Khóa học thực hành củng cố phần 3: SARSA


 

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.

Khóa học thực hành củng cố phần 3: SARSA

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:

Khóa học thực hành củng cố phần 3: SARSA

Và vẽ một khung:

Khóa học thực hành củng cố phần 3: SARSA

Khóa học thực hành củng cố phần 3: SARSA

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.

Khóa học thực hành củng cố phần 3: SARSA

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ái
  • 1 không làm gì cả
  • 2 Tăng tốc sang phải

Khóa học thực hành củng cố phần 3: SARSA

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 RandomAgentSarsaAgent các lớp học.

Khóa học thực hành củng cố phần 3: SARSA

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ừ RandomAgentSarsaAgent 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:

Khóa học thực hành củng cố phần 3: SARSA

Từ đây BaseAgent lớp, chúng ta có thể định nghĩa RandomAgent như sau:

Khóa học thực hành củng cố phần 3: SARSA

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:

Khóa học thực hành củng cố phần 3: SARSA

Khóa học thực hành củng cố phần 3: SARSA

Và tỷ lệ thành công của chúng tôi RandomAgentLà…

Khóa học thực hành củng cố phần 3: SARSA

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:

Khóa học thực hành củng cố phần 3: SARSA

Khóa học thực hành củng cố phần 3: SARSA

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)

Khóa học thực hành củng cố phần 3: SARSA

Nếu bạn còn nhớ ở phần 2 thì công thức cập nhật cho Q-learning là

Khóa học thực hành củng cố phần 3: SARSA

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

Khóa học thực hành củng cố phần 3: SARSA

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

Khóa học thực hành củng cố phần 3: SARSA

mục tiêu của SARSA

Khóa học thực hành củng cố phần 3: 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:

Khóa học thực hành củng cố phần 3: SARSA

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

Khóa học thực hành củng cố phần 3: SARSA

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

Khóa học thực hành củng cố phần 3: SARSA

Khóa học thực hành củng cố phần 3: SARSA

Hãy âm mưu rewardsmax_positions (đường màu xanh) với đường trung bình động 50 tập (đường màu cam)

Khóa học thực hành củng cố phần 3: SARSA

Khóa học thực hành củng cố phần 3: SARSA

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:

Khóa học thực hành củng cố phần 3: SARSA

Và tính tỷ lệ thành công:

Khóa học thực hành củng cố phần 3: SARSA

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:

Khóa học thực hành củng cố phần 3: SARSA

Đây là cách bạn viết nó MomentumAgent bằng Python:

Khóa học thực hành củng cố phần 3: SARSA

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%.

Khóa học thực hành củng cố phần 3: SARSA

Khóa học thực hành củng cố phần 3: SARSA

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:

Khóa học thực hành củng cố phần 3: SARSA

Cái nào có sự trùng lặp 50% với cái hoàn hảo MomentumAgent điều luật

Khóa học thực hành củng cố phần 3: SARSA

Đ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.

Khóa học thực hành củng cố phần 3: SARSAAi đang vui vẻ?

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 MountainCarchú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à 📚

 
 
👉🏽 notebook/04_homework.ipynb

Đây là điều tôi muốn bạn làm:

  1. Bản sao Git repo vào máy cục bộ của bạn.
  2. Thành lập môi trường cho bài học này 02_mountain_car
  3. Mở 02_mountain_car/notebooks/04_homework.ipynbvà 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

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?