텐서플로와 유니티 ML-Agents로 배우는 강화학습

다섯 가지 게임을 제작하며 살펴보는 심층 강화학습

강화학습 환경을 제작하고 심층강화학습 알고리즘까지 직접 구현한다!

알파고 이후 강화학습이 많은 사람들에게 관심을 받기 시작했다. 더불어 직접 시뮬레이션 환경을 제작하여 강화학습을 접목하고자 하는 사람도 많아지고 있다. 이를 위해 게임 엔진 회사인 유니티에서 ML-Agents라는 툴을 오픈소스로 공개했다. 하지만 이는 딥러닝, 강화학습, 유니티, ML-Agents 모두에 대한 전반적인 지식을 필요로 했다. 지금까지는 이 모든 지식을 다루는 참고 자료가 부족했기 때문에 ML-Agents에 대한 사용이 어려웠다. 이 책은 딥러닝, 강화학습, 유니티, ML-Agents 모든 내용을 다루는 참고 자료로 AI를 잘 모르는 게임 개발자, 게임 개발을 잘 모르는 AI 개발자 그리고 둘 다 모르는 초보 개발자 모두를 위한 책이다.

 

★ 이 책에서 다루는 내용 ★

  • 강화학습의 기초 개념
  • 딥러닝의 기초 이론과 알고리즘: ANN, CNN
  • 심층강화학습 알고리즘: DQN, DDPG, DDDQN, BC
  • 유니티 ML-Agents를 통한 강화학습 게임 환경 제작: 소코반, 드론, 퐁, 닷지
  • ML-Agents 예제 환경을 이용한 강화학습 환경 제작
  • 무료 에셋을 이용한 강화학습 환경 제작
  • 점점 더 난이도를 높여가며 학습하는 커리큘럼 강화학습 환경 제작
  • 에이전트끼리 대결하며 학습하는 적대적 강화학습 환경 제작

 

도서 상세 이미지

민규식

한양대학교에서 기계공학을 전공하고 현재 한양대학교 대학원에서 석박사 통합 과정 중에 있다. 강화학습 관련 페이스북 페이지인 Reinforcement Learning Korea의 운영진으로 활동하고 있으며 유니티 코리아에서 공인한 유니티 전문가 그룹인 Unity Masters로 선정되었다. Unity ML-Agents를 이용하여 다양한 강화학습 환경을 제작하고 있으며 이를 이용하여 연구 및 논문 작성을 수행 중이다. 유니티에서 주관한 1st ML-Agents Challenge에서 Creative Award를 수상했다.

신명재

중앙대학교 컴퓨터 공학과 석사를 졸업했다. 현재 고려대학교 전기전자 공학부 Artificial Intelligence and Mobility Lab에서 서울대 의대와 강화학습 기반의 Medical Application 연구를 진행중이다.

윤성훈

세종대학교 컴퓨터공학과 학사/석사 졸업. 게임 인공지능 및 강화학습을 주로 연구하고 있다.

이현호

경희대학교에서 응용수학과 컴퓨터공학을 복수로 전공했다. 졸업 후 현재 (주)인스페이스에서 인공지능 개발자로 일하고 있다. 평소 강화학습 환경제작에 흥미가 있어 드론, 미사일, 로켓, 당구 등의 환경을 Unity ML-Agents를 이용하여 제작했다.

정규석

호서대학교에서 로봇자동화 공학을 전공 중이며 로봇 제어 시스템에 적용하기 위해 강화학습을 독학했다. 현재 로봇과 제어 시스템, 강화학습에 관한 공부를 지속하고 있다.

조동헌

