티스토리 뷰

(포스트에서 다뤄지는 해당 도서는 저자 및 출판사의 지원을 받아 제공되었고, 이에 대한 서평을 쓴 것임을 알려드립니다.)

딱 딥러닝을 공부하는 사람들이 딥러닝을 구현하려면 파이썬을 반드시 배워야 하는 것으로 알고있지만, 사실 알고보면 다양한 언어로도 딥러닝의 기능을 구현할 수 있다. 우리가 알고 있는 대부분의 언어들도 배열 형태로 수학 연산을 구현할 수 있고, 이를 계산할 수 있는 기능만 갖추고 있다면, 다양하지는 않지만 흔히 심층 신경망이라고 하는 딥러닝 구조를 구현할 수 있다. 그 언어 중 하나가 R이다.

R은 쉽게 말하면, 통계 이론을 구현하는데 특화되어 있는 프로그래밍 언어이다. 사실 파이썬이 범용적으로 사용할 수 있는 형태로 쉽게 구현할 수 있기 때문에 오늘날에 많이 쓰이고 있는 언어긴 하지만, 통계 분야에만 딱 한정을 지으면, 파이썬에 구성되어 있는 통계 관련 패키지들이 R에서 포팅되어 왔을만큼, 다양한 패키지들을 제공한다. 물론 이론적인 내용이 많이 반영되어 있는터라 GPU같이 Computing Resource에 대한 관리가 잘 되어 있지 않고, 어떻게 보면 조금 답답하고 느낄 만큼 느린 단점이 있긴 하지만, 학계에서는 많은 이론들이 R로 구현되어 공개되고 있다. 

그림 1. 패키지 없이 R로 구현하는 심층 강화학습

아마 파이썬으로 심층 신경망을 직접 구현해본 사람이라면, 이 책의 제목을 보면서 "이걸 R로도 구현할 수 있을까?" 하는 의구심이 들 수 있겠다. 보통 심층 신경망을 구현하려면 많이 알려져 있는 tensorflow나 PyTorch같은 프레임워크의 도움을 받아야 구현할 수 있겠다고 생각할 것이다. 나도 사실 책을 딱 받았을때, 앞에서 언급한 것처럼 Tensorflow나 PyTorch같은 프레임워크의 도움을 받지 않고서, 어떻게 신경망을 구현하고 강화학습을 구현할 수 있을까 하는 호기심이 들었는데, 막상 책을 읽고 나니, 와 강화학습을 이렇게도 바라볼 수 있겠구나 하는 생각이 들었다. (참고로 2년전 부터인가 TensorflowPyTorch도 R 버전이 공개되어 배포되고 있다.)

사실 강화학습은 어떤 언어에 종속되어 그 언어에서만 구현할 수 있는 내용이 아닌, 생각보다 범용적인 학습이론이다. 보통 강화학습 논문을 살펴보면, (물론 구현이 쉽다는 점에서 대부분이 파이썬 코드로 공개되어 있지만) 일반적으로는 알고리즘에 대한 의사코드가 제시되어 있다. 그 의사코드를 구현할 수 있다면 구현 언어는 파이썬이 되었든, R이 되었던 상관이 없는 것이다. 내가 이 책에서 좀 보고자 했던 것은 과연 그런 의사코드를 다른 언어로 구현했을 때, 어떤 방향으로 구현할 수 있고, 의사코드에 정의되어 있는 논리는 어떻게 그 언어로 표현할 수 있을까 였었는데 이 책에서는 그런 부분을 잘 서술했다.

이 책은 서두에도 설명했다시피 R로 강화학습을 풀기위한 접근 방식, 더 나아가 R로 심층 강화학습을 구현하는 법에 대해서 설명하고, 비교적 최신 강화학습 알고리즘에 대한 이론적인 설명을 간략하게 언급했다. 구체적으로는 다음과 같은 알고리즘에 대한 구현이 R로 이뤄져 있었고,

  • DQN (Deep Q Network)
  • PerDQN (Prioritized Experience Replay DQN)
  • A2C (Advantage Actor Critic)
  • SIL (Self Imitation Learning)
  • RND (Random Network Distillation)

아래의 알고리즘에 대해서는 간략하게 이론적인 내용 설명이 제시되어 있었다.

  • TRPO (Trust Region Policy Optimization)
  • APE-X (Distributed Prioritized Experience Replay)
  • RIDE (Rewarding Impact-Driven Exploration)
  • BeBold (Exploration Beyond The Boundary of Explored Regions)
  • SMiRL (Surprise Minimizing RL)

실제로 구현이 되어 있지는 않아도, 논문의 의사코드에 대한 설명과 앞에서 다뤘던 알고리즘과의 차별성 관점에서 언급되어 있어, 뭔가 순차적으로 심층 강화학습을 공부하는 사람한테는 좋은 내용들로 구성되어 있었다.

내가 인상깊게 본 부분은 사실 강화학습 환경을 실제로 만들어보는 부분이었다. 당연한 이야기이겠지만, 파이썬이 아니기 때문에 흔히 많이 알려져 있는 OpenAI Gym은 사용할 수 없을 뿐더러, 대부분의 강화학습 성능 벤치마크에 사용되는 Atari Game도 활용할 수 없다. 그래서 이 책에서도 알고리즘의 성능 측정은 조금 복잡한 GridWorld를 구현해서만 진행하고, 이후의 장을 통해서 R로 새로 환경을 구현하는 부분이 따로 소개되어 있다. 사실 환경 사용에 대한 제한이 있어, 결과 비교에 대한 어려움이 있었을텐데, 이 책에서는 이런 환경에 대한 언급을 해주어 조금 복잡한 환경에서의 성능 평가도 수행하면서, 추후 다른 환경을 구현할 때도 조금 도움이 될 수 있을 것이란 생각이 들었다.

물론 R로 소개되어 있는 책이다보니, R에 대한 지식이 없는 사람이 보기에는 조금 허들이 있을 수 있다. 하지만 개인적인 입장에서는 R에 대한 지식도 약간 갖고 있는 상황에서 이런 책을 접하니, 다른 언어로도 이렇게 구현할 수 있구나 하는 생각을 하면서, 조금 더 이론에 대한 이해가 잘되는 것 같았다. 더불어 통계학을 공부하면서 R을 많이 다뤄본 사람에게는 아마 R로 설명하는 유일한 강화학습 책이지 않을까 싶다. 

참고: 책 Repository 도 공개되어 있으니 참고하면 좋겠다.

 

bjpublic/DeepReinforcementR

Contribute to bjpublic/DeepReinforcementR development by creating an account on GitHub.

github.com

 

댓글