환경까지 허브에 올리면 강화학습이 달라진다

Hugging Face 허브의 강화학습 환경 공유를 에이전트와 데이터셋, 재현성 구조 중심으로 읽고 한 줄 공유와 버전 고정이 바꾸는 연구 흐름을 따라간다.

원문 논문 보기
'환경까지 허브에 올리면 강화학습이 달라진다' 기사 커버 이미지

Welcome RL Environments to the hub는 Hugging Face가 공개한 강화학습 환경 공유 소식이다. 이 소식의 원문 링크는 제목 아래에 걸어두었다. 이번 발표가 내세우는 주장은 하나의 문장으로 정리되는데, 환경과 에이전트와 데이터셋을 같은 허브에서 나누고 버전을 관리하면 강화학습 연구의 재현성과 접근성이 함께 올라간다는 것이다. 그래서 이 글에서는 그 주장에서 출발해 왜 환경 공유가 어려웠는지, Gymnasium 연동과 한 줄 공유가 무엇을 바꾸는지, 그리고 버전 고정이 남기는 과제를 차례로 따라간다.

다시 돌리면 결과가 달라지는 이상한 경험

안녕하세요, 패트릭입니다. 제가 이 소식을 가장 흥미롭게 본 부분은 발표 자체보다 그 뒤에 깔린 불편함 때문이었습니다. 강화학습을 조금이라도 돌려본 분이라면 비슷한 경험을 해보셨을 텐데요. 분명 지난달에는 잘 되던 코드가 이번 달에는 같은 점수가 안 나오는 것이죠. 하이퍼파라미터를 그대로 뒀는데도 학습 곡선은 다르게 그려지고, 어디서 달라졌는지 찾으려 하면 환경 설정 어딘가가 바뀌어 있었던 경우가 많기 때문입니다.

생각해보면 사람 일도 비슷하게 어긋납니다. 같은 레시피로 요리했는데도 주방이 바뀌면 맛이 달라지죠. 불 세기가 다르고 냄비 두께가 다르며, 재료 손질 상태까지 다르기 때문입니다. 강화학습에서 환경이 바로 그 주방에 해당합니다. Atari 화면의 전처리 한 줄이 달라지거나 MuJoCo 물리 버전이 하나만 올라가도 에이전트가 보는 세상은 이미 다른 세상이 되는데, 그동안 우리는 요리 결과물인 에이전트만 나누고 주방 자체는 각자 알아서 맞추는 방식으로 일해왔습니다.

여기서는 조금 조심해서 읽을 필요가 있습니다. 재현이 안 된다고 해서 누군가 대충 실험했다는 뜻은 아니기 때문입니다. 오히려 반대에 가까운데, 각자 맡은 조각에서는 성실했지만 그 조각들을 합치는 방법이 표준화되지 않았던 것입니다. 논문에 적힌 점수와 제 컴퓨터에서 나오는 점수가 다르면 저는 먼저 제 실수를 의심했습니다. 그런데 몇 번 겪고 나니 다른 질문이 생겼습니다. 그렇다면 점수를 비교하기 전에 환경을 먼저 같게 만들 수는 없을까. 이번 발표는 바로 그 질문에서 시작합니다.

에이전트와 환경과 점수가 따로 놀던 풍경을 정리한 그림
에이전트와 환경과 점수가 따로 놀던 풍경을 정리한 그림

환경이 같아야 점수가 말이 된다

강화학습의 어려움은 모델이 크다는 데 있지 않습니다. 세상과 주고받는 고리 자체가 실험 안에 들어 있다는 데 있죠. 지도학습에서는 데이터셋을 고정하면 비교가 비교적 쉬워지는데, 같은 이미지 묶음에 같은 지표를 쓰면 되기 때문입니다. 하지만 강화학습에서는 에이전트가 행동하고 환경이 반응하며, 그 반응을 보고 다음 행동을 고르는 순환이 계속됩니다. 그래서 환경을 빼고 점수만 나누면 이야기가 절반만 전달됩니다.

