Q-Learning에서 learning rate가 작아지면 새 경험을 반영하는 속도가 느려져, 같은 반복 횟수 안에서는 수렴이 부족해 보일 수 있습니다.
이 글은 learning rate가 1일 때와 더 작은 값일 때 Q-value가 어떻게 다르게 갱신되는지 로그로 비교한 실험 메모입니다.
핵심 정리
learning rate는 기존 Q-value를 얼마나 유지하고 새로 계산한 값을 얼마나 반영할지 정하는 계수입니다. 값이 크면 최근 경험이 빠르게 반영되지만 흔들림도 커질 수 있고, 값이 작으면 안정적일 수 있지만 충분한 반복이 없으면 새 환경으로 이동하는 속도가 느립니다. 이 글의 핵심은 단순히 두 결과가 비율대로 섞인다고 생각하면 안 된다는 점입니다. 경로 길이, 큰 보상 값, 업데이트 순서, 반복 횟수가 함께 작용해 특정 Q-value가 예상보다 빠르거나 느리게 바뀔 수 있습니다.
- learning rate는 새 Q-value 업데이트를 얼마나 강하게 반영할지 정합니다.
- 값이 작으면 같은 반복 횟수에서 학습 변화가 부족해 보일 수 있습니다.
- 값이 1이면 새 계산값을 강하게 반영하므로 빠르게 바뀝니다.
- 두 실험 결과가 단순 평균처럼 섞인다고 보면 오해가 생깁니다.
- 보상 크기와 업데이트 순서는 수렴 속도에 큰 영향을 줄 수 있습니다.
- 수렴 여부를 보려면 반복 횟수, Q-value 변화, 선택 path를 함께 확인해야 합니다.
원문은 실행 로그가 길고 핵심 관찰이 뒤쪽에 나옵니다. 이번 보강은 learning rate가 기존 값과 새 값을 섞는 역할이라는 점을 먼저 설명하고, 왜 작은 학습률에서 수렴이 부족해 보이는지 읽는 기준을 세웠습니다.
이어서 볼 글
- Q-Learning에서 횡행이 이득보는 상황 재현 - 같은 Q-Learning에서 보상 구조가 만든 실패 사례다.
- MDP 조건부확률과 Markov Decision Process 정리 - Q-Learning을 MDP 위에서 이해하기 위한 전제 개념이다.
- OpenAI Gym 사용법: reset, step, reward 기본 흐름 - 강화학습 환경에서 reward와 step 흐름을 확인할 수 있다.
learning rate 가 1.0일때는 4000이면 수렴하는 것도, learning rate가 그 보다 작으면 수렴하지 않는 문제
예를 들어 다음 코드를 보자.
run("first", 1)
run("second", 1)
실행시키면 다음처럼 수렴을 잘 한다.
cur state : (0, 0, 1)
[(((0, 0, 0), (1, 50, 2)), 500000.0), (((0, 0, 0), (1, 40, 2)), 600000.0), (((0, 0, 0), (1, 30, 2)), 700000.0), (((0, 0, 0), (1, 20, 2)), 800000.0), (((0, 0, 0), (1, 10, 2)), 900000.0), (((0, 0, 0), (1, 0, 2)), 1000000.0)]
...
[1][1] t:[0], c: 500,000, p1:(0), p2:(0), path: [(0, 0, 1), (1, 50, 2), (2, 50, 2), (3, 50, 2), (4, 50, 2), (5, 50, 2), (6, 50, 2), (7, 50, 2)]
...
cur state : (0, 0, 1)
[(((0, 0, 0), (1, 0, 2)), 500000.0), (((0, 0, 0), (1, 10, 2)), 700000.0), (((0, 0, 0), (1, 20, 2)), 900000.0), (((0, 0, 0), (1, 30, 2)), 1100000.0), (((0, 0, 0), (1, 40, 2)), 1300000.0), (((0, 0, 0), (1, 50, 2)), 1500000.0)]
...
[1][2] t:[0], c: 500,000, p1:(0), p2:(0), path: [(0, 0, 1), (1, 0, 2), (2, 0, 2), (3, 0, 2), (4, 0, 2), (5, 0, 2), (6, 0, 2), (7, 50, 2)]
그런데 learning rate를 0.5로 변경하면, 다음처럼 "second"를 학습하는데 있어서 수렴이 부족해 보인다.
run("first", 1)
run("second", 2)
...
[(((0, 0, 0), (1, 0, 2)), 504211.6016819117), (((0, 0, 0), (1, 10, 2)), 700192.0472732983), (((0, 0, 0), (1, 20, 2)), 900000.0037342851), (((0, 0, 0), (1, 30, 2)), 1100000.0), (((0, 0, 0), (1, 40, 2)), 1300000.0), (((0, 0, 0), (1, 50, 2)), 1500000.0)]
...
[2][2] t:[0], c: 500,000, p1:(0), p2:(0), path: [(0, 0, 1), (1, 0, 2), (2, 0, 2), (3, 0, 2), (4, 0, 2), (5, 0, 2), (6, 0, 2), (7, 50, 2)]
이 과정에서 Q[(0,0), (1,0)]는 1000000.0(백만원)에서 504211.6016819117로 떨어지고,
Q[(0, 0), (1, 50)]는 500000.0에서 1500000.0로 올라가는 드라마틱한 변화를 거치게 되는데..
당황스러운 사실은 다음 세 가지 이다.
1. 각각이 수렴된 상황에서 learning rate 비율대로 합성되는게 아니다.
> 즉 0.5로 설정해서 각각이 0.5비율대로 합성된다면 Q[(0,0), (1,0)]의 경우 1,000,000과 500,000의 중간인 750,000이 되어야 하지만 위의 결과를 보면 그게 아니라 504,221로 0.5보다 훨씬 높은 비율로 후자쪽으로 기울었다.
2. v가 큰값의 경우 수렴속도가 v가 작은 경우보다 빠르다.
> 이건 뭔말이냐면 Q[(0,0), (1,50)]은 이미 "second"의 값으로 수렴이 진즉에 끝났는데,
> Q[(0,0), (1,0)]은 아직 수렴중이라는 사실이다.
3. t가 큰값의 경우 수렴속도가 t가 작은 경우보다 빠르다.
'AI, ML' 카테고리의 다른 글
| 머신러닝 학습 자료 메모: TensorFlow, XOR, sigmoid, ReLU (0) | 2026.05.21 |
|---|---|
| Cost Function과 Loss Function 개념: 제곱 손실과 Cross Entropy (0) | 2026.05.19 |
| Q-Learning 실험: 횡행 행동이 이득으로 학습되는 상황 (0) | 2026.05.16 |
| 인공지능 개념 메모: SVM, Bayesian, HMM, Markov (0) | 2026.05.15 |
| Convolution 개념과 CNN 기초 정리 (0) | 2026.05.15 |
