자세히 보기

james_kobielus
By james_kobielus

AI 와 딥러닝의 다음 단계··· 개발자를 위한 ‘심층 강화 학습’ 가이드

강화 학습(Reinforcement learning)은 인공 지능 기술 분야에서 일종의 틈새 시장으로 분류됐었다. 그러나 지난 몇 년 동안 점차 많은 AI 관련 이니셔티브에서 더욱 중요하고 큰 역할을 맡기 시작했다. 특히 맥락적 환경에서 동작하는 가상 에이전트의 최적 행위 도출에 유용하게 쓰이고 있다.

시행착오(trial-and-error) 방식으로 알고리즘 보상 함수를 극대화하는 강화 학습은, 이 밖에도 IT 운영 관리, 에너지, 헬스케어, 상업, 금융, 교통 등의 분야에서 적응적 통제(adaptive-control) 및 멀티에이전트 자동화 애플리케이션 등에 적합하다. 또한 전통적인 AI 강세 분야(로보틱스, 게이밍, 시뮬레이션 등)뿐 아니라 새로운 AI 솔루션 분야인 엣지 애널리틱스(edge analytics), 자연어 처리, 기계 통역, 컴퓨터 비전, 그리고 디지털 어시스턴트 등에서도 AI의 교육에 널리 사용되고 있다.

한편 강화 학습 기술은 사물 인터넷 기술의 자동화 엣지 애플리케이션(autonomous edge application) 개발의 근본이 되기도 한다. 산업, 교통, 헬스케어, 소비자 애플리케이션 등, 엣지 애플리케이션 개발의 상당 부분에 AI 기술을 적용한 로보틱스가 관여하고 있는데, 이러한 로보틱스 기술은 다양한 동적 환경 상황에서 맥락적 자율성을 가지고 행동할 수 있기 때문이다.

강화 학습의 작동 기전
여러 분야들에 활용되는 엣지 디바이스의 AI 브레인은 본질적으로 강화 학습 기술에 의존할 수밖에 없다. 왜냐하면 기존의 ‘기반 진실(ground truth)’ 교육 데이터 세트가 없는 상황에서 엣지 디바이스는 스펙에 포함된 일련의 척도에 의거해 제조된 각 요소를 조립하는 등 누적 보상 함수(cumulative reward function)를 극대화 하고자 하기 때문이다.