예를 들어 월요일 아침 연구실 풍경을 떠올려보겠습니다. 한쪽에서는 Atari 게임을 4프레임씩 묶어서 보여주고, 다른 쪽에서는 매 프레임을 그대로 보여준다고 해보죠. 둘 다 Breakout이라는 같은 이름을 부르지만 에이전트가 보는 화면의 리듬은 전혀 다릅니다. 여기에 프레임 건너뛰기나 보상 자르기 같은 세부 설정이 하나씩 얹히면 간격은 더 벌어집니다. 같은 알고리즘을 썼는데도 한쪽 논문에서는 잘 되고 다른 쪽 재현에서는 안 되는 이유가 바로 여기에서 생깁니다.

저는 이 숫자보다 그 뒤의 구조가 더 중요하다고 봅니다. 몇 퍼센트 올랐다는 점수보다, 그 점수가 어떤 주방에서 나왔는지가 먼저 적혀야 하기 때문입니다. 저희가 새로운 AI 아키텍처를 볼 때도 benchmark 숫자만 보지는 않습니다. 실제로 무엇이 바뀌었고, 그 변화가 시스템에서 어떤 비용 구조를 만드는지를 함께 보기 때문입니다. 환경이 고정되지 않은 점수는 조건 없이 적힌 요리 후기와 비슷한데, 맛있다는 말은 남지만 그 맛을 다시 내는 방법은 남지 않는 것이죠. 그렇다면 환경을 코드처럼 나누고 버전을 붙일 수는 없을까. 이 물음이 다음 선택으로 이어집니다.

같은 규격의 환경 위에서 다른 에이전트가 훈련하는 모습
같은 규격의 환경 위에서 다른 에이전트가 훈련하는 모습

모델만 올리던 곳에 환경을 올린다는 뜻

이번 발표에서 제가 눈여겨본 대목은 허브가 다루는 단위가 바뀌었다는 점입니다. 그동안 Hugging Face 허브는 모델과 데이터셋을 나누는 곳으로 알려져 있었죠. 학습된 가중치를 올리고 토크나이저 설정을 함께 두며, 추론 코드를 붙이는 흐름이 익숙했던 것입니다. 그런데 이번에는 환경 자체가 일등 시민으로 들어왔습니다. 에이전트와 환경과 오프라인 데이터셋을 한곳에서 나누고 찾으며, 불러올 수 있게 됐기 때문입니다.

이 차이는 생각보다 중요합니다. 모델만 나누면 결과는 나누지만 과정은 흩어지기 때문입니다. 어떤 세상에서 배운 것인지, 그 세상을 어떻게 불러와야 하는지, 어떤 버전에서 측정한 것인지가 따로 놀게 되죠. 반면 환경까지 같은 주소에서 관리하면 이야기가 달라집니다. 에이전트를 받은 사람이 그 에이전트가 자란 세상을 같은 자리에서 찾을 수 있고, 같은 버전 번호로 불러올 수 있기 때문입니다. 마치 이사할 때 가구만 보내는 게 아니라 집 도면까지 함께 보내는 셈입니다.

물론 여기서 과장하지 말아야 할 대목이 있습니다. 허브에 올린다고 해서 모든 재현 문제가 사라지는 것은 아니기 때문입니다. 하드웨어가 다르면 속도가 달라지고, 병렬로 돌리는 방식에 따라 난수 흐름도 달라질 수 있습니다. 그럼에도 방향은 분명한데, 재현에 필요한 조각을 한 바구니에 담는 일이죠. 저는 그래서 이번 소식을 새로운 알고리즘 발표가 아니라 연구용 인프라 발표로 읽었습니다. 점수를 올리는 방법이 아니라 점수를 믿을 수 있게 만드는 방법에 가깝기 때문입니다.

리더보드가 하나 더 생긴 게 아니다

여기까지 읽고 순위표 이야기를 떠올리신 분도 계실 겁니다. 환경을 모으면 자동으로 순위를 매기는 사이트가 생기는 것 아니냐는 짐작인데, 이번 흐름을 그렇게만 보면 절반을 놓치게 됩니다. 순위 경쟁이 목적이라면 점수만 모으면 되지만, 이번 발표는 점수보다 앞단의 재료를 모으는 데 힘을 썼기 때문입니다.

