Top

확률적 프로그래밍 기초 원리 [머신 러닝과 인공지능을 이해하는 또 다른 방법]

  • 지은이신승환
  • ISBN : 9788960777644
  • 30,000원
  • 2015년 09월 30일 펴냄
  • 페이퍼백 | 368쪽 | 188*235mm
  • 시리즈 : 프로그래밍 언어

책 소개

요약

2004년에 시작된 DARPA(미국방위고등연구계획국)의 그랜드 챌린지를 필두로 무인자동차 개발에 필요한 많은 기반 기술이 개발되었다. DARPA에서는 인공지능 개발에 필요한 머신 러닝을 효율적으로 구현하기 위한 프로그래밍 언어를 개발하기 위해, 확률적 프로그래밍 기반 프로그램을 2013년부터 17년까지 운영한다. 이 책에서는 향후 인공지능 개발과 머신 러닝 분야의 한 축을 담당할 확률적 프로그래밍의 기초 지식을 다룬다. 확률적 프로그래밍을 배우는 데는 다양한 분야의 지식이 필요하다. 이 책은 확률적 프로그래밍에 필요한 지식을 살펴봄으로써, 확률적 프로그래밍의 기초를 다지게 해준다.

이 책에서 다루는 내용

이 책은 확률적 프로그래밍을 배우는 데 필요한 전반적인 지식을 다룬다.

확률 기초

베이지안 확률, 베이지안 추론, 베이지안 네트워크

명제 논리와 베이지안 네트워크를 사용한 추론

Church 언어를 사용한 확률적 프로그래밍 기초

확률적 프로그래밍의 생성 모델과 쿼리

확률적 프로그래밍의 추론 알고리즘

확률적 프로그래밍의 다양한 예제

이 책의 대상 독자

당연히 확률적 프로그래밍을 배우고 싶은 사람들이 이 책의 첫 번째 독자가 될 것이다. 이들을 위해, 이 책에서는 확률의 기초부터 확률적 프로그래밍의 하나인 Church 언어를 사용한 예제까지 설명한다. 확률적 프로그래밍에 관심이 없지만 유사한 분야의 프로그래밍 언어에 관심이 있는 독자의 경우, 이 책에서 다루는 확률 기초, 베이지안 확률, 베이지안 추론, 베이지안 네트워크를 공부해두면 많은 도움이 될 것이다. 빅데이터나 머신 러닝을 공부하거나 적용하는 독자는, 이 책에서 다루는 확률적 프로그래밍의 접근 방법을 알아둔다면 빅데이터나 머신 러닝에서 새로운 관점을 얻을 수도 있다.

이 책의 구성

이 책은 크게 4부로 구성되어 있다. 1부(1~6장)에서는 확률의 기초를 다룬다. 확률의 기초와 확률적 프로그램에서 주로 사용하는 주관적 확률, 즉 베이지안 확률을 자세히 소개한다. 2부(7~13장)에서는 1부에서 배운 베이지안 확률과, 새롭게 배우는 베이지안 네트워크를 이용해 확률적으로 추론하는 방법을 알아본다. 3부(14~17장)에서는 1부와 2부에서 배운 확률 지식을 기초로 하여 확률적 프로그래밍을 소개한다. 4부(18~22장)에서는 확률적 프로그래밍을 어떻게 사용하는지 알아보기 위해, 확률적 프로그래밍의 예제를 살펴본다.

1장, '확률은 수학이 아니다! 확률은 삶이다!?'
몸풀기로서 확률의 간단한 정의와 두 가지 종류의 확률, 즉 고전적 확률과 빈도적 확률에 대해 살펴본다.

2장, '마술사의 속임수. 확률은 객관적일까, 주관적일까?'
수학의 한 분야로서 배운 확률은 늘 객관적이라고 생각한다. 하지만 2장에서는 마법사의 동전 예제를 살펴봄으로써 확률도 주관적일 수 있다는 사실을 알아본다. 이 사실을 토대로 다시 확률의 정의를 살펴보며, 확률은 크게 고전적 확률, 빈도적 확률, 주관적 확률로 나눌 수 있음을 알게 된다.

