MachineLearning

앵버박사 2017. 10. 22. 22:56


[Lec1]

- Reinforcement Learning

  사람이 배우는 과정을 모방

  한가지 알고리즘으로 여러 게임에 적용가능

- 구조

  Agent(Actor) -(Action)-> Environment

            <-(State(Observation))-

            <-(Reward)-


[Lec2]

- OpenAI GYM : Environment를 제공해주는 프레임워크


[Lec3]

- Q-Learning(Dummy)

  랜덤으로만 해보려니 막막하다. Q선생님께 물어보자

  state&action -> Q -> 예상 reward

  Q-function(state-action value function)

  Q(state, action) => 예상 reward 반환

- 정책(policy) : optimal policy

  1) Max Q = Max Q(s,a`) -> 최대 reward를 찾고

                     a`

  2) π*(s) = argmax Q(s,a) -> 최대 reward의 action을 선택(*은 optimal(최적)이란 의미)

- 학습(Learning Q)

  Q^(s,a) <- r + max Q^(s`,a`) -> r(실제로 받은 reward) + 미래에 받을 reward(Q값)

                          a`

  1) 처음엔 Q값을 전부 0으로 초기화

  2) 계속 이동해도 reward가 0이면 Q의 업데이트는 0유지

  3) 결국 목적지에 도착해 reward 1을 받을 때가 오면 Q값이 1로 업데이트 되는 곳이 생김

  4) 처음부터 다시 반복하다보면 맵 전반에 Q값 1들이 생겨나고, 나중에 실전에서 agent가 Q에게 물어보며 길을 찾을 수 있음(옳은 행동선택)


[Lec4]

- Q-Learning(Exploit&Exploration)

  Q-Learning(Dummy)는 매번 같은 길만 이용하게 되므로 추가적인 알고리즘 필요(Exploit&Exploration)

  Exploit : 기존 값 이용, Exploration : 모험(안가본 곳 가보기)

- 알고리즘들

  1) E-greedy(with decay)

    for i in range(1000):

      e = 0.1 / (i + 1) # decay

      if random(1) < e:

        a = random()

      else:

        a = argmax(Q[s,a])

  2) Add random noise(with decay) : 완전 랜덤이 아니라 기존 점수 반영

    for i in rnage(1000):

      a = argmax(Q(s,a) + random_values / (i + 1))

- 위 알고리즘들(E&E)은 기존 Q-Learning 알고리즘에서 action을 선택할 때 사용

- with discounted reward

  하지만 E&E를 쓰면 1점짜리가 여러개 있어 뭐를 선택해야할지 알 수 없어짐 따라서 아래와 같은 방법을 사용

  Q^(s,a) <- r + γ * max Q^(s`,a`)

                                a`

  : γ(감마)는 미래에 받을 가치를 감소시키는 역할, 이렇게 하면 목적지와 거리가 멀어질 수록 값이 작아지는 효과를 냄

- Q가 아니라 Q^인 이유는 추정 값이기 때문이다. 단, 아래 두가지를 만족해야 Q^이 Q에 수렴한다

  1) 어느 방향으로 움직여도 같은 reward를 받는다

  2) 상태의 수가 유한하다


[Lec5]

- Deterministic : 안정적인 환경 - 움직이고자 하는대로 움직이고, 항상 같은 reward를 받음

  Stochastic(Non-deterministic) : 불안정한 환경 - 움직이려고 하는대로 안움직임(지맘대로), 그래서 항상 같은 action에 같은 reward를 받는다는 보장이 없음

- Stochastic 환경에서 Q를 그대로 쓰면 미리해본 Q의 action이 실제 작동은 어떻게 됐을지 모르니깐 결국 다르다. 따라서 Q가 알려주는 것 대로 하는 것이 정확하지 않아짐

- 해결방법 : Q말을 일부만 받아들이자

  Q(s,a) <- (1-α) * Q(s,a) + α(r + γ * max Q(s`,a`))

                                                         a`

  α는 Learning rate으로 α가 0.9면 현재상태를 90%로 받아들이고, Q의 예측을 10%만 받아들이는 것

  식을 더 풀어 정리해보면,

  Q(s,a) <- Q(s,a) + α(r + γ * max Q(s`,a`) - Q(s,a))

- 많이 반복하면 Q^이 Q에 수렴(Convergence) 한다

- Deterministic에서 돌려봐도 좋은 결과가 나온다

- 이것이 최종 Q-Learning 알고리즘 이다


[Lec6]

- 우리가 지금까지 배운 Q-Table을 이용한 Q-Learning은 배열이 필요한데, 현실적인 문제는 너무 많은 배열이 필요하므로 구현이 어렵다

  따라서 뉴럴넷을 사용한다 -> Q-Network

- 입력으로 state를 받고, 출력으로 모든 action에 대한 Q-Value를 받는다(one-hot encoding 사용)

- cost(W) = (Ws - y)^2

  Ws = Q-predict = Q^ -> NN의 최종 출력 값

  y = r + γ * max Q(s`)

- 학습 알고리즘 정리

  min Σ[Q(s,a|θ) - (r + γ * max Q(s`,a`|θ))]^2

   θ

  θ : weight, Q(s,a|θ) : Ws, (r + γ * max Q(s`,a`|θ) : y

- Stochastic의 알고리즘을 사용하지 않는 이유는 네트워크에서 loss function을 minimize하는 과정이 결국 Stochastic 알고리즘과 같기 때문이다

- Q-Table과 다르게 Q-Network는 Q^이 Q에 수렴하지 않는다. 이 문제를 해결한 DQN이 최근에 나옴


[Lec7]

- Q-Network가 제대로 작동하지 않는 이유

  1) Correlation between samples(샘플 데이터 사이에 상관관계가 있다)

    1.1 내가 어떤 action을 취해도 state가 크게 바뀌는게 아니라 데이터들이 비슷비슷함

    1.2 전체 데이터의 패턴에 대한 최적 회귀선과 일부 상관관계를 갖는 데이터만 보고 정한 최적 회귀선 사이에 큰 차이가 있음

  2) Non-stationary targets(타겟이 움직인다)

    2.1 Q-Network에서 Q^과 y부분이 서로 같은 network를 쓰기 때문에 Q^을 y와 맞춰도 학습이 되면서 target인 y도 움직여 제대로 학습이 안됨

- 해결방법

  1) go deep

    1.1 신경망을 깊게 만든다(Conv도 사용하는 듯)

  2) experience replay

    2.1 상관관계 문제 해결법

    2.2 action을 취한 후 바로 학습시키지 않고, 버퍼에 쌓은 후 일정시간 후에 버퍼에서 랜덤하게 샘플링해서 미니배치로 학습시킨다

    2.3 버퍼에서 랜덤하게 가져오면 전체 분포와 비슷하게 나온다

  3) separate target network & copy network

    3.1 타겟 움직임의 해결법

    3.2 target의 새로운 network를 만드는 방법으로, Ws에 대한 network만 학습하고 일정시간 이후에 y의 network로 복사한다