순위표는 답을 가리킵니다. 누가 1등인지 보여주죠. 그런데 연구 현장에서 더 자주 필요한 것은 과정입니다. 왜 그 에이전트가 그런 선택을 했는지, 어떤 환경 조건에서 무너지는지, 설정을 조금 바꾸면 어디까지 버티는지를 보는 일이기 때문입니다. 환경과 에이전트와 궤적 데이터가 함께 있으면 이런 물음이 가능해집니다. 남이 학습한 에이전트를 받아서 내가 만든 변형 환경에 넣어볼 수 있고, 같은 궤적을 가지고 다른 오프라인 학습법을 시험해볼 수도 있습니다. 일종의 공동 작업대처럼요.

그렇다면 이 작업대는 누구에게 가장 먼저 쓸모가 있을까. 저는 이제 막 강화학습에 들어오는 분들에게 그렇다고 봅니다. 예전에는 환경을 깔고 버전을 맞추는 데만 며칠이 걸렸는데, 허브에서 검증된 환경을 바로 불러오면 그 시간을 아낄 수 있기 때문입니다. (참고로 저도 예전에 Atari 전처리 버전이 어긋나서 이틀을 헤맨 적이 있는데요. 그때는 제 코드가 틀린 줄 알았는데 나중에 알고 보니 래퍼 설정이 달랐던 것이었습니다.) 진입 장벽이 낮아지면 질문하는 사람이 늘고, 질문하는 사람이 늘면 이상한 설정을 찾아내는 눈도 늘어납니다. 인프라는 그렇게 실력을 키웁니다.

한 줄 명령으로 에이전트가 허브에 올라가는 흐름도
한 줄 명령으로 에이전트가 허브에 올라가는 흐름도

한 줄로 에이전트를 올리는 흐름

이제 실제 흐름을 따라가 보겠습니다. 이번 발표에서 가장 눈에 띄는 장면은 학습된 에이전트를 허브에 올리는 방법이 놀랄 만큼 짧아졌다는 점입니다. Stable-Baselines3나 CleanRL, Sample Factory 같은 널리 쓰이는 라이브러리에서 push_to_hub 같은 한 줄 명령으로 공유할 수 있게 됐기 때문입니다. 코드를 길게 고칠 필요 없이 학습이 끝난 뒤에 올리기만 하면 된다는 것이죠. 받는 쪽의 수고가 줄어드니 공유의 문턱도 함께 낮아집니다.

표면적으로 보면 단순합니다. 실제로는 그렇지 않습니다. 한 줄 뒤에 숨어 있는 약속이 많기 때문입니다. 에이전트 가중치만 올라가는 게 아니라 어떤 환경에서 배웠는지, 어떤 하이퍼파라미터를 썼는지, 어떤 평가 점수가 나왔는지가 함께 묶여 올라가죠. 그래서 받는 쪽에서는 단순히 파일을 받는 게 아니라 맥락을 함께 받게 됩니다. 누가, 어디서, 어떻게 배운 에이전트인지가 따라오는 셈입니다.

이 흐름에서 Gymnasium과의 연동은 우연이 아닙니다. Gymnasium은 OpenAI Gym의 뒤를 잇는 표준 환경 규격인데요. reset과 step 같은 기본 동작을 같은 모양으로 맞추는 역할을 합니다. 규격이 같으면 에이전트를 옮겨 다니게 하기 쉬워지는데, 한 환경에서 배운 코드를 다른 환경에 붙일 때 손이 덜 가죠. 생각해보면 플러그 모양을 통일하는 일과 비슷합니다. 플러그가 같아졌다고 전기가 새로워지는 것은 아니지만 기기를 바꿔 끼우는 수고는 크게 줄어듭니다. 연구의 속도도 바로 이런 사소해 보이는 통일에서 올라갑니다. 그렇다면 한 줄로 올린 뒤에는 무엇이 자동으로 따라올까. 그 이야기가 다음 장면입니다.

