책 소개
요약
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를 사용해 구한 결과와 비교해본다.
목차
목차
- 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장, 생일이 같을 확률
도서 오류 신고
정오표
정오표
2016. 4. 1 수정사항
[p.80: 첫 행]
P(H|D) -> P(D|H)
[p.97]