동산로의 블로그
Q -learning 본문
Q-learning
Q -learning은 강화학습의 일종입니다. 행동에 대해서 보상을 받을 때에, 보상을 가장 높게 만드는 방법을 찾는 알고리즘입니다.
상황 설명
주어진 상태에서 에이전트는 행동을 할 수 있습니다. 행동에 따라서 상태가 변화되며, 각 행동에 따라서 보상\(\mathcal{R}\)을 얻을수 있습니다. 가장 직관적인 예시는 게임을 할 때에 컨트롤은 행동이고, 게임 상태는 상태, 점수가 보상인 것입니다.
알고리즘의 목표는 가장 높은 \(Q\)값을 주는 행동을 했을 때에 보상을 최대로 받도록 \(Q\)를 찾는 것 입니다.
이론상 완벽한 \(Q\)가 있다면 모든 상황에서 가장 높은 \(Q\)를 만들어 주는 행동만 취하면 됩니다.
\(Q\)는 주어진 상태 \(S\)에서 행동\(A\)를 했을 때에 그 행동의 결과를 숫자로 표시해주는 함수입니다.
$$ Q : \mathcal{S} \times \mathcal{A} \rightarrow \mathbb{R} $$
여기서 \( \mathcal{S}\)는 상태의 집합, \(\mathcal{A}\)은 행동의 집합, \(\mathbb{R}\)은 실수입니다.
상황과 행동이 유한집합의 원소라면 (Q)는 2차원 표로 나타낼 수 있습니다. 이를 Q-table이라고 부릅니다.
그렇다면 \(Q\)를 어떻게 찾아야 하는가?
Q의 업데이트 과정
$$Q^{new} ( S_t, A_t) \leftarrow ( 1- \alpha ) \cdot Q(S_t,A_t) + \alpha \cdot \left( R_{t+1} + \gamma \cdot \max_a Q (S_{t+1}, a \right)$$
시간 : \(t\)
\(t\)에서의 상태 : \(S_t\), 행동\(A_t\)
학습 계수(Learning rate) : \( \alpha \)
할인률(discount factor) : \( \gamma \)
\(Q\)의 테이블이 미리 주어져 있다고 합시다. 주어진 상황 \(S_t\)와 행동 \(A_t\)에 대해서 위 수식을 적용하여
새로운 Q-table의 \( (S_t, A_t ) \)위치에 계산한 새로운 값을 넣어 줍니다.
이걸 계속 반복하면 \(Q\) - table이 높은 보상을 찾는 테이블이 됩니다.
하지만 모든 가능한 \(S\)에 대해서 Q-table을 작성하는 것은 불가능합니다.
실질적으로는 유한한 수의 수행만 가능합니다.
\(t=0\)에서 시작 후 끝날 때까지 행동을 하는 것을 에피소드(episode)라고 부릅니다.
한 에피소드 내에서 어떻게 진행하여 \(Q\) 값을 갱신할 것인가에 대해서 문제가 남아있습니다.
이 문제는 일반적으로 확률론적으로 해결합니다. \(Q\)값을 최대로 하는 경로만 고정해서 택하는 것이 아니라 확률에 따라서 행동을 결정하는 방법론이 있습니다.