하이퍼파라미터와 학습 기록과 영상이 함께 담긴 카드의 모습
하이퍼파라미터와 학습 기록과 영상이 함께 담긴 카드의 모습

모델 카드가 자동으로 적어주는 것들

에이전트를 허브에 올리면 자동으로 만들어지는 것이 있습니다. 바로 모델 카드입니다. 여기에는 하이퍼파라미터와 학습 기록, 평가 점수와 재생 영상이 함께 담기는데요. 처음 보면 문서 자동 생성 정도로 보일 수 있습니다. 그런데 조금만 들여다보면 이 카드가 품은 정보가 꽤 단단합니다.

하이퍼파라미터는 에이전트의 성장 기록과 같습니다. 학습률이 얼마였는지, 할인율은 어떻게 뒀는지, 탐험 비율은 언제 줄였는지가 적혀 있죠. 학습 기록은 그 과정의 체온과 비슷한데, 보상이 언제 뛰었고 언제 주춤했는지가 곡선으로 남기 때문입니다. 평가 점수는 건강검진 결과표처럼 읽히는데, 여러 번 돌렸을 때 평균이 어떤지 편차는 얼마나 되는지를 보여줍니다. 그리고 재생 영상은 짧은 운동회 영상과 비슷합니다. 숫자로는 안 보이는 행동 습관이 화면에서는 바로 드러나기 때문입니다.

저는 여기서 멈칫했습니다. 평소에 논문을 읽을 때 점수표보다 학습 곡선을 먼저 보는 편인데, 그 이유가 바로 여기에 있기 때문입니다. 평균 점수가 같아도 곡선의 모양이 다르면 이야기가 달라집니다. 하나는 초반에 치고 올라가 안정되지만, 다른 하나는 끝까지 출렁이는데 우연히 같은 평균에 걸린 경우도 있기 때문입니다. 영상이 있으면 한 겹 더 볼 수 있습니다. 높은 점수를 받은 에이전트가 의외로 어색한 움직임을 반복하는 장면도 있거든요. 점수는 합격인데 행동은 불안한 경우인데, 이런 간극은 영상을 봐야만 잡힙니다.

문제는 그다음입니다. 카드가 자동으로 만들어진다고 해서 카드 내용이 자동으로 좋아지는 것은 아니기 때문입니다. 기록이 남는 것과 기록이 정직한 것은 다른 문제입니다. 평가를 어떤 시드로 몇 번 돌렸는지, 환경 버전은 무엇인지가 빠져 있으면 카드는 예쁘지만 속은 비게 됩니다. 그래서 자동 생성은 시작일 뿐이고, 무엇을 반드시 적게 할지가 진짜 숙제입니다. 저는 앞으로 보고 싶은 것이 바로 이 지점입니다. 카드의 빈칸을 줄이는 규칙이 어떻게 자리 잡을지 말이죠.

궤적을 모아두면 생기는 두 번째 공부법

이번 발표에서 자칫 지나치기 쉬운 대목이 하나 더 있습니다. 오프라인 데이터셋과 궤적 버퍼를 함께 나눈다는 점인데요. 얼핏 보면 부록처럼 보이지만 공부법으로 보면 꽤 큰 변화입니다. 에이전트가 환경과 직접 부딪히며 배우는 길 말고, 이미 쌓인 행동 기록을 보고 배우는 길이 함께 열리기 때문입니다.

이 차이를 운전 연습에 비유해볼 수 있습니다. 하나는 직접 핸들을 잡고 도로에 나가는 방법이고, 다른 하나는 숙련자의 주행 기록 영상을 수백 시간 돌려보며 감을 익히는 방법입니다. 후자가 바로 오프라인 강화학습과 모방 학습의 감각에 가깝습니다. 실제 로봇처럼 매번 부딪히기 어려운 환경에서는 이런 기록이 특히 귀한데, 실패 장면을 안전하게 모아두고 그 위에서 여러 번 다시 배울 수 있기 때문입니다.

