메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

딥러닝과 바둑

알파고를 능가하는 바둑봇을 만들며 익히는 딥러닝, 강화학습

한빛미디어

번역서

판매중

  • 저자 : 막스 펌펄라 , 케빈 퍼거슨
  • 번역 : 권정민
  • 출간 : 2020-06-01
  • 페이지 : 444 쪽
  • ISBN : 9791162243152
  • 물류코드 :10315
  • 초급 초중급 중급 중고급 고급
4.9점 (20명)
좋아요 : 10

무늬만 바둑봇을 알파고 제로 성능으로 환골탈태시키자

 

2016년 세상을 공포와 충격에 빠트린 알파고는 알파고 제로에 완패를 당해 쓸슬히 퇴역했다. 이런 알파고의 드라마틱한 역정을 지켜본 개발자라면 한 번쯤 인공지능 바둑봇을 만들고 싶다는 막연한 생각을 해봤을 것이다. 

 

고성능 바둑봇을 만드는 방법은 생각만큼 어렵지 않다. 첫째, 파이썬 딥러닝 라이브러리인 케라스를 사용해 훈련 기법과 전략을 적용한다. 둘째, 바둑봇이 스스로 바둑을 익히는 것을 즐겁게 지켜본다. 자세한 방법은 이 책에 있다. 이 책을 탐독해 바둑봇을 만들며 익힌 딥러닝 기술을 널리 활용하기 바란다.

 

 

10315_details.jpg

 

 

 

막스 펌펄라 저자

막스 펌펄라

독일 함부르크에 사는 데이터 과학 교수이자 소프트웨어 엔지니어입니다. 매우 적극적인 오픈소스 기여자이며 여러 파이썬 패키지의 메인테이너로 활동 중입니다. 현재 애니스케일에서 소프트웨어 엔지니어로 일하고 있습니다. 이전에는 패스마인드의 제품 연구 책임자로서 레이 RLlib, 서브, 튠을 활용해 대규모 산업 애플리케이션을 위한 강화학습 설루션을 개발했으며, 스카이마인드에서 DL4J의 개발에 중요한 역할을 맡았습니다. 또한, 케라스 생태계의 성장과 확장을 도왔으며 하이퍼옵트의 메인테이너입니다.

 

케빈 퍼거슨 저자

케빈 퍼거슨

분산 시스템 및 데이터 과학 분야 경력 18년차다. 아너(Honor) 사 데이터 과학자며, 구글 및 미보(Meebo)에서 일했다. 막스와 케빈은 파이썬으로 개발된 몇 안 되는 오픈소스 바둑봇 중 하나인 베타고를 개발했다.

권정민 역자

권정민

세상은 데이터로 이뤄져 있다고 생각하며, 이를 잘 활용하고자 목표를 가지고 다양한 데이터 분석 및 활용 방안을 만들고 연구하고 있다. 카이스트 및 포항공과대학교에서 산업공학과 전산학을 전공했으며, 다양한 산업군에서 데이터 분석을 수행하고 있다. 저서로는 『데이터 분석가의 숫자유감』(골든래빗, 2021)이 있고, 역서로는 『빅데이터 분석 도구 R 프로그래밍』(에이콘 출판사, 2021), 『딥러닝과 바둑』(한빛미디어, 2020) 등이 있으며 『딥러닝 레볼루션』(한국경제신문사, 2019) 등을 감수했다.

 

[Part 1 기초]

 

CHAPTER 1 딥러닝을 향해 - 머신러닝 기초

1.1 머신러닝이란 무엇인가

__1.1.1 머신러닝은 AI와 어떤 연관성이 있는가

__1.1.2 머신러닝으로 할 수 있는 것과 할 수 없는 것

1.2 사례로 보는 머신러닝

__1.2.1 애플리케이션에서 머신러닝 사용

__1.2.2 지도학습

__1.2.3 비지도학습

__1.2.4 강화학습

1.3 딥러닝

1.4 이 책에서 학습할 내용

1.5 요약

 

CHAPTER 2 머신러닝 문제로서의 바둑

2.1 왜 게임인가

2.2 간단한 바둑 소개

__2.2.1 바둑판 이해하기

__2.2.2 돌 놓기와 잡기

__2.2.3 경기 종료 및 점수 계산

__2.2.4 패 이해하기

2.3 접바둑

2.4 추가 학습 자료

2.5 머신에 무엇을 가르칠 수 있을까

__2.5.1 포석 두기

__2.5.2 다음 수 찾기

__2.5.3 고려할 수 줄이기

__2.5.4 게임 현황 평가하기

2.6 바둑 AI가 얼마나 강력한지 측정하는 방법

__2.6.1 일반 바둑 등급

__2.6.2 바둑 AI 벤치마킹

2.7 요약

 

CHAPTER 3 첫 번째 바둑봇 만들기

3.1 파이썬으로 바둑 나타내기

__3.1.1 바둑판 구현하기

__3.1.2 바둑에서 연결 추적하기 : 이음

__3.1.3 바둑판에 돌 놓기와 따내기

3.2 대국 현황 기록과 반칙수 확인

__3.2.1 자충수

__3.2.2 패

3.3 게임 종료

3.4 첫 번째 봇 만들기 : 상상 가능한 최약체 바둑 AI

3.5 조브리스트 해싱을 사용한 대국 속도 향상

3.6 봇과 대국하기

3.7 요약

 

[Part 2 머신러닝과 게임 AI]

 

CHAPTER 4 트리 탐색을 통한 경기

4.1 게임 분류

4.2 미니맥스 탐색을 사용한 상대 수 예측

4.3 틱택토 풀기 : 미니맥스 예제

4.4 가지치기를 통한 탐색 공간 축소

__4.4.1 위치 평가를 통한 탐색 깊이 축소

__4.4.2 알파-베타 가지치기를 사용해서 탐색 폭 줄이기

4.5 몬테카를로 트리 탐색을 이용한 경기 상태 평가

__4.5.1 파이썬으로 몬테카를로 트리 탐색 구현하기

__4.5.2 탐색할 가지 선택법

__4.5.3 바둑에 몬테카를로 트리 탐색 적용하기

4.6 요약

 

CHAPTER 5 신경망 시작하기

5.1 간단한 사례 : 손글씨 숫자 분류

__5.1.1 MNIST 숫자 손글씨 데이터셋

__5.1.2 MNIST 데이터 처리

5.2 신경망 기초

__5.2.1 단순한 인공 신경망으로의 로지스틱 회귀

__5.2.2 1차원 이상의 결과를 갖는 신경망

5.3 순방향 신경망

5.4 우리 예측은 얼마나 훌륭한가 : 손실 함수와 최적화

__5.4.1 손실 함수란 무엇인가

__5.4.2 평균제곱오차

__5.4.3 손실 함수에서의 최솟값 찾기

__5.4.4 최솟값을 찾는 경사하강법

__5.4.5 손실 함수에서의 확률적 경사하강법

__5.4.6 신경망에 기울기를 역으로 전파하기

5.5 파이썬을 활용한 단계별 신경망 훈련

__5.5.1 파이썬에서의 신경망층

__5.5.2 신경망에서의 활성화층

__5.5.3 순방향 신경망의 구성 요소로서의 파이썬에서의 밀집층

__5.5.4 파이썬으로 순차 신경망 만들기

__5.5.5 신경망으로 손글씨 숫자 분류하기

5.6 요약

 

CHAPTER 6 바둑 데이터용 신경망 설계

6.1 신경망용 바둑경기 변환

6.2 트리 탐색 게임을 신경망 훈련 데이터로 만들기

6.3 케라스 딥러닝 라이브러리 사용하기

__6.3.1 케라스 디자인 원리 이해

__6.3.2 케라스 딥러닝 라이브러리 설치

__6.3.3 케라스로 익숙한 첫 번째 문제 실행해보기

__6.3.4 케라스에서 순방향 신경망을 사용한 바둑 수 예측

6.4 합성곱 신경망으로 공간 분석하기

__6.4.1 합성곱 역할에 대한 직관적 이해

__6.4.2 케라스로 합성곱 신경망 만들기

__6.4.3 풀링층을 사용한 공간 감소

6.5 바둑 수 확률 예측하기

__6.5.1 마지막 층에서 소프트맥스 활성화 함수 사용

__6.5.2 분류 문제에서의 교차 엔트로피 손실

6.6 드롭아웃과 정류 선형 유닛을 사용해 더 깊은 신경망 구성

__6.6.1 표준화를 위해 일부 뉴런 제거하기

__6.6.2 ReLU 활성화 함수

6.7 기능 결합을 통해 더 강력한 바둑 수 예측 신경망 만들기

6.8 요약

 

CHAPTER 7 데이터로부터 학습하기 : 딥러닝 봇

7.1 바둑 대국 기록 가져오기

__7.1.1 SGF 파일 포맷

__7.1.2 KGS에서 바둑 대국 기록을 다운로드해서 재현하기

7.2 딥러닝용 바둑 데이터 준비

__7.2.1 SGF 기록을 사용해서 바둑 대국 재현하기

__7.2.2 바둑 데이터 전처리기 만들기

__7.2.3 데이터를 효율적으로 불러오는 바둑 데이터 생성기 만들기

__7.2.4 바둑 데이터 처리 및 생성기의 병렬 실행

7.3 인간의 대국 기록으로 딥러닝 모델 훈련하기

7.4 더 실질적인 바둑 데이터 변환기 만들기

7.5 적응 경사법을 사용해서 효율적으로 훈련하기

__7.5.1 SGD에서의 붕괴와 모멘텀

__7.5.2 에이다그래드로 신경망 최적화하기

__7.5.3 에이다델타로 적응 경사법 조정하기

7.6 직접 실험하고 성능 평가하기

__7.6.1 모델 구조 및 하이퍼파라미터 검정 지침

__7.6.2 훈련 및 검정 데이터로 성능 지표 평가하기

7.7 요약

 

CHAPTER 8 맨땅에 봇 배포하기

8.1 심층 신경망으로 수 예측 에이전트 만들기

8.2 바둑봇을 웹 프론트엔드로 제공하기

__8.2.1 바둑봇 예제 처음부터 끝까지 다루기

8.3 클라우드에서 바둑봇 훈련 후 배포하기

8.4 다른 봇과의 대화에 사용할 바둑 텍스트 프로토콜

8.5 로컬에서 다른 봇과 대결하기

__8.5.1 봇이 차례를 넘기거나 기권해야 할 때

__8.5.2 봇과 다른 바둑 프로그램 간 대국 두기

8.6 바둑봇을 온라인 바둑 서버에 배포하기

__8.6.1 온라인 바둑 서버에 봇 등록하기

8.7 요약

 

CHAPTER 9 체험을 통한 학습 : 강화학습

9.1 강화학습 주기

9.2 경험을 통해 어떻게 달라질까

9.3 학습 가능한 에이전트 만들기

__9.3.1 확률분포에 따른 샘플링

__9.3.2 확률분포 제한

__9.3.3 에이전트 초기화

__9.3.4 물리 장치로부터 에이전트 불러오고 저장하기

__9.3.5 수 선택 구현

9.4 자체 대국 : 컴퓨터 프로그램이 연습하는 방법

__9.4.1 경험 데이터 나타내기

__9.4.2 대국 시뮬레이션

9.5 요약

 

CHAPTER 10 정책 경사를 사용하는 강화학습

10.1 임의의 경기에서 좋은 결정을 정의하는 방법

10.2 경사하강법을 사용해서 신경망 정책 수정하기

10.3 자체 대국 훈련 팁

__10.3.1 성능 향상 평가하기

__10.3.2 작은 성능 차이 측정하기

__10.3.3 확률적 경사하강(SGD) 최적화기

10.4 요약

 

CHAPTER 11 가치 기법을 사용하는 강화학습

11.1 Q-학습을 사용한 대국

11.2 케라스로 Q-학습 만들기

__11.2.1 케라스로 입력값이 둘인 신경망 만들기

__11.2.2 케라스로 ε-탐욕 정책 구현하기

__11.2.3 행동-가치 함수 훈련

11.3 요약

 

CHAPTER 12 행위자-비평가 방식 강화학습

12.1 어느 결정이 중요한지는 어드밴티지가 알려준다

__12.1.1 어드밴티지란 무엇인가

__12.1.2 자체 대국 중에 어드밴티지 구하기

12.2 행위자-비평가 학습용 신경망 설계

12.3 행위자-비평가 에이전트를 사용한 대국

12.4 경험 데이터로 행위자-비평가 에이전트 훈련하기

12.5 요약

 

[Part 3 전체는 부분의 합보다 크다]

 

CHAPTER 13 알파고 : 모든 AI 기법의 합작품

13.1 알파고의 신경망 훈련

__13.1.1 알파고의 신경망 구조

__13.1.2 알파고 바둑판 변환기

__13.1.3 알파고 스타일의 정책 신경망 훈련하기

13.2 정책 신경망으로 자체 대국 부트스트래핑

13.3 자체 대국 데이터로 가치 신경망 도출하기

13.4 정책 신경망과 가치 신경망을 사용한 탐색 개선

__13.4.1 신경망으로 몬테카를로 롤아웃 개선하기

__13.4.2 결합 가치 함수를 사용한 트리 탐색

__13.4.3 알파고의 탐색 알고리즘 구현

13.5 각자의 알파고를 훈련할 때 실제로 고민해야 할 부분

13.6 요약

 

CHAPTER 14 알파고 제로 : 강화학습과 트리 탐색의 결합

14.1 트리 탐색용 신경망 만들기

14.2 신경망으로 트리 탐색 안내하기

__14.2.1 트리 따라 내려가기

__14.2.2 트리 확장

__14.2.3 수 선택

14.3 훈련

14.4 디리클레 잡음을 사용한 탐색 향상

14.5 더 깊은 신경망을 만드는 현대적 기법

__14.5.1 배치 정규화

__14.5.2 잔차 신경망

14.6 추가 참고 자료

14.7 정리

14.8 요약

 

부록 A 수학 기초 

부록 B 역전파 알고리즘 

부록 C 바둑 프로그램 및 서버 

부록 D 아마존 웹서비스를 사용한 봇 훈련 및 배포 

