소개: 확률이 AI의 기본인 이유
머신러닝은 본질적으로 다음과 같은 문제가 있습니다. 불확실한 추론. 데이터는 시끄럽고 모델은 근사치이며 예측은 항상 확률적입니다. 확률은 이러한 불확실성을 정량화하고 결정을 내릴 수 있는 수학적 틀을 제공합니다. 알렸다.
이 글에서는 기본(조건부 확률, 분포)부터 개념까지 살펴보겠습니다. 처럼 발전했다 베이즈의 정리, la 최대 가능성 추정, 그리고 접근법 간의 비교 빈도주의자와 베이지안.
무엇을 배울 것인가
- 조건부 확률과 독립성
- 분포: 가우스, 베르누이, 범주형, 포아송
- 베이즈 정리: 데이터로 신념 업데이트
- 최대 우도 추정(MLE)
- 최대 A 사후(MAP) 및 베이지안 접근 방식
- 중심 극한 정리와 그 의미
기초: 확률과 확률변수
La 가능성 이벤트의 A 그리고 0에서 1 사이의 숫자는 해당 사건이 발생할 가능성이 얼마나 되는지 측정합니다. P(A) \\in [0, 1].
La 조건부 확률 di A 주어진 B 확률을 측정합니다. A 그것을 알고 B 그리고 그 일이 일어났습니다:
두가지 이벤트가 있어요 독립적인 se P(A \\cap B) = P(A) \\cdot P(B), 즉, 하나가 발생했다는 사실을 아는 것이 다른 하나의 확률을 바꾸지는 않습니다.
기대값과 분산
Il 기대값 (평균) 확률변수의 X:
La 변화 평균 주위의 분산을 측정합니다.
La 표준편차 \\sigma = \\sqrt{\\text{Var}(X)} 와 같은 측정 단위를 가지고 있습니다. X, 따라서 더 해석하기 쉽습니다.
ML의 기본 배포
베르누이 분포
두 가지 결과(성공/실패)로 단일 실험을 모델링합니다. 매개변수: p (성공 확률).
ML에서는: 모델 이진 분류. 시그모이드 e를 갖는 뉴런의 출력 매개변수 p 베르누이의.
가우스 분포(정규)
통계와 ML에서 가장 중요한 분포, 평균으로 매개변수화 \\mu 및 분산 \\시그마^2:
왜 그리고 어디서나: 중심극한정리(Central Limit Theorem)에 의해 많은 변수들의 합 독립적인 무작위 분포는 원래 분포에 관계없이 가우스 경향이 있습니다.
ML에서는: 가중치 초기화(가우스 \\mu = 0), 데이터의 노이즈, 가우스 혼합 모델, VAE(변형 자동 인코더).
범주형 분포(다항)
베르누이 a의 일반화 K 확률이 있는 수업 p_1, p_2, \\ldots, p_K 어디 \\sum_i p_i = 1:
ML에서는: 소프트맥스의 출력은 다음에 대한 범주형 분포를 모델링합니다. K 수업.
import numpy as np
from scipy import stats
# Bernoulli: lancio di una moneta truccata (p=0.7)
bernoulli = stats.bernoulli(p=0.7)
samples = bernoulli.rvs(size=1000)
print(f"Bernoulli - Media empirica: {samples.mean():.3f} (attesa: 0.7)")
# Gaussiana: altezze (media=170cm, std=10cm)
gaussian = stats.norm(loc=170, scale=10)
heights = gaussian.rvs(size=1000)
print(f"Gaussiana - Media: {heights.mean():.1f}, Std: {heights.std():.1f}")
# Probabilità di essere tra 160 e 180
prob = gaussian.cdf(180) - gaussian.cdf(160)
print(f"P(160 < X < 180) = {prob:.4f}")
# Categorica: dadi a 6 facce
probs = np.array([1/6] * 6)
categorical_samples = np.random.choice(6, size=1000, p=probs) + 1
print(f"Dado - Media: {categorical_samples.mean():.2f} (attesa: 3.5)")
베이즈 정리: 신념 업데이트
Il 베이즈의 정리 추론을 위한 가장 강력한 도구 중 하나 확률적. 이를 통해 가설의 확률에 대한 믿음을 업데이트할 수 있습니다. 일부 데이터를 관찰한 후:
어디:
- P(\\세타 | D) - 뒤쪽: 데이터 이후 업데이트된 신념
- P(D | \\세타) - 있을 수 있는 일: 데이터가 모델에 주어질 가능성
- P(\\세타) - 이전의: 데이터 이전의 초기 믿음
- 피(디) - 증거: 데이터의 주변 확률(정규화 상수)
직관: Bayes는 초기 믿음(이전)부터 시작하라고 말합니다. 데이터(가능성)를 관찰하고 두 가지 정보를 결합하여 믿음을 얻습니다. 업데이트되었습니다(후면). 우리가 관찰하는 데이터가 많을수록 사후 확률이 더 많이 지배됩니다. 이전보다 적습니다.
실제 예: 나이브 베이즈 분류기
import numpy as np
from collections import Counter
# Dataset: email spam detection
# Feature: numero di parole "gratis", "offerta", "ciao"
X_train = np.array([
[3, 2, 0], # spam
[4, 3, 1], # spam
[0, 0, 3], # non-spam
[1, 0, 4], # non-spam
[5, 4, 0], # spam
[0, 1, 2], # non-spam
])
y_train = np.array([1, 1, 0, 0, 1, 0]) # 1=spam, 0=non-spam
# Naive Bayes: P(spam|features) proporzionale a P(features|spam) * P(spam)
# Calcolo prior
n_spam = np.sum(y_train == 1)
n_ham = np.sum(y_train == 0)
p_spam = n_spam / len(y_train)
p_ham = n_ham / len(y_train)
print(f"P(spam) = {p_spam:.3f}, P(ham) = {p_ham:.3f}")
# Calcolo media e varianza per feature (likelihood Gaussiana)
spam_mean = X_train[y_train == 1].mean(axis=0)
spam_var = X_train[y_train == 1].var(axis=0) + 1e-6
ham_mean = X_train[y_train == 0].mean(axis=0)
ham_var = X_train[y_train == 0].var(axis=0) + 1e-6
def gaussian_log_likelihood(x, mean, var):
return -0.5 * np.sum(np.log(2 * np.pi * var) + (x - mean)**2 / var)
# Classifica nuova email
x_new = np.array([4, 3, 0])
log_p_spam = np.log(p_spam) + gaussian_log_likelihood(x_new, spam_mean, spam_var)
log_p_ham = np.log(p_ham) + gaussian_log_likelihood(x_new, ham_mean, ham_var)
print(f"Log P(spam|x) proporzionale a: {log_p_spam:.4f}")
print(f"Log P(ham|x) proporzionale a: {log_p_ham:.4f}")
print(f"Classificazione: {'SPAM' if log_p_spam > log_p_ham else 'HAM'}")
최대 우도 추정(MLE)
La MLE 관측된 데이터의 가능성을 높이는 모델 매개변수를 찾습니다. 일련의 독립적인 관찰이 주어지면 D = \\{x_1, \\ldots, x_n\\}, 가능성은 다음과 같습니다
실제로 우리는 로그 가능성 (곱을 합계로 변환):
최대값을 찾기 위해 미분값을 계산하고 이를 0으로 설정합니다. \\frac{d\\ell}{d\\theta} = 0.
예: 가우스에 대한 MLE
가우스 데이터의 경우 매개변수의 MLE는 다음과 같습니다.
즉, 표본 평균과 분산이 MLE 추정치입니다. ML과의 연관성은 매우 깊습니다. 교차 엔트로피 손실을 최소화하는 것은 로그 우도를 최대화하는 것과 동일합니다..
최대 A 후방(MAP)
La 지도 우도와 사전을 결합하여 매개변수 앞에 사전을 추가합니다.
가우시안 사전을 사용하여 P(\\theta) \\sim \\mathcal{N}(0, \\sigma_p^2), 용어 \\로그 P(\\세타) 가중치에 대한 L2 페널티가 됩니다. 이것이 바로 L2(릿지) 정규화는 가중치에 대한 가우스 사전과 동일합니다..
import numpy as np
from scipy.optimize import minimize_scalar
# Dati osservati (altezze in cm)
data = np.array([168, 172, 175, 170, 173, 169, 171, 174, 176, 170])
# MLE: media e varianza campionaria
mu_mle = np.mean(data)
sigma2_mle = np.var(data)
print(f"MLE: mu={mu_mle:.2f}, sigma^2={sigma2_mle:.2f}")
# Log-likelihood function
def neg_log_likelihood(mu, data=data, sigma2=sigma2_mle):
n = len(data)
return 0.5 * n * np.log(2 * np.pi * sigma2) + np.sum((data - mu)**2) / (2 * sigma2)
# MAP con prior Gaussiano: mu ~ N(170, 5^2)
prior_mu = 170
prior_sigma2 = 25
def neg_log_posterior(mu):
nll = neg_log_likelihood(mu)
neg_log_prior = (mu - prior_mu)**2 / (2 * prior_sigma2)
return nll + neg_log_prior
result_mle = minimize_scalar(neg_log_likelihood, bounds=(150, 190), method='bounded')
result_map = minimize_scalar(neg_log_posterior, bounds=(150, 190), method='bounded')
print(f"MLE mu: {result_mle.x:.4f}")
print(f"MAP mu: {result_map.x:.4f} (shrunk verso prior {prior_mu})")
중심 극한 정리
Il 중심 극한 정리 (CLT)는 많은 것의 합(또는 평균)이 독립 확률 변수는 원래 분포에 관계없이 다음과 같은 경향이 있습니다. 가우스 분포:
이는 가우스가 모든 곳에 나타나는 이유를 설명합니다. 뉴런의 무게 = 많은 작은 뉴런의 합 업데이트, 센서의 노이즈 = 많은 작은 섭동의 합 등
ML과의 요약 및 연결
기억해야 할 핵심 사항
- 베이즈: P(\\theta|D) \\프로토 P(D|\\theta) P(\\theta) - 데이터로 신념 업데이트
- 가우스: 가장 일반적인 분포이며 CLT 덕분에 모든 곳에 나타납니다.
- MLE: 관측된 데이터의 확률을 최대화하는 매개변수 찾기
- 지도: MLE + 사전, 정규화와 동일
- 교차 엔트로피 손실 = 음의 로그 우도: 근본적인 연결
- L2 정규화 = 가우스 사전: 확률적 연결
다음 기사에서: 우리는 다음을 탐구할 것이다.최적화 ML을 위해. Gradient Descent, SGD, Adam, 모멘텀, 학습률 스케줄링 전략을 살펴보겠습니다. 모델이 수렴하는지 발산하는지를 결정합니다.