3장, '적어도 이건 알자, 확률의 기본 공식'
확률의 기초 공식을 다시 살펴본다. 1장과 2장에서 느슨하게 정의한 개념들을 정리한다. 3장 이후로 나오는 복잡한 개념을 쉽게 이해하기 위해 정규 과정에서 배운 합사건, 곱사건, 여사건에 대해 살펴본다.

4장, '조건부 확률, 확률에도 조건이 붙을 수 있다'
어떤 사건이 주어졌을 때 다른 사건이 일어날 때의 확률인 조건부 확률을 다룬다. 조건부 확률을 다루는 이유는 조건부 확률을 사용해 주관적 확률을 나타낼 수 있기 때문이다. 독자들 중에서 조건부 확률 개념을 처음 접하는 이가 많을 것이라 생각해 최대한 사례 위주로 설명한다.

5장, '주관적 확률의 대명사, 베이지안 확률과 베이지안 추론'
4장에서 다룬 조건부 확률을 사용해 주관적 확률의 대명사인 베이지안 확률을 살펴본다. 베이지안 확률을 구하는 방법이 수식적으로 어렵진 않으나, 개념을 이해해 쉽게 적용하려면 연습이 필요하다. 따라서 수두와 천연두를 진단하는 예제를 사용해 주관적 확률의 개념을 잡을 수 있도록 설명했다.

6장, '베이지안 확률 혹은 추론 자세히 살펴보기'
5장에서 배운 베이지안 확률을 더 이해하기 위해, 몇 가지 예제를 사용해 주관적 확률을 좀 더 자세히 살펴본다. 사후 확률 오즈라는 개념을 이용해 두 가지 가설 중 한가지 가설을 채택하는 방법을 살펴본다. 아울러 베이지안 확률을 사용해 간단한 스팸 필터를 구현하는 방법도 설명한다.

7장, '명제 논리, 확률적 프로그래밍의 벽돌?'
6장까지 확률의 기초부터 주관적 확률의 활용 방법까지 살펴봤다. 복잡한 추론을 하기 위해서는 확률뿐만 아니라, 논리의 기본인 명제도 필요하다. 따라서 7장에서는 논리학의 기초를 쌓는 벽돌이라 할 수 있는 명제 논리에 대해 살펴본다.

8장, '확률, 명제를 만나다!'
확률과 명제의 만남을 시도함으로써, 진정으로 확률을 사용해 추론하는 방법을 설명한다.

9장, '이제 추론이란 걸 해보자, 베이지안 네트워크 소개'
베이지안 확률만 사용해 추론을 하면, 단순히 스팸인지 정상 메일인지, 수두인지 천연두인지처럼 단편적인 추론에 국한된다. 고차원의 추론을 하려면, 복잡다단하게 연결된 인과관계를 표현할 수 있어야 한다. 이런 인과관계의 표현에는 베이지안 네트워크가 제격이다. 9장에서는 베이지안 네트워크의 기본 개념을 소개한다.

10장, '복잡한 네트워크를 단순하게, 베이지안 네트워크의 독립성'
복잡한 인과관계를 표현하는 베이지 네트워크를 사용해 효율적으로 추론을 하려면, 베이지안 네트워크의 독립성을 활용해야 한다. 베이지안 네트워크의 독립성이 무엇인지 살펴보고, 이를 사용해 추론하는 방법을 알아본다.

11장, '베이지안 네트워크 확률'
베이지안 네트워크에서 각 사건이 일어날 확률을 구하는 방법을 살펴본다. 이렇게 구한 확률을 사용해 어떻게 추론을 하는지도 알아본다.