부록 E 온라인 바둑 서버에 봇 등록하기 

★ 딥러닝 바둑봇을 만들며 딮러닝을 깊게 이해하자

이 책을 덮을 때쯤 알파고 형태의 바둑 엔진이 어떻게 구현되었는지 이해하게 될 뿐만 아니라 몬테카를로 트리 탐색, 딥러닝, 강화학습 같은 현대 AI 알고리즘의 주요 구성 요소를 매우 실질적으로 이해할 수 있게 될 것이다. 저자는 실제로 돌려볼 수 있는 흥미로운 바둑 예제를 사용해서 이런 기술 주제를 조심스럽게 연결해두었다. 그외에도 지금까지 발명된 세상 모든 게임 중 가장 아름답고 도전적인 바둑의 기초 지식도 배우게 될 것이다.

 

★ 알파고 동작하는 딥러닝 바둑봇을 만들고 배포하라

실제로 작동하는 파이썬 코드도 제시하고, 개념 설명도 훌륭하다. 책 내용을 익히면 바둑봇 직접 구현할 수 있도록 안내한다. 바둑봇이 작동하는 데 필요한 데이터 포맷, 배포, 클라우드 컴퓨팅 같은 주제도 자세히 다룬다. 온라인 바둑 서버에 봇을 등록하는 방법도 알려준다. 한 마디로 이 책은 현대 인공지능과 머신러닝을 장착한 바둑봇을 만드는 전 과정을 알려준다.

 

★ 다루는 핵심 내용

1. 스스로 학습하는 게임 AI를 만들고 훈련하기

2. 고전 게임 AI를 딥러닝으로 개선하기

3. 딥러닝에 사용하는 신경망을 구현하기

 

★ 장별 요약

[1부 기초]

책의 나머지 부분에서 다루는 주요 개념을 소개한다.

 

_1장 딥러닝을 향해 - 머신러닝 기초, 인공지능, 머신러닝, 딥러닝의 고차원적인 개요를 가볍게 제시한다. 이들이 어떻게 서로 연관되어 있는지, 그리고 이 분야의 기술로 할 수 있는 것과 없는 것을 설명한다.

 

_2장 머신러닝 문제로서의 바둑

바둑의 규칙을 소개하고 컴퓨터에 게임을 가르칠 때 무엇을 해야 하는지 설명한다.

 

_3장 첫 번째 바둑봇 만들기

바둑판을 만들고, 그 위에 바둑돌을 놓고, 풀게임을 하는 부분까지 파이썬으로 구현한다. 이 장을 마치면 가장 단순한 바둑 AI가 실제로 작동하게 만들 수 있다.

 

[2부 머신러닝과 게임 AI]

강력한 바둑 AI를 만들 수 있는 기술적, 이론적 기반을 설명한다. 특히 알파고에서 매우 효과적으로 사용한 트리 탐색, 신경망, 강화학습의 세 가지 기법을 소개한다.

 

_4장 트리 탐색을 통한 경기

경기의 각 차례에서 탐색과 평가를 하는 알고리즘을 전반적으로 설명한다. 단순한 무작위 대입 미니맥스 탐색 방식을 만드는 것부터 시작해서 알파-베타 가지치기, 몬테카를로 탐색 같은 고급 알고리즘까지 만들어본다.

 

_5장 신경망 시작하기

인공 신경망을 실질적으로 소개한다. 손으로 쓴 숫자를 맞추는 신경망을 파이썬으로 처음부터 구현해볼 것이다.

 

_6장 바둑 데이터용 신경망 설계

바둑 데이터가 이미지 데이터와 어떤 유사한 특징을 가지고 있는지 설명하고 수 예측을 위한 합성곱 신경망을 소개한다. 이 장에서는 모델을 만드는 데 유용한 딥러닝 라이브러리인 케라스를 사용한다.

 

_7장 데이터로부터 학습하기 : 딥러닝 봇

앞의 두 장에서 얻은 지식을 사용해서 심층 신경망 바둑봇을 만든다. 아마추어 게임에서 가져온 실제 경기 데이터로 봇을 훈련시키고 이 방법의 한계를 지적한다.

 

_8장 맨땅에 봇 배포하기

봇을 외부에 제공해서 사용자 인터페이스를 통해 사람이 봇과 경기를 할 수 있도록 할 것이다. 이때 봇이 로컬과 바둑 서버 두 곳에서 다른 봇과 어떻게 경기를 하게 만드는지도 배울 것이다.

 

_9장 체험을 통한 학습 : 강화학습

강화학습 기초와 이를 바둑에서 혼자 경기를 하는 데 어떻게 사용할 수 있는지 알아본다.

 

_10장 정책 경사를 사용하는 강화학습

7장의 수 예측을 개선하는 데 필수적인 방법인 정책 경사(policy gradients)를 차근차근 소개한다.

 

_11장 가치 기법을 사용하는 강화학습

4장의 트리 탐색과 결합했을 때 매우 강력해지는 수단인 가치 기법(value method)을 사용해서 바둑판에서의 위치에 값을 매기는 방법을 살펴본다.

 

_12장 행위자-비평가 방식 강화학습

바둑판에서의 위치와 다음 수가 주어졌을 때의 장기적인 가치를 예측함으로써 다음 수를 효과적으로 고를 수 있도록 하는 기법을 소개한다.

 

[3부 전체는 부분의 합보다 크다]

앞서 개발한 모든 구성 요소를 알파고처럼 애플리케이션으로 합치면 그 성능이 최고에 달한다. 알파고와 알파고 제로를 설명한다

 

_13장 알파고 : 모든 AI 기법의 합작품

기술적 및 수학적으로 이 책의 최고점이라고 할 수 있다. 이 장에서는 처음에는 신경망으로 바둑 데이터를 훈련하고(5~7장) 이를 통해 혼자 경기를 치르게 하고(8~11장) 여기에 똑똑한 트리 탐색 방식(4장)을 결합하여 초인 수준의 바둑봇을 만드는 방법을 논의한다.

 

_14장 알파고 제로 : 강화학습과 트리 탐색의 결합

이 책의 마지막 장으로, 보드게임 AI의 현재 최신 동향을 다룬다. 알파고 제로의 동력인 트리 탐색과 강화학습의 혁신적인 조합을 자세히 살펴볼 것이다.

 

[부록 A 수학 기초]

선형대수학과 미적분학의 기초를 되짚어보고, 파이썬 라이브러리인 NumPy로 몇 가지 선형대수를 나타내는 방법을 보여준다.

 

[부록 B 역전파 알고리즘]

5장에서 사용했던 다수의 신경망에서의 학습 과정을 보다 수학적으로 자세히 설명한다.

 

[부록 C 바둑 프로그램 및 서버]

바둑을 더 알고자 하는 독자를 위한 추가 자료를 제공한다.

 

[부록 D 아마존 웹서비스를 사용한 봇 훈련 및 배포]

봇을 아마존 클라우드 서버에서 동작하게 하기 위한 내용을 안내한다.

 

[부록 E 온라인 바둑 서버에 봇 등록하기]

우리가 만든 봇을 전 세계의 바둑 선수들이 시험해볼 수 있도록 유명한 바둑 서버에 연결하

는 방법을 설명한다.

 

추천사

“현대 인공지능과 머신러닝을 읽기 쉽고 이해하기 쉽게 소개한다.” _토레 그레펠, 딥마인드 수석 연구원

 

“머신러닝을 가르치는 용도로 바둑을 사용하다니! 감동적이고 고무적이다. 적극 추천한다.” _버크 후프나겔, 도허티 비즈니스 솔루션

 

“현 시대 가장 흥미로운 기술을 근사하게 소개한다.” _헬무트 하우실트, HSEC

빅데이터 일을 하다가 '알파고' 열풍이 불어닥치는 바람에 인공지능 연구개발팀 매니저까지 하게 됐으면서도 정작 알파고에 대해서는 어느 이상 알아 보지 않았습니다. 저희 팀이 할 수 있는 일에 바빴습니다. 그러던 차에 이 책을 만났습니다. '그래, 이게 있었지.'하는 생각이 들었습니다. 최근 강화학습을 쓸 만한 일이 생겨서 눈에 더 들어 왔다 봅니다.

이 책은 내용이 정말 충실한 튜토리얼입니다.


저자가 설명한 그대로입니다.

1부 기초, 2부 바둑을 두는 머신러닝 모델 개발 및 배포, 3부 책을 덮고 나서 익혀나갈 주제 소개, 부록으로 기초지식에서 실제 서비스로 적용하기까지 모두 다룹니다. 총 443쪽 중에서 허투루 넘길 내용이 없습니다. 학부 교재로 쓴다면 2학기는 들여야 하지 않을까 싶을 정도입니다.

난도는 좀 애매한 면이 있습니다. 다른 뾰족한 수는 없기 때문이기도 하겠습니다만 어느 순간 훅 어려워지는 느낌을 받았습니다. 기초 부분은 파이썬에 익숙한 독자가 따라 하기 쉬운 편이라고 봅니다. 저는 심화 내용으로 들어가면서부터 친절한 지도 대로 따라 하면서도 스스로 제대로 이해를 하고 있는 건지 의구심이 들었습니다. 사람마다 다르겠지만 독학하기에는 어려운 주제들로 빼곡하여 그런 게 아닐까 싶습니다. 머신러닝 입문자는 다른 입문서를 보고 오거나 일단 그대로 따라 해보는 것도 의미가 있겠습니다. 봇 수준이야 어찌 됐든 실제로 움직이는 모습을 보는 건 즐거운 일입니다.

 

현재 인공지능 분야에서 가장 인기있는 주제 중 하나인 딥러닝 + 강화학습을 바둑을 통해 배울 수 있는 책이다. 알파고를 만든 딥마인드가 꾸준히 시도하고 있듯이, 딥러닝과 강화학습을 게임이라는 수단에 엮는다. 

 

내용은 인공지능 입문자에게는 어렵다. 최소한 파이썬 중급 이상으로 코드와 파일을 다루는데 익숙해야 하며, 강화학습 입문서 정도는 미리 떼고 읽어야 읽힌다. 매닝 출판사의 책들이 대부분 그렇듯이 승부욕을 자극하는 느낌이다. 난이도는 중급 정도이다. 고수에게는 쉽고 초보자에게는 어렵다. 

 

설명 방식은 깔끔하다. 바둑을 두는 가장 간단한 봇을 만들고, 이를 점진적으로 개선한다. 바둑에 대해 전혀 문외한인 사람도 이 책을 통해 입문할 수 있을 정도로 다양한 측면에서 바둑 규칙을 잘 설명했다. 뿐만 아니라 몬테 카를로 트리 검색, 딥러닝, 강화학습 등을 실제로 어떻게 구현하고 게임에 적용하는 지에 대한 훌륭한 예제를 다수 보여준다. 특히 강화학습의 핵심 주제들이 바둑이라는 수단에 맞추어서 적절하게 잘 들어가 있다.

 

다만 원저의 구성 상 파이썬을 잘 알아야 한다. 코딩 문법에 대한 코드 설명은 거의 없다. 읽다보면 산만하게 등장하는 코드 조각이 어느 파일의 어디로 들어가야 하는지 따라가기도 꽤 까다롭다. 그래서 독자는 소프트웨어 개발자로 볼 수 있을 것 같다. 바둑을 좋아하고 수학적 기본기가 있으면서도 머신러닝을 할 줄 아는 프로그래머가 그렇게 많지 않은 것이 문제지만 말이다.

 

<The R Book>을 번역했던 베테랑 번역가답게 한글 번역도 훌륭하다. 게임에 인공지능을 접목하는 일을 꿈꾼다거나, 알파고-이세돌 대전의 충격을 기억하는 이라면 도전의식을 갖고 도전해볼만한 책이다. 

 

 

이책은 CNN, 강화학습, 몬테카를로 탐색 기술을 활용하여 인공지능 기반의 바둑봇인  알파고를 만들수 있도록 도와준다. 

Random 봇이라는 저급의 바둑 봇에서 시작하여 다양한 탐색기술을 적용, 바둑 기보에서의 신경망 학습을 통한 기력 향상, 강화학습을 통해 수를 읽고 바둑 형세를 읽는 법을 학습하여 , 마침내는 인간 바둑 고수의  고난이도 바둑 기술을 학습하여, 최고수의 경지에 이르는 인공지능 바둑봇을 개발하기 위한 전반적인 인공지능 기법을 소개하고 있다. 

 

강화학습과 관련하여 DQN 과 Actor-Critic 기술을 활용하고 있으며, 실제 구현 예제를 살펴보는 일은 흥미진진하다. 

 

최신 CNN망과 강화학습을 응용한다면, 알파고보다 뛰어난 바둑봇을 구현할수 있으리라 기대한다.

 

1.jpg

 

2.jpg

 

KakaoTalk_20200705_230714608.jpg

 

 

 

다음은 이책의 목차이다.

 

CHAPTER 1 딥러닝을 향해 - 머신러닝 기초

1.1 머신러닝이란 무엇인가

__1.1.1 머신러닝은 AI와 어떤 연관성이 있는가

__1.1.2 머신러닝으로 할 수 있는 것과 할 수 없는 것

1.2 사례로 보는 머신러닝

__1.2.1 애플리케이션에서 머신러닝 사용

__1.2.2 지도학습

__1.2.3 비지도학습

__1.2.4 강화학습

1.3 딥러닝

1.4 이 책에서 학습할 내용

1.5 요약

 

CHAPTER 2 머신러닝 문제로서의 바둑

2.1 왜 게임인가

2.2 간단한 바둑 소개

__2.2.1 바둑판 이해하기

__2.2.2 돌 놓기와 잡기

__2.2.3 경기 종료 및 점수 계산

__2.2.4 패 이해하기

2.3 접바둑

2.4 추가 학습 자료

2.5 머신에 무엇을 가르칠 수 있을까

__2.5.1 포석 두기

__2.5.2 다음 수 찾기

__2.5.3 고려할 수 줄이기

__2.5.4 게임 현황 평가하기

2.6 바둑 AI가 얼마나 강력한지 측정하는 방법

__2.6.1 일반 바둑 등급

__2.6.2 바둑 AI 벤치마킹