그런데 기록으로 배우는 공부에는 함정이 있습니다. 기록 안에 없는 상황에서는 에이전트가 쉽게 길을 잃기 때문입니다. 운전 영상으로만 배운 초보가 갑자기 눈길에서 핸들을 잡으면 당황하는 것과 같습니다. 그래서 궤적 데이터는 많다고 좋은 게 아니라 어떤 상태가 얼마나 들어 있는지, 수집할 때 탐험은 충분했는지가 함께 적혀야 합니다. 저는 이 대목이 허브와 잘 맞는다고 봅니다. 데이터셋마다 버전과 구성을 적어두고, 같은 기록 위에서 다른 학습법을 겨뤄볼 수 있게 되니까요. 같은 교과서로 다른 공부법을 시험하는 셈인데, 이런 비교가 쌓여야 오프라인 학습의 진짜 강점과 한계가 드러납니다.

오프라인 궤적 데이터가 쌓여 두 번째 학습으로 이어지는 개념도
오프라인 궤적 데이터가 쌓여 두 번째 학습으로 이어지는 개념도

브라우저에서 바로 돌려보는 이유

또 하나의 변화는 보는 방식에 있습니다. Hugging Face Spaces를 통한 대화형 데모 덕분에 브라우저에서 바로 에이전트의 행동을 볼 수 있게 됐죠. 따로 설치하지 않아도 화면 위에서 에이전트가 움직이는 모습을 확인할 수 있습니다. 이게 왜 중요할까 싶을 수 있는데, 직접 돌려본 분들은 바로 감이 오실 겁니다. 강화학습 결과는 숫자로만 보면 반쪽이기 때문입니다.

점수는 압축된 진실입니다. 평균 보상 500점이라는 숫자 안에는 매끄러운 구간도 있고, 운 좋게 넘긴 구간도 있고, 사실은 버벅거린 구간도 함께 접혀 있죠. 그런데 영상으로 보면 접힌 부분이 펴집니다. 목표를 향해 똑바로 가는지, 괜히 빙빙 도는지, 특정 장애물 앞에서만 유독 머뭇거리는지가 드러나기 때문입니다. 논문 속 표에서는 다 같은 500점인데, 화면에서는 전혀 다른 500점인 경우가 많습니다.

개인적으로 인상 깊었던 점은, 이런 데모가 의심하는 힘을 키운다는 것입니다. 숫자를 곧이곧대로 믿는 대신에 직접 눈으로 확인하는 습관이 생기기 때문입니다. 연구실 세미나 장면을 떠올려보겠습니다. 발표자가 점수표를 넘기면 누군가 묻습니다. 실제로 움직이는 것도 봤어요. 그때 바로 브라우저 주소를 열어 보여줄 수 있으면 대화가 달라집니다. 잘 된 장면만 골라 보여주는 것 아니냐는 반문이 나올 수도 있는데, 그래서 저는 다음 단계가 궁금합니다. 무작위 시드로 돌린 영상도 함께 열어볼 수 있게 될지, 실패 장면까지 자연스럽게 공유되는 문화가 생길지 말이죠. 보는 눈이 늘면 속이는 손도 줄어듭니다.

브라우저에서 에이전트를 바로 돌려보는 장면
브라우저에서 에이전트를 바로 돌려보는 장면

버전이 엇갈리면 생기는 조용한 사고

이제 가장 묵직한 이야기로 돌아올 차례입니다. 버전 관리와 의존성 고정인데요. 이번 발표가 겨냥한 재현성 문제의 한가운데에 바로 이 문제가 있습니다. Atari나 MuJoCo, Procgen 같은 환경은 버전이 조금만 달라져도 에이전트가 보는 입력이나 물리 반응이 미묘하게 바뀌는데, 그동안 이 버전을 적고 고정하는 문화가 충분히 단단하지 않았습니다.

