Summary
- RL에서는
reward
를 feedback으로 받고environment
와trial and error
의 방법으로 서로 상호작용하여 이로부터 학습하는agent
를 생성합니다.
- 모든 RL agent의 목표는
expected cumulative reward
를 최대화하는 것입니다.
- RL process는
state, action, reward 그리고 next state
를 output으로 갖는 일련의sequence의 loop
입니다.
- expected cumulative rewards를 계산하기 위해서 rewards를 discount합니다. 왜냐하면 더 미래에 더 가까운 reward가 미래에 먼 reward보다 예측 가능하며 더 받을 확률이 높기 때문입니다.
- RL problem을 해결하기 위해
optimal policy
를 찾아야합니다. policy는 agent의 “뇌”에 해당합니다. 이는 state가 주어졌을 때 어떤 action을 취할지 결정합니다.optimal policy
는 expected return을 최대화하는 actions을 결정하는 policy입니다.
- optimal policy를 찾는 방법은 두 가지가 있습니다.
- policy를 직접 학습하는 방법:
Policy-Based Methods
- 각 state에서 agent가 받을 expected return을 나타내는
value function
을 학습하고 해당 funciton을 활용하여 policy를 define하는 방법:Value-Based Methods
- policy를 직접 학습하는 방법:
LunarLander 학습하기
Understand with is Gym and how it works
environment
를 포함하는 library는gym
이라고 합니다. 이는 아래 두 가지를 포함합니다.- RL
environment
를 생성하도록 interface를 제공합니다.
environmnet
를 모아두었습니다.
- RL
- 앞서 배웠던 내용에서 RL은 아래와 같은 과정을 반복합니다.
- Environment로 부터 state 를 받습니다.
- state 로 부터 Agent는 action 를 수행합니다.
- Environmet가 새로운 state 이 됩니다.
- Environment는 Agent에서 reward 을 제공합니다.
- 이를 gym library를 활용하면 다음과 같이 코딩할 수 있습니다.
gym.make()
를 사용하여 environment를 생성합니다.
observation = env.reset()
을 사용하여 environment의 state가 가 되게 합니다.
- model로부터 다음 action을 받습니다.
env.step(action)
과 같은 코드를 수행하고 return 값으로 다음을 받습니다.observation
: The new state
reward
: action을 수행한 뒤 받은 reward
done
: episode가 끝났는지에 대한 flag
info
: 추가적인 info
example code
import gym # First, we create our environment called LunarLander-v2 env = gym.make("LunarLander-v2") # Then we reset this environment observation = env.reset() for _ in range(20): # Take a random action action = env.action_space.sample() print("Action taken:", action) # Do this action in the environment and get # next_state, reward, done and info observation, reward, done, info = env.step(action) # If the game is done (in our case we land, crashed or timeout) if done: # Reset the environment print("Environment is reset") observation = env.reset()
- 아래와 같이 observation, action space에 대한 정보를 받아올 수도 있습니다.
# We create our environment with gym.make("<name_of_the_environment>") env = gym.make("LunarLander-v2") env.reset() print("_____OBSERVATION SPACE_____ \n") print("Observation Space Shape", env.observation_space.shape) print("Sample observation", env.observation_space.sample()) # Get a random observation ---------------------------------------------------------------------------------------- _____OBSERVATION SPACE_____ Observation Space Shape (8,) Sample observation [-0.23920844 1.3326763 -1.4065027 0.9667968 0.59128666 -0.08642174 0.79977345 -0.715856 ] ========================================================================================= print("\n _____ACTION SPACE_____ \n") print("Action Space Shape", env.action_space.n) print("Action Space Sample", env.action_space.sample()) # Take a random action ---------------------------------------------------------------------------------------- _____ACTION SPACE_____ Action Space Shape 4 Action Space Sample 2
Create the Model
Introduction
- 목표
-
left
,right
,main orientation
engine 3가지의 actions으로 착륙 지점에 Lunar Lander를 정확히 착륙시키는 것입니다.
-
- 이를 위해 Stable Baseline3 (SB3) library를 사용합니다. SB3는 쓸만한 Pytorch로 구현된 RL 알고리즘의 구현체들의 집합입니다.
- 여기서는 그 중에서도 SOTA 모델 중 하나인 SB3의
PPO(Proximal Policy Optimization)
모델을 사용합니다.
Training
- SB3은 아래와 같은 step 을 따릅니다.
- environment를 생성
- 사용하고자하는 모델을 생성하고 이를 instantiate
model.learn
함수로 모델을 학습
# 1. Create environment
env = gym.make('LunarLander-v2')
# 2. We added some parameters to accelerate the training
model = PPO(
policy = 'MlpPolicy',
env = env,
n_steps = 1024,
batch_size = 64,
n_epochs = 4,
gamma = 0.999,
gae_lambda = 0.98,
ent_coef = 0.01,
verbose=1)
# 3. Train it for 1,000,000 timesteps
model.learn(total_timesteps=1000000)
# Save the model
model_name = "ppo-LunarLander-v2"
model.save(model_name)
Evaluatation
- SB3는 모델의 학습된 정도를 확인할 수 있는
evaluate_policy
함수를 제공합니다. 이를 사용해서 모델을 평가합니다.
#@title
eval_env = gym.make("LunarLander-v2")
mean_reward, std_reward = evaluate_policy(model, eval_env, n_eval_episodes=10, deterministic=True)
print(f"mean_reward={mean_reward:.2f} +/- {std_reward}")
Quiz
- Q1: What is Reinforcemnet Learning?
- RL은 Agent가 Environment와 상호작용하며 Cumulative Reward 값을 최대화하도록 학습하는 것을 의미합니다. 최종 결과로는 Agent의 “뇌”에 해당하는 Policy를 얻게 되고 이때 최적의 Policy를 Optimal Policy라고 합니다.
- RL은 Trial and Error로 상호작용하며 reward를 유일한 피드백으로 받는 Environment로 부터 Agent를 학습하여 Control Task (혹은 Decision Task라도 불림) 를 해결하는 Framework입니다.
- Q2: Define the RL Loop
- At every Step:
- Agent는 Environment로 부터 state 를 받는다.
- 받은 state 로 부터 Agent는 action 를 수행한다.
- Agent가 오른쪽으로 이동한다.
- The Environment는 New state 로 바뀐다.
- Environment는 Agent에게 reward 을 준다.
- At every Step:
- Q3: What’s the differnece between a state and an observation?
State
는 현재 Environment의 모든 정보를 갖는다. (No Hidden Information) 하지만 AnObservation
은 State의 일부만을 나타낸다.
- Q4: A task is an instance of a Reinforcement Learning problem. What are the two types of tasks?
Episodic
Episodic Task
는 Starting Point와 Ending Point(A Terminal State)가 있는 Task이다. 이러한 Task는 States, Actions, Rewards, Next States의 list를 생성한다. 예시로 슈퍼 마리오 게임을 생각해볼 수 있다.
Continuing
Continuing
Task는 영원히 끝나지 않는 task (No Terminal State)를 의미한다. Agent는 Environment와 상호작용하며 어떤 Action이 최선인지 결정해야한다.
- Q5: What is the exploration/exploitation tradoff?
- Exploration은 지금까지 알려진 최선의 선택을 하지 않고 다른 선택을 해보는 것이며 Exploitation은 기존의 알려진 최선의 선택을 하는 것이다. 이 둘의 tradeoff는 Exploration을 하면 Exploitation을 했을 때보다 나쁜 결과를 얻을 수 있지만 새로운 최선을 찾을 수도 있다. Exploitation을 하면 당장은 최선의 선택을 할 수 있지만 더 나은 최선을 찾을 가능성을 차단한다.
- RL에서 Exploration과Exploitation의 balance를 잘 맞춰야한다.
Exploration
은 Environment의 정보를 더 찾아보기 위해 random action을 취하는 것이다.Exploitation
은 rewards를 maximize하기 위해 알려진 정보를 말 그대로 exploit하는 것이다.
- Q6: What is a Policy?
- Policy는 Agent의 “Brain”에 해당한다. 주어진 State로부터 어떤 Action을 취해야하는지 알려준다. Deterministic Policy, Stochastic Policy가 있으며, Deterministic Policy는 deterministic하게 취해야할 다음 action을 콕 집어주며 Stochastic Policy는 다음에 취할 Actions를 Probabiity Distiribution을 나타낸다.
- Q7: What are value-based methods?
- 각 state, action이 주어졌을 때 culmulative discounted return을 예측하는 함수이다.
- Policy function을 직접 학습하는 것이 아니라, state가 주어졌을 때 state을 expected value로 mapping하는 value function을 학습하는 method이다.
- Q8: What are policy-based methods?
- 주어진 state에 대하여 이에 대응하는 최선의 Action으로 mapping 하는 policy function을 학습하는 방법이다
Uploaded by N2T