یادگیری تقویتی چیست؟
یادگیری تقویتی چیست؟ یادگیری تقویتی (Reinforcement Learning) شاخهای جذاب و البته مشکل از هوش مصنوعی است که در آن ماشینها از طریق تجربه و پاداش، هوشمند میشوند. در این آموزش از آکادمی هوسم، مفاهیم یادگیری تقویتی را به زبان ساده توضیح میدهم. با من همراه باشید تا شما را با RL آشنا کنم…
یادگیری تقویتی چیست؟
یادگیری تقویتی یا Reinforcement Learning یا RL یکی از شاخههای مهم و جذاب یادگیری ماشین است. همانطور که از کلمه Learning مشخص است، یادگیری تقویتی یک نوع روش یادگیری است. مشابه با روش یادگیری باناظر (Supervised Learning) یا یادگیری بدون ناظر (Unsupervised Learning) که احتمالا با آنها آشنایی دارید. اما، دقیقا Reinforcement به چه معناست؟ در فارسی میتوان آن را معادل تقویت یا تشویق دانست. در روانشناسیِ یادگیری، تقویت به پاداشی گفته میشود که باعث افزایش احتمال تکرار یک رفتار خاص میشود. مثلا وقتی حیوانی بعد از زدن یک دکمه غذا میگیرد، آن رفتار (زدن دکمه) توسط پاداش تقویت میشود.
وقتی این مفهوم وارد دنیای هوش مصنوعی و یادگیری ماشین شد، پژوهشگران از همان منطق استفاده کردند: عامل هوشمند باید از پاداش و تنبیه محیط یاد بگیرد کدام عمل سودمندتر است و آن را تکرار کند. بنابراین، یادگیریای که از راه پاداش و بازخورد صورت میگیرد، یادگیری از راه تقویت یا همان Reinforcement Learning نام گرفت. به بیان ساده، نام این روش، ادای دینی است به نظریههای روانشناسی رفتاری که در آن یادگیری با تقویت رفتار مطلوب محور اصلی آموزش موجودات زنده بود.
توضیحات بالا، ریشه و معنی یادگیری تقویتی یا Reinforcement Learning را مشخص کرد. اما حالا لازم هست یک تعریف علمی و دقیق از یادگیری تقویتی ببینیم. یادگیری تقویتی یعنی:
آموزش دادن یک عامل هوشمند (Agent) که
از طریق تعامل با محیط (Environment) یاد بگیرد و
عملهایی (Action) انجام دهد که
مجموع پاداشهایش (Reward) را در طول زمان به حداکثر برساند.
سعی کنید، تعریف بالا را عمیق درک کنید. برای درک بهتر این تعریف، مثال زیر را برای شما آوردهام. بازی Pacman یکی از بازیهای محبوب ما در دوران کودکی و نوجوانی بود. ما به این بازی نقطهخور میگفتیم! موجودی زرد رنگ که هدایتش در دست ما بود، نقطههای سفید ریز و درشت را میخورد و امتیاز جمع میکرد. درعینحال، باید از موجودهای روح رنگارنگ فاصله میگرفت. البته، در یک حالت ما میتوانستیم این روحها را شکار کنیم و بخوریم؛ آنهم زمانی بود که نقطههای سفید بزرگ را میخوردیم، چند ثانیه فرصت استثنایی برای شکار روح داشتیم! حال با این توضیحات کلی، بیایید این بازی را به فضای یادگیری تقویتی ببریم و با تعریف علمی بالا تطبیق دهیم:
- در فضای RL، موجود زردرنگ نقش عامل هوشمند (Agent) را دارد.
- کل بازی بهجز ایجنت (موجود زردرنگ) محیط (Environment) هست.
- هر حرکت موجود زردرنگ معادل با عمل (Action) است. در این بازی، ایجنت فقط چهار حرکت ↑→←↓ دارد.
- امتیازهای بهدستآمده در بازی معادل با پاداش (Reward) است.
- بهدنبال این هستیم که در یک اپیزود/سری/دست بازی مجموع امتیازهای بهدستآمده حداکثر باشد. به SCORE نگاه کنید.

در بخش بعدی، نگاهمان کمی علمیتر خواهد شد…
دیاگرام چرخه عامل و محیط در یادگیری تقویتی
در یادگیری تقویتی، دیاگرامی معروفی بهنام چرخه تعامل عامل (Agent) و محیط (Environment) در یادگیری تقویتی یا حلقه یادگیری عامل–محیط وجود دارد. در این دیاگرام معمولا رابطه رفتوبرگشتی میان عامل و محیط نمایش داده میشود:
- عامل در هر گام زمانی با مشاهده وضعیت/حالت محیط (State) تصمیم میگیرد عملی (Action) انجام دهد.
- پس از انجام آن عمل، محیط واکنش نشان میدهد و وضعیت/حالت جدید و مقدار پاداش (Reward) را برمیگرداند.
- این اطلاعات به عامل میرسد و باعث بهروزرسانی سیاست تصمیمگیریاش میشود تا در آینده عملکرد بهتری داشته باشد.
این چرخه مشاهده–عمل–بازخورد اساس یادگیری تقویتی را تشکیل میدهد و به عامل اجازه میدهد با تجربهکردن مسیر بهینه دستیابی به اهداف را یاد بگیرد.

در بخش قبلی، درباره وضعیت/حالت محیط (State) توضیح ندادم. اما در این تصویر بالا این اصطلاح وجود دارد. انتظار دارم مفهوم آن برای شما واضح باشد، اما بازهم توضیح میدهم. ایجنت ما هر عملی که انجام میدهد، در یک موقعیت/وضعیت جدیدی از محیط قرار میگیرد. این موقعیت/وضعیت ایجنت باید از طریق محیط به ایجنت گفته شود تا او بتواند عمل بعدی را انجام دهد. مثلا، ایجنت حرکت ↑ انجام داده؛ بسیارخب، نتیجه این حرکت ایجنت چه بوده؟ امتیاز کسب کرده؟ به دشمن برخورد کرده؟ اصلا هیچ اتفاقی نیفتاده؟ بنابراین، مشاهده وضعیت توسط ایجنت برای تصمیمگیری و انجام یک عمل مناسب کاملا ضروری است.
اجزای اصلی در یادگیری تقویتی
بهصورت کلی، 5 جز اصلی در چرخه تعامل عامل و محیط در یادگیری تقویتی وجود دارد. اگرچه، با هر 5 جز تاکنون آشنا شدید، اما بازهم خوب است که باهم این موارد را مرور کنیم:
- عامل (Agent): موجود هوشمند با قابلیت تصمیمگیری و یادگیری
- محیط (Environment): دنیای عامل با مجموعهای قانون و واکنش به کنش عامل
- وضعیت (State): توصیف کاملی از شرایط فعلی عامل در محیط
- کُنش (Action): تصمیم یا حرکت عامل در یک وضعیت مشخص
- پاداش (Reward): سیگنال عددی (+/-) نشاندهنده موفقیت/شکست عامل
فاز آموزش و استنتاج در یادگیری تقویتی
اگرچه در روشهای کلاسیک و تئوری یادگیری تقویتی، عامل هوشمند میتواند بهصورت پیوسته در حین تعامل با محیط یاد بگیرد و مرز کاملا مشخصی بین فاز آموزش (Learning) و استنتاج (Inference) وجود ندارد؛ اما با ورود شبکههای عصبی و پیدایش یادگیری تقویتی عمیق (Deep RL)، شرایط تغییر کرد. در روشهای مدرن، معمولا فاز آموزش (Learning) و استنتاج (Inference) از هم جدا میشوند.
در Deep RL، روال کلی فازهای آموزش و استنتاج تفاوت چندانی با یادگیری باناظر ندارد. اینجا هم، ابتدا ایجنت در محیط شبیهسازیشده آموزش میبیند که چگونه بازی کند (Learning)؛ سپس، از این عامل آموزشدیده برای بازی واقعی و تصمیمگیری استفاده میشود (Inference). در واقع، زمانیکه فرآیند آموزش تمام و فاز استنتاج شروع میشود، فرآیند یادگیری ایجنت و آپدیتشدن وزنهای مدل متوقف خواهد شد.
در شکل زیر، بلوک دیاگرام چرخه تعامل عامل و محیط را به دو بخش مجزا توسعه دادهام. در فرآیند Learning، ایجنت شامل یک مدل و الگوریتم یادگیری است. بخواهم کمی سادهسازی کنم، فکر کنید برای مدل از شبکه عصبی MLP و برای الگوریتم یادگیری هم از گرادیان کاهشی استفاده کردهایم. تاکید میکنم که همه الگوریتمهای تقویتی بر پایه شبکه عصبی و گرادیان کاهشی نیستند. در اثر تعامل عامل با محیط، یعنی همان چرخه مشاهده–عمل–بازخورد، عامل دستیابی به امتیاز حداکثری را میآموزد. اما در فرآیند Inference، دیگر خبری از الگوریتم یادگیری نیست و تنها مدل آموزشدیده با محیط تعامل میکند.