12장, 'SamIam을 사용한 베이지안 네트워크 활용'
베이지안 네트워크를 그리고 여기에서 어떤 사건이 일어날 확률을 수작업으로 구하기란 불가능하지는 않지만 피곤하고 힘든 일이다. 따라서 도구를 활용해 베이지안 네트워크를 그리고 확률을 구할 수 있다면 무척 편할 것이다. SamIam을 사용해 베이지안 네트워크를 쉽게 활용할 수 있는 방법을 소개한다.

13장, '베이지안 네트워크를 사용한 쿼리'
쿼리라는 개념을 사용해 베이지안 네트워크에서 원하는 정보를 구하는 방법을 알아본다. 12장의에서 살펴본 SamIam 도구를 이용한다.

14장, '확률적 프로그래밍, Church 기초'
확률적 프로그래밍의 간단한 개요를 살펴본다. 그리고 확률적 프로그래밍을 배우는 데 사용할 Church 기초 문법을 알아본다.

15장 'Church를 사용한 확률적 프로그래밍 시작, 베이지안 확률'
1부와 2부에서 배운 간단한 확률과 베이지안 확률을Church를 사용해 구현해봄으로써, Church 문법과 활용 방법을 상세히 살펴본다.

16장, 'Church와 생성 모델, 추론을 위한 핵심'
확률적 프로그래밍을 사용해 추론을 하기 위해서는 생성 모델과 쿼리에 대해 알아야 한다. 16장에서는 베이지안 네트워크를 사용해 추론하는 경우와 확률적 프로그래밍을 사용해 추론하는 경우를 살펴보고, 어떤 측면에서 확률적 프로그램이 장점이 있는지 알아본다. 이 과정에서 확률적 프로그래밍의 생성 모델과 쿼리에 대해 살펴본다.

17장, 'Church 추론 알고리즘'
확률적 프로그래밍의 핵심인 추론 알고리즘의 구현 방법을 살펴본다. Church의 쿼리 중 하나인 mh-query를 구현하는 추론 알고리즘인 메트로폴리스-해스팅(Metropolis Hastings) 알고리즘에 대해 상세히 알아본다. 아울러 메트로폴리스-해스팅 알고리즘을 이해하는 데 필요한 마르코브 체인과 몬테 카를로 시뮬레이션에 대해서도 살펴본다.

18장, '마술사의 속임수, 진실을 밝히다'
뒷면이 비정상적으로 많이 나오는 마술사의 동전을 확률적 프로그래밍 Church 예제를 통해 살펴본다.

19장, '틱택토, 어디에 두는 게 유리할까?'
틱택토 게임에서 어디에 두는 게 유리한지 알아보는 알고리즘을 확률적 프로그래밍 Church를 사용해 구현해본다.

20장, '텔레파시? 내 마음을 읽어봐'
주머니 게임을 통해 플레이어의 생각을 추론하는 확률적 프로그래밍 Church 예제를 만들어본다.

21장, '책 쌓기, 물리를 몰라도 할 수 있어'
물리를 사용하지 않아도 책을 쓰러트리지 않고 최대한으로 쌓는 방법을 확률적 프로그래밍 Church로 살펴본다.

22장, '생일이 같을 확률'
한 방에 여러 명이 모여 있을 때 생일이 같을 확률을 수학적으로 구해보고, 확률적 프로그래밍 Church를 사용해 구한 결과와 비교해본다.

저자/역자 소개

지은이의 말

최근에 개봉하는 굵직한 SF 영화를 보면 두드러지는 소재가 있는데, 바로 인공지능이다. 영화 속에서는 인공지능, 즉 스스로 판단하고 그에 따라서 행동하는 기계를 다양하게 표현하는데, 대체적으로 인공지능은 사람에게 위협이 될 것이라고 묘사된다. 영화에서 인공지능이 묘사되는 모습을 볼 때마다, 영화의 흐름과 관계없이 직업적인 호기심이 발동된다. 과연 영화에서 표현되는 인공지능은 어떤 프로그래밍 언어로 개발되었을까? C로 개발됐을까? 아니면 스크립트 언어가 비약적으로 발전해 자바스크립트 같은 스크립트 언어로 만들어졌을까? 하는 궁금증이다.