2.7 요약

 

CHAPTER 3 첫 번째 바둑봇 만들기

3.1 파이썬으로 바둑 나타내기

__3.1.1 바둑판 구현하기

__3.1.2 바둑에서 연결 추적하기 : 이음

__3.1.3 바둑판에 돌 놓기와 따내기

3.2 대국 현황 기록과 반칙수 확인

__3.2.1 자충수

__3.2.2 패

3.3 게임 종료

3.4 첫 번째 봇 만들기 : 상상 가능한 최약체 바둑 AI

3.5 조브리스트 해싱을 사용한 대국 속도 향상

3.6 봇과 대국하기

3.7 요약

 

[Part 2 머신러닝과 게임 AI]

CHAPTER 4 트리 탐색을 통한 경기

4.1 게임 분류

4.2 미니맥스 탐색을 사용한 상대 수 예측

4.3 틱택토 풀기 : 미니맥스 예제

4.4 가지치기를 통한 탐색 공간 축소

__4.4.1 위치 평가를 통한 탐색 깊이 축소

__4.4.2 알파-베타 가지치기를 사용해서 탐색 폭 줄이기

4.5 몬테카를로 트리 탐색을 이용한 경기 상태 평가

__4.5.1 파이썬으로 몬테카를로 트리 탐색 구현하기

__4.5.2 탐색할 가지 선택법

__4.5.3 바둑에 몬테카를로 트리 탐색 적용하기

4.6 요약

 

CHAPTER 5 신경망 시작하기

5.1 간단한 사례 : 손글씨 숫자 분류

__5.1.1 MNIST 숫자 손글씨 데이터셋

__5.1.2 MNIST 데이터 처리

5.2 신경망 기초

__5.2.1 단순한 인공 신경망으로의 로지스틱 회귀

__5.2.2 1차원 이상의 결과를 갖는 신경망

5.3 순방향 신경망

5.4 우리 예측은 얼마나 훌륭한가 : 손실 함수와 최적화

__5.4.1 손실 함수란 무엇인가

__5.4.2 평균제곱오차

__5.4.3 손실 함수에서의 최솟값 찾기

__5.4.4 최솟값을 찾는 경사하강법

__5.4.5 손실 함수에서의 확률적 경사하강법

__5.4.6 신경망에 기울기를 역으로 전파하기

5.5 파이썬을 활용한 단계별 신경망 훈련

__5.5.1 파이썬에서의 신경망층

__5.5.2 신경망에서의 활성화층

__5.5.3 순방향 신경망의 구성 요소로서의 파이썬에서의 밀집층

__5.5.4 파이썬으로 순차 신경망 만들기

__5.5.5 신경망으로 손글씨 숫자 분류하기

5.6 요약

 

CHAPTER 6 바둑 데이터용 신경망 설계

6.1 신경망용 바둑경기 변환

6.2 트리 탐색 게임을 신경망 훈련 데이터로 만들기

6.3 케라스 딥러닝 라이브러리 사용하기

__6.3.1 케라스 디자인 원리 이해

__6.3.2 케라스 딥러닝 라이브러리 설치

__6.3.3 케라스로 익숙한 첫 번째 문제 실행해보기

__6.3.4 케라스에서 순방향 신경망을 사용한 바둑 수 예측

6.4 합성곱 신경망으로 공간 분석하기

__6.4.1 합성곱 역할에 대한 직관적 이해

__6.4.2 케라스로 합성곱 신경망 만들기

__6.4.3 풀링층을 사용한 공간 감소

6.5 바둑 수 확률 예측하기

__6.5.1 마지막 층에서 소프트맥스 활성화 함수 사용

__6.5.2 분류 문제에서의 교차 엔트로피 손실

6.6 드롭아웃과 정류 선형 유닛을 사용해 더 깊은 신경망 구성

__6.6.1 표준화를 위해 일부 뉴런 제거하기

__6.6.2 ReLU 활성화 함수

6.7 기능 결합을 통해 더 강력한 바둑 수 예측 신경망 만들기

6.8 요약

 

CHAPTER 7 데이터로부터 학습하기 : 딥러닝 봇

7.1 바둑 대국 기록 가져오기

__7.1.1 SGF 파일 포맷

__7.1.2 KGS에서 바둑 대국 기록을 다운로드해서 재현하기

7.2 딥러닝용 바둑 데이터 준비

__7.2.1 SGF 기록을 사용해서 바둑 대국 재현하기

__7.2.2 바둑 데이터 전처리기 만들기

__7.2.3 데이터를 효율적으로 불러오는 바둑 데이터 생성기 만들기

__7.2.4 바둑 데이터 처리 및 생성기의 병렬 실행

7.3 인간의 대국 기록으로 딥러닝 모델 훈련하기

7.4 더 실질적인 바둑 데이터 변환기 만들기

7.5 적응 경사법을 사용해서 효율적으로 훈련하기

__7.5.1 SGD에서의 붕괴와 모멘텀

__7.5.2 에이다그래드로 신경망 최적화하기

__7.5.3 에이다델타로 적응 경사법 조정하기

7.6 직접 실험하고 성능 평가하기

__7.6.1 모델 구조 및 하이퍼파라미터 검정 지침

__7.6.2 훈련 및 검정 데이터로 성능 지표 평가하기

7.7 요약

 

CHAPTER 8 맨땅에 봇 배포하기

8.1 심층 신경망으로 수 예측 에이전트 만들기

8.2 바둑봇을 웹 프론트엔드로 제공하기

__8.2.1 바둑봇 예제 처음부터 끝까지 다루기

8.3 클라우드에서 바둑봇 훈련 후 배포하기

8.4 다른 봇과의 대화에 사용할 바둑 텍스트 프로토콜

8.5 로컬에서 다른 봇과 대결하기

__8.5.1 봇이 차례를 넘기거나 기권해야 할 때

__8.5.2 봇과 다른 바둑 프로그램 간 대국 두기

8.6 바둑봇을 온라인 바둑 서버에 배포하기

__8.6.1 온라인 바둑 서버에 봇 등록하기

8.7 요약

 

CHAPTER 9 체험을 통한 학습 : 강화학습

9.1 강화학습 주기

9.2 경험을 통해 어떻게 달라질까

9.3 학습 가능한 에이전트 만들기

__9.3.1 확률분포에 따른 샘플링

__9.3.2 확률분포 제한

__9.3.3 에이전트 초기화

__9.3.4 물리 장치로부터 에이전트 불러오고 저장하기

__9.3.5 수 선택 구현

9.4 자체 대국 : 컴퓨터 프로그램이 연습하는 방법

__9.4.1 경험 데이터 나타내기

__9.4.2 대국 시뮬레이션

9.5 요약

 

CHAPTER 10 정책 경사를 사용하는 강화학습

10.1 임의의 경기에서 좋은 결정을 정의하는 방법

10.2 경사하강법을 사용해서 신경망 정책 수정하기

10.3 자체 대국 훈련 팁

__10.3.1 성능 향상 평가하기

__10.3.2 작은 성능 차이 측정하기

__10.3.3 확률적 경사하강(SGD) 최적화기

10.4 요약

 

CHAPTER 11 가치 기법을 사용하는 강화학습

11.1 Q-학습을 사용한 대국

11.2 케라스로 Q-학습 만들기

__11.2.1 케라스로 입력값이 둘인 신경망 만들기

__11.2.2 케라스로 ε-탐욕 정책 구현하기

__11.2.3 행동-가치 함수 훈련

11.3 요약

 

CHAPTER 12 행위자-비평가 방식 강화학습

12.1 어느 결정이 중요한지는 어드밴티지가 알려준다

__12.1.1 어드밴티지란 무엇인가

__12.1.2 자체 대국 중에 어드밴티지 구하기

12.2 행위자-비평가 학습용 신경망 설계

12.3 행위자-비평가 에이전트를 사용한 대국

12.4 경험 데이터로 행위자-비평가 에이전트 훈련하기

12.5 요약

 

[Part 3 전체는 부분의 합보다 크다]

CHAPTER 13 알파고 : 모든 AI 기법의 합작품

13.1 알파고의 신경망 훈련

__13.1.1 알파고의 신경망 구조

__13.1.2 알파고 바둑판 변환기

__13.1.3 알파고 스타일의 정책 신경망 훈련하기

13.2 정책 신경망으로 자체 대국 부트스트래핑

13.3 자체 대국 데이터로 가치 신경망 도출하기

13.4 정책 신경망과 가치 신경망을 사용한 탐색 개선

__13.4.1 신경망으로 몬테카를로 롤아웃 개선하기

__13.4.2 결합 가치 함수를 사용한 트리 탐색

__13.4.3 알파고의 탐색 알고리즘 구현

13.5 각자의 알파고를 훈련할 때 실제로 고민해야 할 부분

13.6 요약

 

CHAPTER 14 알파고 제로 : 강화학습과 트리 탐색의 결합

14.1 트리 탐색용 신경망 만들기

14.2 신경망으로 트리 탐색 안내하기

__14.2.1 트리 따라 내려가기

__14.2.2 트리 확장

__14.2.3 수 선택

14.3 훈련

14.4 디리클레 잡음을 사용한 탐색 향상

14.5 더 깊은 신경망을 만드는 현대적 기법

__14.5.1 배치 정규화

__14.5.2 잔차 신경망

14.6 추가 참고 자료

14.7 정리

14.8 요약

 

부록 A 수학 기초

부록 B 역전파 알고리즘

부록 C 바둑 프로그램 및 서버

부록 D 아마존 웹서비스를 사용한 봇 훈련 및 배포

부록 E 온라인 바둑 서버에 봇 등록하기

 

"알파고"제로가 한국의 대표 바둑기사 "이세돌"과의 바둑 대결에서 승리한지 어느덧 4년이 지났습니다.

알파고는 구글의 '딥마인드' 회사에서 개발한 인공지능 로봇입니다. 그리고 이세돌은 인간이죠.

인간과 인공지능 로봇의 최초의 바둑 대결을 실시간 TV 중계를 보면서 저를 포함한 세계의 대다수의 사람들이

큰 충격을 느꼈습니다. 아마, 1990년 인간과 컴퓨터와의 체스대결을 봤던 사람들도 이런 충격이었을까요.

그리고 이때부터 본격적으로 인공지능이 많은 사람들에게 인지도가 높아지고, 국가에서는 4차산업의 핵심 기술로 더욱 부각되어 여기저기 인공지능을 접목한 사업들과 교육들, 인공지능 대학원들이 우후죽순 생기고 있습니다. 

하지만, 인공지능을 공부하더라도 강화학습은 막연히 어려울 것이다, 라는 선입견이 강해서 공부를 시작할 엄두도 안 났던 것이 사실입니다. 그러던 차에 강화학습을 책을 통해서 직접 구현해볼 수 있다는 "딥러닝과 바둑" 책을 접했습니다. 다루는 내용의 방대함에 비해 책 사이즈는 작고 귀여웠습니다 :-)

 

 

바둑이 소재라 그런지 중국(동양)풍의 책표지 ...귀엽다 >_<

 

 

책의 순서는 다음과 같습니다.

 

1부 기초

  1장 딥러닝을 향해-머신러닝 기초

  2장 머신러닝 문제로서의 바둑

  3장 첫 번째 바둑봇 만들기

 

2부 머신러닝과 게임 AI

  4장 트리 탐색을 통한 경기

  5장 신경망 시작하기

  6장 바둑 데이터용 신경망 설계

  7장 데이터로부터 학습하기 : 딥러닝 봇

  8장 맨땅에 봇 배포하기

  9장 체험을 통한 학습 : 강화학습

 10장 정책 경사를 사용하는 강화학습

 11장 가치 기법을 사용하는 강화학습

 12장 행위자-비평가 방식 강화학습

 

3부 전체는 부분의 합보다 크다

 13장 알파고 : 모든 AI 기법의 합작품

 14장 알파고 제로 : 강화학습과 트리 탐색의 결합

 

부록 A 수학기초

부록 B 역전파 알고리즘

부록 C 바둑 프로그램 및 서버

부록 D 아마존 웹서비스를 사용한 봇 훈련 및 배포

부록 E 온라인 바둑 서버에 봇 등록하기

 

이 책의 장점은 강화학습을 '수학'에 대한 깊은 이해나 공식이 없이도 바로 구현 실습이 가능하도록 강화학습에 대한 막연한 두려움, 어려움에 대한 생각, 진입장벽을 낮췄다는 데 있습니다.

 

또한 '바둑'이라는 특정 게임을 강화학습을 이용하여 끝까지 강화학습을 구현할 수 있도록 하여 학습자의 성취감과 이해를 높였다는 것도 장점입니다.

 

책에서는 처음부터 바둑과 강화학습을 바로 다루는 것이 아니라, '1부' 기초 파트를 통하여 머신러닝의 개념을 쉽고 간략하게 설명합니다. 그리고, 왜 게임이 인공지능에서 많이 다뤄지는 분야인지, 왜 바둑이 딥러닝으로 해결하기 좋은 문제인지를 설명하고 바둑의 규칙도 쉽게 설명해줍니다. 

 

"게임은 알려진 규칙으로 통제된 환경을 만들기 때문에" 인공지능에서 많이 다뤄집니다.

 

바둑에서의 핵심은 1) 고려할 수를 줄여야 하는 것 2) 어느 기사가, 어느 정도 앞서있는지에 대한 위치 평가

라고 책에서는 소개합니다.

각각의 경우마다 고려할 수를 규칙 기반으로 정하는 것은 너무 많기 때문에 어렵습니다. 대신, 딥러닝을 통해 기보를 학습한다면 특정 정확도로 예측이 가능해지기 때문에 문제가 보다 쉬워집니다. 나아가 예측한 수에서 탐색이 필요한 가지의 우선순위까지 구할 수 있다면 수를 효율적으로 계산할 수있게 됩니다.

 

또, 가장 점수가 높은 위치에 돌을 놓아야 할텐데, 돌을 어디에 놓는 게 좋은 수인지를 평가하는 것도 중요합니다. 이것은 다음 수가 어딘지를 예측하는 신경망을 훈련시키는 것 대신에 누가 이길지를 예측하도록 훈련을 시킨다면 각 위치의 점수를 숫자로 나타내어 고득점을 할 수 있도록 (이길 수 있도록) 게임 현황을 평가할 수 있습니다.

