Reinforcement Learning (RL) একটি শেখার পদ্ধতি যা এজেন্টকে একটি পরিবেশে কাজ করার মাধ্যমে সিদ্ধান্ত গ্রহণ করতে শেখায়। এটি মূলত পুরস্কৃত হওয়ার মাধ্যমে শেখার প্রক্রিয়া যা সময়ের সাথে সাথে সবচেয়ে ভালো কৌশল আবিষ্কার করতে সাহায্য করে।
এখানে একটি Simple Reinforcement Learning (RL) model তৈরি করার জন্য আমরা TensorFlow এবং Keras ব্যবহার করব, যেখানে একটি বেসিক Q-learning এলগরিদম ব্যবহার করব।
আমরা একটি CartPole পরিবেশ ব্যবহার করব, যা OpenAI Gym-এ পাওয়া যায়। CartPole হল একটি ক্লাসিক RL পরিবেশ যেখানে একটি পোল (স্তম্ভ) একটি কার্টে রাখার চেষ্টা করা হয় এবং এটি সঠিকভাবে ব্যালেন্স করা লক্ষ্য।
ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
প্রথমে আপনার সিস্টেমে Gym লাইব্রেরি ইনস্টল করতে হবে, যা RL পরিবেশ তৈরি করতে সাহায্য করবে।
pip install gym tensorflow numpy
ধাপ ২: পরিবেশ তৈরি করা
এখানে আমরা OpenAI Gym এর CartPole-v1 পরিবেশ ব্যবহার করব।
import gym
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
# OpenAI Gym পরিবেশ তৈরি
env = gym.make('CartPole-v1')
# পরিবেশের ইনফরমেশন
print("Action Space: ", env.action_space)
print("State Space: ", env.observation_space)
ধাপ ৩: মডেল তৈরি করা
আমরা একটি সিম্পল নিউরাল নেটওয়ার্ক তৈরি করব যা Q-function এর অনুমান করবে। এই মডেলটি পরিবেশের state থেকে Q-values আউটপুট করবে, যা পরবর্তী পদক্ষেপের জন্য অ্যাকশন নির্বাচন করতে সহায়ক হবে।
def create_model(input_shape, output_shape):
model = tf.keras.Sequential([
layers.InputLayer(input_shape=input_shape),
layers.Dense(24, activation='relu'),
layers.Dense(24, activation='relu'),
layers.Dense(output_shape, activation='linear') # Q-values
])
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001))
return model
# মডেল তৈরি
model = create_model(input_shape=(4,), output_shape=env.action_space.n)
এখানে, আমরা 4 ইনপুট সাইজের (CartPole এর অবস্থার জন্য) এবং 2 আউটপুট সাইজের (দুটি অ্যাকশন: বাম বা ডান) একটি সিম্পল নিউরাল নেটওয়ার্ক মডেল তৈরি করেছি।
ধাপ ৪: Q-learning এলগরিদম বাস্তবায়ন
Q-learning হল একটি ভ্যালু-বেসড RL এলগরিদম, যেখানে আমাদের মূল লক্ষ্য হলো Q-table বা Q-values আপডেট করা যাতে প্রতিটি state-action pair এর জন্য সর্বোচ্চ পুরস্কার প্রাপ্তি নিশ্চিত করা যায়। এখানে আমরা epsilon-greedy নীতি ব্যবহার করব, যেখানে কিছু কিছু সময় এলোমেলো অ্যাকশনও নেওয়া হবে।
def train_model(env, model, episodes=1000, gamma=0.99, epsilon=1.0, epsilon_decay=0.995, epsilon_min=0.01):
for episode in range(episodes):
state = env.reset() # পরিবেশ শুরু
state = np.reshape(state, [1, 4]) # স্টেটকে সঠিক আকারে রূপান্তর করা
total_reward = 0
done = False
while not done:
# epsilon-greedy পলিসি
if np.random.rand() <= epsilon:
action = env.action_space.sample() # এলোমেলো অ্যাকশন
else:
q_values = model(state) # মডেল থেকে Q-values নেয়া
action = np.argmax(q_values[0]) # সর্বোচ্চ Q-value অ্যাকশন নির্বাচন করা
# পরবর্তী পদক্ষেপে পরিবেশের অবস্থা এবং পুরস্কার
next_state, reward, done, _, _ = env.step(action)
next_state = np.reshape(next_state, [1, 4])
# Q-value আপডেট করা
target = reward + gamma * np.max(model(next_state)[0]) * (1 - done)
with tf.GradientTape() as tape:
q_values = model(state)
loss = tf.keras.losses.MSE(q_values[0][action], target) # MSE loss function
grads = tape.gradient(loss, model.trainable_variables)
model.optimizer.apply_gradients(zip(grads, model.trainable_variables))
state = next_state
total_reward += reward
# epsilon ধীরে ধীরে কমানো
if epsilon > epsilon_min:
epsilon *= epsilon_decay
print(f"Episode {episode+1}/{episodes}, Total Reward: {total_reward}, Epsilon: {epsilon:.3f}")
# মডেল প্রশিক্ষণ
train_model(env, model, episodes=1000)
ধাপ ৫: মডেল টেস্টিং
প্রশিক্ষণ শেষে, আমরা মডেলটি টেস্ট করতে পারি। এটি পরীক্ষার মাধ্যমে কোন অ্যাকশন নেওয়া উচিত তা দেখতে সাহায্য করবে।
def test_model(env, model, episodes=10):
for episode in range(episodes):
state = env.reset()
state = np.reshape(state, [1, 4])
done = False
total_reward = 0
while not done:
q_values = model(state)
action = np.argmax(q_values[0]) # সর্বোচ্চ Q-value অ্যাকশন নির্বাচন করা
next_state, reward, done, _, _ = env.step(action)
next_state = np.reshape(next_state, [1, 4])
state = next_state
total_reward += reward
env.render() # পরিবেশের দৃশ্য দেখানো
print(f"Test Episode {episode+1}/{episodes}, Total Reward: {total_reward}")
# মডেল টেস্টিং
test_model(env, model, episodes=5)
সারাংশ
এখানে আমরা একটি Simple Q-learning মডেল তৈরি করেছি যা TensorFlow এবং Keras ব্যবহার করে CartPole-v1 পরিবেশে RL প্রশিক্ষণ করেছে। এই মডেলটি epsilon-greedy পলিসি অনুসরণ করে এবং একটি neural network মডেল ব্যবহার করে Q-values অনুমান করে। পরবর্তীতে, মডেলটি MSE loss ব্যবহার করে Q-values আপডেট করেছে এবং epsilon-greedy পলিসি অনুসরণ করে সঠিক অ্যাকশন নির্বাচন করেছে।
এই কোডটি Reinforcement Learning এর মূল ধারণাগুলি শিখতে এবং একটি সহজ RL মডেল তৈরি করতে সহায়ক হতে পারে।
Read more