조기 종료의 함정: 학습할 기회조차 주기 전에 RL 실행을 죽인 방법

조기 종료(early stopping)는 학습을 끝낸 모델에 컴퓨팅 자원을 낭비하지 않도록 막아주는 장치다. 그런데 한동안 컴퓨팅 자원을 태우고 있던 장본인이 바로 이것이었다 — 좋은 에이전트가 좋아지기도 전에 죽여 버림으로써.

내 강화학습(RL) 실행은 나쁜 아이디어 때문보다 내가 만든 조기 종료 규칙 때문에 더 많이 죽었다. 절제력을 발휘하려고 만든 그 킬 스위치(kill switch)가 알고 보니 시스템에서 가장 절제력 없는 요소였다.

정상적인 하락 구간에서 조기 종료된 노이즈 섞인 보상 곡선과, 도달하지 못한 상승 구간을 보여주는 점선 연장선 실제 성과 데이터가 아닌 예시용 그림이다. 에이전트는 정상적인 하락 구간에서 종료되었다 — 곧 상승하려던 바로 그 직전에.

역효과를 낸 킬 스위치

나는 지도 학습에서 조기 종료를 가져왔다. 지도 학습에서는 그것이 정설이다. validation loss를 지켜보다가 한동안 개선이 멈추면 종료한다 — 그 이후로는 overfitting만 일어날 뿐이니까. 깔끔하고, 안전하며, 지도 학습에서는 대개 잘 작동한다.

그래서 나는 같은 발상을 RL 학습에 그대로 연결했다. 지표를 지켜보다가 plateau가 오면 patience가 소진되고, 실행을 종료해 GPU 시간을 아끼는 식이었다. 책임감 있는 결정처럼 느껴졌다. 하지만 실제로는 실행을 하나씩 조용히 버려댔다 — 그중 다수는 초반에, 에이전트가 아무것도 찾아내기도 전에 죽었다. 결국 나는 그저 시작조차 해보지 못한 실행들로 가득 찬 폴더를 갖게 되었다.

RL이 그 규칙을 깨는 이유

지도 학습의 validation 곡선은 비교적 매끄럽고 대체로 단조로운 형태다. 강화학습 에이전트의 진척은 그렇지 않다. 보상은 구조적으로 노이즈가 많다. 보상은 그 자체로 계속 변하는 policy에 의존하며, 그 policy는 분산으로 가득 찬 환경과 상호작용한다. 개선은 띄엄띄엄 일어난다 — 긴 정체, 갑작스러운 도약, 회복되는 하락. RL에서 plateau는 학습의 끝이 아닌 경우가 많다. 오히려 학습이 일어나기 직전의 구간이다.

그래서 지도 학습의 매끄러움에 맞춰 튜닝한 patience는 지극히 정상적인 RL 분산이 일어나는 와중에 발동된다. 학습을 끝낸 모델을 잡아내는 게 아니라, 이제 막 흥미로워지려던 모델을 처형하는 것이다. 그리고 그 “절약”은 환상이다 — 조기에 죽어 아무것도 돌려주지 못한 모든 실행의 비용은 여전히 그대로 지불하기 때문이다.

조기에 멈추는 것을 멈춰라

해결책은 더 나은 숫자가 아니었다. 기본값을 뒤집는 것이었다. 조기 종료는 공격적이 아니라 드물게 일어나야 한다 — 노이즈에 즉각 반응하는 방아쇠가 아니라, 진짜로 지속되는 overfitting에 대한 방어막이어야 한다. 그러려면 노이즈가 현실적으로 도달할 수 없는 곳에 기준선을 두고, 몇 번의 평가가 아니라 실행 본연의 분산을 압도할 만큼 충분히 긴 윈도우에 걸쳐 성능 저하를 판단해야 한다. 기본값은 반드시 계속 진행이어야 한다. 입증의 책임은 종료하는 쪽에 있지, 계속하는 쪽에 있지 않다.

직설적으로 말하면, patience도 하나의 hyperparameter이며, 나를 포함한 대부분의 초심자는 마치 RL이 지도 학습인 것처럼 이 값을 설정한다. RL은 지도 학습이 아니다.

여전히 사람이 있어야 할 자리

이것은 첫 번째 글의 교훈과 맞닿아 있다. 나는 실행마다 일일이 언제 플러그를 뽑을지 결정하지 않는다 — 그건 또다시 내 추측을 시스템에 얼려 넣는 것일 뿐이다. 나는 *“진짜로 나빠지고 있는 것”*과 *“정상적인 노이즈”*가 무엇인지를 정의하고, 그 정의가 종료를 수행하도록 맡긴다. 나는 판정 하나하나를 직접 내리는 게 아니라, 심판을 설계하는 것이다. 심판을 제대로 만들면 잘 됐을 실행을 버리는 일을 멈출 수 있다.

핵심 정리

RL에서 가장 값비싼 버그는 흔히 조급함이다. 컴퓨팅 예산을 성급히 최적화하는 것은 컴퓨팅을 아껴주지 않는다 — 그것은 에이전트를 대가로 치르게 하며, 잔인한 점은 당신이 죽여버린 결과를 결코 볼 수 없다는 것이다.

그러니 실행이 계속 “작동하지 않는다”면, 애초에 작동할 기회라도 가졌는지 확인해 보라. 때로는 모델이 실패하고 있던 게 아니다. 당신이 실패하고 있던 것이다.


이 글은 강화학습 트레이딩 시스템을 구축하는 과정을 익명으로 기록하는 연재의 2부다. 신호가 아니라 방법과 실수에 관한 이야기이며, 여기에 담긴 어떤 내용도 투자 조언이 아니고, 전략의 세부 사항은 공유하지 않는다.