따라서, 바둑은 이전의 규칙 기반보다는, 딥러닝, 강화학습 기법을 적용하여 훈련을 시키는 것이 훨씬 성능을 좋게 만들 수 있는 분야라고 할 수 있습니다. 

 

책은 전반적으로 어려운 내용도 '쉽게 설명'하고 있습니다. '바둑알못인데 책을 보기 전에 바둑 규칙을 미리 공부해야 하나?' 라는 걱정을 단박에 날릴 수 있도록 이 책은 순서대로 읽으면 자연스럽게 바둑을 이해하고 구현할 수 있도록 설명합니다. 또, '딥러닝도 잘 모르는데, 강화학습 책을 봐도 될까?' 라고 걱정하지 않아도 될만큼, 2부의 5장에서 '신경망 시작하기'라는 단원을 통하여 딥러닝을 기초부터 쉽고, 간략하고, 차근차근 설명하고 있습니다. 딥러닝을 약간 아는 상태로 책을 봤는데, 참 친절한 책이구나 하는 생각이 들었습니다. 딥러닝 소스코드를 이해하려면 필수적으로 선형대수에서 행렬, 벡터, 미적분 개념을 알고 있어야 하는데 책의 부록A에서 수학기초를 쉽게 풀어서 다루는 것을 보고 '개념 있는 책이다'라는 생각이 들었습니다. 따로 수학책을 찾아볼 필요가 없이 하나의 책에서 다 해결이 가능한 책이라니!

 

그래서 오히려 책을 읽기 전에 바둑, 딥러닝보다는 '파이썬' 코드 함수, 문법을 미리 접하고 책을 읽는 것이 도움이 될 것 같습니다.

 

 

 

 

이 책이 좋은 점은 매 단원마다 앞부분은 '이 장에서 다루는 내용'이 무엇인지 간략하게 목차화하고, '요약' 파트를 통해 해당 단원에서 어떤 부분이 핵심이었는지를 요약해주니까 한 번 더 내용을 이해하는 데 도움이 되는 구성이었습니다.

 

아직 이 책을 보면서 하나하나 실습해보지는 않았지만, 딥러닝을 이제 막 공부하고 있는 '딥린이'로서, 멀게만 느껴졌던 '강화학습'을 도전해보는 건 이 책이 제일 좋을 것 같다는 생각이 듭니다. 이제부터 실습을 하나하나 해보면서 강화학습을 몸으로 체득해보고자 합니다. 딥러닝도 잘 모르는데, 강화학습 공부를 해도 될까 하는 불안감이 있으신 분들에게는 이 책을 꼭 추천해드리고 싶습니다. 딥러닝도 공부하고, 강화학습도 공부하고, 알파고도 만들어보고. 하나의 책으로 다 할 수 있으니까요!

게임을 이용한다는 점에서 장르 자체가 이 책의 학습 동기가 되었다. 

왜 동기가 되었는지는 이 책의  챕터2.1 ‘왜 게임인가’에서 게임이 AI 연구에서 널리 사용되는 이유로 설명하는데

게임은 현실의 복잡성을 단순하게 표현하며

게임 세계는 인공적인 우주로,

의사 결정에 필요한 모든 정보가 규칙에 나와 있으므로

불필요한 처리에 자원을 쏟지 않아도 되며

알고리즘에만 집중할 수 있다고 밝힌다. 

매우 공감되는 내용이며 학습데이터 전처리 과정을 쉽게 처리 할수 있는 것만으로도 의욕이 더 오래 살아남을 것이다. 

 

간단히 바둑 룰을 소개를 한다. 룰도 쉽게 찾아볼수 있다. 하지만 바둑 자체에 대한 흥미가 없다면 어느 정도 마음의 준비가 필요하다. 개인적으로는 이책에서 학습한 내용을 바탕으로 다른 여타의 레트로 게임에 적용해보고 싶다.

 

5, 6챕터에서는 신경망에 대한 대략적인 설명을 한다.

다른 책에서는 책 한권 분량으로 다루는 이야기를 두 챕터로 압축 한 것으로 

신경망에 대해 이미 알고 있는 사람들을 상기시키기 위한 설명이지 

신경망에 대해 백지상태인 사람들을 위한 설명은 아니다.

 

그래서 책의 내용을 이해하기 위해서는 신경망에 대해서도 기본적인 이해를 필요로 한다. 

이책에서는 하나부터 열까지 모든 내용을 다루지 않으며 바둑 봇을 만드는데에 초점을 두고 설명한다는 점을 기억해야한다.

 

신경망에 대해서 책 한권으로 설명을 하는 책들도 많다. 괜히 모든 내용을 다루다가 산만해지는 것보다 이 책에서 처럼 기본적인 내용은 가볍게 훝고 소기의 목적을 이루는데에 선택과 집중을 했다는 점이 나쁘지 않은 판단이라고 생각한다.

그 뒤로는 케라스를 통해서 이책의 목적. 바둑 봇을 만드는 내용들을 다룬다.

 

챕터 4에서 일반 게임 알고리즘 이야기를 살짝 하는데 고전 게임 알고리즘 바이블 ‘게임 알고리즘 잼스’ 시리즈가 생각났다. 

그 고전 바이블을 읽고 일반 알고리즘에 대한 지식이 있다면 이 또한 AI시대에 영감이 되지 않았을까. 

그래서 지금의 이 책을 통한 학습이 미래에 또다른 영감이 될수도 있겠고.

흥미를 갖고 꾸준히 공부할 수 있기를.

SAM_8754.JPG

 

이 책 표지를 보고 누구나 같은 생각을 하고 계실꺼에요.
앗! 이세돌과 알파고, AI...
혹시 이 책을 읽으면 나도 알파고 같은 바둑 봇을 만들 수 있지 않을까?
다운 받은 소스 코드를 그대로 실행시키면 바둑 봇이 잘 돌아갑니다.
우리가 그럴려고 이 책을 선택하려고 하는 것은 아니잖아요.
제가 생각할 때는 파이썬 중급, 강화 학습 중급자가 아니면, 다소 어려울 수 있습니다.

 

이 책에서 이제 처음 딥러닝을 하시는 분들을 위해 하나하나 설명하지 않습니다.
 

SAM_8755.JPG

 

적절한 이미지와 설명이 들어간 것을 볼 수 있습니다.

 

SAM_8756.JPG

 

 

이 책이 처음부터 바둑과 강화학습이라는 주제에 대해서 차근차근 설명하는 것은 맞습니다.
그런데, 그 구현체인 파이썬에 대한 설명이 대략적으로 나와 있습니다.
그래서, 파이썬의 초급 이상은 되어야 소스 코드 하나하나 뜯어서 이해할 수 있습니다.
케라스도 텐서플로 공식문서를 따라, 하나 하나 따라하고 익히셔야, 각 함수의 인수를 이해하실 수 있습니다. 간략하게 설명해주셨지만, 선수학습으로 케라스 책도 먼저 공부하시는 것을 추천드립니다.
 
문제는 강화학습인데, 바둑에 맞추어서 처음부터 잘 설명해주십니다. 강화학습의 여러 핵심 주제들이 바둑이라는 예제에 맞추어서 적절한 타이밍에 잘 들어가 있습니다.
그런데, 강화학습에 대한 일반 기초 이론적인 것들이 군데 군데 실습 때 등장하므로, 이론적으로 명확하게 공부해도 이해하기 어려운 기초 개념들이 사례에 그냥 녹아 있어 어~ 어~ 하면서 읽다가 보면, 왜 그 개념이 필요한지 놓칠 수 있습니다.
그래서, 강화학습 이론 책을 여러번 정독하신 후에, 이 책을 읽으면 아 내가 이해하기 어려웠던 이론적인 것들이 실제 이렇게 적용할 수 있구나 하는 해소감을 느낄수 있을 것 같습니다.

이런 기초적인 학습이 다 끝난 후에 딥러닝과 바둑을 보시면,
케라스 딥러닝 프레임워크로 바둑이란 것을 어떻게 컴퓨터에게 학습 시킬 수 있는 제대로 된 공부를 시작할 수 있을 것 같습니다.
저도 파이썬 공부가 약함을 느끼고, 다시 처음부터 소스 코드 하나하나 주석 달면서 코딩으로 강화학습을 배워보려고 합니다. 그러면 이 책이 주는 효용성이 매우 클 것 같습니다. 
그리고 강화학습을 눈으로만 배우는 것이 아니라, 이 책의 실습 부록을 통해 클라우드를 통해 배포하면서, 실제 돌아가는 바둑 프로그램을 통해 배울 수 있습니다.

누군가에는 다소 어려운 책이 될 수도 있지만,
누군가에는 재미있는 도전이 될 수 있는 책 일 것 같습니다.

딥러닝, 강화학습을 배우시고, 어디에 어떻게 사용할지 고민하신다면, 이 책이 많은 도움이 될 것 같습니다. 바둑이지만, 하나부터 열까지 모두 들어 있는 느낌입니다.

 

몇년 전에 알파고와 이세돌의 바둑 경기를 통해 AI 딥러닝이 각광을 받아왔다.

이 책은 그 알파고를 능가하는 바둑봇을 만들며 익힐 수 있는 딥러닝에 대하여 파이썬 코드를 기반으로 소개한다.

총 3개의 Part로 구성되어 있고, 14개의 Chapter로 구성되어 있다.

첫번째 Part에서는 머신러닝의 기초와 바둑 규칙을 이해하기 위한 내용을 소개한다.

그리고 파이썬으로 바둑 구현하고, 간단한 바둑봇을 만드는 과정을 보여준다.

두번째 Part에서는 AI 딥러닝으로 바둑봇을 만들기 위한 내용들을 다루고 있다.

우선 가장 쉬운 결정론적 정보 개방 게임인 틱택토에 대해 미니맥스 탐색 기술을 통해 상대 수 예측하는 방법을 보여준다. 그리고 바둑에 대해서 몬테카를로 트리 탐색 기술을 다루고 있다.

그리고 신경망을 소개하고, 그 신경망 개념을 응용하여, 바둑 데이터용 신경망을 설계하는 방법을 소개한다.

Chapter 7장에는 본격적으로 실제 바둑 대국 기록을 다운로드하여, 바둑 대국 저장 표준 포맷에 대한 이해를 돕고, 데이터를 통해 수 예측 딥러닝 모델 훈련하는 방법을 심도있게 다루고 있다. Chaptuer 8장에서는 바둑봇을 훈련하고 실행하는 프로그램을 처음부터 끝까지 만드는 과정을 보여주고, Chapter 9장, 10장, 11장, 12장에서는 체험을 통한 강화학습과 정책 경사를 사용하는 강화학습, 가치 기법을 사용하는 강화학습, 행위자-비평가 방식 강화학습에 대해서 다루고 있다.

마지막 Part에서는 다루었던 AI 기법들에 대해 결합하는 고난도 기술적 방법을 다룬다.

이 책은 머신러닝에 대해 수학적인 접근법보다 실제로 구현하는 것을 선호하는 소프트웨어 개발자 또는 학습자를 위해 만들어 졌다. 파이썬을 어느 정도 다룰 수 있어야 할 듯 하다. 그리고 실제 바둑의 규칙을 잘 알지는 못하더라도 이 책을 통해 간단한 규칙들은 알 수 있을 것이다. 특히 이 책의 좋은 점은 이해를 돕기 위한 그림들이 적절히 사용되었고, 순서도를 통해 더욱 쉽게 이해할 수 있게 설명되었다. 게다가 그 순서도에 대한 파이썬 코드를 다루어, 그 기법들을 어떻게 코드로 구현해야 할 지에 대해 쉽게 이해할 수 있을 것이다.

바둑계에 가장 큰 일은 '알파고와 이세돌'의 대국일 것입니다.

많은 사람은 이세돌이 인공지능을 쉽게 이길 거로 생각했는데요.

예상은 크게 다르게 알파고가 압도적으로 이겨버렸습니다.


그 후 이세돌은 라디오스타에서 알파고와의 대국이 섬뜩했다며 프로기사 중 본인만 지는 것 아니냐는 생각에 당시 대국을 임했다고 했습니다.


하지만 이후 많은 바둑 프로기사들이 처참히 알파고에 졌고 이세돌은 알파고를 이긴 사람이 됐습니다.


이 이야기는 불과 4년 전의 일입니다.

그럼 그전에는 인공지능인 존재하지 않았을까요?


아닙니다. 1950년부터 관련된 학문의 연구는 지속해서 되어 왔지만 쉽게 풀리지 않는 문제가 있었습니다.


바로 컴퓨팅 파워 문제였는데요. 실제 알파고가 얼마나 많은 컴퓨터를 이용했는지는 아직도 공개되지 않은 것으로 압니다.


다양한 기보를 학습하고 자신과 자신과 싸움을 하면서 지금은 더욱 파워풀한 AI가 된 것이죠.


이 딥러닝 바둑 세계를 안내해줄 책이 나와서 소개 해 드리려고 합니다.


 

photo_2020-07-05_20-42-12.jpg

 


 


1) 바둑 팬이 쓴 책

저자가 엄청남 바둑 덕후 입니다. 바둑을 사랑한 나머지 바둑의 내용을 딥러닝과 연결해서 쓴 책인데요.


이 책을 통해서 알파고에 들어간 기술을 다루면서 딥러닝을 쉽게 설명합니다.


바둑의 내용이 즐비한 것은 아니며, 기술에 대해 초점이 맞춰진 책입니다.



photo_2020-07-05_20-42-14.jpg

 


2) 수학 기초부터 강화학습에 대한 이론 한 권에

책의 내용의 절반은 강화학습에 대한 설명이 나옵니다.


강화학습에 대해서 자세히 이해하기 위해선 수학에 대한 기초 지식이 필요합니다.


부록에 따로 저자가 정리해서 쓴 내용이 있어서 먼저 읽어보고 책을 읽으시면 책을 읽는 데 도움이 될 것으로 보입니다.


