🏷️sec_maximum_likelihood
Makine öğrenmesinde en sık karşılaşılan düşünce yöntemlerinden biri, maksimum olabilirlik bakış açısıdır. Bu, bilinmeyen parametrelere sahip olasılıklı bir modelle çalışırken, verileri en yüksek olasılığa sahip kılan parametrelerin en olası parametreler olduğu kavramıdır.
Bunun, üzerinde düşünmeye yardımcı olabilecek Bayesçi bir yorumu vardır.
Modelimizin parametreleri için en olası değeri bulmak istiyorsak, bu, bunu bulmak istediğimiz anlamına gelir:
eq_max_like
Bayes kuralı gereği yukarıdaki ifade ile aşağıdaki gibi yazılabilir:
Verileri oluşturmanın parametreden bağımsız bir olasılığı olan
Ortak bir terminoloji için, ($P(X \mid \boldsymbol{\theta})$) parametreleri verilen verilerin olasılığı olabilirlik olarak adlandırılır.
Bunun nasıl çalıştığını somut bir örnekle görelim. Tura atma olasılığını temsil eden tek bir
13 tane madeni parayı atarsak ve
Bu örnekle ilgili güzel bir şey, cevabın nasıl geleceğini bilmemizdir. Gerçekten de, sözlü olarak, "13 para attım ve 9 tura geldi, tura gelmesi olasılığı için en iyi tahminimiz nedir?", herkes doğru bir şekilde
Örneğimiz için,
%matplotlib inline
from d2l import mxnet as d2l
from mxnet import autograd, np, npx
npx.set_np()
theta = np.arange(0, 1, 0.001)
p = theta**9 * (1 - theta)**4.
d2l.plot(theta, p, 'theta', 'likelihood')
#@tab pytorch
%matplotlib inline
from d2l import torch as d2l
import torch
theta = torch.arange(0, 1, 0.001)
p = theta**9 * (1 - theta)**4.
d2l.plot(theta, p, 'theta', 'likelihood')
#@tab tensorflow
%matplotlib inline
from d2l import tensorflow as d2l
import tensorflow as tf
theta = tf.range(0, 1, 0.001)
p = theta**9 * (1 - theta)**4.
d2l.plot(theta, p, 'theta', 'likelihood')
Bunun maksimum değeri, beklentisi eq_max_like
bulabiliriz. Hesaplayalım:
Bunun üç çözümü vardır:
Önceki örnek güzel, ama ya milyarlarca parametremiz ve veri örneğimiz varsa?
İlk olarak, tüm veri örneklerinin bağımsız olduğunu varsayarsak, pratik olarak olabilirliliğin kendisini artık pek çok olasılığın bir çarpımı olarak değerlendiremeyeceğimize dikkat edin. Aslında, her olasılık
Ancak, logaritmanın çarpımları toplamlara dönüştürdüğünü hatırlayın, bu durumda
Bu sayı,
sec_naive_bayes
içinde, naif Bayes sınıflandırıcısının belirli bir örneğiyle çalışırken bu mantığın uygulandığını göreceğiz.
Genellikle kaybı en aza indirmek istediğimiz kayıp işlevleriyle çalışırız. Negatif logaritmik-olabilirlik olan
Bunu örnekle görselleştirmek için, yazı tura atma problemini önceden düşünün ve kapalı form çözümünü bilmiyormuşuz gibi davranın. Bunu hesaplayabiliriz
Bu, koda yazılabilir ve milyarlarca bozuk para atmak için bile serbestçe optimize edilebilir.
# Verilerimizi ayarlayın
n_H = 8675309
n_T = 25624
# Parametrelerimizi ilkle
theta = np.array(0.5)
theta.attach_grad()
# Gradyan inişi gerçekleştir
lr = 0.00000000001
for iter in range(10):
with autograd.record():
loss = -(n_H * np.log(theta) + n_T * np.log(1 - theta))
loss.backward()
theta -= lr * theta.grad
# Çıktıyı kontrol et
theta, n_H / (n_H + n_T)
#@tab pytorch
# Verilerimizi ayarlayın
n_H = 8675309
n_T = 25624
# Parametrelerimizi ilkle
theta = torch.tensor(0.5, requires_grad=True)
# Gradyan inişi gerçekleştir
lr = 0.00000000001
for iter in range(10):
loss = -(n_H * torch.log(theta) + n_T * torch.log(1 - theta))
loss.backward()
with torch.no_grad():
theta -= lr * theta.grad
theta.grad.zero_()
# Çıktıyı kontrol et
theta, n_H / (n_H + n_T)
#@tab tensorflow
# Verilerimizi ayarlayın
n_H = 8675309
n_T = 25624
# Parametrelerimizi ilkle
theta = tf.Variable(tf.constant(0.5))
# Gradyan inişi gerçekleştir
lr = 0.00000000001
for iter in range(10):
with tf.GradientTape() as t:
loss = -(n_H * tf.math.log(theta) + n_T * tf.math.log(1 - theta))
theta.assign_sub(lr * t.gradient(loss, theta))
# Çıktıyı kontrol et
theta, n_H / (n_H + n_T)
İnsanların negatif logaritma olasılıklarını kullanmayı sevmesinin tek nedeni sayısal kolaylık değildir. Tercih edilmesinin birkaç nedeni daha var.
Logaritmik-olabilirliliğini düşünmemizin ikinci nedeni, kalkülüs kurallarının basitleştirilmiş uygulamasıdır. Yukarıda tartışıldığı gibi, bağımsızlık varsayımları nedeniyle, makine öğrenmesinde karşılaştığımız çoğu olasılık, bireysel olasılıkların çarpımıdır.
Bu demektir ki, bir türevi hesaplamak için çarpım kuralını doğrudan uygularsak,
Bu,
o da böyle buna dönüşür
- \frac{\partial}{\partial \boldsymbol{\theta}} \log\left(P(X\mid\boldsymbol{\theta})\right) = \frac{1}{P(x_1\mid\boldsymbol{\theta})}\left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_1\mid\boldsymbol{\theta})\right) + \cdots + \frac{1}{P(x_n\mid\boldsymbol{\theta})}\left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_n\mid\boldsymbol{\theta})\right). $$
Bu sadece
Negatif logaritmik-olabilirliği göz önünde bulundurmanın üçüncü ve son nedeni, bilgi teorisi ile olan ilişkidir ve bunu :numref:sec_information_theory
içinde ayrıntılı olarak tartışacağız. Bu, rastgele bir değişkendeki bilginin veya rasgeleliğin derecesini ölçmek için bir yol sağlayan titiz bir matematiksel teoridir. Bu alanda çalışmanın temel konusu entropidir.
Bir kaynağın rasgeleliğini ölçer. Bunun ortalama
Şimdiye kadar yaptığımız her şey, ayrık rastgele değişkenlerle çalıştığımızı varsayıyor; ancak ya sürekli olanlarla çalışmak istersek?
Kısaca özet, olasılığın tüm örneklerini olasılık yoğunluğu ile değiştirmemiz dışında hiçbir şeyin değişmemesidir. Yoğunlukları küçük harfli
Soru, "Bu neden geçerli?" haline gelir. Sonuçta, yoğunlukları tanıtmamızın nedeni, belirli sonuçların kendilerinin elde edilme olasılıklarının sıfır olmasıydı ve dolayısıyla herhangi bir parametre kümesi için verilerimizi üretme olasılığımızın sıfır olmaz mı?
Aslında soru budur ve neden yoğunluklara geçebileceğimizi anlamak, epsilonlara ne olduğunu izlemeye yönelik bir alıştırmadır.
Önce hedefimizi yeniden tanımlayalım. Sürekli rastgele değişkenler için artık tam olarak doğru değeri elde etme olasılığını hesaplamak istemediğimizi, bunun yerine
Böylece, bunun negatif logaritmasını alırsak bunu elde ederiz:
Bu ifadeyi incelersek,
- \sum_{i} \log(p(x_i\mid\boldsymbol{\theta})). $$
Böylelikle, olasılıkları olasılık yoğunlukları ile değiştirerek, maksimum olabilirlik bakış açısının sürekli rastgele değişkenlerle, kesikli olanlar kadar kolay bir şekilde çalışabileceğini görüyoruz.
- Maksimum olabilirlik ilkesi bize, belirli bir veri kümesi için en uygun modelin en yüksek olasılıkla verileri üreten model olduğunu söyler.
- Genellikle insanlar çeşitli nedenlerde dolayı negatif logaritmik-olabilirlik ile çalışırlar: Sayısal kararlılık, çarpımların toplamlara dönüştürülmesi (ve bunun sonucunda gradyan hesaplamalarının basitleştirilmesi) ve bilgi teorisine yönelik teorik bağlar.
- Ayrık ortamda motive etmek en basiti olsa da, veri noktalarına atanan olasılık yoğunluğunu en üst düzeye çıkararak sürekli ortamda da serbestçe genelleştirilebilir.
- Rastgele bir değişkenin bir
$\alpha$ değeri için$\frac{1}{\alpha}e^{-\alpha x}$ yoğunluğuna sahip olduğunu bildiğinizi varsayalım. Rastgele değişkenden$3$ sayısını tek gözlem olarak elde ediyorsunuz.$\alpha$ için maksimum olabilirlik tahmini nedir? - Ortalama değeri bilinmeyen ancak varyansı
$1$ olan bir Gauss'tan alınmış${x_i}_{i=1}^N$ örnekten oluşan bir veri kümeniz olduğunu varsayalım. Ortalama için maksimum olabilirlik tahmini nedir?
:begin_tab:mxnet
Tartışmalar
:end_tab:
:begin_tab:pytorch
Tartışmalar
:end_tab:
:begin_tab:tensorflow
Tartışmalar
:end_tab: