- 강화학습 시작하기 (CartPole 게임)
- 환경 (Environments)
- 관찰 (Observations)
- 공간 (Spaces)
- 첫번째 알고리즘
- 첫번째 뉴럴 네트워크
- 강화학습 (Reinforcement Learning)
- Q-learning
- Deep Q-learning
- Epsilon-greedy 정책
- 첫번째 훈련
- Epsilon의 영향
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
Q-learning¶
Q-table¶
Q-learning은 ‘값’에 기반해서 어떤 행동을 선택하는 것이 좋을지 에이전트에게 알려주는 방식입니다.
행동을 선택하는데 있어서 기초가 되는 값들을 선정하는데 있어서 처음으로 생각할 수 있는 직관적인 아이디어는 여러번의 게임을 통해서 어떤 행동 a를 선택했을 때의 보상을 정리한 표를 만드는 것입니다. 어떤 상태에서 어떤 움직임을 하는 것이 가장 이득이 되는지 파악할 수 있습니다.
예를 들어, 특정 상태마다 네가지 선택지가 있는 게임을 간단한 게임을 생각해봅시다. 이 게임의 모든 상황과 선택에 대한 보상을 아래와 같이 정리할 수 있습니다.
이 표를 통해서 에이전트가 게임의 각 상황에서 어떤 선택을 하는 것이 가장 큰 보상으로 이어지는지 알 수 있습니다. 다시 말해서, 에이전트는 단순히 이 표를 외우고 있다면 게임을 잘 할 수 있습니다.
지연된 보상¶
이전의 게임은 3개의 상태와 4개의 선택 옵션을 갖는 매우 간단한 게임이었지만, 실제 게임은 훨씬 복잡합니다.
현실적인 게임을 제대로 플레이하려면, 에이전트는 즉시 보상으로 이어지지 않을 수도 있고 큰 보상으로 이어질 수도 있는 행동을 취할줄 알아야 합니다.
아래에 약간 더 복잡한 게임이 있습니다.
위의 게임에서 state2에서 아래 방향을 선택했을 경우, 15의 보상을 받지만 게임이 종료되어서 처음 상태인 state1로 돌아가게 됩니다. 만약 오른쪽 방향을 선택해서 state4로 이동한 후 아래 방향을 선택한다면 50의 보상을 받을 수 있습니다.
다시 말해서 에이전트는 즉시 받을 수 있는 15의 보상을 받기보다 한번 더 움직여서 더 큰 보상을 받을 수도 있습니다. 당장의 작은 보상보다 지연된 더 큰 보상 을 받을 수 있는 선택을 할 줄 알아야 합니다.
Q-learning 룰¶
따라서 Q-learning의 룰을 정할 필요가 있습니다. Deep Q learning에서 뉴럴 네트워크는 현재 상태 s를 입력으로 받아서, 선택할 수 있는 각각의 행동 a에 대한 값 (Q-value)을 반환합니다.
즉, 우리의 뉴럴 네트워크는 모든 상태 s에 대한 선택 a의 Q(s, a) 값을 반환해야 합니다. 또한 이 Q(s, a) 값은 훈련 과정에서 아래의 룰을 통해 업데이트됩니다.
수식을 살펴보면, 현재의 Q(s, a) 값에서 더하기 표시 오른쪽 항만큼 업데이트됨을 알 수 있습니다. 대괄호 안의 r은 상태 s에서 행동 a를 취함으로써 즉각적으로 얻는 보상을 나타냅니다.
그 다음 항은 지연된 보상에 대한 계산을 나타냅니다. 우선 \(\gamma\) 는 지연된 보상의 효과를 줄이는 역할을 하며, 0에서 1 사이의 값을 갖습니다. \(\max_{a'} Q(s', a')\) 는 다음 상태에서의 모든 Q-value의 최대값을 나타냅니다. 좀 더 정확히, 만약 상태 s에서 행동 a를 취해서 상태 s’가 된다고 하면, \(\max_{a'} Q(s', a')\) 는 상태 s’에서의 모든 선택 a’에 대한 Q-value의 최대값을 의미합니다.
그렇다면 왜 이 항 (\(\max_{a'} Q(s', a')\))을 고려할 필요가 있을까요? 이 항은 에이전트가 상태 s에서 행동 a를 취했을 때 예상할 수 있는 미래 최대 보상이기 때문입니다. 하지만 이 값은 \(\gamma\) 값으로 그 효과를 줄일 필요가 있습니다. 왜냐하면 항상 미래의 보상을 위해 참는게 최선이 아닐 수도 있기 때문입니다. 가장 좋은 것은 짧은 시간 동안 최대의 보상을 얻는 것이죠.
여기에서 Q(s’, a’) 값은 그 다음 상태의 \(\gamma\max_{a''} Q(s'', a'')\) 값을 암시적으로 포함하고 있음을 알아야 합니다. 또 그 다음, 그 다음에 대해서도 마찬가지죠. 이런 과정을 통해 에이전트는 즉각적인 보상 r 뿐만 아니라 미래의 효과가 줄어든 (discounted) 보상에 대해서도 고려하면서 행동 a를 선택할 수 있습니다.
\(\alpha\) 항은 업데이트 과정에서 사용되는 학습률 (learning rate)을 나타냅니다.