또한 실제 아마존 클라우드에 올려서 훈련 및 배포까지 할 수 있어서 전반적으로 AI 개발을 맛을 볼 수 있습니다.



photo_2020-07-05_20-42-17.jpg

 


PS

딥러닝 기술이 점차 발전하고 있는데요.

앞으로 어떤 기술들이 더 나올지 기대됩니다.

간절히 바라는 것은 코로나 19 바이러스에 대한 백신이 나오길 바랍니다. ㅠㅠ


이 책은 강화학습을 하는 분 중 바둑에 관심 있는 분들에게 추천해드립니다.

 

★ 다루는 핵심 내용


1. 스스로 학습하는 게임 AI를 만들고 훈련하기


2. 고전 게임 AI를 딥러닝으로 개선하기


3. 딥러닝에 사용하는 신경망을 구현하기

 


알파고에 대해 관심이 있거나, 알파고의 성능을 높이기 까지의 시행착오와 일련의 과정들이 궁금

 

하신 분들께 이 책을 추천하고 싶다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

과거와 현재의 구성

물론, 책의 궁극적인 목표는 대부분의 독자들은 예상했겠지만 '알파고' 수밖에 없다. 하지만, 책은 목표 하나 때문에 모든 것들을 제쳐두고 다짜고짜 바둑의 룰만 가지 설명하고, 강화 학습으로 넘어가는 것이 아니다. 아주 기초적인 바둑 AI부터 시작해서 후반부에 있는 강화 학습 기반의 AI까지 유구한 역사를 바탕으로 축적된 인공지능 바둑 봇에 대한 상세한 이야기들을 다루고 있다. 너무 현대적인 것에만 초점을 두고 이야기하는 것도 아니고, 그렇다고 과거에만 몰두하는 것도 아닌 균형 잡힌 구성을 가지고 있다.

 

구현을 통한 이해

개념적인 설명만이 아니라 실제로 바둑 봇을 구현하는 과정을 거치면서 책에서 다루는 내용에 대해 이해할 시간을 갖게 된다. 이론적인 내용을 빼놓을 수가 없는 책인데, 구현 코드와 코드에 대한 설명을 바탕으로 이해를 돕고 있어서 차근차근 따라가보면 어렵지 않게 이해할 있을 것이다. 그래도 이해되지 않는다면, 책에 설명이 되어 있으니 다시 읽는 것을 추천한다.

책은 독자가 처음으로 맞이하는 것에 대해서 친절하게 설명해준다. 특히, 활용하는 바둑 데이터 타입 방식에 대한 자세한 설명과 심지어 딥러닝 도입부에서 MNIST 활용한 신경망을 구현할 때는 직접 관련 레이어와 네트워크를 설계하고 구현하는 과정까지 거치게 한다. 부분은 꽤나 신선했다. 딥러닝 관련 공부를 하면서 많은 문서를 봤는데, 이렇게 특정 주제와 결합한 딥러닝을 설명할 때면, 이론적인 내용만 설명하고, 다짜고짜 딥러닝 프레임워크로 넘어가서 바로 구현하기 마련인데, 신경망까지 직접 구현해보면 확실히 신경망에 대한 기초 내용 이해에 도움이 것이라 생각한다.

물론, 후반부에서 딥러닝을 다루는 과정에서는 딥러닝 프레임워크인 케라스를 다루는 방법에 대해서도 설명되어 있어서, 책을 따라가는데 크게 문제가 없을 것으로 판단된다. 기초적 파이썬 지식만 갖추고 있다면, 책을 그대로 따라가면서 바둑, 게임으로 딥러닝에 입문하는 것이 어렵지 않을 것이라 본다.

 

총평

하나로 단순한 바둑 AI부터 강화학습을 사용하는 바둑 AI까지 구현하고 배포까지 해볼 있다. 구현에 대한 설명을 하는 과정에서 이론적인 내용도 빠뜨리지 않은 알찬 구성을 가지고 있어서 알파고 같은 것에 관심이 많은 사람이라면 책을 추천한다.

 

필요 지식

기초 파이썬

기초 논리력

 

추천 독자

강화 학습 입문자

인공지능 구현을 통한 학습을 원하는 사람

알파고에 관심이 있는 사람

 

 

한빛미디어에서 나는 리뷰어다 활동을 통해 제공받은 책으로 작성되었습니다.

 

 

바둑이.jpg

 

드디어 딥러닝과 바둑에 관한 책

 


 

몇 년 전에 뉴스에서 알파고 알파고 딥러닝 딥러닝 하길래 딥러닝에 관심을 갖게 되었다.

컴퓨터가 생각을 해서 바둑을 두고, 자신이 둔 경험을 바탕으로스스로 학습한다는 점만 해도 충분히 매력적이고 흥미로운 분야였다.

중학교 때 부터 딥러닝과 머신러닝에 관련된 책들을 찾아보며 언젠가 생각하는 컴퓨터와 바둑을 둘 날을 꿈꾸고있었는데 그때부터 출간되는 책들은 텐서플로로 머신러닝 하기 이런 책들이 대부분이었고, 대다수가 중학생머리로는 이해하기가 어려웠다.

그 후 신경망 첫걸음 책이 나오고 나서 나는 인공신경망을 조금씩 이해하기 시작했고, 혼자서 벡터, 미분에 관련된 책들을 찾아보며 공부하고 있었다.

이때쯤 인공지능 관련 수학책들이 나오기 등장했고, 그후 영어그대로 쓰는 자연어 처리 책이 나오더니 한국어 자연어 처리 책이 등장하고, GAN관련 책들이 나오기시작했다.

그렇게 요즘 딥러닝의 다양한 분야에 관한 책들이 나오기 시작하더니 드디어 바둑에 관한 책이 나왔다!

초등학교 저학년 때 바둑을 잠시 배우긴 했지만, 바둑이 쉽진않은 게임인 건 알고 있었다.

하지만 원래 어려운거 시키라고 컴퓨터 같은걸 만든거니까..

 


 

저자:

막스 펌팔라

인공지능 관련 회사 skymind.ai의 데이터 과학자 겸 딥러닝전문 엔지이너라고 한다.

동시에 딥러닝 플랫폼 aetros.com 공동 창업자.

케빈 퍼거슨

분산시스템, 데이터 과학 분야18년 경력자..

현재는 아너의 데이터 과학자고, 구글, 미보등에서 일하셨다고 한다.

두분다 오픈소스 바둑봇 베타고 개발자라고 나와있다.

나중에 베타고에 대해 더 찾아봐야할 듯

 


 



 

딥러닝 관련 도서인 만큼 책 초반에선 딥러닝과 머신러닝에 관한 내용도 설명한다.

예전 책들은 "딥러닝이 뭔진 알고 딥러닝에 관한 책을읽겠지?" 형식이라 딥러닝과 머신러닝의 정의에 대해 생략하거나 딥러닝의 쓰임새, 혹은 머신러닝의 기법들만 설명하는 책들이 많았는데 요즘들어 딥러닝은 머신러닝의 한 종류이고, 머신러닝의 종류에는 무엇무엇이 있다.. 이렇게 자세하게 설명하는책들이 많아지는 것 같아 좋은 것 같다.

자소서 같은거에 '딥러닝과 머신러닝에 흥미를 갖고' 라고 적으면 항상 "딥러닝이 뭔가요?" 라는 질문이 자주 나오는데 이럴 때 정확한 답을 하지 못할 뻔 한적이 있었다.

예전엔 관련 분야 종사자 대상인 경우가 많아서 자세한 정의나 설명이 생략된 경우가 많았는데 요즘엔 일반인들도많이 관심을 갖는 분야라 그런지 정의나 자세한 설명이 많아지는 게 느껴진다.

 


 

그리고 부록에선 수학과 역전파 알고리즘에 관한 설명이 포함되어 있다.

이미 공부했다고 해도 수학이란게 언제든지 햇갈릴 수 있는거다.

이책의 수학 관련 부록에선 수학만 설명하는 게 아니라 수학을 바로 파이썬으로 나타내서 설명한다. 복잡한 수식으로 나타낸 것 보다 보기 좋고, 바로 응용하기도 좋을것 같다는 생각이 들었다.

딥러닝에만 관한 책이 아니다보니 기본적인 역전파 알고리즘에 책의 초반에 많은 페이지를 할애하기엔 어려운점이 있다.

이미 딥러닝 관련 도서를 많이 읽어봤다면 자주 접했을 알고리즘이기도 하니까..

 


 

대신 바둑의 기본적인 룰과 바둑의 규칙을 파이썬으로 어떻게 나타낼지에 관해 설명한다.

대국 과정에서 일어나는 다양한 상황을 파이썬으로 나타내는거를 막상 해보려니까 너무 복잡해지는 것 같은 기분이들었다.

책에서 모든 기법을 나타낸 건 아닌 것 같은데 꽤 흥미로운 파트였다.

바둑돌의 위치나 현재 상황을 기록하고, 판단하는 프로그램만 만들어도다양한 분야의 게임 제작에 도움이 될 것 같다.

바둑의 경우엔 여기서 더 복잡한 이론이 추가되야 하지만, 이미격자 무늬 판에 돌을 두는 프로그램을 만들면 이거를 응용해 오목 같은 건 조금만 머리를 굴리면 가능할 것 같기도 하다.

 


 

그리고 결론적으로 이책은 딥러닝과 바둑에 관한 책이다.

나머지 중간 부분은 흔하게 볼 수 있는 mnist를 통한 학습에대해 공부하는데 이 책만의 독특한 점이라고 하면, 딥러닝에 관한 내용이 하나 나오고 나면 바로 바둑에연관지어 조금씩 프로그램을 완성해 나간다.

그렇게 어떻게 알파고 같은 바둑 프로그램을 만드는지에 대해 배우고 나서 부록의 마지막 부분을 통해 아마존 AWS로 바둑봇을 호스팅 하고 온라인 바둑 서버에 직접 만든 바둑봇을 배포하는 과정도 나와있다.

 


 

시험기간과 겹치는 바람에 이책에 나온 모든 예제를 따라해 볼 수는 없었지만, 알파고 비슷한 무언가를 만들어 보는 것을 배우는건 상당히 재미있는 일 같다.

나중에 시간내서 끝까지 따라해 봐야겠다.

 

++표지가 왕년에바둑 좀 둔 중국인인 줄 알았는데 그냥 화려한 옷 입은 일본인이라고 한다.

별로 마음에 안든다.

원서 표지부터 이랬는지도 모르겠는데 한국에서 출판할 때는 개로왕과 도림스님을 표지모델로 쓰는것도 괜찮을것 같은데..

 

https://blog.naver.com/aul-_-/222021762031




인공지능이 바둑 영역에서 본격적으로 활용되기 시작한 것은 4년전 알파고와 실제 인간과의 대결 이후였을 것이다. 그 이전에는 인공지능이 체스에 활용된 케이스가 있었지만, 제한된 영역에서 움직이는 체스와는 다르게 바둑에서는 활동 영역도 넓고, 무엇보다도 형세를 이해하고 몇수 뒤의 미래를 예측해야했기 때문에, 인공지능을 해결하기 어려운 분야라고 여겨졌었다. 그런 영역을 알파고는 머신러닝과 딥러닝, 더불어 강화학습까지 적용시켜 바둑 실력을 높이게 된 것이다. 혹시 이 영역에 관심있는 사람이라면 Deepmind에서 만든 알파고 관련 영화도 한번 보면 흥미가 있을것이다.

 아무튼 알파고가 등장하고, 이를 어떻게 구현했는지에 대한 논문이 나오면서, 이를 모방하거나 다른 영역에 적용해보려는 시도를 많이 하고, 알파고의 구조를 설명하는 책들도 출판되었다.

 

그림 1. 딥러닝과 바둑

 

 이번에 리뷰할 책도 알파고에 구현된 기술을 간단하게 구현해보면서, 실제 바둑프로그램에 적용해볼 수 있는 책이다. 물론 이 책 이전에 알파고에 적용된 기술에 대해서 설명한 책들이 시중에 나와있긴 하지만, 바둑에 실제로 접목시켜서 코드로 구현해볼 수 있는 책은 이 책이 처음인 것 같다.

 사실 이 책을 읽기에 앞서서 이런 "바둑"이라는 특정 주제에 인공지능을 적용한 주제는 인공지능을 설명하기에 참 좋은 주제라고 생각한다. 비디오 게임처럼 이기고 지는 것에 대한 규칙이 정의되어야 하고, 앞에서도 잠깐 설명했던 것처럼 몇수뒤의 상황을 예측할 수 있어야 하며, 또한 판을 돌려서 봤을 때도 동일한 상황으로 인지할 수 있게 해야 한다. 이를 모두 설명하기 위해서는 머신러닝, 딥러닝, 강화학습 등이 모두 설명되어야 하고, 이런 부분 실제로 어떻게 구현되어야 할지 고민이 되어야 한다. 일반적인 딥러닝 책들의 서두가 지도학습이 어떤 것이고, 비지도학습, 강화학습에 대한 정의만 되거나, 특정 학습에만 치우쳐 있는 것에 비해, 이런 주제에 포커스된 책에서는 모든 주제를 다루게 되는 것이다. 그래서 책을 읽어본 사람이라면, 이런 부분이 조금 느껴지지 않을까 하는 생각을 해본다.

 

그림 2. 딥러닝이 적용된 바둑의 개요

 

 일단 이 책은 단순히 알파고의 기술적인 구현 내용만 설명된 이론서가 아닌 실제 구현해보면서 배울 수 있는 책이다. dlgo라는 바둑 라이브러리 상에서 간단한 RandomAgent부터 구현하기 시작해서, 바둑판을 인식시키기 위한 신경망인 Convolutional Neural Network(CNN)도 구현해보고, 또 이런 바둑판을 누적시켜서 학습시킬때 좋은 수를 효율적으로 찾게끔 해주는 Monte Carlo Tree Search(MCTS) 알고리즘을 적용해본다. 마지막으로 이런 바둑 경기를 반복적으로 수행하여 경험을 통해서 학습할 수 있는 Actor-Critic 알고리즘을 적용한 Agent를 구현해볼 수 있도록 구성되어 있다. 더불어 알고리즘뿐만 아니라, 바둑의 규칙이나 신경망에 대한 기본적인 정의들이 곳곳에 설명되어 있어, 인공지능 분야를 기술적으로 살펴보고자 하는 사람에게는 도움이 될 것이다. 

 뭔가 최신의 알고리즘이라던가, 트랜드가 반영된 기술을 소개한 책은 아니다. 다만 모든 기술들이 바둑이라는 분야에 접목되었을 때 보여지는 프로세스 등을 책에서 이해할 수 있다면, 바둑이 아닌 다른 분야로도 동일한 프로세스를 적용하려는 사람한테는 정말 도움이 될 수 있는 책이지 않을까 하는 생각을 해본다.

