강화 학습/바닥부터 배우는 강화 학습

바닥부터 배우는 강화 학습 | 07. Deep RL 첫 걸음

with-RL 2023. 1. 17. 10:35

'바닥부터 배우는 강화 학습' 7장에는 무수히 많은 MDP를 풀기 위해 딥러닝을 강화학습에 적용하는 방법에 대해서 설명하고 있습니다. 아래 내용은 공부하면서 핵심 내용을 정리한 것입니다.

참고자료

  • 도서: 바닥부터 배우는 강화 학습 / 7장 Deep RL 첫 걸음

7.1 함수를 활용한 근사

  • 바둑의 경우는 바둑판 $19 \times 19$ 격자의 모든 빈칸이 바둑알을 놓을 수 있는 후보지가 되고 그로 인한 상태의 수가 너무 많음
    체스: $10^{47}$
    바둑: $10^{170}$
  • 연속적인 상태 공간(continuous state space): 바둑이나 체스처럼 이산적(discrete)인 형식이 아닌 속도와 같이 연속적인 값을 가질 수 있음.
  • 상태의 개수가 너무 많거나 상태 공간이 연속적이면
    상태 테이블을 만들 수 없음
    상태 테이블을 만들 수 있다 하더라고 모든 상태를 방문해서 업데이트하는데 너무 시간이 많이 걸림

 함수의 등장

  • 테이블 대신에 함수를 이용하는 방법
    다음 함수를 가정: $f(x) = ax + b$
    테이블 대신에 함수에 저장
    실제 가치의 근사함수(function approximatior): $f(s) = v_{\hat{\pi}}(s)$ 
  • 데이터가 많은 경우

  • 실제 가치의 근사함수의 MSE(Mean Squared Error)를 최소화하는 $a$, $b$를 결정
  • $MSE={1 \over 30} \left ( (f(x_1) - y_1)^2 + (f(x_2) - y_2)^2 + ... + (f(x_{30}) - y_{30})^2 \right )$

  • 위 그림과 같이 MSE를 최소로 하는 $a$, $b$를 결정

 함수의 복잡도에 따른 차이

  • 1차 함수가 아닌 다항 함수(polynomial function)를 사용할 수 있음

$$f(x)=a_0 + a_1x + a_2x^2 + ... + a_nx^n$$

  • "함수를 피팅한다"의 의미
    함수에 데이터를 기록한다.
    데이터 점들을 가장 가깝게 지나도록 함수를 그려본다.
    함수 $f$의 파라미터 $(a_0 \sim a_n)$의 값을 찾는다.
    함수 $f$를 학습한다.

  • 위 그림에서 고차함수로 갈수록 MSE는 감소하지만 데이터에 노이즈가 석여 있음
  • 노이즈: 각각의 에피소드를 경험할 때 얻은 값은 노이즈가 있는 "틀린" 값이고 샘플이 충분히 모였을 때 그 평균이 실제 정답에 가까워짐

 오버 피팅과 언더 피팅

  • 오버피팅(over fitting): $f$를 정할 때 너무 유현한 함수를 사용하여 $f$가 노이즈에 피팅해 버리는 것
  • 언더피팅(under fitting): $f$의 유연성이 부족하여 주어진 데이터와의 에러가 큰 상황
  • 임의의 데이터를 생산하는 함수 $F$를 가정

$$F(x)=cos(1.5 \pi * x) + x$$

  • 실제 데이터를 생성하는 함수 $F_{real}(x)$는 $F$에 노이즈 $\varepsilon$을 추가한 함수

$$F_{real}(x) = F(x) + \varepsilon =cos(1.5 \pi * x) + x + \varepsilon, \; \; \; \; \varepsilon \sim N(0, 1) * {1 \over 10}$$

  • 위 그림은 다양한 차수의 다항 함수 피팅 결과를 실제 함수와 함께 그린 그래프
    1차 함수: 함수가 유연하지 못해서 $F$와 오차를 줄일 수 없음
    4차 함수: 가장 $F$에 근접한 함수 예측
    16차 함수: $F_{real}$의 노이즈까지 모두 학습

 함수의 장점 - 일반화

  • 상태의 수가 많은 경우 테이블에 모든 상태의 밸류를 담을 수 없음. 실제 가치 함수 $v(s)$를 모사하는 함수 $f$를 학습
  • 일반화(generalization): 전체를 다 경험하지 못하더라고 일부 샘플만으로 전체를 추정하는 것

  • 위 그림과 같이 새로운 데이터가 추가된 경우 새로운 상태에 대해서 테이블 기반의 방법론에서는 추정할 수 없으나 함수를 이용해서 예측 가능

  • 위 그림처럼 새로운 데이터에 대해서도 함수를 이용하면 예측 가능
  • 만일 함수가 $f(x) = a_0 + a_1x + a_2x^2 + a_3x^3 + a_4x^4$와 같은 4차 함수인 경우 기억해야 할 파라미터는 $a_0, a_1, a_2, a_3, a_4$ 총 5개가 전부임
  • 복잡한 문제를 풀기 위해서 "인공 신경망"을 함수로 사용해서 문제 해결 가능

7.2 인공 신경망의 도입

 신경망

  • 인공 신경망(Artificial Neural Network): 본질은 매우 유연한 함수
    프리 파라미터(free parameter)의 개수를 통해서 함수의 유연성 표현 가능

 신경망 학습 - 그라디언트 디센트

  • 손실함수(loss function): 뉴럴넷의 아웃풋이 주어진 데이터로부터 틀린 정도를 나타냄
  • 미분(derivative): $L(w)={1 - f_w(s)}^2$의 수식에서 $w$가 $L(w)$에 미치는 영향을 미분으로 구할 수 있음
  • 편미분(partial derivative): $w$가 100개의 파라미터 $(w_1, w_2, ..., w_{100})$로 구성되어 있다면 파라미터 각각에 대해서 편미분을 해서 영향을 구해야 함

$$\nabla_wL(s)=\left ( {\partial L(w) \over \partial w_1}, {\partial L(w) \over \partial w_2}, ..., {\partial L(w) \over \partial w_{100}} \right )$$

  • 편미분을 통해서 그라디언트(gradient)를 구하고 $w$를 그라디언트 방향으로 아주 조금 이동
  • 러닝 레이트(learning rate) or 스텝 사이즈(step size): $w$를 얼마나 이동시킬지 결정하는 아주 작은 상수 $\alpha$

$$\begin{equation}
\begin{split}
w_1'&=w_1 - \alpha {\partial L(w) \over \partial w_1} \\
w_2'&=w_2 - \alpha {\partial L(w) \over \partial w_2} \\
&...\\
w_{100}'&=w_{100} - \alpha {\partial L(w) \over \partial w_{100}}
\end{split}
\end{equation}$$

  • 그라디언트 디센트(gradient descent (경사하강법)): 그라디언트를 계산하여 파라미터를 업데이트하는 방식으로 목적 함수를 최소화해 나가는 과정

 간단한 확인

  • 이 부분은 간단한 예를 직접 계산하는 과정이 설명되어 있습니다.

 파이토치를 이용한 신경망의 학습 구현

  • 이 부분은 구현에 대한 코드가 설명되어 있습니다.