로그인 바로가기 하위 메뉴 바로가기 본문 바로가기

인공지능 및 기계학습 심화

임시 이미지 KAIST 산업및시스템공학과 문일철 교수
http://kooc.kaist.ac.kr/aiml-adv/forum/12129
좋아요 696 수강생 3342

안녕하세요. 올려주신 강의를 바탕으로 LDA모델을 구현해보고 있습니다.

올려주신 코드를 바탕으로 구현을 해보던 중, alpha의 업데이트 부분이 잘 되지 않아 질문드립니다.

글에 tab이 들어가지 않아 파일도 따로 첨부해 드립니다.

update_alpha.txt

from scipy.special import digamma
from scipy.special import polygamma

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

L_k = 5
L_d = 500
n_iter = 99
a_ = np.zeros(shape=(n_iter+1,L_k))
a_[0,:] = np.random.gamma(1,1,5)

gamma = np.random.gamma(1,1,size=(L_d,L_k))

for i in range(n_iter) :
H = np.zeros(shape=(L_k, L_k), dtype=float)
g = np.zeros(shape=(L_k), dtype=float)
for k1 in range(L_k) :
g[k1] = float(L_d)*(digamma(sum(a_[i,:]))-digamma(a_[i,k1]))
for d in range(L_d) :
g[k1] = g[k1] + (digamma(gamma[d,k1])-digamma(sum(gamma[d,:])))
for k2 in range(L_k) :
H[k1][k2] = 0
if k1 == k2 :
H[k1][k2] = H[k1][k2] - float(L_d)*polygamma(1,a_[i,k1])
H[k1][k2] = H[k1][k2] + float(L_d)*polygamma(1,sum(a_[i,:]))

a_[(i+1),:] = a_[i,:] - np.dot(np.linalg.inv(H),g)
plt.plot(a_)


제가 사용한 코드는 다음과 같습니다. 원래 제가 사용하던 코드에서 계속 alpha의 값이 음수가 나와 올려주신 강의자료를 바탕으로 코드를 짜보았습니다.

하지만 여전히 음수값으로 업데이트가 되는데 한 번 확인해주시면 감사하겠습니다.

참고로 gamma의 값은 모두 양수이므로 감마분포에서 뽑았으며, 마찬가지로 alpha또한 모두 양수이어야 하므로 감마분포에서 샘플링 했습니다.


감사합니다.