-
Probabilistic Programming (확률적 프로그래밍)컴퓨터/소프트웨어 2020. 7. 29. 14:44728x90반응형
Hakaru
Pyro(from Uber AI) 처럼 확률적 프로그래밍 언어인 Hakaru를 사용하는 법을 알아보겠다.
1. 설치법
그다음, Haskell Tool Stack을 다운받아서 설치한다. (다운로드)
(stack 설치 경로 : AppData\Local\Programs\stack)
1. git repositoy clone
Hakaru를 clone할 곳에서 Git Bash를 열고, 다음을 입력한다.
bashgit clone https://github.com/hakaru-dev/hakaru.git
2. stack.yaml 수정
hakaru\stack.yaml 파일을 열어서 extra-deps 부분에 아래를 추가한다.
bash- repline-0.4.0.0 - haskeline-0.8.0.0
3. stack install
stack install을 입력해서 설치한다.
2. Hakaru - 확률적 프로그래밍
확률적 프로그래밍이란, 확률적 추론을 하기위한 소프트웨어적 확률 모델을 만드는 방법이다.
Pyro, PyTorch 베이스로 만들어진 언어랑 비슷한 Hakaru는
C나 Haskell 언어로 변환되어 사용할 수 있다.
3. 확률적 모델
데이터를 분포, 혹은 프로그램으로 표현하는 것이 모델이다.
확률적 모델은 예측할 만큼의 양을 파라미터라고 부르고,
이미 알려진 데이터는 이 파라미터의 함수라고 불린다. 이 함수는, 그 파라미터의 가능성이라고 표현된다.
4. 예제
Bayesian 줄다리기 게임을 예제로 들어보겠다.
우선, 3명, Kim, Lee, Choi은 그들 중 누가 가장 강한지 알아보고 싶어한다.
그리고, 각각 모두 경기를 치루고, 가장 많이 이기는 사람이 가장 센 사람이라고 정했다.
코드로 표현할 상황은,
이미 2경기를 누가 이겼는지 알고 있을 때, 마지막 3번째 경기에서는 누가 이길 지 궁금해 하는 상황이다.
pythondef pulls(strength real): normal(strength, 1) def winner(a real, b real): a_pull <~ pulls(a) b_pull <~ pulls(b) return (a_pull - b_pull) alice <~ normal(0,1) bob <~ normal(0,1) carol <~ normal(0,1) match1 <~ winner(kim, lee) match2 <~ winner(lee, choi) match3 <~ winner(kim, choi) return ((match1, match2), match3)
Kim이 Lee보다 쌔면 match1 = True, Lee가 Choi보다 쌔면 match2 = True
match3는 Kim이 match1을 이기고, Choi가 match2를 졌을 때를 바탕으로 예측할 것이다.
pythonhakaru -w tugofwar.hk | head -n 10000 | sort | uniq -c 3060 false 6940 true
10,000번 시뮬레이션을 돌렸을 때, true가 6940번 false가 3060번이 나온 뜻은
Kim이 Choi를 69.4% 확률로 이긴다는 의미이다.
참고 링크: https://hakaru-dev.github.io/
참고 링크: http://pyro.ai/examples/index.html
참고 링크: https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%A6%88_%EC%A0%95%EB%A6%AC
728x90'컴퓨터 > 소프트웨어' 카테고리의 다른 글
Windows Terminal 테마, 설정 (0) 2020.08.02 Github 코드 바로 실행해보기 (Gitpod) (0) 2019.10.10 배치(Batch) 파일 레지스트리 이용하기 (0) 2017.08.07