본문 바로가기
개념공부/강화학습(Reinforcement Learning)

강화학습 4 <인공신경망을 활용한 강화학습 - Deep SARSA>

by Zach Choi 2021. 12. 24.
728x90
반응형

지금까지 MDP로 정의된 문제를 푸는 방법 중 고전적 강화학습으로 분류되는 Dynamic Programming - Policy Iteration, Monte Carlo, Temporal Difference, SARSA, Q-learning 등을 배웠다. Dynamic Programming (이하 DP)은 환경의 state의 정보(Reward, Transition probability)를 알 때 Policy Iteration (이하 PI)을 사용해 state 별 상태가치함수, 행동가치 함수를 업데이트하고 정책을 업데이트하여 MDP를 푸는 방법이다. 이후 Monte Carlo (이하 MC), Temporal Difference (이하 TD), SARSA, Q-Learning 등은 환경의 state 정보를 모를 때 상태가치함수 샘플링하여 추정하고 Q 함수를 업데이트 해 MDP를 푸는 방법이다. MC 기법은 추정값의 높은 variance, TD 기법은 많은 에피소드로 학습해도 참값에 정확하게 수렴하지 못하는 문제(biased)가 있다.

 

지금까지 배운 방식들이 해결하지 못하는 단점을 가지고 있는데, 이는 바로 state 수, state의 dimension 수가 증가함에 따라 많은 메모리가 필요하다는 것이다. 위 방법들은 상태가치함수, 행동가치함수를 사용하는데 이를 state 별로 table에 저장해둔다. 그리고 각 state에는 여러 action이 있다. 따라서 state 및 dimension이 늘어날수록 table의 크기가 커지게 된다. 그래서 이를 해결하기 위해 데이터를 함수 근사로 표현하는 방법 및 근사 함수로는 인공신경망을 사용하는 방법을 적욯하게 된다.

 

MDP를 풀기 위해선 상태가치함수/행동가치함수가 필요하다. 지금까지는 Table에 이 값들을 저장하여 사용했다. 즉 Table이 상태가치함수/행동가치 함수를 나타내는 함수라고 볼 수 있다. (상태 가치 or 행동 가치 = f(state)). 이때 Table 내 데이터가 너무 많다면, 데이터를 표현하기 위해 필요한 메모리 또한 증가한다. 이 문제를 해결하기 위해 보통 '함수 근사'라는 개념을 사용한다. 함수 근사란 수많은 데이터를 하나하나 정확하게 표현하기보다, 수많은 데이터를 어느 정도 정확하게 표현하기 위해 데이터를 대표하는 함수를 만드는 것이다. 강화학습에서는 상태에 대한 가치함수를 Table의 크기를 마구 키워 모든 값을 저장하기보다, 인공신경망으로 근사하여 표현해보자는 방향으로 연구가 진행되어 왔다. (즉, 인공신경망을 사용하는 이유는 state 및 dimension이 너무 많은 문제를 memory 사용을 적게하며 풀기 위함이다.)

 

MDP 문제에서 상태에 따른 상태가치함수/행동가치함수 혹은 행동 그 자체를 인공신경망으로 근사하는 연구가 진행되어 왔다. 인공신경망에 대한 글은 다음 글을 참고하자. 인공신경망을 근사하는 과정은, 데이터를 활용해 인공신경망의 가중치를 학습하는 것이다.

 

// 인공 신경망

 

 가장 먼저, 상태에 따른 행동가치함수를 인공신경망으로 근사하는 방법을 'Deep SARSA'라고 한다. 이 방법에서 인공신경망은 state를 입력으로 받아, 행동 별 가치 함수를 출력한다. 특정 state에 가능한 행동이 5개면, 5개의 행동가치함수를 출력하는 것이다. Deep SARSA에서 함수를 근사하는 (인공신경망의 가중치를 학습하는) 과정은 다음과 같다. 학습 목표는 특정 state에서 인공 신경망이 출력하는 행동 별 가치 함수를 기반으로 정책을 따랐을 때 최대의 보상을 받을 수 있게 하는 것이다. 그래서 인공 신경망이 state에 적절한 행동 별 행동 가치 함수를 출력하도록 가중치를 업데이트한다.

 

인공신경망은 가중치를 학습할 때 정답과 인공 신경망 출력 값의 차이를 사용한다. 차이는 인공 신경망의 loss 값이고, Chain Rule을 이용한 Back propagation으로 가중치를 업데이트한다. 따라서 입력 값에 대한 출력 값의 정답이 필요하다. 일반적인 지도 방식에서는 정답(라벨)을 알고 있는데, 강화 학습에서는 그렇지 않다. (정답을 알아가는 게 목표다.) 그래서 어떤 값을 정답으로 설정하여 학습을 진행할지 결정해야 한다. 이때 SARSA의 행동 가치 함수 업데이트 식을 보자.

 

$$ Q(S_{t}, A_{t}) \leftarrow  Q(S_{t}, A_{t}) +  \alpha (R_{t+1} +  \gamma Q(S_{t+1}, A+{t+1}) - Q(S_{t}, A_{t})) $$

 

SARSA에서는 현재 상태 및 행동에 대한 행동가치 함수를 행동 결과에 따른 다음 상태 및 행동에 대한 행동 가치 함수로 업데이트한다.

 

$$ 업데이트\,하고자\,하는\,값 = Q(S_{t}, A_{t})$$ 

$$ 업데이트\,목표\,값 = Q(S_{t+1}, A+{t+1}) $$

 

이 과정이 한번 수행되면, 참 값과 오차가 크겠지만 수많은 에피소드를 통해 데이터로 업데이트하면 참 값에 가깝게 수렴하게 된다. 그래서 Deep SARSA에서는 입력에 대한 정답 값으로 SARSA에서의 업데이트 목푯 값을 사용한다. 따라서 Deep SARSA에서 인공 신경망의 Loss 값은 다음과 같다.

 

$$ MSE =  (정답 - 예측)^{2} = (R_{t+1} +  \gamma Q(S_{t+1}, A+{t+1}) - Q(S_{t}, A_{t}))^{2} $$

 

즉, 인공 신경망을 학습하는 것은 위 MSE 값이 최소가 되는 가중치를 찾는 것이다. 그리고 이는 Gradient Descent 방법을 사용한다.

728x90
반응형