ویدئوی زیر، بهخوبی نشان میدهد که در اثر تکرار زیاد فاز آموزش/یادگیری ایجنت (زیاد بازی کردن ایجنت)، عملکردش بهتر میشود. طوریکه بعد از 5000 بار بازی، همه نقطهها را بهسرعت میخورد و دشمن را رنده میکند!
ابزارها و کتابخانههای یادگیری تقویتی
برای شروع یادگیری تقویتی، چند کتابخانه مهم در پایتون وجود دارند که کار پیادهسازی و آزمایش ایدهها را بسیار ساده میکنند. در ادامه فهرستی از کتابخانههای مهم را آوردهام.
کتابخانه Gymnasium
کتابخانه Gymnasium شامل کلکسیونی از محیطهای بازی و استاندارد برای آزمایش الگوریتمهاست. اتفاقا ممکن است، این سوال برای بسیاری از شماها وجود داشته باشد که چگونه یک ایجنت را در یک محیط بازی آموزش میدهیم؟ اصلا این محیط بازی کجاست و چطور میشود از این محیطها استفاده کنند؟ جواب این سوالها، همین کتابخانه Gymnasium است. کتابخانهای که محیطی مانند انیمیشن زیر را آماده کرده و شما با کدنویسی پایتون میتوانید این محیط را فراخوانی و استفاده کنید.