원서 : Deep Learning and the Game of Go
코드 : github



출처: https://talkingaboutme.tistory.com/entry/Book-Deep-learning-and-the-game-of-go [자신에 대한 고찰]

 

한빛미디어 출판사의 "딥러닝과 바둑(막스 펌펄라, 케빈 퍼거슨 저/권정민 역)"를 읽고 작성한 리뷰입니다.

표지


이 책이 다루는 내용은 한 마디의 질문으로 요약할 수 있다.

“알파고는 어떻게 만드는 걸까?”

알파고 덕분에 AI를 심도있게 연구하고 학습하는 이들이 많아졌지만, 정작 알파고와 유사한 봇을 개발한 사람은 극소수가 아닐까 싶다. 당장 업무와 산업 분야에 관련되거나 취업과 관련된 지식이 아닐뿐더러 게임 분야에 관심이 없거나 특히 바둑에 대한 지식이 전무한 사람은 넘어야 할 장벽이 많기 때문일 것이다.

그럼에도 알파고를 구현하는 것은 큰 의미가 있다. AI 열풍을 견인한 기술의 실체를 최대한 밑바닥까지 들여다 볼 수 있는 지적 호기심을 채울 수 있을 뿐더러, 다소 부풀려진 AI에 대한 환상을 제대로 측정할 수 있는 기술적 안목을 얻을 수 있고, 우주의 나이보다도 훨씬 많은 경우의 수와 불가능에 가까운 연산에 도전해 볼 수 있다는 것은 분명 흥미로운 일이다.

복기(復碁)

바둑에는 복기라는 용어가 있다. 게임에서 패배한 경우 결정적인 패착수를 둔 상황으로 돌아가 A, B 중 어떤 수를 선택해야 했는지 곱씹어 보는 과정이다.

재미있는 것은 인생에도 비슷한 느낌의 선택을 필요로 하는 순간이 온다는 점이다. 사람마다 다르겠지만 개인적으로 선택의 순간에서 판단이 어려울 때 바둑을 두곤 했다. 착수 A, B 선택의 순간에서 드는 느낌이 묘하게 인생에서의 선택지와 비슷한 색상, 감, 냄새 같은 것이 느껴질 때가 있는데 승패 결과에 따라 인생에서도 비슷한 느낌의 선택지를 고른다.

정작 알파고가 놀라웠던 것은 이세돌 9단에게 승리한 것이 아니라 이 표현 못할 감의 영역을 어떤 방법으로 수치화했는지 궁금해서였다. 그 방법을 알면 인생의 답을 얻는데 큰 도움이 되지 않을까라는 호기심이 계기가 되어 AI와 관련된 서적이나 논문을 읽는 것이 일상의 취미가 되어버렸다.

잠시 바둑의 이야기를 구구절절 늘어놓은 것은 두가지 목적에서다. 하나는 바둑을 잘 모르는 분들께 알파고를 구현해보는 것이 얼마나 의미가 될 수 있는지 강조하고 싶었고, 다른 하나는 독자분들이 본 도서의 진가를 몰라보고 일본식 전통 의상을 입고있는 표지에 비호감 혹은 고리타분함이라는 선입견이 생겼을까 우려되었기 때문이다.

베타고(BetaGo)

본 도서의 두 저자 막스와 케빈은 알파고의 동작 원리에 대한 궁금증을 파헤치고자 알파고와 유사한 오픈소스 바둑봇인 베타고를 만든 장본인들이다. 베타고의 성능이 궁금하여 직접 겨뤄봤는데 나는 고작 타이젬 바둑 2단의 실력이기에 베타고의 실력을 가늠할 수는 없었지만 초고수의 느낌은 지울 수 없었다.

더불어 딥마인드 알파고팀의 대표인 소레이 그리펠이 알파고부터 이후의 확장에 대한 여정과 더불어 현대 AI를 구성하는 주요 알고리즘을 익힐 수 있다고 추천사를 남겼기에 더욱 책의 내용에 신뢰가 갔다. 책을 다 읽고난 지금 시점에서는 신뢰의 수준을 넘어서 이 책이 없었다면 개인적으로 알파고를 만드는 길이 얼마나 요원했을지 아찔한 생각이 들어 감사의 마음이 절로 들었다. 이전에도 이미 알파고를 만들고 말겠다는 덕질의 일환으로 여러 책과 논문, 레퍼런스 및 오픈소스를 읽어왔으나 생각보다 다양한 기술들이 필요하고 고민거리가 많아 진척이 쉽지 않았기 때문이다.

책의 난이도와 선수지식

제목에서 알 수 있듯 본 도서의 내용은 조금 어렵다. 먼저 기본적인 파이썬 및 프로그래밍 관련 지식이 필요하다. 파이썬의 문법은 물론 배포, Flask, AWS 배포와 연동, 프로토콜 지식 등이 등장한다.

또한 일정 수준 이상의 딥러닝 지식이 필요한데 CNN 모델과 SGD 보다 성능이 좋은 에이다그래드, 에이다델타와 같은 경사법을 이해할 수 있는 수준이면 좋다. 마지막으로 행위자-비평가 학습(Actor-Critic Learning) 및 DQN 등의 강화학습에 대한 선수 지식이 있다면 책을 이해하는데 순조로울 것으로 예상한다. 더불어 바둑에 대한 도메인 지식(?)이 은근히 중요하다.

대신 바둑을 좋아하는 사람이라면 본 도서에 충분히 도전할만하다. 즐기는 자는 천재도 노력하는 사람도 이길 수 없다고 논어(論語) 옹야편(雍也篇)에 언급되어 있으니 말이다. 마찬가지로 강화학습이나 딥러닝의 입문을 뗀 분들도 도전해볼만 하다. Python과 알고리즘에 자신있는 분들도 마찬가지이다.

세가지 경우에 모두 해당되지 않는 분일지라도 반드시 알파고를 만들겠다는 의지가 강력한 분이라면 도전을 권유드린다. 1장에는 딥러닝에 대한 기초 설명이, 2장에는 바둑의 룰에 관한 설명이, 부록에는 선형대수와 미적분 등에 대한 설명이 언급되어있어 도전해볼 만하다. 부족한 부분은 검색이나 유튜브 등을 통해 보완하며 책을 읽어나간다면 최단 시간 내 가장 큰 효과를 얻을 수 있을 것이다.


본 도서가 가지는 장점을 요약하면 다음과 같다.

  • 알파고를 실제로 구현할 수 있다.
    저자들이 실제 베타고를 구현해 본 경험이 있기 때문에 연구 및 구현 능력에 의구심을 품지 않아도 된다.

  • 베타고의 성능을 높이기 까지의 시행착오와 일련의 과정들이 잘 녹아있다.
    처음부터 알파고제로 수준의 동작방식이나 원리를 설명하고 구현체의 소스를 설명하는 방식으로 구성되었다고 한들 충분히 가치있는 책이 되었을것이다.

    하지만 본 도서는 한 단계 더 나아가 저자들이 겪었던 시행 착오들을 언급하고 있다. 그 과정에서 왜 딥러닝 모델을 CNN으로 바꾸었는지, Input 데이터의 평탄화 작업(Flatten)을 왜 회피하였는지, 몬테카를로 트리 탐색 기법을 강화학습과 결합하여 사용하였는지 등의 그동안 궁금했던 지식들을 함께 익힐 수 있었다.

    점 A 하나만으로는 벡터 혹은 함수를 만들 수 없고, 미래의 점 C는 예측이 어려워진다. 본 도서의 구성은 점 A는 물론 A에 대한 개선안인 점 B를 설명하기에 C를 유추해볼수도 있고 나중에 우리가 성능을 보완할 여지인 점 D도 어렵지 않게 추정해볼 수 있다. 더불어 개선 과정에서 딥러닝, 탐색 알고리즘, 강화학습 등 각각의 활용 방법이나 필요성의 진정한 의미에 정통할 수 있다.

  • 실 서비스를 위한 고민의 흔적들
    • 실제 봇과의 대국을 위한 원시 CLI(명령 커맨드 라인 방식) 부터 WEB Front-End UI 방식까지 인터페이스 또한 상세히 다룸으로써 아는데 그치는 수준이 아닌 서비스가 가능한 BOT을 구현할 수 있다.
    • GPU 자원이 부족한 독자를 위해 모델 다운로드 등의 대안이 제시될 뿐만 아니라 최소 과금체계로 AWS 클라우드를 활용할 수 있도록 가이드한다.
    • 사람과의 대국 수준을 뛰어넘어 다른이가 만든 BOT과의 대국 및 성능평가 방법도 기술한다.
    • 프로기사 수준의 기보를 학습하는 방법이 자세히 설명되어있다. SGF 대국 데이터를 다운받아 전처리 후 활용하는 방법을 통해 실무에 적용할 수 있는 전처리 기법도 배울 수 있다.
    • 바둑 전용 프로토콜 GTP 및 Front-End 기술도 활용한다.
  • 번역 수준이 뛰어나다.

마지막으로 본 도서의 주요 내용을 요약하며 리뷰를 마친다.

  • 딥러닝과 바둑의 기초 (1장 ~ 2장)

  • 원시 바둑봇 만들기 (3장)
    • 바둑의 게임 수행에 필요한 전반적인 기능을 모두 구현한다.
      • Enum(흑,백), 보드, 게임 국면상태(GameState) 등 필수 기능 구현
      • 동형반복 규칙을 활용한 패, 돌의 이음 파악 방법, 착수/한수쉼/던지기 등 규칙 구현
      • 조브리스트 해싱 알고리즘을 이용한 속도 개선
    • 사람 및 다른 BOT과의 대국 가능첫번째
  • 트리 탐색 (4장)
    • 결정론적 완전 정보 게임에 대한 이해
    • 미니맥스
      • 모든 경로를 탐색하기에 정확도는 높지만 연산속도에 치명적. 틱택도같은 매우 간단한 게임에만 적용가능하다.
      • 위치 평가 함수를 활용한 깊이 가지치기
    • 알파-베타 가지치기
      • 충분히 최악인 수가 파악되었으면 상대의 수는 더이상 고려할 필요가 없으므로 가지치기를 통해 연산량을 줄일 수 있다.
    • 몬테카를로 트리 탐색(MCTS)
      • 사전 도메인 지식 없이도 임의의 롤아웃을 통해 상태 평가가 가능
      • 탐색할 가지를 선택하기 위해 트리 신뢰도 상한선(UCT) 방식을 활용
  • 딥러닝 (5장 ~ 8장)
    • 신경망의 기본 : MNIST 구현, 역전파, 손실함수, 경사하강법, 활성화함수 등
    • 바둑용 신경망 설계 : Encoder 구현, MCTS를 활용한 기보 생성, Keras 학습, CNN 모델 구현, 손실함수 및 활성화함수 개선 등
    • 학습 : SGF 전처리 및 훈련, 에이다그래드를 활용한 신경망 최적화
    • 두번째 바둑봇 만들기
      • HDF5 포맷을 이용한 예측 에이전트 생성
      • FLASK를 활용한 HTTP 프런트엔드 앱 개발
      • GTP 바둑 프로토콜 사용, AWS 배포, OGS 온라인 바둑서버 연동 등두번째
  • 강화학습 적용 (9장 ~ 12장)
    • 상태, 행동, 보상 등 강화학습의 기본 정리
    • 출력 결과에 대한 확률 분포로부터 표본을 추출하여 정책 신경망 구현
    • 자체 대국을 통한 실험 데이터 수집
    • 정책 경사 학습 : 승리를 이끈 모든 수의 확률을 높이고, 패배에 일조한 수의 확률을 낮춤
    • 교차 엔트로피 손실함수 적용
    • 행동-가치 함수, Q-학습, 행위자-비평가 학습을 통한 정책 함수 및 가치 함수 활용 등
  • 알파고와 알파제로 (13장 ~ 14장)
    • 정책 신경망 2개와 가치 신경망 1개 구현
    • 빠른 정책 신경망과 강한 정책 신경망
    • 시뮬레이션 방식, Q값, 유틸리티 값 등 동작방식 구현
    • 강화학습과 트리 탐색의 결합
    • 디리클레 잡음, 배치정규화, 잔차 신경망 구현

구성도

오늘은 딥러닝과 바둑이란 책을 소개하려고 합니다.

일단 바둑이 일본어로 '고'입니다.

그래서 아래 책 제목을 보면 Game of Go을 바둑으로 해석했습니다.

 

알파고도 마찬가지입니다.

알파는 처음이란 뜻으로 고는 바득이란 뜻입니다.

인공지능 첫번째 바둑AI라는 의미를 담고 있습니다.

책 표지의 인물은 일본을 지배한 몬토쿠 왕인데요. 

이 사진을 표지로 사용한 것은 수세기 전의 지역적 다양성에 바탕을 둔 책 표지로 컴퓨터 분야의 창의성, 진취성, 재미를 되새기려는 의도에서 이런 표지 디자인을 하게 됐다고 하네요.

 

 제가 읽은 책인데요.

#한빛미디어 출판사 책이고요.

 

지은 사람은 #막스펌팔라 #케빈퍼거슨 입니다.

 

알파고를 능가하는 바둑봇을 만들며 익히는 딥러닝, 강화학습이라고 하는데요.

 

정말 알파고를 능기할 수 있을가..?

 

 

알파고의 다음 버전이 알파고 제로인데, 여기서는 강화학습의 개념을 사용해서 사람의 훈련 데이터를 전혀 사용하지 않고 바둑 한판 전체를 두도록 한다.

 

