본문 바로가기
딥러닝

강화학습의 종류

by 초특급하품 2019. 11. 3.

바둑의 한 수는 그 즉시 평가되기 어렵다. 여러 선택이 모여 종국 되었을 때 계가를 해봐야 이겼는지, 졌는지에 대한 reward를 받을 수 있다. 따라서 현재의 행동을 결정할 때 미래의 가치도 판단해야 한다. 이때 미래 가치는 에피소드라 불리는 종료 시점까지 탐색하는 하나의 시나리오가 끝나야 알 수 있다. 마지막에서야 알 수 있는 그 미래의 가치를 평가해서 현재 택할 수 있는 최선의 행동을 찾아야 한다.

 

미래를 고려한 최선의 선택을 해야 하는 문제는 아주 많다. 미로 찾기를 대표적으로 예를 들 수 있다. 현재 미로의 입구에 서있고, 출구를 찾아 탈출하는 환경을 생각해보자.

 

이 같은 문제는 강화 학습을 하는 방법으로 가치기반 학습과 정책기반 방식을 사용할 수 있다.

 

가치 기반 학습

Q learning

현재 상태에서 가능한 행동들의 가치를 구하고 가장 좋은 가치를 따라 행동한다.

$$ Q(s_{t},a_{t}) \leftarrow (1-\alpha )\cdot Q(s_{t},a_{t}) + \alpha \cdot \left(r_{t} + \gamma \cdot \max_{a} Q(s_{t+1},a) \right) $$

$ \alpha$는 learning rate로 stochastic(non-deterministic)인 환경에서 필요하다. 같은 행동에 같은 결과가 나오는 deterministic 한 환경에서는 늘 새로 구한 좋은 값으로 덮어쓰면($\alpha$ = 1) 된다. 하지만 녹록지 않은 현실은 같은 행동을 해도 외부 조건에 의해 결과가 달라질 수 있는 stochastic 환경이라서 이 전의 경험했던 Q값을 잊지 않고 가중치를 주어 누적시켜 학습시킨다.

$ r_{t} $는 $s_{t}$상태에서의 $a_{t}$ 행동을 해서 얻은 reward이다. 미로 찾기 같은 경우는 출구로 갔을 때만 받을 것이다.

$ \gamma $는 discount factor로 미래의 가치에 주는 페널티이다.  미래의 가치에 $\gamma$를 곱하는 이유는 여러 개가 있는데, 당장의 reward에 상대적인 가중치를 주거나 불확실한 미래에 페널티를 준다고 볼 수 있다.

 

위 식으로 학습을 해도 늘 최적해를 구할 순 없으므로 적절한 랜덤($\epsilon$ - greedy 등등)으로 다른 행동을 취하는 방법을 섞는다. 좋은 게 좋은 거니 그대로 따르거나(Exploit) 안 가본 좋은 길이 있을 수 있으니 도전(Exploration) 해 보는 거다. 이렇게 각 상태에서 행동의 가치(Q table)를 학습시켜서 구한 후 좋은 방향으로만 나아가면 된다.

$$\pi(s) = \underset{a}{argmax} Q(s, a)$$

 

 

미로 탈출과 같은 비교적 간단한 문제를 풀었으나, 보통 강화 학습을 통해 풀려고 하는 문제들은 미로 찾기처럼 상태를 표현하기가 쉽지 않다. Q-table로 불리는 상태별 모든 행동의 가치 구해야 하는데 못 구한다는 뜻이다. 그래서 이 알고리즘을 기반으로 더 좋은 알고리즘을 조합하고 개선해서 더 어려운 문제도 풀기 위한 노력이 계속된다.

 

Q network

미로 찾기 말고 벽돌깨기를 Q learning으로 푼다고 생각해보자. 각 상태에서 모든 행동에 대한 가치를 구해야 한다. 픽셀에 벽돌이 있다 없다만 봐도 존재할 수 있는 상태가 $2^{가로픽셀 \times 세로픽셀}$ 가지가 된다. Q table을 선언조차 못하는 크기다.

 

그래서 Q network는 상태를 입력으로 하고 가능한 행동의 가치를 출력하는 neural network를 이용한다. Q learning과 비슷하게 Q 함수를 정의하고 오차의 차이를 줄이는 loss function으로 학습시킨다.

말을 가능해 보이지만 neural network를 사용하는 데는 문제가 있다. Q table과 달리 neural network에서는 학습을 해도 그 결과가 발산한다. 

 

이 문제를 deepmind가 해결을 하며 DQN paper를 발표했다.

 

DQN (Deep Q learning Network)

 

Deepmind에서 발표한 Atari(벽돌 깨기) 게임을 강화 학습하는 영상이다. 꽤 지난 영상이지만 간단한 게임으로 강화 학습을 시각화해서 볼 수 있었던 아주 임팩트 있다. 처음에 공도 못 맞추는 걸 보면 알 수 있지만, 막대기로 공을 튀겨야 한다는 특징조차 알려주지 않고 스스로 feature를 학습한다.

 

DQN은 Q network이 풀지 못했던 문제를 해결했다. 크게 아래 세 가지로 개선했다.

  1. Deep network
    layer를 여러 개 두어 범용적으로 적용될 수 있게 디자인한다.
  2. Experience replay
    연속된 데이터는 correlation이 심해서 학습이 잘못된 방향으로 진행된다. correlation을 없애기 위해 행동으로 나온 결과를 바로 학습을 시키지 않고 버퍼에 넣어둔다. 그리고 실제 학습은 버퍼에서 랜덤 하게 결과들을 뽑고 이를 학습시킨다.
  3. Copy network
    Q learning에서는 하나의 neural network $Q(s_{t}, a_{t} | \theta)$ 에서 학습시키다 보니 loss function으로 파라미터를 수정하면 목푯 값 함수에도 영향을 끼치는 문제가 있다. DQN에서는 두 개의 neural network를 두어 하나의 network만 학습시키고 어느 시점이 되면 덮어 씌어 이 문제를 해결했다.

 

Atari는 유일한 인풋인 화면을 CNN으로 특징을 뽑은 후 DQN으로 학습한다. 행동은 막대기를 좌우로 움직이는 조작이며 보상은 벽돌을 깨며 얻은 점수이다. 에피소드가 끝나면 정의한 loss function에 따라 업데이트를 진행한다.

이 간단한 방법은 다른 여러 게임에도 그대로 적용 가능해서 기존에 범접할 수 없었던 인간 수준의 능력을 따라잡았다.

 

 

정책 기반 방식 (Policy gradient methods)

가치 기반 학습에서 각 행동에 대한 가치를 구한 뒤 좋은 행동을 찾았다면 정책 기반 방식에서는 각 위치에서 취할 행동의 확률 $\pi$ 를 구한다.

$$\pi(a|s, \theta) = P[A_{t} = a | S_{t} = s; \theta] $$

초기에는 모든 행동이 비슷한 확률을 같지만 작은 확률이었는데 높은 보상이 있다면 확률을 높이고, 높은 확률이었지만 낮은 보상이라면 확률을 낮추는 학습을 거듭할수록 제 자리를 찾아간다. Policy gradient에는 neural network의 loss function와 비슷한 object junction이 있는데 이 함수를 최대화시키는 방향으로 학습한다. Gradient Descent로 학습시키는데 이 방법에 REINFORCE, Actor-Critic 등 여러 알고리즘이 있다.

 

 

'딥러닝' 카테고리의 다른 글

Keras로 모델 저장, 불러오기  (0) 2019.11.16
Keras로 간단한 CNN 구현하기  (0) 2019.11.13
알파고의 몬테카를로 방법  (0) 2019.11.10
알파고의 강화학습  (0) 2019.11.03
알파고의 원리와 그 버전들  (0) 2019.11.03

댓글