이는 다른 AI들의 학습 방식과 대조되는데, 다른 AI들은 기반 진실 데이터에 의거하여 알고리즘 상실 함수를 최소화하는 방식으로 학습을 하거나(supervised learning), 데이터 포인트 간 거리 함수를 최소화 하는 방식((unsupervised learning)으로 학습을 한다.

그러나 이러한 AI 학습 방식들이 꼭 서로 단절돼 있는 것만은 아니다. 사실 최근 아주 흥미로운 AI 트렌드 중 하나는 강화 학습 방식과 지도 학습(supervised learning) 및 자율 학습((unsupervised learning) 방식의 융합이다. AI 개발자들 역시 단일 학습 방식으로는 커버하기 힘든 애플리케이션에 다양한 학습 방식을 융합하여 적용하고 있다.

예컨대 지도 학습(supervised learning) 방식은 사전 학습된 데이터 없이는 무용지물이다. 매 초, 매 순간 전례 없는 새로운 이벤트가 발생하는 자율 주행과 같은 분야가 그 예이다. 마찬가지로, (센서 피드 및 기타 복합적 데이터 상에서 패턴을 감지해 내기 위해 군집 분석을 사용하는) 자율 학습(unsupervised learning) 방식의 경우도 실제 의사 결정 시나리오에서 지능적 엔드 포인트가 취해야 할 최적의 액션이 무엇인가를 판별해 내기에는 한계가 있다.

심층 강화 학습(deep reinforcement learning)이란 무엇인가
심층 강화 학습이란 자율적 에이전트가 강화 학습의 시행 착오 알고리즘과 누적 보상 함수를 이용해 신경망 디자인를 가속화하는 방식을 일컫는다. 이러한 디자인들야말로 지도 또는 자율 학습을 이용하는 여러 AI 애플리케이션의 동력원이라고 할 수 있다.

심층 강화 학습은 AI 개발과 교육 자동화에 있어 핵심적인 기술이다. 심층 강화 학습에는 무수한 아키텍처, 노드 타입, 커넥션, 하이퍼파라미터 세팅, 그리고 기타 딥러닝, 머신러닝 등 AI 모델에서 사용하는 많은 옵션들과 관련된 퍼포먼스 트레이드 오프를 빠르게 탐색할 수 있는 강화 학습 주도형 에이전트가 요구된다.

예를 들어, 연구원들은 피쳐 엔지니어링(feature engineering), 컴퓨터 비전, 그리고 이미지 분류 등에 어떤 딥러닝 CNN(convolutional neural network) 아키텍처가 적합할지를 빠르게 판단하기 위하여 심층 강화 학습을 이용하고 있다. AI 툴은 심층 강화 학습을 통해 얻어낸 결과물과 텐서플로우, MXNet, 파이토치(PyTorch) 같은 딥러닝 개발 툴을 이용하여 최적의 CNN을 생성하게 된다.

이런 측면에서 볼 때, 강화 학습 개발 및 교육을 위한 오픈 프레임워크의 등장은 상당히 고무적인 일이다. 심층 강화 학습을 탐색하는 과정에서 아마도 텐서플로우를 비롯한 기타 딥러닝 및 머신러닝 모델링 툴을 사용, 확장, 공유하는 프레임워크를 함께 탐색해 보고자 하는 마음이 들게 될 것이다. 주요 강화 학습 프레임워크의 특징과 출처를 살펴보면 다음과 같다.

– 텐서플로우 에이전트 : 텐서플로우 에이전트(TensorFlow Agents)는 강화 학습을 통하여 다양한 지능적 애플리케이션을 제작, 교육할 수 있는 툴을 제공한다. 텐서플로우의 확장이라 할 수 있는 이 프레임워크는 OpenAI Gym 인터페이스를 다중 평행 환경으로 확장해 텐서플로우에서 에이전트가 일괄 컴퓨테이션을 할 수 있도록 한다. OpenAI Gym 인터페이스는 텐서플로우와 완전히 결합하여 효율적인 알고리즘 이행을 가능케 한다.

이 프레임워크는 PPO(Proximal Policy Optimization) 알고리즘의 최적화 된 이행이라 할 수 있는 BatchPPO와 통합된다. 핵심 요소로는 외장 프로세스 내부에 OpenAI Gym 환경을 건설하는 environment wrapper; 텐서플로우 그래프의 스텝 및 리셋 함수에 액세스를 가능케 하는 batch 통합; 그리고 인-그래프 텐서플로우 batch 프로세스 및 강화 학습 알고리즘을 트레이닝 루프 내부의 단일 오퍼레이션으로 통합하는 요소 등이 있다.  

– Ray RLLib : RLLib는 에이전트 기반 강화 학습 애플리케이션을 제작하기 위한 유연한 태스크 기반 프로그래밍 모델을 제공한다. UC 버클리에서 개발하여 현재는 버전2인 RLLib는 유연한 고성능 분산 실행 프레임워크인 레이(Ray)에서 구동된다. RLLib의 개발자들 중 아파치 스파크(Apache Spark)의 수석 크리에이터가 있다는 점이 인상 깊다.

RLLib는 텐서플로우 및 PyTorch 프레임워크 내에서 작동하며 알고리즘 간 모델 공유를 가능케 한다. 또한 레이 튠(Ray Tune) 하이퍼패러미터(hyperparameter) 튜닝 툴과 통합된다. 이 프레임워크는 표준 강화 학습 요소의 확장 가능한 라이브러리를 포함한다. 각 RLLib 요소는 분산 애플리케이션 내부에서 평행화, 확장, 통합 및 재사용이 가능하다.

RLLib에는 3가지 강화 학습 알고리즘이 포함된다. PPO(Proximal Policy Optimization), A3C(Asynchronous Advantage Actor-Critic), 그리고 DQN(Deep Q Networks)이 그것이다. 세 알고리즘 모두 OpenAI Gym마코프(Markov) 의사 결정 프로세스에서 구동될 수 있다.

RLLib는 또한 새로운 알고리즘을 개발하기 위한 확장성 있는 원형(primitive)를 제공하며, 새로운 문제에 RLLib를 적용하기 위한 파이썬 API와 에이전트 하이퍼패러미터 설정을 위한 저장소, 그리고 장착형 분산 강화 학습 실행 전략(pluggable distributed reinforcement learning execution strategies) 또한 제공한다. 유져에 의한 커스텀 강화 학습 알고리즘의 제작 역시 지원된다.

– 로보스쿨 : 로보스쿨(Roboschool)은 강화 학습을 통해 로봇 시뮬레이션을 제작, 교육할 수 있는 오픈소스 소프트웨어를 제공한다. 다수 에이전트를 동일한 환경에서 동시에 강화 학습 교육 할 수 있다. 멀티플레이어 교육 환경에서는 동일한 에이전트를 서로 다른 입장에 대하여 교육시키거나, 두 에이전트를 동일한 알고리즘을 이용하여 교육시키는 것, 또는 두 알고리즘을 서로 대립시키는 것 역시 가능하다.

로보스쿨은 엘론 머스크(Elon Musk), 샘 알트맨(Sam Altman), 리드 호프먼(Reid Hoffman), 피터 시엘(Peter Thiel)등이 스폰서하는 비영리기관인 OpenAI가 개발하였다. 로보스쿨은 강화 학습 알고리즘의 개발 및 평가를 위한 오픈소스 툴킷인 OpenAI Gym과 통합된다. OpenAI Gym은 텐서플로우, 테아노(Theano), 그리고 기타 딥러닝 라이브러리 등과 호환 된다. OpenAI Gym에는 수치 계산, 게이밍, 물리 엔진 등을 위한 코드가 포함되어 있다.

로보스쿨은 오픈소스 불렛 피직스 엔진(Bullet Physics Engine)에 기반하고 있다. 불렛 피직스 엔진은 그 이용이 상당히 관대하게 허용되어 있는 물리학 라이브러리다. 가즈보(Gazebo), V-REP(Virtual Robot Experimentation Platform) 등과 같은 스티뮬레이션 소프트웨어 등에서 사용된 바 있다.

로보스쿨은 다양한 강화 학습 알고리즘을 포함하고 있다. 심층 강화 학습을 위한 비동시성 방법론(Asynchronous Methods for Deep Reinforcement Learning), 경험 재생을 통한 행위-비평(Actor-Critic with Experience Replay) 방법론, 크로네커 팩터 신뢰 영역(Kronecker-Factored Trust Region), 심층 결정론적 정책 단계(Deep Deterministic Policy Gradients), PPO, 그리고 신뢰 영역 정책 최적화(Trust Region Policy Optimization) 등이 그것이다.

– 머신러닝 에이전트 : 아직 베타 상태이긴 하지만, 유니티 테크놀로지(Unity Technology)의 머신러닝 에이전트(Machine Learning Agents)는 게임, 시뮬레이션, 자율 주행 차량, 그리고 로봇 등의 지능적 에이전트의 개발 및 강화 학습 훈련을 지원한다. ML-Agent가 다양한 강화 학습 교육 시나리오를 지원하며 다수의 설정 및 에이전트, 브레인, 그리고 보상 간 상호 작용을 고려한다. 이 프레임워크의 SDK는 단일 및 다중 에이전트 시나리오를 지원할 뿐만 아니라 불연속적 활동 공간 및 연속적 활동 공간을 지원한다. 또한 강화 학습, 신경 진화(neuroevolution), 그리고 기타 머신러닝 방법에 액세스하기 위한 파이썬 API를 제공한다.

머신러닝 에이전스(ML-Agent) 학습 환경은 ‘브레인’이라 알려진 자동화 요소와의 상호 작용을 통해 강화 학습을 집행하는 에이전트들로 구성돼 있다. 각 에이전트는 고유의 상태 묶음(state)과 관측(observations)을 가질 수 있으며, 환경 내에서 고유의 행위를 할 수 있고, 또한 환경 내에서 발생하는 이벤트에 대해 고유의 보상을 받을 수 있다. 에이전트의 행위를 결정하는 것은 에이전트와 연결되어 있는 브레인이다. 각 브레인은 특정 상태와 행위 공간을 정의하고 각 에이전트가 어떤 행위를 할 것인가를 결정한다.

또한 각 ML-Agents 환경은 단일 ‘아카데미(academy)’를 포함하는데 이는 엔진 설정(교육 및 추론 모드에서 게임 엔진의 속도 및 렌더링 퀄리티), 프레임스킵(frameskip; 각 에이전트가 새로운 의사 결정을 내리는 사이 몇 개의 엔진 스텝을 건너 뛸 것인가), 그리고 글로벌 에피소드 길이(global episode length; 한 에피소드의 지속 기간) 등의 측면에서 환경의 범주를 정의하는 역할을 한다.

브레인은 여러 모드로 설정이 가능한데, 그 중 외부(external) 모드로 설정하게 되면 행위에 관한 의사 결정이 텐서플로우나 기타 머신러닝 라이브러리를 사용해 ML-Agent의 파이썬 API와 오픈 소켓 커뮤니케이션을 통해 이루어지게 된다. 반면 내부(internal) 모드로 설정 시 내장 텐서플로우샤프(TensorFlowSharp) 에이전트를 통해 프로젝트 안에 내장된 교육된 모델을 이용하여 에이전트의 의사 결정을 내리게 된다.

– 코치 : 인텔의 너바나 코치(Nervana Coach)는 게임, 로보틱스 및 기타 에이전트 기반 지능형 애플리케이션용 모델링, 교육, 그리고 평가 에이전트를 위한 오픈소스 강화 학습 프레임워크이다.

코치는 모듈 샌드박스, 재사용 컴포넌트, 그리고 파이썬 API를 제공하며 새로운 강화 학습 알고리즘을 생성할 수 있다. 또한 다양한 응용 분야에서 새로운 지능형 앱을 교육할 수 있다. 코치 프레임워크는 각기 다른 강화 학습 환경과 상호작용하기 위한 주요 툴로 OpenAI Gym를 사용한다. 또한 로보스쿨gym-extension파이불렛(PyBullet), 그리고 비즈둠(ViZDoom) 등 외부 모델들도 지원한다. 코치의 environment wrapper는 다른 커스텀 강화 학습 환경을 추가하여 학습 장애를 해결할 수 있게 하고 있다.

이 프레임워크는 데스크탑 컴퓨터와 멀티코어 CPU 프로세싱을 이용하여 효율적인 강화 학습 에이전트 교육을 가능케 한다. 또한 비동시 어디밴티지 행위-비평(Asynchronous Advantage Actor-Critic), 심층 결정론적 정책 단계, PPO, 직접 미래 예측(Direct Future Prediction), 정상화 어드밴티지 함수(Normalized Advantage Function) 등 일부 강화 학습 알고리즘을 위한 단일 및 다중 스레드 이행을 제공한다. 모든 알고리즘은 인텔에 최적화 된 텐서플로우를 이용하여 실행되며 일부는 인텔의 네온(Neon) 딥러닝 프레임워크에서도 이용할 수 있다.

코치는 단일 스레드에서 멀티 스레드 이행으로의 전환과 같은 다양한 강화 학습 에이전트를 지원한다. 또한 단일 및 멀티워커(동시 및 비동시) 강화 학습 이행을 위한 새로운 에이전트의 개발 역시 지원한다. 코치는 연속적/불연속적 행위 공간을 지원하며 시각적 관측 공간(visual observations space) 또는 원 측량만을 포함하는 관측 공간 또한 지원한다.

AI 개발자들에게 필요한 강화 학습 기술
AI 개발자들은 앞으로 위에서 소개한 프레임워크를 포함해 다양한 프레임워크에 도입된 강화 학습 알고리즘에 온몸을 푹 담궈야할 것이다. 또한 멀티에이전트 강화 학습 아키텍처에 대한 이해도를 높일 필요가 있다. 이들 중 상당수는 기존에 잘 정립되어 있는 게임 이론에 상당부분 의존하고 있다. 또한 퍼징(fuzzing)이라 알려진 공격 방법과 관련하여 컴퓨터 비전 애플리케이션의 보안 취약점 파악에 심층 강화 학습을 이용할 수 있어야 할 것이다.

마지막으로, 강화 학습 방법론과 딥러닝의 융합과 관련된 기술 및 지식을 보완하고자 하는 개발자들에게 도움이 될 만한 몇 가지 훌륭한 리소스들을 소개하며 마치겠다.

– Deep reinforcement learning Bootcamp
– Deep Learning and Reinforcement Learning Summer School

* James Kobielus는 실리콘앵글 위키본의 수석 애널리스트다. dl-ciokorea@foundryco.com