ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Introduction to Deep Reinforcement Learning
    Reinforcement Learning 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

    반응형

    'Reinforcement Learning' 카테고리의 다른 글

    Policy-Gradient  (0) 2023.09.28
    Deep Q-Learning  (0) 2023.09.28
    Q-Learning  (0) 2023.09.28
Designed by Tistory.