바닷속 모래바닥에 몸을 붙인 채 하루하루를 보내던 가자미 ‘가즈아’는 문득 생각에 잠겼습니다.
“이렇게 살다가는 평생 모래만 먹겠어. 새로운 먹이터를 찾아 떠나볼까?”
하지만 ISFP 성격이라 온종일 바닥에만 붙어 지내던 가즈아에게 모험을 떠나기란 쉽지 않았습니다. 오늘도 방구석에서 고민만 하던 가즈아는 인터씨(Intersea)를 통해 바닷속 모든 고민의 해답이 존재한다는 Ocean Overflow에 접속했습니다. 그곳에서 ‘잎룡’이 만든 DeZero 프레임워크와 심층 강화 학습에 대한 글을 읽은 가즈아는 드디어 결심을 굳힐 수 있었습니다.
“그래, 이거라면 나도 새로운 환경에 적응할 수 있을 거야!”
우선 환경을 시뮬레이션하기 위해 OpenSeaGym 라이브러리를 사용했습니다. 다양한 바닷속 지형과 장애물, 그리고 포식자들을 설정하고, 목표는 새로운 먹이터에 도달하는 것으로 정했습니다. 하지만 막상 코딩을 시작하니 어려움이 닥쳤습니다.
“에이전트의 상태 공간이 너무 크잖아! 이러다 차원의 저주에 빠지겠어.”
가즈아는 상태 표현을 효율적으로 하기 위해 CNN을 활용한 상태 인코딩을 적용했습니다. 또한 행동 선택을 위해 딥 Q-네트워크(DQN)를 구현하려 했지만, 학습이 안정적이지 않았습니다.
“이렇게 해선 불안정한 학습만 반복하겠는걸?”
문제 상황을 Ocean Overflow에 올리자 전설적인 딥러닝 전문가 ‘쏨’이 댓글을 달아주었습니다.
“혹시 경험 재현 메모리를 사용해 보는 건 어떤가요? 이전 경험을 랜덤하게 샘플링하면 학습이 더 안정적일 거예요. 그리고 더블 DQN이나 우선순위 경험 재현을 도입하면 더 좋을지도 몰라요.”
쏨의 조언을 바탕으로 모델을 개선한 가즈아는 드디어 제대로 된 학습을 시작했습니다. 수천 번의 에피소드를 돌리며 에이전트는 점점 똑똑해졌습니다. 하지만 가끔씩 예기치 않은 행동을 보일 때도 있었습니다.
“왜 갑자기 포식자에게 덤벼드는 거야? 탐색-활용의 비율을 잘못 설정했나?”
가즈아는 ε-탐욕 정책의 ε 값을 조절하며 탐색과 활용 사이의 균형을 맞췄습니다. 그렇게 며칠 밤을 지새운 끝에 에이전트가 최적의 경로를 찾아내고 다양한 환경에서도 유연하게 대처할 수 있게 되었습니다.
드디어 실전에 나설 시간이 왔습니다. 가즈아는 숨을 깊게 한번 들이쉬고는 모래바닥에서 튕겨 올랐습니다.
“가즈아! 새로운 세상이 나를 기다리고 있어!”
모델에서 학습한 대로 주변을 관찰하며 한 지느러미씩 내디뎠습니다. 중간에 흉포한 문어를 만났지만 침착하게 우회하고 우거진 산호초 지대를 지날 때는 최단 경로를 찾아 배가 고파지기 전에 통과했습니다. 얼마 지나지 않아 가즈아의 눈앞에는 온갖 먹이가 가득한 새로운 바다가 펼쳐졌습니다.
“우와, 이렇게나 많은 먹이라니! 모델이 제대로 작동했어!”
그 후 몇 개의 바다를 더 정복하며 모험가로 명성을 떨친 가즈아가 자신의 코드를 GitFish에 공개했습니다. 그러자 온갖 생선들이 코드를 포크하여 다양한 프로젝트에 응용했습니다. 해마는 복잡한 해류를 타고 이동하는 모델을 만들었고, 새우는 고래 싸움에서 자신을 지키는 방법을 터득했습니다. 가즈아는 생각했습니다.
“심층 강화 학습이 이렇게나 큰 힘을 발휘하다니! 앞으로도 더 많은 모험을 떠나봐야겠어.”
딥러닝 용어 해설
『바닷속 딥러닝 어드벤처』는 『밑바닥부터 시작하는 딥러닝』 시리즈를 원작으로, 재미난 상상력을 더해 재구성한 연작 소설입니다. 이번 편은 원작 중 ‘심층 강화 학습’을 다룬 4권에서 영감을 얻어 작성했습니다.
최신 콘텐츠