Reinforcement Learning

Introduction to Deep Reinforcement Learning

joonojoono 2023. 9. 28. 23:21
반응형

Summary

  • RL에서는 reward를 feedback으로 받고 environmenttrial 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 policyexpected return을 최대화하는 actions을 결정하는 policy입니다.
  • optimal policy를 찾는 방법은 두 가지가 있습니다.
    • policy를 직접 학습하는 방법: Policy-Based Methods
    • 각 state에서 agent가 받을 expected return을 나타내는 value function을 학습하고 해당 funciton을 활용하여 policy를 define하는 방법: Value-Based Methods

LunarLander 학습하기

Google Colaboratory
https://colab.research.google.com/github/huggingface/deep-rl-class/blob/master/notebooks/unit1/unit1.ipynb

Understand with is Gym and how it works

  • environment를 포함하는 library는 gym 이라고 합니다. 이는 아래 두 가지를 포함합니다.
    1. RL environment를 생성하도록 interface를 제공합니다.
    1. environmnet를 모아두었습니다.
  • 앞서 배웠던 내용에서 RL은 아래와 같은 과정을 반복합니다.
    1. Environment로 부터 state S0S_0 를 받습니다.
    1. state S0S_0 로 부터 Agent는 action A0A_0 를 수행합니다.
    1. Environmet가 새로운 state S1S_1 이 됩니다.
    1. Environment는 Agent에서 reward R1R_1 을 제공합니다.
  • 이를 gym library를 활용하면 다음과 같이 코딩할 수 있습니다.
    1. gym.make() 를 사용하여 environment를 생성합니다.
    1. observation = env.reset() 을 사용하여 environment의 state가 S0S_0가 되게 합니다.
    1. model로부터 다음 action을 받습니다.
    1. env.step(action) 과 같은 코드를 수행하고 return 값으로 다음을 받습니다.
      • observation: The new state St+1S_{t+1}
      • reward: action을 수행한 뒤 받은 reward Rt+1R_{t+1}
      • 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 을 따릅니다.
    1. environment를 생성
    1. 사용하고자하는 모델을 생성하고 이를 instantiate
    1. 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:
      1. Agent는 Environment로 부터 state S0S_0 를 받는다.
      1. 받은 state S0S_0로 부터 Agent는 action A0A_0를 수행한다.
      1. Agent가 오른쪽으로 이동한다.
      1. The Environment는 New state S1S_1로 바뀐다.
      1. Environment는 Agent에게 reward R1R_1 을 준다.
  • Q3: What’s the differnece between a state and an observation?
    • State현재 Environment의 모든 정보를 갖는다. (No Hidden Information) 하지만 An ObservationState의 일부만을 나타낸다.
  • Q4: A task is an instance of a Reinforcement Learning problem. What are the two types of tasks?
    • Episodic
      • Episodic TaskStarting 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

반응형