وقتی یک مدل زبانی کلمهی بعدی را برمیگزیند یا یک شبکهی عصبی تصویری را دستهبندی میکند، در اصل مشغول کار با توزیعهای احتمال است. تابع زیان مشخص میکند خروجی مدل چقدر از واقعیت فاصله دارد و در هر گام بهینهسازی، پارامترها بهگونهای تنظیم میشوند که این توزیعها به هم نزدیک شوند. بدون درک درست احتمال، مفاهیمی مثل ناپایداری در آموزش یا خروجیهای نامعتبر (NaN) مبهم باقی میمانند.
در این درس، پایههای تئوری و پیادهسازی کاربردی مفاهیم احتمال را مرور میکنید: از تفاوت توابع جرم و چگالی احتمال (PMF و PDF) تا علت فراگیری توزیع نرمال با تکیه بر قضیهی حد مرکزی. همچنین میآموزید که چطور با ترفندهای پایداری عددی در محاسبات Softmax و Log-Softmax، مانع از خطاهای سرریز و کمریز در محاسبات عددی یادگیری ماشین شوید.
احتمال، زبانی است که هوش مصنوعی برای بیان عدمقطعیت به کار میبرد.
اهداف یادگیری
- پیادهسازی PMF و PDF از صفر برای توزیعهای برنولی، رستهای، پواسون، یکنواخت و نرمال
- محاسبهی امید ریاضی و واریانس، و استفاده از قضیهی حد مرکزی برای تبیین اینکه چرا توزیعهای گاوسی همهجا حضور دارند
- پیادهسازی توابع softmax و log-softmax با ترفند پایداری عددی (کم کردن بیشینهی لاجیت)
- محاسبهی تابع زیان کراسانتروپی (Cross-entropy loss) بر اساس لاجیتها و برقراری ارتباط بین آن و منفیِ لگاریتم درستنمایی
صورت مسئله
یک دستهبند خروجی [0.03, 0.91, 0.06] را تولید میکند. یک مدل زبانی کلمهی بعدی را از میان 50,000 گزینهی ممکن برمیگزیند. یک مدل دیفیوژن با نمونهبرداری از توزیعهای یادگرفتهشده تصویر میسازد. در تمام این موارد، احتمال در حال عمل است.
هر پیشبینی که یک مدل ارائه میدهد، یک توزیع احتمال است. هر تابع زیان مشخص میکند که توزیع پیشبینیشده چقدر از توزیع واقعی فاصله دارد. در هر گام آموزش، پارامترها بهگونهای تنظیم میشوند تا یک توزیع بیشتر شبیه به توزیع دیگر شود. بدون درک احتمال، نه میتوانید مقالات یادگیری ماشین را بخوانید، نه اشکالی از یک مدل رفع کنید، و نه بفهمید چرا زیان آموزش مدلتان NaN شده است.
مفاهیم پایه
پیشامدها، فضاهای نمونه و احتمال
فضای نمونه مجموعهی تمام برآمدهای ممکن است. یک پیشامد، زیرمجموعهای از فضای نمونه به شمار میرود. احتمال، پیشامدها را به اعدادی بین 0 و 1 نگاشت میکند.
Coin flip:
S = {H, T}
P(H) = 0.5, P(T) = 0.5
Single die roll:
S = {1, 2, 3, 4, 5, 6}
P(even) = P({2, 4, 6}) = 3/6 = 0.5
کل علم احتمال بر پایهی سه اصل موضوع تعریف میشود:
- برای هر پیشامد
- (همواره اتفاقی رخ میدهد)
- وقتی که و نتوانند همزمان رخ دهند
بقیهی مباحث (قضیهی بیز، امید ریاضی، توزیعها) همگی از همین سه قاعده نتیجه میشوند.
احتمال شرطی و استقلال
احتمال وقوع است، به شرطی که رخ داده باشد.
P(A|B) = P(A and B) / P(B)
Example: deck of cards
P(King | Face card) = P(King and Face card) / P(Face card)
= (4/52) / (12/52)
= 4/12 = 1/3
دو پیشامد زمانی مستقلاند که آگاهی از یکی، هیچ اطلاعاتی دربارهی دیگری به ما ندهد:
پرتابهای متوالی سکه مستقل هستند. بیرون کشیدن کارت از دسته بدون جایگذاری، مستقل نیست.
تابع جرم احتمال در برابر تابع چگالی احتمال
متغیرهای تصادفی گسسته دارای تابع جرم احتمال (Probability Mass Function یا PMF) هستند. هر برآمد احتمال مشخصی دارد که میتوانید مقدار آن را مستقیماً بخوانید.
PMF: P(X = k)
Fair die:
P(X = 1) = 1/6
P(X = 2) = 1/6
...
P(X = 6) = 1/6
Sum of all probabilities = 1
متغیرهای تصادفی پیوسته دارای تابع چگالی احتمال (Probability Density Function یا PDF) هستند. چگالی در یک نقطهی منفرد، احتمال به حساب نمیآید. احتمال صرفاً از انتگرالگیریِ چگالی روی یک بازه به دست میآید.
PDF: f(x)
P(a <= X <= b) = integral of f(x) from a to b
f(x) can be greater than 1 (density, not probability)
integral from -inf to +inf of f(x) dx = 1
این تفاوت در یادگیری ماشین اهمیت زیادی دارد. خروجی مسائل دستهبندی از نوع PMF هستند (انتخابهای گسسته)، در حالی که فضاهای نهان در VAEها از PDF استفاده میکنند (پیوسته).
توزیعهای رایج
برنولی (Bernoulli): یک آزمایش، دو برآمد ممکن. دستهبندی دودویی را مدلسازی میکند.
رستهای (Categorical): یک آزمایش، برآمد ممکن. دستهبندی چندکلاسه (خروجی softmax) را مدلسازی میکند.
یکنواخت (Uniform): همهی برآمدها شانس یکسانی دارند. برای مقداردهی اولیهی تصادفی به کار میرود.
نرمال یا گاوسی (Normal / Gaussian): همان منحنی زنگولهای معروف. با میانگین () و واریانس () مشخص میشود.
f(x) = (1 / sqrt(2*pi*sigma^2)) * exp(-(x - mu)^2 / (2*sigma^2))
Standard normal: mu = 0, sigma = 1
68% of data within 1 sigma
95% within 2 sigma
99.7% within 3 sigma
پواسون (Poisson): شمارش پیشامدهای نادر در یک بازهی ثابت. نرخ رخداد پیشامدها را مدلسازی میکند.
امید ریاضی و واریانس
امید ریاضی (Expected value) همان میانگین وزنیِ برآمدها است.
واریانس (Variance) میزان پراکندگی حول میانگین را اندازه میگیرد.
در یادگیری ماشین، امید ریاضی به شکل تابع زیان ظاهر میشود (میانگین زیان روی توزیع دادهها). واریانس نیز پایداری مدل را نشان میدهد؛ واریانس بالا در گرادیانها یعنی فرایند آموزش پر از نوفه است.
توزیعهای توأم و حاشیهای
یک توزیع توأم (Joint distribution) مانند ، رفتار دو متغیر تصادفی را با هم توصیف میکند.
مثالی از PMF توأم ( = وضعیت آبوهوا، = داشتن چتر):
| (بدون چتر) | (همراه با چتر) | حاشیهای | |
|---|---|---|---|
| (آفتابی) | 0.40 | 0.10 | |
| (بارانی) | 0.05 | 0.45 | |
| حاشیهای | 1.00 |
توزیع حاشیهای (Marginal distribution) با جمع زدن روی متغیر دیگر به دست میآید:
مجموع مقادیر هر سطر و ستون در جدول بالا، همان توزیعهای حاشیهای هستند.
چرا توزیع نرمال همهجا دیده میشود؟
قضیهی حد مرکزی (Central Limit Theorem): میانگین تعداد زیادی متغیر تصادفی مستقل با توزیع یکسان، پس از مرکززدایی و مقیاسبندی با ، صرفنظر از شکل توزیع اولیه و تا زمانی که واریانس آن متناهی باشد، به توزیع نرمال میل میکند. همین موضوع برای مجموع مرکززدایی و مقیاسشده نیز برقرار است.
Roll 1 die: uniform distribution (flat)
Average of 2 dice: triangular (peaked)
Average of 30 dice: nearly perfect bell curve
This works for ANY starting distribution with finite variance.
به همین دلیل است که:
- خطاهای اندازهگیری تقریباً نرمال هستند (حاصل اثر منابع متعدد، کوچک و مستقل)
- مقداردهی اولیهی وزنها در شبکههای عصبی از توزیع نرمال استفاده میکند
- نوفهی گرادیان در SGD تقریباً نرمال است (مجموع گرادیانهای نمونههای متعدد)
- توزیع نرمال، توزیعی با بیشینهی آنتروپی برای یک میانگین و واریانس مشخص است
لگاریتم احتمال
احتمالات خام دردسرهای محاسباتی به همراه دارند؛ ضرب کردن چندین احتمال کوچک در هم، خیلی زود باعث کمریز (Underflow) عددی و صفر شدن نتیجه میشود.
لگاریتم احتمال (Log probability) این مشکل را برطرف میکند؛ ضربها تبدیل به جمع میشوند.
قواعد:
- لگاریتم احتمال همیشه است (چون )
- مقدار منفیتر = احتمال کمتر
- زیان کراسانتروپی همان منفیِ لگاریتم احتمال کلاس صحیح است
تابع Softmax به عنوان توزیع احتمال
شبکههای عصبی امتیازهای خامی به نام لاجیت (Logit) تولید میکنند. تابع softmax این مقادیر را به یک توزیع احتمال معتبر تبدیل میکند.
softmax(z_i) = exp(z_i) / sum(exp(z_j) for all j)
Properties:
- All outputs are in (0, 1)
- All outputs sum to 1
- Preserves relative ordering of inputs
- exp() amplifies differences between logits
ترفند نرممکس: پیش از به توان رساندن، بیشینهی لاجیتها را کم کنید تا از سرریز شدن (Overflow) اعداد جلوگیری شود.
z = [100, 101, 102]
exp(102) = overflow
z_shifted = z - max(z) = [-2, -1, 0]
exp(0) = 1 (safe)
Same result, no overflow.
تابع Log-softmax برای حفظ پایداری عددی، نرممکس و لگاریتم را ترکیب میکند. PyTorch در محاسبات داخلی زیان کراسانتروپی از همین تابع بهره میبرد.
نمونهبرداری
نمونهبرداری (Sampling) یعنی بیرون کشیدن مقادیر تصادفی از یک توزیع. در یادگیری ماشین:
- لایهی Dropout بهطور تصادفی نمونهبرداری میکند که کدام نورونها صفر شوند
- افزایش دادهها (Data augmentation) تبدیلهای تصادفی را نمونهبرداری میکند
- مدلهای زبانی توکن بعدی را از روی توزیع پیشبینیشده نمونهبرداری میکنند
- مدلهای دیفیوژن نوفه را نمونهبرداری کرده و گامبهگام از آن نوفهزدایی میکنند
نمونهبرداری از توزیعهای دلخواه به تکنیکهایی مثل نمونهبرداری تبدیل معکوس، نمونهبرداری طردی یا ترفند بازپارامترسازی (مورد استفاده در VAEها) نیاز دارد.
پیادهسازی
گام 1: مبانی احتمال
import math
import random
def factorial(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
def combinations(n, k):
return factorial(n) // (factorial(k) * factorial(n - k))
def conditional_probability(p_a_and_b, p_b):
return p_a_and_b / p_b
p_king_given_face = conditional_probability(4/52, 12/52)
print(f"P(King | Face card) = {p_king_given_face:.4f}")
گام 2: پیادهسازی PMF و PDF از صفر
def bernoulli_pmf(k, p):
return p if k == 1 else (1 - p)
def categorical_pmf(k, probs):
return probs[k]
def poisson_pmf(k, lam):
return (lam ** k) * math.exp(-lam) / factorial(k)
def uniform_pdf(x, a, b):
if a <= x <= b:
return 1.0 / (b - a)
return 0.0
def normal_pdf(x, mu, sigma):
coeff = 1.0 / (sigma * math.sqrt(2 * math.pi))
exponent = -0.5 * ((x - mu) / sigma) ** 2
return coeff * math.exp(exponent)
گام 3: امید ریاضی و واریانس
def expected_value(values, probabilities):
return sum(v * p for v, p in zip(values, probabilities))
def variance(values, probabilities):
mu = expected_value(values, probabilities)
return sum(p * (v - mu) ** 2 for v, p in zip(values, probabilities))
die_values = [1, 2, 3, 4, 5, 6]
die_probs = [1/6] * 6
mu = expected_value(die_values, die_probs)
var = variance(die_values, die_probs)
print(f"Die: E[X] = {mu:.4f}, Var(X) = {var:.4f}, SD = {var**0.5:.4f}")
گام 4: نمونهبرداری از توزیعها
def sample_bernoulli(p, n=1):
return [1 if random.random() < p else 0 for _ in range(n)]
def sample_categorical(probs, n=1):
cumulative = []
total = 0
for p in probs:
total += p
cumulative.append(total)
samples = []
for _ in range(n):
r = random.random()
for i, c in enumerate(cumulative):
if r <= c:
samples.append(i)
break
return samples
def sample_normal_box_muller(mu, sigma, n=1):
samples = []
for _ in range(n):
u1 = random.random()
u2 = random.random()
z = math.sqrt(-2 * math.log(u1)) * math.cos(2 * math.pi * u2)
samples.append(mu + sigma * z)
return samples
گام 5: تابع Softmax و لگاریتم احتمال
def softmax(logits):
max_logit = max(logits)
shifted = [z - max_logit for z in logits]
exps = [math.exp(z) for z in shifted]
total = sum(exps)
return [e / total for e in exps]
def log_softmax(logits):
max_logit = max(logits)
shifted = [z - max_logit for z in logits]
log_sum_exp = max_logit + math.log(sum(math.exp(z) for z in shifted))
return [z - log_sum_exp for z in logits]
def cross_entropy_loss(logits, target_index):
log_probs = log_softmax(logits)
return -log_probs[target_index]
گام 6: نمایش عملی قضیهی حد مرکزی
def demonstrate_clt(dist_fn, n_samples, n_averages):
averages = []
for _ in range(n_averages):
samples = [dist_fn() for _ in range(n_samples)]
averages.append(sum(samples) / len(samples))
return averages
گام 7: مصورسازی
import matplotlib.pyplot as plt
xs = [mu + sigma * (i - 500) / 100 for i in range(1001)]
ys = [normal_pdf(x, mu, sigma) for x, mu, sigma in ...]
plt.plot(xs, ys)
پیادهسازی کامل همراه با همهی مصورسازیها در فایل code/probability.py موجود است.
استفاده از ابزارهای آماده
با NumPy و SciPy، تمام کارهای بالا در قالب تکخطیها انجام میشوند:
import numpy as np
from scipy import stats
normal = stats.norm(loc=0, scale=1)
samples = normal.rvs(size=10000)
print(f"Mean: {np.mean(samples):.4f}, Std: {np.std(samples):.4f}")
print(f"P(X < 1.96) = {normal.cdf(1.96):.4f}")
logits = np.array([2.0, 1.0, 0.1])
from scipy.special import softmax, log_softmax
probs = softmax(logits)
log_probs = log_softmax(logits)
print(f"Softmax: {probs}")
print(f"Log-softmax: {log_probs}")
اینها را از صفر پیاده کردید؛ حالا دیگر میدانید فراخوانیهای کتابخانهای پشت صحنه چه میکنند.
تمرینها
-
نمونهبرداری تبدیل معکوس را برای توزیع نمایی پیادهسازی کنید. با نمونهبرداری از 10,000 مقدار و مقایسهی هیستوگرام با PDF واقعی، صحت آن را بررسی کنید.
-
یک جدول توزیع توأم برای دو تاس دستکاریشده بسازید. توزیعهای حاشیهای را محاسبه کرده و بررسی کنید که آیا تاسها مستقل هستند یا خیر.
-
میزان زیان کراسانتروپی را برای یک دستهبند 5کلاسه با لاجیتهای خروجی
[2.0, 0.5, -1.0, 3.0, 0.1]در شرایطی که کلاس صحیح اندیس 3 است محاسبه کنید. سپس پاسخ خود را باnn.CrossEntropyLossدر PyTorch اعتبارسنجی کنید. -
تابعی بنویسید که لیستی از مقادیر لگاریتم احتمال را بگیرد و محتملترین توالی، مجموع لگاریتم احتمال، و احتمال خام معادل آن را برگرداند. آن را با جملهای 50کلمهای که هر کلمهاش احتمال 0.01 دارد آزمایش کنید.
راهنماییها
تمرین 1. مقدار u را از یک توزیع یکنواخت بیرون بکشید و را برگردانید. بررسی کنید که میانگین نمونه به نزدیک باشد و ستونهای هیستوگرام از پیروی کنند.
تمرین 2. یک جدول 6x6 را طوری پر کنید که هر خانه یک احتمال باشد و جمع کل خانهها به 1 برسد؛ سپس joint_to_marginals را فراخوانی کنید. از check_independence استفاده کنید: تاسها تنها در صورتی مستقل هستند که مقدار هر خانه با حاصلضرب دو حاشیهایِ متناظرش برابر باشد.
تمرین 3. تابع softmax را روی لاجیتها اعمال کرده و احتمال مربوط به اندیس 3 را محاسبه کنید. نتیجه باید نزدیک به 0.421 باشد؛ یعنی همان مقداری که nn.CrossEntropyLoss برای همین لاجیتها و تارگت برمیگرداند.
تمرین 4. لگاریتم احتمالات را با هم جمع کنید؛ احتمالات خام را در هم ضرب نکنید. برای 50 کلمه با احتمال 0.01، مجموع باید برابر با و احتمال خام معادل آن برابر با باشد.
اصطلاحات کلیدی
| اصطلاح | در گفتگوهای عامیانه | معنای دقیق فنی |
|---|---|---|
| فضای نمونه (Sample space) | «همهی حالتهای ممکن» | مجموعهی شامل تکتک برآمدهای ممکن از یک آزمایش |
| تابع جرم احتمال (PMF) | «تابع احتمال» | تابعی که احتمال دقیق هر برآمد گسسته را به دست میدهد و مجموع مقادیر آن برابر 1 است |
| تابع چگالی احتمال (PDF) | «منحنی احتمال» | تابع چگالی برای متغیرهای پیوسته؛ برای محاسبهی احتمال باید روی یک بازه از آن انتگرال گرفت |
| احتمال شرطی (Conditional probability) | «احتمال به شرطِ یک چیز دیگر» | ؛ پایهی تفکر بیزی و قضیهی بیز |
| استقلال (Independence) | «ربطی به هم ندارند» | ؛ دانستن یک پیشامد هیچ اطلاعاتی دربارهی دیگری به دست نمیدهد |
| امید ریاضی (Expected value) | «میانگین» | مجموع برآمدها با وزندهی احتمال آنها؛ تابع زیان در اصل یک امید ریاضی است |
| واریانس (Variance) | «میزان پراکندگی» | امید ریاضی مجذور انحراف از میانگین؛ واریانس بالا یعنی تخمینهای ناپایدار و پر از نوفه |
| توزیع نرمال (Normal distribution) | «منحنی زنگولهای» | ؛ به علت CLT در همهجا دیده میشود |
| قضیهی حد مرکزی (Central Limit Theorem) | «میانگینها نرمال میشوند» | میانگین مرکززدایی و مقیاسشدهی نمونههای مستقل پرتعداد، برای هر منبعی با واریانس متناهی، به سمت توزیع نرمال میل میکند |
| توزیع توأم (Joint distribution) | «دو متغیر در کنار هم» | احتمال همزمانی هر ترکیبی از برآمدهای و را توصیف میکند |
| توزیع حاشیهای (Marginal distribution) | «جمع زدن روی متغیر دیگر» | ؛ استخراج توزیع یک متغیر از دل توزیع توأم |
| لگاریتم احتمال (Log probability) | «لگاریتمِ احتمال» | ؛ ضربها را به جمع تبدیل میکند و جلوی کمریز عددی در توالیهای طولانی را میگیرد |
| نرممکس (Softmax) | «تبدیل امتیازها به احتمال» | ؛ نگاشت لاجیتهای با مقادیر حقیقی به یک توزیع احتمال معتبر |
| کراسانتروپی (Cross-entropy) | «همان تابع زیان» | ؛ اندازهگیری میزان تفاوت میان دو توزیع؛ هرچه کمتر باشد بهتر است |
| لاجیتها (Logits) | «خروجیهای خام مدل» | امتیازهای نرمالنشده پیش از softmax؛ برگرفته از نام تابع لجستیک |
| نمونهبرداری (Sampling) | «انتخاب مقادیر تصادفی» | تولید مقادیر بر اساس یک توزیع احتمال مشخص؛ شیوهای که مدلها خروجی تولید میکنند |
برای مطالعهی بیشتر
- 3Blue1Brown: اما قضیهی حد مرکزی واقعاً چیست؟ - اثبات بصری اینکه چرا میانگینها به سمت توزیع نرمال میروند
- مرور احتمال دورهی CS229 دانشگاه استنفورد - مرجعی فشرده و جامع برای تمام مباحث این درس و فراتر از آن
- ترفند Log-Sum-Exp - دلایل اهمیت پایداری عددی و روشهای دستیابی به آن