이 책을 통해 알파고가 어떤 형태로 바둑 엔진이 구현되는지 이해할 수 있기 때문에 더 나은 바둑AI를 만들 수 있다고 하는 거네요.

 

 

3장에서는 실제로 움직이는 바둑 프로그램을 만들 수 있다고 하네요.

 

1장에서는 딥러닝-머신러닝의 기초 개념을 배우고

 

2장은 바둑의 규칙을 소개하고 컴퓨터에 게임을 가르칠 때 무엇을 해야 하는지 설명한다. - 머신러닝

 

3장은 첫번째 바둑봇을 만들기

 

 

4장 부터 시작되는 2부에서는 머신러닝을 통한 게임 AI를 만드는데, 트리탐색, 신경망, 강화학습에 대해 배우게 된다.

 

 

  

  

 

 

 

  

AI교육이 초중고 필수 교육으로 준비를 한다고 하네요.

 

인공지능이 어떻게 구현되는지 관심있는 분에게 좋은 책이지만, 파이선과 선형대수학과 미적분학이 필수입니다.

 

흩어보는 정도로도 많은 정보를 얻은 책입니다.

이 글은 출판사로부터 책을 제공받아 작성하였습니다.

OOP를 평소에 많이 쓸 일이 있지 않다보니 이 책을 따라하면서 많이 어려웠다. 그리고 솔직히 고백하자면 요새 이사한다 뭐한다 바쁜 일들이 있어서 이 책을 아직 끝까지 따라하지 못했다. 그 말은 강화학습 구현까지 가지 못했다는 얘기다. 그렇기에 내 리뷰는 책의 앞부분 느낌에 대한 리뷰라고 해야 정확하다.

 


앞 부분

 

책은 어떤 함수를 적고 그 함수에 대한 의미 설명을 적어놓으며 계속해서 Tutorial을 제공한다.
사실 뭐가 뭔지도 모르고 그냥 따라치게 된다.

 

완전히 OOP를 모르는 분이라면 이 책을 잡기를 추천하지 않고 싶다. 아마 그런 분이라면 그냥 알파고라고 하기에 흥미로워서 이 책을 잡으려 하겠지만, 알파고고 뭐고 간에 결국 프로그래밍이다. 파이썬부터 OOP 언어이기 때문에 OOP를 활용하지 않고 구현을 한다는 건 말이 안된다.

만약 잘 몰라도 따라해보고 싶으신 분은

https://www.youtube.com/watch?v=fk8a-U46FSg&list=PL2P1Vm9k53HOflCAdyYaOx7hfBHydWNcL&index=33

 

이런 OOP강의를 들으시면서 따라하면 될 듯 하다. 사실 나부터도 OOP를 그리 잘 아는편이 아니라서;; 

평소에 Jupyter를 열어서 간단한 Pandas 분석을 주로 사용하는 사람들(나 포함)에게 책은 분명 낯설거라고 생각한다. 그치만 뭐 1달 내에 알파고를 구현못하면 해고되는 것도 아니고 천천히 음미하며 해도 된다. 특히나 딥러닝 구현은 간단한 Jupyter로 안되고 OOP를 이용해서 복잡한 모델을 구현해야 하기 때문에 이 책을 보며 꾸준히 따라치다보면 분명 딥러닝 구현을 하는데 도움이 될거라고 생각한다. (정신승리라도 해야 버티지 이런거라도 없음 버티질 못한다)

어떤 책에선 코딩 패러다임이 바뀌었다며 매우 간단하게 모델 구현이 가능하다는 설명이 있지만, 아직 우리에겐 코딩 능력이 필요하다는 걸 깨우쳐준 책이다. 특히나 딥러닝 엔지니어가 되고 싶다면, 혹은 제대로 공부해보고 싶다면 Google Colab 켜지 말고 이 책을 보며 따라하는 건 어떨까 싶다.

고수의 코드를 따라할 수 있는 기회가 그리 많지 않다.



이 책은 내게 다른 도서들과는 좀 의미가 다르다. 'ㅅ')

 

지금 나는 개발자의 삶을 살고 있지만, '이세돌' 기사가 바둑을 수련했던 '권갑용 바둑 학원' 에서 중학교 시절 바둑을 수련하며 바둑 기사의 꿈을 키우던 사람이기 때문이다. 반포동의 대표 중국집 중 하나인 '다빈' 근처에 자리한 그 바둑 도장에서 나는 수많은 바둑 괴물 꼬꼬맹이들과 매일같이 커다란 바둑판 앞에 앉아서 요구르트, 아이스크림, 때로는 핫도그를 씹으면서 머리를 쥐어짜며 바둑을 두었다.

 

내가 고등학교에 진학할 때 즈음, 어머니는 내게 '너 고등학교 가서도 계속 바둑 둘거니?' 질문을 던지셨고, 외벌이 가정에서 네임드 바둑 학원에 바치는 비용이 적지 않아 가계에 부담이 되는 것이 싫었던 나는 '바둑은 나이 들어서 둬도 될 것 같아요. 이제 그만 둘게요.' 라고 말했다.

 

그리고, 바야흐로 2020년 나이 40살이 된 내 앞에 이런 책이 놓여 있군요. 'ㅅ') 헙스.

감회가 새롭스.

 

딥러닝 책들은 어렵다. 케라스나 텐서플로나 익히기 쉽지 않고, 공부하다 보면 수많은 종류의 좌절 펀치를 맞게 된다. 사용자 인터페이스를 주구장창 개발하면서 살아온 내게는 다른 영역으로 느껴지는 용어, 공식, 수학의 무서운 쓰나미. 봐라. 심지어 이 책에도 이렇게 쓰여 있다. '이 책은 딥러닝과 강화학습을 실질적으로 소개한다. 이 책을 최대한 활용하려면 파이썬 코드를 읽고 쓸 줄 알아야 하며, 선형대수학과 미적분학에 익숙해야 한다.' 이 전제가 이미 어렵다는겁니다. 안 그렇소. 'ㅅ') 흠흠.

 

사실 본인의 경우는 딥러닝 관련 책들을 보다가 현재는 공부를 접어둔 상태인데, 이 책의 'part 1. 첫번째 바둑 봇 만들기' 단계를 훑어보면서 다시금 딥러닝을 공부해보고 싶은 마음이 불 같이 타올랐다. 이 책은 하나의 거대한 튜토리얼과 같이 구성되어 있어 딥러닝 잘 몰라도 시간이 걸려도, 와이프 몰래 새벽에 공부해도 괜찮을 것 같아서 좀 더 살펴보려고 한다.

 

책을 전체적으로 훑어본 결과, 예제를 진행하는데 필요한 관련 기반 지식들에 대한 설명은 매우 친절하다. 실제로 이 책의 지식을 익히고 이해하고 구현 예제를 완주하려면 몇 달이고 걸리겠지만, 개발자에게 이미 흥미로운 주제가 아니겠는가. 당신이 바둑에 관심이 있거나 나처럼 바둑을 사랑하는 사람이라면 더 없이 즐겁게 읽을 수 있을 것이다. 'ㅅ')a 긁적. // 물론 책임은 안 짐. ㅋ

 

.

 

[Part 1 기초]

 -책의 나머지 부분에서 다루는 주요 개념을 소개한다.

CHAPTER 1 딥러닝을 향해 - 머신러닝 기초 -머신러닝 기초, 인공지능, 머신러닝, 딥러닝의 고차원적인 개요를 가볍게 제시한다. 이들이 어떻게 서로 연관되어 있는지, 그리고 이 분야의 기술로 할 수 있는 것과 없는 것을 설명한다.

CHAPTER 2 머신러닝 문제로서의 바둑 - 바둑의 규칙을 소개하고 컴퓨터에 게임을 가르칠 때 무엇을 해야 하는지 설명한다.

CHAPTER 3 첫 번째 바둑봇 만들기 -바둑판을 만들고, 그 위에 바둑돌을 놓고, 풀게임을 하는 부분까지 파이썬으로 구현한다. 이 장을 마치면 가장 단순한 바둑 AI가 실제로 작동하게 만들 수 있다.



[Part 2 머신러닝과 게임 AI]

-강력한 바둑 AI를 만들 수 있는 기술적, 이론적 기반을 설명한다. 특히 알파고에서 매우 효과적으로 사용한 트리 탐색, 신경망, 강화학습의 세 가지 기법을 소개한다.

CHAPTER 4 트리 탐색을 통한 경기-경기의 각 차례에서 탐색과 평가를 하는 알고리즘을 전반적으로 설명한다. 단순한 무작위 대입 미니맥스 탐색 방식을 만드는 것부터 시작해서 알파-베타 가지치기, 몬테카를로 탐색 같은 고급 알고리즘까지 만들어본다.

CHAPTER 5 신경망 시작하기-인공 신경망을 실질적으로 소개한다. 손으로 쓴 숫자를 맞추는 신경망을 파이썬으로 처음부터 구현해볼 것이다.

CHAPTER 6 바둑 데이터용 신경망 설계-바둑 데이터가 이미지 데이터와 어떤 유사한 특징을 가지고 있는지 설명하고 수 예측을 위한 합성곱 신경망을 소개한다. 이 장에서는 모델을 만드는 데 유용한 딥러닝 라이브러리인 케라스를 사용한다.

CHAPTER 7 데이터로부터 학습하기 : 딥러닝 봇-앞의 두 장에서 얻은 지식을 사용해서 심층 신경망 바둑봇을 만든다. 아마추어 게임에서 가져온 실제 경기 데이터로 봇을 훈련시키고 이 방법의 한계를 지적한다.-봇을 외부에 제공해서 사용자 인터페이스를 통해 사람이 봇과 경기를 할 수 있도록 할 것이다. 이때 봇이 로컬과 바둑 서버 두 곳에서 다른 봇과 어떻게 경기를 하게 만드는지도 배울 것이다.

CHAPTER 8 맨땅에 봇 배포하기-봇을 외부에 제공해서 사용자 인터페이스를 통해 사람이 봇과 경기를 할 수 있도록 할 것이다. 이때 봇이 로컬과 바둑 서버 두 곳에서 다른 봇과 어떻게 경기를 하게 만드는지도 배울 것이다.

CHAPTER 9 체험을 통한 학습 : 강화학습-강화학습 기초와 이를 바둑에서 혼자 경기를 하는 데 어떻게 사용할 수 있는지 알아본다.

CHAPTER 10 정책 경사를 사용하는 강화학습-7장의 수 예측을 개선하는 데 필수적인 방법인 정책 경사(policy gradients)를 차근차근 소개한다.

CHAPTER 11 가치 기법을 사용하는 강화학습-4장의 트리 탐색과 결합했을 때 매우 강력해지는 수단인 가치 기법(value method)을 사용해서 바둑판에서의 위치에 값을 매기는 방법을 살펴본다.

CHAPTER 12 행위자-비평가 방식 강화학습-바둑판에서의 위치와 다음 수가 주어졌을 때의 장기적인 가치를 예측함으로써 다음 수를 효과적으로 고를 수 있도록 하는 기법을 소개한다.


[Part 3 전체는 부분의 합보다 크다]

-앞서 개발한 모든 구성 요소를 알파고처럼 애플리케이션으로 합치면 그 성능이 최고에 달한다. 알파고와 알파고 제로를 설명한다

CHAPTER 13 알파고 : 모든 AI 기법의 합작품-기술적 및 수학적으로 이 책의 최고점이라고 할 수 있다. 이 장에서는 처음에는 신경망으로 바둑 데이터를 훈련하고(5~7장) 이를 통해 혼자 경기를 치르게 하고(8~11장) 여기에 똑똑한 트리 탐색 방식(4장)을 결합하여 초인 수준의 바둑봇을 만드는 방법을 논의한다.

CHAPTER 14 알파고 제로 : 강화학습과 트리 탐색의 결합-이 책의 마지막 장으로, 보드게임 AI의 현재 최신 동향을 다룬다. 알파고 제로의 동력인 트리 탐색과 강화학습의 혁신적인 조합을 자세히 살펴볼 것이다.

 

[리뷰]

2016년 3월 알파고와 이세돌 9단과 5번의 대국으로 알파고가 4번을 이겨서 인공지능 산업에 큰 파장을 불러 왔다고 생각합니다. 아마 그떄 부터 딥러닝, 머신러닝등 엄청난 발전이 되었습니다. 


이책에서는 딥러닝 기반의 알파고를 파헤치고 알파고를 능가하는 바둑봇을 만드는 과정을 배울수 있습니다. 알파고의 바둑 엔진이 어떻게 구현 되어 있는지 하나하나 배울수 있고 몬테카를로 트리 탐색, 딥러닝, 강화학습 같은 알고리즘을 이해할수 있습니다. 파트 1에서는 머신러닝, 딥러닝에 대한 전반적인 이론과 개념 등 기초적인 내용을 학습할 수 있습니다. 파트2에서는 바둑봇의 인공두뇌를 만드는 학습을 합니다. 즉 트리 탐색, 신경망, 강화학습의 세가지 기법에 대해서 배우게 됩니다. 파트 3에서는 앞에서 개발한 것을 가지고 강화학습을 진행 합니다. 파트 3이 이책의 하이라이트라고 볼수 있습니다. 앞장에서 신경망으로 바둑 데이터를 훈련하고 이모델로 혼자서 바둑 대국를 치르게 해서 더 똑똑한 트리 탐색 방식을 결합하여 알파고 수준의 바둑봇을 만드는 방법을 배웁니다. 그리고 마지막 장에서는 알파고 제로에 대해서 최신 AI 동향을 다룹니다. 우리가 만든 바둑봇과 알파고 제로와 대결 해서 더욱 강력한 바둑봇을 만들어 보시기 바랍니다.


그리고 부록으로 인공지능에 필요한 기초 수학인 선형대수와 미적분학을 간략하게 소개 하고 넘파이로 선형대수를 사용하는 방법을 알려줍니다. 그리고 역전파 알고리즘, AWS를 사용한 봇훈련 및 배포 방법, 온라인 바둑 서버에 바둑봇 등록 하는 방법 등이 부록으로 제공 하고 있습니다.

 