چطور است به کدهای محیط بالا هم نگاهی بیندازیم؟
import gymnasium as gym
# Initialise the environment
env = gym.make("LunarLander-v3", render_mode="human")
# Reset the environment to generate the first observation
observation, info = env.reset(seed=42)
for _ in range(1000):
# this is where you would insert your policy
action = env.action_space.sample()
# step (transition) through the environment with the action
# receiving the next observation, reward and if the episode has terminated or truncated
observation, reward, terminated, truncated, info = env.step(action)
# If the episode has ended then we can reset to start a new episode
if terminated or truncated:
observation, info = env.reset()
env.close()
توضیح مختصری درباره کدهای بالا:
- ابتدا کتابخانه ایمپورت شده.
- سپس، با دستور make، محیط بازی LunarLander فراخوانی شده.
- یک حلقه به تعداد تکرار 1000 تعریف شده. فکر کنید، به بچهمان اجازه دادهایم مثلا یک ساعت بازی کند!
- در هر تکرار از این حلقه، مدل باتوجه به وضعیت یک عملی (action) انجام میدهد. اینجا مدلی نداریم و صرفا یک حرکت تصادفی انجام میشود.
- عمل انجامشده به دستور step داده میشود تا وضعیت (state)، پاداش (reward) و یکسری فاکتور دیگر مشخص شود.
- متغیرهای terminated و truncated تعیین میکنند که اپیزود جاری تمام شده یا نه. ممکن است به خاطر لندینگ موفق یا ناموفق، بازی تمام شود. پس باید محیط ریست شود و از نو ایجنت بازی را شروع کند. آنقدر بازی کند تا بالاخره آن 1000 تکرار حلقه تمام شود.
- پس، اگر بخواهیم انیمیشن کامل این کد را ببینیم، ایجنت از ابتدا شروع میکند تا اینکه پیروز شود یا شکست بخورد. این فرآیند مدام تکرار میشود تا به پایان 1000 تکرار برسیم. دقیقا انیمیشن بالا، همین حالت را نشان میدهد. وقتی لندینگ تمام شد، از نو بازی شروع میشود و این فرآیند تا پایان 1000 تکرار ادامه دارد.
کتابخانه Stable-Baselines3
کتابخانه Stable-Baselines3 الگوریتمهای پیچیده یادگیری تقویتی (مثل DQN یا PPO) را به شکلی پیادهسازی کرده که شما به راحتی بتوانید از آنها استفاده کنید. به جای اینکه خودتان تمام جزئیات ریاضی و کدنویسی مربوط به این الگوریتمها را بنویسید، کافیست از توابع آماده آن استفاده کرده و روی تعریف محیط و تنظیم پارامترها تمرکز کنید. این کتابخانه بسیار قابل اعتماد و پرکاربرد است. اجازه میدهد تا به سرعت ایدههای خود را امتحان کرده و مدلهای یادگیری تقویتی را بسازید.
به عنوان نمونه، با تکه کد زیر، من یک مدل (شبکه MLP) را بر پایه الگوریتم PPO روی محیط LunarLander برای 1000 گام آموزش دادهام. فقط یک خط کد!
from stable_baselines3 import PPO
import gymnasium as gym
# Initialize environment and train the PPO agent in one continuous chain
model = PPO("MlpPolicy", "LunarLander-v3").learn(total_timesteps=10000)
کتابخانه PyTorch
کتابخانه PyTorch یک کتابخانه قدرتمند برای یادگیری عمیق (Deep Learning) است. در یادگیری تقویتی، اغلب نیاز داریم از شبکههای عصبی برای تصمیمگیری عامل (مثلا اینکه در هر لحظه چه حرکتی انجام دهد) استفاده کنیم. پایتورچ این امکان را فراهم میکند که بتوانید این شبکههای عصبی را به راحتی طراحی، آموزش و مدیریت کنید. کار با پایتورچ به سادگی کار با Stable-Baselines3 نیست! نیازمند این هست که یادگیری عمیق و کدنویسی پایتورچ را بلد باشید. در آکادمی هوسم، تا دلتان بخواهد آموزش پایتورچ داریم!
شروع یادگیری تقویتی برای تازهکارها
ابزارهای بسیار زیادی برای یادگیری تقویتی وجود دارد. اما، به نظرم برای شروع همین اندازه کافی است. بنابراین، اگر در دنیای RL تازهوارد هستید، فرمول زیر ترکیب ایدهآلی است:
Gymnasium + Stable-Baselines3 + PyTorch
هم ساده، هم قدرتمند و هم آموزشهای فراوان دارد. با کتابخانه Gymnasium محیط را بساز. با کتابخانه Stable-Baselines3 و کتابخانه PyTorch ایجنت بساز و آموزش بده.
پروژه یادگیری تقویتی (RL)
بهعنوان آخرین قدم میخواهم یک پروژه یادگیری تقویتی را از صفر تا صد به شما نشان دهم. این پروژه بسیار ساده است و هدفم صرفا این هست که آنچه در این آموزش یاد گرفتید را مرور کنید و یک بار بهصورت عملی ببینید.
ابتدا، کتابخانههای زیر را نصب کنید:
pip install gymnasium[box2d] stable-baselines3
حالا کد زیر را در VSCode اجرا کنید:
import gymnasium as gym
from stable_baselines3 import PPO
# 1. Create the environment
env = gym.make("LunarLander-v3")
# 2. Initialize the PPO model
model = PPO("MlpPolicy", env, verbose=1, learning_rate=0.0003, n_steps=1024)
print("Training the agent... Please wait.")
# 3. Train the agent (Learning Phase)
model.learn(total_timesteps=1_000_000)
print("Training finished!")
# Close the training environment
env.close()
# 4. Test the trained agent (Inference Phase)
# Recreate env with 'human' render mode to watch the agent play
env = gym.make("LunarLander-v3", render_mode="human")
obs, info = env.reset()
for i in range(1000):
print(i)
# Predict the best action based on the current observation
action, _states = model.predict(obs, deterministic=True)
# Take the action in the environment
obs, reward, terminated, truncated, info = env.step(action)
# If the lander crashes or lands successfully, reset the environment
if terminated or truncated:
obs, info = env.reset()
env.close()
کد بالا نکته جدیدی ندارد. در بخشهای قبلی درباره بخشهای مختلف این کد توضیح دادهام. ابتدا با الگوریتم PPO روی محیط LunarLnader یک ایجنت برای 1 میلیون اپیزود آموزش دادهام. چقدر زیاد؟ خب، باید آنقدر بازی کند تا به سطح تسلط خوبی برسد. اعداد کمتر، نتیجه دلچسبی ندارد. سپس، از این ایجنت آموزشدیده، در محیط شبیهسازیشده LunarLander استفاده کردهام.
من چند خروجی خوب از کد بالا گرفتم. اما یکی از خروجیهای چالشی را برای شما گذاشتهام. جایی که ایجنت ابتدا در مسیری حرکت میکند که نزدیک است خارج از ناحیه پرچم فرود بیاید. اما درنهایت، مسیر خود را اصلاح میکند و در جای درستی فرود میآید:
این هم پایان آموزش یادگیری تقویتی چیست؟ البته که این سرآغاز حوزه یادگیری تقویتی است. هنوز از یادگیری تقویتی چیزی نمیدانید. باید همینطور گامبهگام پیش بروید تا بالاخره به سطح دانش و مهارت خوبی در RL برسید. خب، مشتاقم نظر شما را درباره این آموزش بدانم. چطور بود؟ توانستید با RL ارتباط برقرار کنید؟ خوشتان آمد؟ در این آموزش، به عنوان اولین قدم، چه چیزهایی کم بود که پیشنهاد میکنید گفته شود؟ منتظر نظرات شما هستم…
3 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام مطالب خوبی بود کاشکی یه دوره کلی درباره یادگیری تقویتی عمیق می گذاشتید و تمام الگوریتم های موجود توضیح می دادید
سلام. عرض ادب . نوروز مبارک
جالب و خواندنی بود . کاش مطالب بیشتری در رابطه با RL بگذارید تا بیشتر بهره ببریم .
هم در قالب وبلاگ هم در قالب دوره .
ممنون از مطالب خوبتون
سلام
سال نو مبارک 🥗
باعث خوشحالیه که این آموزش رو دوست داشتید.
ممنون که کامنت گذاشتید.
بله، برنامه داریم که مطالب آموزشی بیشتری در راستای یادگیری تقویتی منتشر کنیم.