사실 이 책은 장난 같은 이 질문에 대한 답을 찾는 과정에서 만들어졌다. 인공지능에 적합한 프로그래밍 언어를 인터넷으로 검색하다가 우연히 ‘확률적 프로그래밍’이라는 단어를 찾게 되었다. 처음에 확률적 프로그램이라는 단어를 들었을 때는 확률과 프로그래밍이 어떤 연관이 있는지 도무지 감이 잡히지 않았다. 사실 확률적 프로그래밍을 이해하려면 프로그래밍 지식 외에 다양한 지식이 필요했다.

특히 일반 교육 과정에서 많이 들었던 확률이나 명제를 다시 공부해야 했고 처음 접하는 베이지안 확률, 베이지안 네트워크, 추정 알고리즘 등을 처음부터 살펴봐야 했다. 이런 것들을 알게 된 지금 확률적 프로그래밍을 처음 접하는 사람에게 확률적 프로그래밍이란 무엇인지 설명해야 한다면, 아마도 본문에서 설명하는 아래 사례가 가장 적합할 것 같다.

확률적 프로그래밍을 간단히 소개하려면 우선 명제에 대해 이야기해야 한다. 명제란 참과 거짓을 구분할 수 있는 문장을 말한다. 명제는 인공지능을 구성하는 논리의 기본 단위다. 말하자면 ‘당신 앞에 있는 건 자동차다’는 명제다. 그것이 자동차라면 명제가 참일 것이고 자동차가 아니라면 거짓일 것이기 때문이다. 아울러 ‘자동차는 달릴 수 있다’도 명제다. 자동차가 달리는 건 분명한 사실이고, 따라서 이 명제는 참과 거짓을 구분할 수 있기 때문이다. ‘당신 앞에 … 수 있다’는 문장은 가정도 참이기 때문에 결론도 참일 것이란 추론을 할 수 있다. 하지만 그 자동차의 엔진이 고장 날 가능성이 반반이라는 사실을 알게 된다면, 당신이 보고 있는 ‘그것’은 과연 달릴 수 있다/없다로, 말하자면 참과 거짓으로 판단을 내릴 수 있을까?

이야기하고 싶은 바는 명제와 명제를 사용한 논리적 추론만으로 사람들의 사고방식을 모델링하는 데 한계가 있다는 것이다. 명제를 프로그래밍 관점에서 해석하자면, 명제를 참이나 거짓을 뜻하는 불리언(boolean) 변수로 생각하거나 참이나 거짓을 돌려주는 논리식으로 생각할 수 있다. 프로그래밍 관점에서 해석해도 앞의 문장에 아직 동의하지 못하거나 그 의미가 명확하지 않은 독자를 위해 다른 예를 한 가지 들겠다. 우선 아래에 있는 명제를 살펴보자.

채식주의자는 평화주의자다. 군인은 평화주의자가 아니다.

위의 명제가 모두 참이라고 가정해보자. 만약 철수가 채식주의자라고 한다면, 위의 명제에서 철수는 평화주의자란 결론을 얻을 수 있다. 앞에서 예를 든 철수가 군인이라고 해보자. 그렇다면 철수는 평화주의자가 아니라는 결론도 얻을 수 있다. 즉 단순히 참과 거짓을 가지고 판단하는 명제를 사용한다면, 채식주의자면서 군인인 철수는 평화주의자인지 평화주의자가 아닌지 판단할 수 없게 된다.

현실에서는 이런 모순적인 상황이 매일같이 일어난다. 즉 채식주의자면서 군인인 철수가 평화주의자일 수도 있고, 평화주의자가 아닐 수도 있는 상황 말이다. 이걸 참과 거짓의 잣대로만 판단하려면 절대 판단할 수 없는 사태가 일어난다는 뜻이다. 이런 이유로 확률이 인공지능 개발에 개입하게 됐다. 특히 주관적 확률의 경우 자연현상을 포함하여 믿음을 표현할 수 있는 수단이다.

