import torchQuiz-9 (2026.04.06) // 범위: ~04wk
1. 베르누이 MLE
아래는 \(X_i \overset{iid}{\sim} Ber(0.8)\)을 생성하는 코드이다.
torch.manual_seed(43052)
x = torch.bernoulli(torch.tensor([0.8]*10000))함수 \(l(p)\)를 최소화하는 \(p\)를 경사하강법으로 추정하라.
\[l(p) = -\frac{1}{n}\sum_{i=1}^{n} \log f(x_i), \quad f(x_i) = p^{x_i} (1-p)^{1-x_i}\]
단, 초기값은 \(p=0.5\) 에서 시작할 것
hint: 이론적인 수렴값은 x.mean()임.
Note정답 보기
def l(p):
return -torch.mean(torch.log(p**x * (1-p)**(1-x)))p = torch.tensor(0.5,requires_grad = True)for dummy in range(15):
l(p).backward()
p.data = p.data - 0.1 * p.grad
p.grad = None
print(p.data)tensor(0.6188)
tensor(0.6944)
tensor(0.7428)
tensor(0.7712)
tensor(0.7859)
tensor(0.7926)
tensor(0.7953)
tensor(0.7964)
tensor(0.7968)
tensor(0.7970)
tensor(0.7971)
tensor(0.7971)
tensor(0.7971)
tensor(0.7971)
tensor(0.7971)
x.mean() # 확인tensor(0.7971)