연세대학교에서 산업공학/컴퓨터과학을 전공하였고 동 대학원에서 석사를 마쳤다. 이후 SUALAB에서 딥러닝 연구원으로 근무하며 제조업 인공지능에 대한 공부 중에 있다.

  • ▣ 00장: 강화학습과 딥러닝 개요
    • 0.1 강화학습의 개요
      • 0.1.1 기계 학습이란?
      • 0.1.2 강화학습의 성과
      • 0.1.3 강화학습의 기본 용어
      • 0.1.4 탐험(Exploration)과 이용(Exploitation)
    • 0.2 인공 신경망 이론
      • 0.2.1 인공 신경망(Artificial Neural Network, ANN)
      • 0.2.2 인공 신경망의 학습
      • 0.2.3 데이터 세트의 구성
      • 0.2.4 오버피팅(Overfitting)과 언더피팅(Underfitting)
      • 0.2.5 텐서플로(TensorFlow)
      • 0.2.6 텐서보드(TensorBoard)
    • 0.3 인공 신경망 코드
      • 0.3.1 분류와 회귀
      • 0.3.2 회귀 문제(Boston Housing)
    • 0.4 합성곱 신경망 이론
      • 0.4.1 합성곱(Convolution)
      • 0.4.2 합성곱 연산과 관련된 주요 용어
      • 0.4.3 합성곱 신경망의 구조
    • 0.5 합성곱 신경망 코드
      • 0.5.1 분류 문제(MNIST 데이터 세트)
    •  
  • ▣ 01장: 유니티와 ML-Agents의 개요
    • 1.1 유니티 설치 및 기초
      • 1.1.1 유니티 시작하기
      • 1.1.2 유니티 인터페이스
    • 1.2 유니티 ML-Agents
      • 1.2.1 에이전트(Agent)
      • 1.2.2 브레인(Brain)
      • 1.2.3 아카데미(Academy)
    •  
  • ▣ 02장: ML-Agents 맛보기
    • 2.1 ML-Agents 프로젝트 설정
      • 2.1.1 유니티 ML-Agents 내려받기
      • 2.1.2 새로운 프로젝트 생성
      • 2.1.3 ML-Agents 폴더를 유니티로 복사
      • 2.1.4 프로젝트 설정
    • 2.2 유니티 예제 열기
      • 2.2.1 3DBall 환경 열기
      • 2.2.2 브레인 변경
      • 2.2.3 3DBall 환경 빌드
    • 2.3 mlagents 설치 및 학습
      • 2.3.1 mlagents 설치 및 경로 설정
      • 2.3.2 Getting-started.ipynb 실행 및 코드 설명
      • 2.3.3 mlagents를 이용한 학습
      • 2.3.4 학습된 결과 테스트
    •  
  • ▣ 03장: 소코반 환경 만들기
    • 3.1 그리드월드와 소코반
    • 3.2 소코반 폴더 생성 및 파일명 변경
    • 3.3 그리드월드와 소코반 비교
    • 3.4 박스 프리팹 제작
    • 3.5 Academy 스크립트 수정
      • 3.5.1 InitializeAcademy() 함수
      • 3.5.2 SetEnvironment() 함수
      • 3.5.3 AcademyReset() 함수
    • 3.6 Agent 코드 수정
    • 3.7 소코반 환경 플레이
    • 3.8 소코반 환경 빌드
    •  
  • ▣ 04장: Deep Q Network
    • 4.1 DQN 알고리즘의 개요
    • 4.2 DQN 알고리즘의 기법
      • 4.2.1 경험 리플레이(Experience Replay)
      • 4.2.2 타겟 네트워크(Target Network)
    • 4.3 DQN 학습
    • 4.4 DQN 코드
      • 4.4.1 라이브러리 불러오기 및 파라미터 값 설정
      • 4.4.2 Model 클래스
      • 4.4.3 Agent 클래스
      • 4.4.4 Main 함수
      • 4.4.5 텐서보드를 이용한 성능 확인
    •  
  • ▣ 05장: 드론 환경 만들기
    • 5.1 드론 환경
    • 5.2 드론 폴더 생성 및 파일명 변경
    • 5.3 에셋 스토어에서 드론 에셋 내려받기
    • 5.4 드론 에셋 환경 설정 및 플레이
    • 5.5 드론 환경 제작하기
    • 5.6 Agent 코드 작성
      • 5.6.1 전역변수 설정
      • 5.6.2 InitializeAgent 함수
      • 5.6.3 CollectObservations 함수
      • 5.6.4 AgentAction 함수(행동 설정)
      • 5.6.5 AgentAction 함수(보상 설정)
      • 5.6.6 AgentReset 함수
    • 5.7 플레이어 브레인 설정 및 드론 환경 플레이
    • 5.8 러닝 브레인 설정 및 드론 환경 빌드
    •  
  • ▣ 06장: Deep Deterministic Policy Gradient
    • 6.1 DDPG 알고리즘의 개요
    • 6.2 DDPG 알고리즘의 기법들
      • 6.2.1 경험 리플레이(Experience Replay)
      • 6.2.2 타겟 네트워크(Target Network)
      • 6.2.3 소프트 타겟 업데이트(Soft Target Update)
      • 6.2.4 OU 노이즈(Ornstien Uhlenbeck Noise)
    • 6.3 DDPG 학습
      • 6.3.1 크리틱 네트워크 업데이트
      • 6.3.2 액터 네트워크 업데이트
    • 6.4 DDPG 코드
      • 6.4.1 라이브러리 불러오기 및 파라미터 값 설정
      • 6.4.2 OU 노이즈 클래스
      • 6.4.3 Actor & Critic 클래스
      • 6.4.4 Agent 클래스
      • 6.4.5 Main 함수
      • 6.4.6 텐서보드를 이용한 성능 확인
    •  
  • ▣ 07장: 퐁 환경 만들기
    • 7.1 퐁 환경 설명
    • 7.2 퐁 환경 폴더 생성 및 파일명 변경
    • 7.3 퐁 환경 오브젝트 만들기
      • 7.3.1 게임판 만들기
      • 7.3.2 골대 만들기
      • 7.3.3 에이전트 만들기
    • 7.4 오브젝트에 마찰 및 탄성력 적용
    • 7.5 스크립트 제작
      • 7.5.1 PongAgent 스크립트
      • 7.5.2 PongGoalDetection 스크립트
      • 7.5.3 PongAcademy 스크립트
    • 7.6 브레인 추가하기
      • 7.6.1 다수의 브레인을 이용한 멀티에이전트 환경 설정
      • 7.6.2 하나의 브레인을 이용한 멀티에이전트 환경 설정
    • 7.7 퐁 환경 빌드
    •  
  • ▣ 08장: 적대적인 DQN 에이전트 만들기
    • 8.1 적대적인 DQN 알고리즘의 개요
    • 8.2 적대적인 DQN 알고리즘 코드
      • 8.2.1 라이브러리 불러오기 및 파라미터 값 설정
      • 8.2.2 Model 클래스
      • 8.2.3 Agent 클래스
      • 8.2.4 Main 함수
    • 8.3 하나의 브레인을 이용한 적대적인 DQN 알고리즘 코드
    • 8.4 적대적인 DQN 학습 결과
    •  
  • ▣ 09장: 소코반 커리큘럼 학습
    • 9.1 커리큘럼 학습이란?
    • 9.2 커리큘럼 학습을 위한 소코반 환경
      • 9.2.1 소코반 커리큘럼의 환경 설정 변경
      • 9.2.2 Academy 코드 수정
      • 9.2.3 Agent 코드 수정
    • 9.3 DDDQN 알고리즘 이론
      • 9.3.1 Double DQN
      • 9.3.2 Dueling DQN
    • 9.4 DDDQN의 학습 코드 작성
      • 9.4.1 라이브러리 불러오기
      • 9.4.2 파라미터 설정
      • 9.4.3 DDDQN_Model 클래스
      • 9.4.4 DDDQN_Agent 클래스
      • 9.4.5 Main 함수
    • 9.5 소코반 커리큘럼 학습 실행 및 결과
    •  
  • ▣ 10장: 닷지 환경 만들기
    • 10.1 닷지 환경 소개
    • 10.2 닷지 폴더 생성 및 파일명 변경
    • 10.3 씬 내부의 오브젝트 설정
      • 10.3.1 아카데미 스크립트 교체
      • 10.3.2 닷지 게임 환경 만들기
      • 10.3.3 닷지 에이전트 만들기
      • 10.3.4 공 만들기
    • 10.4 스크립트 구성하기
      • 10.4.1 DodgeAcademy 스크립트
      • 10.4.2 DodgeAgent 스크립트
      • 10.4.3 BallScript 스크립트
    • 10.5 브레인 추가
    • 10.6 환경 빌드
    • 10.7 사람의 플레이 데이터 저장하기
      • 10.7.1 Demonstration 추가
      • 10.7.2 게임 실행 및 학습 데이터 녹화
      • 10.7.3 녹화 데이터 저장 경로
    •  
  • ▣ 11장: Behavioral Cloning
    • 11.1 Behavioral Cloning 알고리즘의 개요
    • 11.2 Behavioral Cloning 알고리즘의 기법
      • 11.2.1 보상이 음수인 데이터 제외하기
      • 11.2.2 드롭아웃(Dropout)
    • 11.3 Behavioral Cloning 학습
    • 11.4 Behavioral Cloning 코드
      • 11.4.1 라이브러리 불러오기
      • 11.4.2 파라미터 값 설정
      • 11.4.3 Model 클래스
      • 11.4.4 Agent 클래스
      • 11.4.5 Main 함수
    • 11.5 ml-agents의 내장 Behavioral Cloning
    •  
  • ▣ 12장: 마무리
    • 12.1 정리
    • 12.2 여러 개의 ML-Agents 환경 동시에 실행하기
  • 216쪽, 3번째 줄

    actor_obj in actorObjs)의 형태로

    ==>

    obj in actorObjs)의 형태로

  • 216쪽, 4번째 줄

    차례로 actor_obj로 반환합니다.

    ==>

    차례로 obj로 반환합니다.

  • 216쪽, 7번째 줄

    actor_obj.CompareTag(“box”)와 같은 형태로

    ==>

    obj.CompareTag(“box”)와 같은 형태로

  • 216쪽, 7번째 줄

    이것은 actor_obj의 태그가

    ==>

    이것은 obj의 태그가

  • 216쪽, 밑에서 7번째 줄

    때마다 i에 1을 더해줍니다. 그리고 반복문이 끝나면 i를 반환합니다. 이때 i는 게임에 존재하는

    ==>

    때마다 nBox에 1을 더해줍니다. 그리고 반복문이 끝나면 nBox를 반환합니다. 이때 nBox는 게임에 존재하는