Q-러닝(Q-learning)은 강화학습의 한 방법으로, 환경의 MDP(Markov Decision Process)를 명확히 모르는 상태에서도 최적의 정책을 찾을 수 있도록 설계되었습니다. Q-러닝은 오프-폴리시(off-policy) 학습 방법 중 하나로, 에이전트가 실제로 행동을 선택하는 정책과는 독립적으로 학습을 진행합니다. - Q-값(Q-value): 특정 상태에서 특정 행동을 취했을 때 얻을 수 있는 미래 보상의 총합을 나타내는 값입니다. Q-값은 상태-행동 쌍의 가치를 나타냅니다. - Q-테이블(Q-table): 모든 상태-행동 쌍에 대한 Q-값을 저장하는 테이블입니다. 학습 과정에서 이 테이블이 업데이트됩니다. Q-러닝은 강화학습에서 매우 유명하고 널리 사용되는 알고리즘입니다. 이 방법은 에이전트가 다양한 환경에서 최적의 행동을 학습할 수 있도록 도와주며, 복잡한 의사결정 과제를 해결하는 데 효과적입니다.
오프-폴리시(Off-policy) 학습은 강화학습에서 에이전트가 학습하는 정책과 실제로 행동을 선택하는 정책이 다를 수 있는 방법을 말합니다. 이를 통해 에이전트는 다양한 행동 정책(behavior policy)으로부터 데이터를 수집하면서, 동시에 다른 타깃정책(target policy)을 평가하고 개선할 수 있습니다. 행동정책(Behavior Policy): 에이전트가 환경과 상호 작용하며 데이터를 수집할 때 사용하는 정책입니다. 이 정책은 탐색을 위해 더 많은 무작위성을 가질 수 있습니다. 타깃 정책(Target Policy): 에이전트가 최적화하려고 하는 정책입니다. 이 정책은 학습 과정에서 개선되어 가며, 최종적으로 최적의 행동을 결정하기 위해 사용됩니다. 오프-폴리시의 장점은 -유연성: 다른 소스에서 얻은 경험(예를 들어, 다른 에이전트의 경험)을 사용하여 정책을 학습할 수 있습니다. -효율성: 최적화하려는 정책과 다르게 탐색 정책을 통해 더 다양한 데이터를 수집할 수 있으며, 이를 통해 보다 효율적으로 학습할 수 있습니다. -안전성: 실제 운영 환경에서 위험할 수 있는 탐색 행동을 줄이면서 학습할 수 있습니다. 즉, 실험적인 탐색은 시뮬레이션 환경에서 이루어질 수 있고, 실제 환경에서는 더 안정적인 행동을 선택할 수 있습니다. 여기에는 과거의 경험 데이터를 재사용할 수 있기 때문에 효율성 측면에서 커다란 이득을 노릴 수 있고, 전문가인 사람의 행동 데이터로부터 학습도 가능합니다. 전문가들이 만들어내는 양질의 데이터를 학습에 사용한다면 학습 초기 무의미한 행동을 하는 단계, 비효율적인 단계를 빠르게 지나쳐서 학습 속도를 높일 수 있습니다. Q-러닝이 가장 대표적인 오프-폴리시 학습 알고리즘으로, 탐색을 위한 행동을 선택하는 동안 학습 과정에서는 최적의 행동 가치 함수를 추정합니다. 오프-폴리시 학습은 강화학습에서 에이전트가 보다 안전하고 효율적으로 학습할 수 있도록 해주는 유용한 방법입니다. 이를 통해 에이전트는 다양한 환경과 상황에서 최적의 행동 전략을 학습하고 발전시킬 수 있습니다.
1. 초기화: Q-테이블을 초기화합니다. 보통 모든 상태-행동 쌍의 가치를 0 또는 작은 무작위 값으로 시작합니다. 2. 반복 과정: 1. 에이전트가 현재 상태에서 행동을 선택합니다. 초기 단계에서는 무작위로 행동을 선택하거나, ε-greedy와 같은 정책을 사용할 수 있습니다. 2. 선택한 행동을 수행하고, 보상과 다음 상태를 관찰합니다. 3. Q-값 업데이트: Q(s, a) <- Q(s, a) + alpha [r + gamma max_{a'} Q(s', a') - Q(s, a)] 여기서 s와 a는 현재 상태와 행동, r은 받은 보상, s'는 다음 상태, a'는 가능한 모든 행동, alpha는 학습률, gamma는 할인율입니다. 4. 에이전트를 다음 상태로 이동합니다. Q-러닝의 특징 및 장점은 다음과 같습니다. - 오프-폴리시 학습: 실제로 따르는 정책과는 독립적으로 학습이 진행되므로, 최적의 정책을 탐색할 수 있습니다. - 탐색과 이용: Q-러닝은 탐색과 이용의 균형을 유지하면서 최적의 행동을 찾아갑니다. - 비모델 기반: 환경의 전이 확률이나 보상 함수를 명확히 알 필요가 없습니다.
벨만 최적방정식을 다시 가져와 보겠습니다. q*(s,a)에 대한 식은 모든 정책중 가장 좋은 정책을 따를때의 가치를 나타내는 함수입니다. 이에 대한 수식은 아래와 같습니다. q*(s,a) = max q파이(s,a) q*(큐스타)를 알게되는 순간 우리는 주어진 MDP에서 매 순간마다 최적의 행동을 선택하며 움직일 수 있는데, 상태마다 q*의 값이 가장 높은 액션을 선택하게 되기 때문입니다. 파이 스타 = argmax q*(s,a) 우리 목적은 최적의 액션-가치 함수인 q*를 찾는 것이기에 해답을 벨만 최적방정식에서 찾아야 합니다. 그런데 여기서 실제 액션a를 해보기 전까지는 다음 상태가 어디가 될지, 보상은 얼마나 받을지 알수 없습니다. 그래서 이런 상황에서는 보통 기댓값을 이용해 벨만 방정식 중 기댓값이 들어가 있는 수식을 이용했습니다. 기댓값에 대한 계산은 여러개의 샘플을 이용해 계산하는데, 여러번 경험을 쌓은 다음에 각 경험으로부터 얻은 기댓값 연산자 안에 식을 평균을 내면, 그 평균이 대수의 법칙에 의해 실제 기댓값으로 다가간다는 성질을 이용했습니다. Q러닝에서의 식을 다시 보겠습니다. Q(s, a) <- Q(s, a) + alpha [r + gamma max_{a'} Q(s', a') - Q(s, a)] 여기서 s와 a는 현재 상태와 행동, r은 받은 보상, s'는 다음 상태, a'는 가능한 모든 행동, alpha는 학습률, gamma는 할인율입니다. 그 전 SARSA의 식도 함께 보겠습니다. Q(s, a) <- Q(s, a) + alpha [r + gamma Q(s', a') - Q(s, a)] 위 SARSA식과 Q러닝 식이 거의 비슷한데 gamma 다음에 a프라임에 max가 들어가는 차이만 있습니다. Q러닝은 r + gamma max_{a'} Q(s', a') 자체를 정답이라 보고 그 방향으로 조금씩 업데이트를 해나가고 있습니다.
SARSA와 Q-러닝은 강화학습에서 널리 사용되는 두 가지 중요한 알고리즘입니다. 둘 다 상태-행동 쌍의 가치(즉, Q-값)를 학습하지만, 이를 수행하는 방식에서 차이가 있습니다. SARSA의 기본은 벨만 기대방정식을 사용하고, Q러닝의 기본은 벨만 최적방정식을 사용합니다. SARSA는 행동 정책과 타깃 정책이 Q에 대해 e-greedy전략을 사용하는 온-폴리시 정책입니다. Q러닝은 행동정책은 e-greedy 전략을 사용하고, 타깃 정책은 Greedy전략을 사용하는 오프-폴리시 정책입니다. 1) SARSA (State-Action-Reward-State-Action) - **온-폴리시(On-policy)**: SARSA는 학습 중에 사용하는 정책으로부터 데이터를 수집하고, 같은 정책을 개선하여 최적화합니다. 즉, 학습과 행동 선택이 동일한 정책에서 이루어집니다. - **학습 과정**: 현재 상태에서 행동을 선택하고, 이후 보상과 다음 상태, 다음 상태에서 선택할 행동까지 고려하여 Q-값을 업데이트합니다. 공식은 다음과 같습니다: Q(s, a) <- Q(s, a) + alpha * [r + gamma * Q(s', a') - Q(s, a)] 여기서 s'은 다음 상태, a'은 다음 행동을 나타냅니다. - **탐색 방법**: ε-greedy와 같은 방법을 사용하여 탐색과 이용을 조절합니다. 2) Q-러닝 - **오프-폴리시(Off-policy)**: Q-러닝은 현재의 정책과 상관없이 최적의 정책을 학습합니다. 즉, 학습 중에 수집된 데이터는 다른 정책에서 올 수 있고, 최적화 과정에서 최대 보상을 주는 행동을 기반으로 Q-값을 업데이트합니다. - **학습 과정**: 현재 상태에서 행동을 취한 뒤, 얻은 보상과 다음 상태에서 가능한 최대 Q-값을 이용하여 현재의 Q-값을 업데이트합니다. 공식은 다음과 같습니다: Q(s, a) <- Q(s, a) + alpha * [r + gamma *max_{a'} Q(s', a') - Q(s, a)] 여기서 max_{a'} Q(s', a')는 다음 상태 s'에서 가능한 모든 행동 중 최대의 Q-값을 의미합니다. - **탐색 방법**: 탐색은 학습에 영향을 미치지만, Q-값 업데이트는 최적의 경로를 찾기 위해 수행됩니다. ### 주요 차이점 - **정책 종류**: SARSA는 온-폴리시 방법이며, 자신이 따르는 정책에 따라 학습합니다. 반면, Q-러닝은 오프-폴리시 방법으로, 최적의 행동을 찾기 위해 다른 정책에서 얻은 경험을 사용할 수 있습니다. - **위험 회피**: SARSA는 다음에 취할 행동을 고려하므로, 위험한 행동의 가능성을 미리 고려하여 더 안전한 경로를 선택할 수 있습니다. Q-러닝은 최대 보상을 주는 행동만 고려하기 때문에 더 공격적인 전략을 취할 수 있습니다. SARSA와 Q-러닝은 각각의 장단점을 가지고 있으며, 실제 환경에서 어떤 알고리즘을 선택할지는 해당 문제의 특성과 요구사항에 따라 결정해야 합니다. SARSA는 안전성을 중시하는 문제에 적합하고, Q-러닝은 최적의 결과를 빠르게 찾아야 하는 문제에 유용합니다.
기존에 했던 SARSA와 크게 다르지 않습니다. 환경 class와 메인 함수도 같지만 오직 QAgent 클래스에서 update_table 함수부분과 anneal_eps부분만 바뀌게 됩니다. update_table에서 Q러닝 업데이트 코드는, self.q_table[x,y,a]=self.q_table[x,y,a] + 0.1*(r+np.amax(self.q_table[next_x, next_y,:]) - self.q_table[x,y,a]) 이와 같이 바뀌고, anneal_eps함수에서 epsilon이 좀 더 천천히 줄어들도록 합니다. 이렇게 하면 주어진 환경에 최적 경로가 여러개 있으며, 각각의 방법론이 서로 다른 최적 정책으로 수렴한 결과를 볼수 있습니다. 지금까지 MDP모를때 최고의 정책 찾는 방법을 알아보았습니다. 정리하자면 MDP를 모를때, 모델-프리 상황에서 전이확률이나 보상함수를 알지 못하기 때문에 정책 이터레이션을 그대로 사용할 수 없었습니다. 그래서 정책 평가단계에서 모델-프리 가치평가 방법론을 사용하고, v(s) 대신 q(s,a)를 학습하는 방식으로 정책 이터레이션을 수정했습니다. 정책 평가단계에서는 MC를 쓸수도 있고 TD를 사용할 수 있었습니다. 지금까지의 내용은 MDP의 문제가 크지 않아 모든 (s,a)에 해당하는 밸류를 테이블에 넣을 수 있는 상황이었지만, 실제 세계에서는 그 많은 문제를 테이블에 담기가 어렵기 때문에 다른 근본적인 접근법이 필요한데, 이에 대해서는 Deep learning을 사용하는 방법으로 다음장부터 알아보도록 하겠습니다.