조용한 사고라는 표현을 쓴 이유가 여기에 있습니다. 코드는 멀쩡히 돌아가는데 결과만 살짝 달라지는 경우입니다. 에러 메시지가 뜨면 오히려 찾기 쉬운데, 빨간 글씨가 어디가 아픈지 알려주기 때문입니다. 하지만 환경 버전이 어긋난 경우에는 에러 없이 점수만 달라집니다. 그래서 범인을 찾기 어렵고, 엉뚱한 곳을 고치다가 시간을 쓰게 됩니다. 알고리즘을 바꿨더니 좋아졌다고 믿었는데 사실은 환경이 바뀌어서 좋아진 경우도 생기죠. 이런 착각이 쌓이면 연구 전체의 방향이 조금씩 틀어집니다.

실제 시스템 관점에서 보면 다음 질문이 바로 생깁니다. 버전을 고정하면 모든 게 해결될까. 저는 절반만 그렇다고 봅니다. 버전 고정은 같은 실험을 다시 돌릴 수 있게 해주지만, 버전이 올라갈 때 무엇을 어떻게 옮겨야 하는지는 따로 정해야 하기 때문입니다. 오래된 환경을 붙잡고만 있으면 새로운 개선을 못 쓰고, 무작정 최신 버전만 쫓으면 과거 점수와 비교가 안 되죠. 그래서 필요한 것은 고정과 이동을 함께 다루는 규칙입니다. 어떤 버전에서 재고, 새 버전에서는 무엇이 달라졌는지를 함께 적는 일입니다. 이번 허브 연동이 그 규칙을 쓸 바탕이 될 수 있을지, 저는 그 대목을 유심히 봅니다.

앞으로 보고 싶은 장면들

그렇다면 이 흐름은 어디까지 이어질 수 있을까. 저는 세 가지 장면을 기대합니다. 첫째는 환경을 고르는 일이 지금보다 훨씬 쉬워지는 것입니다. 허브에서 이름과 버전으로 바로 불러오고, 이전 실험과 같은 조건인지 한눈에 확인할 수 있게 되는 일입니다. 검색하고, 비교하고, 불러오는 동작이 하나의 손놀림으로 이어지면 재현의 수고는 크게 줄어듭니다.

둘째는 궤적 데이터가 쌓이면서 오프라인 연구가 더 단단해지는 것입니다. 같은 기록 위에서 서로 다른 학습법을 겨루는 그림이 자연스러워지면, 어떤 방법이 어떤 분포에서 강한지가 드러나기 때문입니다. 물론 데이터가 쌓인다고 해서 자동으로 통찰이 생기는 것은 아닙니다. 수집 조건과 포함된 상태의 편향을 함께 적어야 기록이 교과서가 됩니다. 저는 이 기록의 품질 표기가 앞으로의 승부처라고 봅니다.

셋째는 데모를 통한 검증 문화입니다. 점수표 아래에 바로 돌려볼 수 있는 화면이 붙는 일입니다. 잘 된 영상 하나가 아니라 여러 시드의 영상이 함께 붙으면 더 좋습니다. 처음에는 번거롭게 느껴질 수 있지만, 쌓이고 나면 연구실의 눈이 달라집니다. 숫자를 읽는 눈과 행동을 읽는 눈을 함께 쓰게 되니까요.

이 발표가 흥미로운 이유는 새로운 점수 때문이 아닙니다. 점수를 둘러싼 재료를 나누는 방식을 바꿨기 때문입니다. 한 에이전트의 성공이 그 에이전트 안에서 끝나지 않고, 그 에이전트가 자란 세상과 남긴 기록까지 함께 돌아다니게 됐습니다. 그 통로가 거창한 새 이론이 아니라 허브라는 평범한 공유 자리에 마련됐다는 점도 눈에 띄는데, 앞으로 에이전트가 더 오래 배우고 더 많은 세상과 만나게 될수록 모델 하나가 똑똑한지만 보는 것을 넘어 어떤 세상에서 배웠고 어떻게 증명되는지까지 함께 살펴봐야 할 것 같습니다.

참고 자료

  1. Welcome RL Environments to the hub · huggingface.co

    리뷰 원문