목록Data Science (8)
내가 보려고 만든 블로그
MAB ( Multi Armed Bandit) : 활용되는 곳이 많지만 주로 상품 , 광고추천등에서 어떤 것 을 사용자에게 보여주어야 이득이 최대가 될까? 동시에 특정 상품에 편향되지 않게 다양한 상품이 노출되게 할 수 있을까? 를 해결하는데 사용된다. Epsilon- greedy, UCB등의 방법이 있는데 그 중에서도 많이 사용되는 Tomson Sampling 방법에 대해서 소개하고 Pyro를 이용해서 구현해봄. 베타분포 먼저 베타분포에 대해서 알아야 하는데 베타분포는 성공횟수 a-1 , 실패횟수 B-1 만큼 관측 되었을 때 성공확률에 대한 확률분포이다. 예를 들어 , a=1 , B=1 일 경우 사건이 발생하지 않은 경우이므로 성공확률은 어떤 정보도 없으므로 uniform distribution 형태가..
Bayesian Optimization 을 이용하면 적은 시행만으로도 쉽게 Hyper Parameter 튜닝을 할 수 있다. 는 말을 ML 공부하는 사람이라면 한번 쯤은 들어봤을 듯. 어떻게 Bayesian Optimization이 몇번의 시행만으로 Hyper Parameter를 쉽게 튜닝할 수 있을까?? 에 대해서 간단하게 적어보았다. Gaussian Process (GP) 우선 Gaussian Process (GP)에 대해서 공부해야 한다. Bayesian Optimizaition을 수행함에 있어 GP 방법만이 있는 것은 아니다. 하지만 GP가 가장 많이 사용되는 방법임. Gausisian Process는 다변량 정규분포를 무한 차원으로 확장시킨 개념이다. 사실 "무한" 이라는 특징보다 Bayesia..
앞 선 포스팅에서 pyro를 이용해 mcmc를 사용하는 법을 써보았다. mcmc의 경우 샘플링수를 충분히 늘린다면 사후분포를 잘 추정할 수 있겠지만 샘플링수가 늘어나는 만큼 사후분포를 추정하는 시간이 오래 걸릴 것이다. 사후분포를 좀더 빠르게 추정하기 위해서 기존의 모델들이 그랬듯이 최소화할 Loss를 지정하고 이를 줄여서 근사한 해를 구하는 방식을 사용하여 사후분포를 추정할 수 있다. 이 방법이 바로 Vairational Inference = VI = 변분추론 . VI에서는 후선 사후분포를 추정하기 위해 q라는 분포를 가정한다. 사후분포는 일반적으로 구하기에는 너무 복잡하기 때문. (notation은 당연히 다를 수 있는데 보통 q로 표현) 이 q라는 분포를 우리가 구해야하는 사후분포에 최대한 근사하게..
앞써서 베이지안 리그레션을 pyro로 모델링하는 방법에 대하여 포스팅 했다. svi를 이용해서 사후분포를 추론하는 방법을 다루었는데 이번에는 MCMC를 이용해 사후분포를 추정하는 것을 pyro를 이용해 모델링 하는 방법에 대하여 포스팅함. 사실, 매우 간단함. 라이브러리를 사용하는 것은. 예제는 앞써서 사용했던 log_gdp를 두개의 설명변수 ( rugged , cont_africa , rugged* cont_africa)를 통해 모델링 하는 것을 그대로 사용하였다. 1. 데이터를 받아와서 전처리하는 과정 . 특별한 것은 없고 df_rugged , df_cont_africa , df_log_gdp 를 torch의 텐서로 바꿔줌. (pyro가 토치를 기반으로 만들어진 프레임워크라) 2. 모델 정의, 앞서 ..
베이지안 프로그래밍을 지원해주는 파이썬 라이브러리로 대표적인게 PYMC3 가 있다. 하지만 비교적 최근에 uber에서 (uber아닐수도있음) 확률적 프로그래밍을 해주는 라이브러리 Pyro를 공개했다. 장점은 pytorch 기반으로 만들어져 있어 pymc에 비해 빠르다. 단점은 참고할만한 공부자료가 거의 없다... 그나마 공식문서가 잘되있긴한데 모르는게 여전히 많다. pyro 공식문서에서 예제로 베이지안리그레션을 바탕으로 pyro를 쓰는 방법을 설명하여 이참에 베이지안 리그레션과 pyro를 간단히 정리한다. Bayesian Regression 베이지안 리그레션과 기존의 리그레션의 차이라고 한다면 기존 W_0 , W_1 등의 파라미터를 고정된 값이 아니라 확률변수로 본다는 점이 있을 것이다 . 사후분포를 P..
기계번역, 언어 생성 등에 별로 관심이 있지는 않은데 감성분석 혹은 LDA 등은 알아두면 후에 쓸 일이 많이 있을 것 같아서 간단하게 자연어처리를 공부함. 그 중에서도 워낙 유명한 모델인 트랜스포머에 대해서 사내 강의로 듣게되어 공부한내용 간단하게 정리. 나중에 다시 찾아왓을때 기억날 정도로만 적어둠. torch.nn.transformer 토치에는 트랜스포머가 이미 구현이 되있음. 주의해야 할 것은 인코더와 디코더부분까지여서 마지막 부분에 선형 + softmax부분 넣어주면 된다 . self.transformer = nn.Transformer(d_model=emb_size, # 임베딩 size . nhead=nhead, # 어텐션의 헤드 수 # freeze= True 써도 됨 걍 . num_encoder..