머신러닝, 딥러닝에 대해서 이론과 실제 앱을 만들어 보면서 좀더 깊게 딥러닝에 대해서 배울수 있을 겁니다. 바둑봇을 만들어 보면서 다른 인공지능 앱을 만들때 응용할수 있는 능력이 키워 질것이라 생각됩니다.

딥러닝을 세상에 본격적으로 드러낸 것은 알파고의 등장 때문 일 것이다. 알파고 이전에도 이미지넷 챌린지에서 우수한 성능으로 기존에 절대 넘지 못했던 오차율을 보이며 연구자들에게 딥러닝의 위엄을 보여주었었는데 일반인들에게는 알파고로 딥러닝이 더 유명하다.

나도 알파고를 통해 딥러닝이라는 것을 처음 알았다. 그래서 인지, 바둑에 관심이 생겼었고 이 책을 찾게 되었다.

 

 

IMG_0414.JPEG

 

책의 표지는 마치 고스트 바둑왕의 사이가 입고 있던 옷같은 그림이다. 한빛미디어의 새로운 책 디자인인 것 같은데, 배경색이 진한 녹색인게 좀 신선하다.

 

IMG_0415.JPEG

 

책에서 다루는 내용이 정말 좋다. 바둑이라는 소재가 있어서 그런지 기초적인 머신러닝/딥러닝에 대해서 소개도 하지만 곧바로 바둑과 게임AI에서 쓰이는 알고리즘들을 소개하고 본격적으로 딥러닝으로 바둑을 정복하기 위해 이어간다. 각 장을 차례대로 해치워가면 알파고와 알파고 제로에 대해서 이해할 수 있게 된다. 뿐만 아니라 웹에서 서비스하고 호스팅하는 부분도 일부분 다뤄서 많이 도움된다.

 

IMG_0416.JPEG

 

 

딥러닝에서 중요한 것이 데이터를 수집하고 전처리하고 표현하는 방법을 정하는 것인데, 책을 읽다보면 이 내용들이 모두 자연스럽게 나온다. 바둑에 특화해서 바둑에 대한 규칙 내용도 나오고 그런 규칙을 어떻게 뉴럴넷에 녹여낼지 독자로 하여금 이해할 수 있도록 설명해서 좋았다. 이런 부분들을 그냥 이론적으로 설명하고 끝이 아니라 직접 그림과 코드를 통해서 설명하므로 더욱 이해하기 쉬웠다. 이 책에서는 케라스를 사용해서 딥러닝 모델을 만들고 학습했다. 파이토치랑 텐서플로우는 써본적이 있었는데 케라스는 처음이였지만 API가 굉장히 쉬워서 편했다. 뭐 케라스가 텐서플로우에 합쳐지는 방향으로 가고 있지만 그래도 케라스는 굉장히 쉽게 잘 되어 있었다.

책 전체적으로 내용이 정말 많은 도움이 된다. 알파고 자체가 정말 많은 노력이 들어가서인지, 책으로 읽어도 참 도움이 되는 것 같다. 사실 논문을 보면 가장 좋긴하겠지만 역시 논문은 어렵다.

 

* 이 책은 한빛미디어 나는 리뷰어다 이벤트로 제공받은 책입니다.

 



 

이번에 읽어 본 책은 한빛미디어의 딥러닝과 바둑 입니다.

2016년 알파고가 이세돌 9단과의 경기에서 4승 1패로 승리를 하게 되면서 인공지능의 무서움을 알게 되었는데요.

경우의 수가 19 * 19 = 361 에서 각각의 경우를 계산 해야 되기 때문에 361! 의 수가 나오고 이 수는 우주의 모래알 갯수 만큼이나 많은 경우의 수라는 것을 깨닫고 현존하는 기보를 암기해서 거기에 맞춰 게임을 할 수는 없다는 것을 알고 정말 스스로 생각했다는 것이 정말 놀라웠거든요.

책의 구성을 보면 위와 같이 1부 기초에서는 머신러닝의 기초를 배우고 첫번째 바둑봇을 만들어 보게 됩니다.

 

사람과 게임하는 바둑봇(black 사람, white 봇)

 

1부에서 만들어 본 봇으로 사람이 black(X)  봇이 white(0) 게임을 하는 모습입니다.

봇은 것의 랜덤하게 놓고 있지만 그래도 바둑의 규칙을 적용한 모습이네요.

아직은 미완성된 작품이지만 기본적으로 바둑의 규칙이 적용되어 사람과 봇의 대결하는 모습을 볼 수가 있습니다.

이러한 봇이 머신러닝과 결합하면서 점점 더 강해지는 것을 본다면 너무 멋질 것 같다는 생각을 해 보게 되네요.

2부에서는 신경망을 공부하고 신경망과 바둑을 접목하는 과정을 하나 하나 따라 해 볼수가 있습니다.

먼저 오늘날 딥러닝의 중심에 있는 알고리즘인 인공신경망(ANN)의 핵심을 알아보고 이러한 신경망을 바둑 데이터용에 어떤 식으로 적용할지 신경망을 설계해 보게 됩니다. 딥러닝 라이브러리 중 케라스를 이용해서 바둑의 수를 예측하고 어떤 수에 놓는 것이 가장 좋을지를 예측하고 분석하게 됩니다.

 

 

위의 그림예제를 보면 신경망을 이용하여 바둑돌의 다음 수를 예측하는데 필요한 정보를 뽑아 낼 수 있다는 것은 상당히 흥미로운 일이네요.

이러한 모델을 응용하여 KGS의 바둑대국 기록을 다운로드 해서 훈련을 시켜 보고 이러한 바둑봇을 인간의 대국기록을 통해 딥러닝 모델을 훈련시키는 부분은 인공지능이 어떻게 동작을 하는지 궁금해 하시는 분들에게 무척이나 도움이 될것 같네요.

또한 강화학습은 누가 이것이 올바른 길이라는 것을 알려 주는 것이 아니고 체험을 해 보고 이 길이 아닌가 보네 그러면 다른 길을 가보면 어떨까 하면서 모든 길을 다 가 보면서 점점 더 좋은 것을 경험을 통해 알아 가는 것처럼 이러한 봇을 지속적으로 훈련을 통해 약한 바둑봇이 강한 바둑봇을 만들어 가는 과정을 볼 수가 있는데요.

이러한 원리가 알파고의 원리라는 것이 참으로 신기 할 수 밖에 없었습니다.

이 책을 읽으면서 이 책에서 제공해 주는 모든 것을 다 깨닫지는 못했지만 정말 바둑이라는 무한한 경우의 수를 사람이 생각하는 것과 비슷한 방법으로 알고리즘을 추출해 나가는 것들을 바라보며 앞으로 배우고 나아가야 할 일이 정말 너무 많은 것을 느끼게 되었네요.

이 책은 500페이지 분량이지만 내용은 정말 무량대수 만큼이나 많은 내용을 담고 있는 느낌을 받았네요.

하지만 기회가 될때 한땀 한땀 코딩을 하면서 그 원리를 익히고 이 책에서 주고자 하는 원리를 깨닫는다면 바둑봇이 아닌 또 다른 인공지능 봇도 만들어 내지 않을까 하는 생각이 들었네요.

이 책은알파고의 탄생이 궁금하신 분들에게 정말 많은 도움이 될것같아요.

 

1592799980716.jpg

 

이번에 리뷰할 책은 Max Pumperla의 딥러닝과 바둑이다. 참고로 저자인 Max는 개인 블로그를 운영중인데 (https://maxpumperla.com/projects/) 최근 프로젝트들을 보면 딥러닝의 deployment에 대한 프로젝트들도 활발히 진행중인 것으로 보인다. 이전에 머신러닝 프로젝트 & 연구들은 더 나은 모델들을 찾고 training 하는데에 집중했다면, 최근의 머신러닝은 이미 잘 알려진 모델들을 기반으로 실제 문제에 적용하고, 해당 솔루션을 보편화 시키는데에 많이 집중하고 있다. 최근에 핫한 분야인 Neuro Architecture Search를 기반으로 구글은 AutoML을 서비스하고있고, Jeff Dean이 최근 발표한 슬라이드들에는 AutoML로 발견된 모델이 기존의 모델들보다 성능이 비슷하거나, 뛰어난 경우들이 많다고 소개하고 있다. 그러므로, 주어진 데이터셋을 잘 학습하는 모델들을 구하는것이 과거에 비해서 많이 용이해졌고, 전이학습등을 통해 기존 모델들을 다른 데이터셋에 이식시켜 사용할 수 있으니, 이제는 실제 적용하고 보편화 하는 단계가 이슈인 것이다. 이러한 최근의 트렌드를 가지고, 그럼 이 책이 독자들에게 어떤 이점들을 가져다 줄 수 있는지 살펴보자.

 

이 책의 구성에 대해서 살펴보면, 크게 3가지 파트로 나뉜다. 첫번째 파트는 기초에 대한 파트로, 바둑에 대한 룰과 머신러닝, 그리고 간단한 바둑 봇 실습이 있다. 아무래도 게임 AI를 다루다보니, 강화학습에 대한 내용이 주로 쓰이고 있다. 그렇기 때문에, 머신러닝에 대한 큰 틀이 아직 잡히지 않은 독자들은 챕터 1에 머신러닝 분류를 잘 읽어서 bird-eyed view를 먼저 가지고, 그것을 기반으로 이 책이 다루는 부분을 명확히 인지하는 것이 필요하다.

 

파트 2로 들어오면서 딥러닝을 위한 신경망의 기초와, 강화학습을 위한 트리 탐색, 그리고 이러한 지식들을 기반으로 어떻게 바둑을 위한 신경망을 설계하는지 다룬다. 이 책에 또 하나의 장점은, 이러한 기초설명 이후 실제 바둑 AI 구현을 위한 실습 설명이 매우 자세하다는 것이다. 지금까지 다양한 머신러닝 / 딥러닝 책을 읽었는데, 보통 머신러닝책은 확률과 통계를 기반으로 한 클래식한 머신러닝부터 최근의 신경망 기반의 딥러닝을 간단히 설명하고 마치거나, 딥러닝 책은 신경망에 대한 설명과, 유명한 딥러닝 모델들을 소개하는 방식이 많았다. 넓은 범위를 커버하는 반면에 디테일한 부분들이 많이 떨어져서, 읽고 나서 머신러닝 / 딥러닝을 잘 이해하게 되었다고 말하기 힘든 책들이 정말 많았다. 반면 이 책은, 범위를 좁혀서 바둑이라는 문제 해결을 위해, 딥러닝과 강화학습의 기반 지식들과 실제 개발 과정을 상세하게 적어둔 것이 강점이라고 생각한다. 다만, 범위를 좁히고 디테일한 설명을 하는 비용으로, 초심자용 책은 아니며 앞서 말한 머신러닝/딥러닝 책들을 읽고 나서 읽는 것을 추천한다.

 

마지막 파트 3은 파트 2의 연장선 상으로 바둑 AI를 더 강력하게 만들기 위한 기법들을 소개한다. 책의 내용이 꽤 많으므로, 딥러닝과 강화학습을 공부하고자 이 책을 이용하면 파트 2까지 우선적으로 읽는 것을 추천하며, 시간이 되거나 실제 프로젝트 적용을 위해서라면 파트 3도 읽으면 좋을 것 같다. 이 책은 매챕터마다 구현에 대한 설명이 자세히 나온다. 이게 장점이라면 장점이고, 단점이라면 단점인데, 그 이유는 책의 신선도가 금방 떨어질 수 있기 때문이다. 텐서플로우와 케라스가 2015년에 릴리즈되고, 통합되기까지 3년이 걸리지 않았다. 새로운 딥러닝 프레임워크들은 계속해서 나오고, 기존에 프레임워크들도 API가 바뀌거나, 새로운 기능 추가 및 기존 기능들이 사라지는 경우도 매우매우 잦다. 이 책의 구현 설명이 디테일 한 것은 그렇기 때문에 장점이 될 수도, 단점이 될 수도 있다. 물론, 책내용을 따라가면서 버전이슈들을 만날때마다 스스로 찾아내서 고칠수 있으면 크게 상관없다. 하지만 그런 작업은 영문으로 작성된 공식 도큐먼트나 영문 자료들을 찾아봐야할 경우가 많기 때문에, 실습할때 책에서 사용한 버전과 같은 버전을 사용하는 것을 추천한다. Max Pumperla는 예제 코드들을 github에 공유하고 있으니, 참고하면 책 내용 따라가는데에 도움이 많이 될 것이다 (https://github.com/maxpumperla/deep_learning_and_the_game_of_go).

 

리뷰를 정리하면, 책이 타게팅하는 분야가 넓지 않기 때문에 초보자용 입문서는 아니며, 이미 머신러닝/딥러닝/강화학습에 대한 레이아웃을 알고, 강화학습 & 딥러닝을 더 제대로 파보고 싶은 사람들이 타겟 독자층이다. 하지만, 시중에 나온 머신러닝/딥러닝 서적들은 대체적으로 넓은 분야를 전반적으로 설명하는 책들이 많기 때문에, 그런 책들을 처음 입문서로 보고 이 책을 읽는 것을 추천한다. 넓은 분야의 입문서들을 읽으면서 예제들을 많이 해보겠지만, 그 예제들을 통해 내가 진짜 머신러닝을 좀 제대로 파봤다고 느끼는 사람은 거의 없을 것이다. 그런 막연함을 덜어내고, 조금 더 구체화하고 싶다면 이 책을 읽는 것을 추천한다. 또한, 책에 설명이 디테일하여 좋긴 하지만, 머신러닝 프레임워크/라이브러들의 발전속도가 매우 빠르므로 책의 신선도가 떨어지기 전에 빨리 보는 것이 좋을 것이다. 너무 버전 이슈나 라이브러리 / 프레임워크의 엔지니어링 디테일에 시달려서 책에서 학습하고자 하는 내용을 놓치면 책을 읽는 이유가 없으므로, 실습할때 저자가 사용한 버전과 같은 버전을 사용하는 것을 추천한다.

 

1592799985469.jpg

 

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 상품명 :
딥러닝과 바둑
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
딥러닝과 바둑
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
딥러닝과 바둑
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실

최근 본 상품1