즉 참과 거짓이 아닌 0과 1 사이에 있는 값으로 어떤 상황을 표현한다. 채식주의자면서 군인인 철수가 평화주의자일 수 있는 확률이 0.5보다 크다면, 우리는 잠정적으로 철수는 평화주의자라 가정할 수 있다. 말하자면 참과 거짓이라는 양극단의 세계에 빠지지 않고, 그런대로 현실을 판단하고 행동할 수 있는 기준을 얻을 수 있다는 뜻이다. 물론 평화주의자라고 잠정적으로 생각했던 철수가 전쟁 지지 집회를 연다면, 우리는 이 사실을 기반으로 철수가 평화주의자일 확률을 다시 조정할 수도 있다. 이런 이유로 명확한 논리로 무장해야 하는 인공지능 세계에 불확실한 확률이 등장했다.

나는 이 책을 쓰게 된 질문, “인공지능을 개발하는 프로그래밍 언어는 무엇일까?”라는 질문에 대한 답을 찾았을까? 완전한 답은 아니지만 그 실마리를 찾았다고 생각한다. “새 술은 새 부대에”라는 속담이 있다. 아울러 나무와 못을 들고 있다면 최적의 도구는 드라이버가 아닌 망치일 것이다. 프로그래밍 세계에서 모든 분야에 해결책을 주는 프로그래밍 언어는 없다. 즉 해결하려는 문제가 지금까지의 프로그래밍 언어로 풀 수 없다면, 새로운 프로그래밍 언어가 필요한 시점이라고 생각한다. 아마도 그 변화의 시점에 확률적 프로그래밍이 적절한 해답을 줄 수 있을 것이라 믿는다.

지은이 소개

신승환

다양한 분야의 소프트웨어를 개발, 관리, 컨설팅했으며, 현재는 차량용 임베디드 소프트웨어를 개발하고 있다. 『스마트카 Smart Car 소프트웨어 엔지니어링』을 비롯한 다수의 IT 서적을 집필하고 번역했다.

목차

목차
  • 1부, 확률적 프로그래밍의 디딤돌, 확률
  • 1장, 확률은 수학이 아니다! 확률은 삶이다!?
  • 2장, 마술사의 속임수. 확률은 객관적일까, 주관적일까?
  • 3장, 적어도 이건 알자, 확률의 기본 공식
  • 4장, 조건부 확률, 확률에도 조건이 붙을 수 있다
  • 5장, 주관적 확률의 대명사, 베이지안 확률과 베이지안 추론
  • 6장, 베이지안 확률 혹은 추론 자세히 살펴보기

  • 2부, 복잡한 추론의 시작
  • 7장, 명제 논리, 확률적 프로그래밍의 벽돌?
  • 8장, 확률, 명제를 만나다!
  • 9장, 이제 추론이란 걸 해보자, 베이지안 네트워크 소개
  • 10장, 복잡한 네트워크를 단순하게, 베이지안 네트워크의 독립성
  • 11장, 베이지안 네트워크 확률
  • 12장, SamIam을 사용한 베이지안 네트워크 활용
  • 13장, 베이지안 네트워크를 사용한 쿼리

  • 3부, 확률적 프로그래밍을 만나다
  • 14장, 확률적 프로그래밍, Church 기초
  • 15장 Church를 사용한 확률적 프로그래밍 시작, 베이지안 확률
  • 16장, Church와 생성 모델, 추론을 위한 핵심
  • 17장, Church 추론 알고리즘

  • 4부, 확률적 프로그래밍 예제
  • 18장, 마술사의 속임수, 진실을 밝히다
  • 19장, 틱택토, 어디에 두는 게 유리할까?
  • 20장, 텔레파시? 내 마음을 읽어봐
  • 21장, 책 쌓기, 물리를 몰라도 할 수 있어
  • 22장, 생일이 같을 확률

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

2016. 4. 1 수정사항

[p.80: 첫 행]
P(H|D) -> P(D|H)

[p.97]