본 프로젝트 수업은 머신 러닝의 3가지 타입 중 강화 학습(ReinForcement Learing)을 체험할 수 있는 프로젝트 학습입니다. 강화 학습이 다른 머신러닝과 차이가 있는 부분은 지속적으로 보상(Reward)을 설정하고 학습시킨 다는 것입니다. 2015년 12월 19일 런던의 작은 회사인 딥마인드(Deep mind)가 강화학습으로 아타리 게임하기(Playing atrari with deep eeinforcement learning)이라는 논문을 발표하였습니다. 이 논문은 딥마인드가 스크린 픽셀 안에서 게임점수가 높을 때 주는 보상(reward)만을 주면서 어떻게 컴퓨터가 아타리 학습할 수 있는지 보여 주었습니다. 당시 동일 아키텍쳐 모델로 7가지 다른 게임을 실행하였는데 그 중 3가지 게임은 알고리즘이 사람보다 더 좋은 결과를 보였습니다.
이 사건은 AI의 시작이라 생각될 수 있습니다. 이후 딥마인드는 구글(Google)에게 인수되었습니다. 이후 2015년 2월에는 딥 강화학습을 통한 인간 수준의 컨트롤 하기(Human-level control through deep reinforcement learing)라는 논문을 게재하였으며 이는 네이쳐지 커버를 장식하였습니다. 이 논문에서는 같은 아키텍쳐 모델로 49가지 다른 게임을 수행하고 절반 이상이 사람 이상의 능력을 보여주었다고 합니다.
약 6년이 지난 지금 다양한 강화학습 모델이 개발되고 사용되고 있습니다. 본 수업의 목적은 학교 현장에서 티쳐블 머신(Teachable Machine)과 오픈소스 하드웨어를 바탕으로 지도학습과 비지도 학습과 관련된 인공지능 교육이 점진적으로 이루어 지고 있습니다. 본 교사는 한국에서 개발한 코코아 캠을 활용하여 지도학습 관련 교육을 하고 있습니다. 하지만 강화학습은 개념에 대한 설명은 이야기 되는데 그 실습 사례가 많은 편은 아닙니다. 그런 이유에서 딥마인드의 시작이 아타리 게임이었기에 게임을 통하여 강화학습을 실습을 하는 것이 의미가 있다고 생각이 들었습니다. 인공지능의 시작을 체험하는 것은 정말 의미가 있는 수업이 될 것이라 생각이 듭니다.
이후 Nicholas Renotte 채널을 찾게 되었으며 해당 유투버이자 개발자이신 Nicholas님의 영상을 보고 학습하여 수업 자료를 만들게 되었습니다. 슈퍼마리오 Bro1이라는 닌텐도의 고전게임을 OpenAI의 Gym 모듈과 게임 예뮬 모듈인 nes-py를 활용해여 강화학습을 연습하고 체험하는 수업입니다. 아래의 Download링크에는 Nicholas Renotte님이 설계한 코드를 다시 타이핑하여 한글 주석을 달아놓은 코드를 공유 받으실 수 있습니다. 또한, I7-7700 CPU @3.6Ghz와 GTX 1080 GPU를 사용하여 약 48시간 동안 5000000(5M)번의 학습을 시킨 데이터를 공유 받으실 수 있습니다. 5M정도의 학습으로는 Stage 1의 3/4정도 클리어하는 모습을 확인 할 수 있습니다. 더 많은 학습 데이터는 추후에 업로드 하겠습니다. 좋은 수업을 할 수 있게 강의를 해주신 Nichilas님 감사합니다. :)
🍀Github의 Chrispresso 님의 강화학습 프로젝트로 연습하는 것을 추천합니다. 결과 데이터가 가벼우며, 유전 알고리즘을 활용했습니다.
🍀위는 실제 학습 사진이며, 왼쪽 아래 각 요소를 설명하겠습니다.
Generation: 258번째 세대를 의미하며, 이는 유전 알고리즘이 258번의 반복을 거쳤음을 나타냅니다.
Individual: 'Replay'라고 표시된 이는 현재 관찰되고 있는 개별 신경망이 이전 세대의 어떤 개체를 재생산하는 것을 나타냅니다.
Best Fitness: 현재까지 가장 높은 적합도 점수가 0이라고 나타나 있어, 아마도 이 신경망은 아직 목표한 성능에 도달하지 못했음을 의미합니다.
Max Distance: 이 신경망이 게임 내에서 도달한 최대 거리는 1075픽셀입니다.
Num Inputs: 신경망에 입력되는 데이터의 수는 80개입니다.
Trainable Params: 학습 가능한 매개변수는 총 789개입니다.
Offspring: '10, 90'이라는 값은 유전 알고리즘에서 각 세대를 생성할 때 생산되는 자손의 수를 의미합니다. 이는 일반적으로 선택, 교차, 돌연변이 과정을 거쳐 생성됩니다.
Lifespan: 'Infinite'라는 값은 이 유전 알고리즘에서 개별 신경망(개체)이 가지는 수명을 나타냅니다. 'Infinite'는 개체가 특정 조건이 충족될 때까지 계속 존재할 수 있음을 의미합니다.
Mutation: 'Static 5.0%'는 신경망의 매개변수에 적용되는 돌연변이율입니다. 이는 개체가 다음 세대로 전달될 때마다 일정 비율로 무작위 변형이 일어남을 나타냅니다. 이는 유전 알고리즘에서 다양성을 생성하고 지역 최적해(local optima)에 갇히는 것을 방지하는 데 도움이 됩니다.
Crossover: 'Roulette'라는 값은 교차(crossover) 방법을 나타냅니다. 룰렛 방법은 각 개체가 선택될 확률이 그 개체의 적합도에 비례하는 방식으로, 높은 적합도를 가진 개체일수록 다음 세대에 자신의 유전자를 전달할 확률이 높습니다.
SBX Eta: '100.0'라는 값은 SBX(Simulated Binary Crossover) 교차 연산자의 분포 인덱스를 나타냅니다. 이는 교차 과정에서 부모 개체들의 유전자를 얼마나 탐색할 것인지를 결정하는 매개변수로, 값이 높을수록 부모 개체에 가까운 자손을 생성할 확률이 높아집니다.
Layers: 신경망의 구조는 [80, 9, 6]으로 표시되어 있으며, 이는 입력 계층에 80개의 노드, 숨겨진 계층에 9개의 노드, 출력 계층에 6개의 노드가 있다는 것을 의미합니다.
🍀아래 강화학습 코드는 마리오의 학습 상태 및 경우의 수를 확인할 수 없으며, 코드가 무겁습니다.
위 'Click Here'를 누르시면 PPT 내용을 확인할 수 있습니다.
본 수업은 Nicholas Renotte 채널의 Build an mario AI Model with Python 강의를 바탕으로 재구성 되었습니다. Check Out this channel. Thanks for Nicholas Renotte :)
위 'Super Mario Bros Ai Challenge'를 클릭하면 코드 SAZUMA님께서 하신 AI 강화학습 슈퍼마리오 모든 스테이지 클리어 코드 및 과정을 볼 수 있습니다.
'Peace be with you.'
by Learnmore'