Logaritma ve üstel: neden her yerdeler
Önkoşul:Gradyan inişi
Kanca
Bir söylenti, her saat SADECE 2 kişiye daha yayılsa, 10 saat sonra 1024 kişiye ulaşır. Peki 20 saat sonra kaç kişiye ulaşır — 2048 mi, yoksa BAŞKA bir şey mi?
Sezgi
Üstel (exponential) fonksiyon, bir şeyin HER ADIMDA AYNI ORANDA katlanarak büyümesini (ya da küçülmesini) anlatır — ilk başta YAVAŞ görünür ama HIZLA patlar. Logaritma ise, üstelin TAM TERSİDİR: “kaçıncı adımda BU sayıya ulaşırım?” sorusunu cevaplar.
Mekanizma
Katlanarak yayılan bir söylentiyi izleyelim:
Üstel büyüme: yavaş başlar, hızla patlar
# ÜSTEL (exponential) fonksiyon, bir şeyin HER ADIMDA AYNI ORANDA katlanarak
# büyümesini (ya da küçülmesini) anlatır. Örnek: bir söylenti, HER SAATTE
# 2 KİŞİYE daha yayılıyor olsun (katlanarak).
def ustel_yayilma(saat):
return 2 ** saat
print("Saat -> Duyan kişi sayısı (2^saat)")
for saat in [0, 1, 2, 5, 10, 20]:
print(f" {saat:3d} -> {ustel_yayilma(saat):,}")
print("\nİLK 10 saatte SADECE 1024 kişiye ulaşırken, 20. saatte BİR MİLYONU AŞIYOR --")
print("üstel büyüme, İLK BAŞTA yavaş görünür ama HIZLA patlar.")Saat -> Duyan kişi sayısı (2^saat)
0 -> 1
1 -> 2
2 -> 4
5 -> 32
10 -> 1,024
20 -> 1,048,576
İLK 10 saatte SADECE 1024 kişiye ulaşırken, 20. saatte BİR MİLYONU AŞIYOR --
üstel büyüme, İLK BAŞTA yavaş görünür ama HIZLA patlar.Şimdi bunun TERSİNİ soralım: “2 üzeri KAÇ, 1024 eder?”
Logaritma = üstelin tersi
# LOGARİTMA, ÜSTEL fonksiyonun TERSİDİR: "kaçıncı adımda BU sayıya ulaşırım?"
# sorusunu cevaplar.
sayi = 1024
kacinci_adim = np.log2(sayi)
print(f"\n2 üzeri KAÇ, {sayi} eder? log2({sayi}) = {kacinci_adim}")
print(f"Doğrulama: 2^{kacinci_adim:.0f} = {2**int(kacinci_adim)}")
# Genel olarak: log(exp(x)) = x VE exp(log(x)) = x -- birbirinin TAM TERSİDİR.
x_test = 5.0
print(f"\nlog(exp({x_test})) = {np.log(np.exp(x_test)):.4f} (x'e GERİ dönüyor)")
print(f"exp(log({x_test})) = {np.exp(np.log(x_test)):.4f} (x'e GERİ dönüyor)")
print("Logaritma ve üstel, birbirini İPTAL EDEN iki işlemdir -- tıpkı toplama/çıkarma gibi.")
2 üzeri KAÇ, 1024 eder? log2(1024) = 10.0
Doğrulama: 2^10 = 1024
log(exp(5.0)) = 5.0000 (x'e GERİ dönüyor)
exp(log(5.0)) = 5.0000 (x'e GERİ dönüyor)
Logaritma ve üstel, birbirini İPTAL EDEN iki işlemdir -- tıpkı toplama/çıkarma gibi.Matematik
Logaritmanın çarpmayı toplamaya çevirme özelliği
Bu özellik, logaritmanın ML’deki en PRATİK faydasının KAYNAĞIDIR: küçük olasılıkların ÇARPIMI yerine, logaritmalarının TOPLAMINI almak, SAYISAL olarak ÇOK daha KARARLIDIR.
Kod
Bunu GERÇEK bir sayısal sorunla gösterelim — küçük olasılıkları DOĞRUDAN çarpmak NE OLUR?
Çarpım sıfıra yuvarlanır, log-toplamı YUVARLANMAZ
# Logaritmanın ML'DE en ÖNEMLİ pratik faydası: ÇARPMAYI TOPLAMAYA çevirmesi --
# log(a*b) = log(a) + log(b). Bu, SAYISAL KARARLILIK için KRİTİKTİR.
olasiliklar = np.full(400, 0.01) # 400 tane küçük olasılık (örn. bir dilin kelime olasılıkları)
carpim_dogrudan = np.prod(olasiliklar)
print(f"\n400 tane 0.01 olasılığı DOĞRUDAN çarpınca: {carpim_dogrudan}")
print("Bu SIFIRA yuvarlandı (float64'ün gösterebileceğinden DAHA KÜÇÜK oldu) --")
print("bu, 'sayısal alt taşma' (underflow) denen bir SORUNDUR.")
log_toplami = np.sum(np.log(olasiliklar))
print(f"\nAynı 400 olasılığın LOGARİTMALARINI toplayınca: {log_toplami:.4f}")
print("Bu sayı, GAYET normal ve KULLANILABİLİR bir sayı -- HİÇ alt taşma YOK.")
print("\nİşte bu YÜZDEN, ML modelleri (ve NLP kategorisindeki dil modelleri), OLASILIKLARI")
print("DOĞRUDAN çarpmak yerine, LOGARİTMALARINI TOPLAR -- 'log-olasılık' (log-likelihood).")
400 tane 0.01 olasılığı DOĞRUDAN çarpınca: 0.0
Bu SIFIRA yuvarlandı (float64'ün gösterebileceğinden DAHA KÜÇÜK oldu) --
bu, 'sayısal alt taşma' (underflow) denen bir SORUNDUR.
Aynı 400 olasılığın LOGARİTMALARINI toplayınca: -1842.0681
Bu sayı, GAYET normal ve KULLANILABİLİR bir sayı -- HİÇ alt taşma YOK.
İşte bu YÜZDEN, ML modelleri (ve NLP kategorisindeki dil modelleri), OLASILIKLARI
DOĞRUDAN çarpmak yerine, LOGARİTMALARINI TOPLAR -- 'log-olasılık' (log-likelihood).Nerede işe yarar
Logaritma ve üstel, kursun DAHA ÖNCE gördüğün BİRÇOK formülün İÇİNDE saklıydı:
- Prompt Mühendisliği kategorisindeki softmax, ÜSTEL (exp) fonksiyonunu kullanarak, sayıları POZİTİF ve KARŞILAŞTIRILABİLİR olasılıklara ÇEVİRİR.
- ML ve DL kategorilerindeki “çapraz entropi” (cross-entropy) kaybı, LOGARİTMA kullanır — TAM OLARAK bu dersteki “log-olasılık” fikri.
- Bu dersteki 400-olasılık örneği, dil modellerinin (NLP kategorisi) NEDEN olasılıkları DOĞRUDAN çarpmak yerine, logaritmalarını TOPLADIĞINI gösteriyor.
Bu 2 hatayı yaparsın:
- Üstel büyümeyi “DOĞRUSAL büyümenin biraz hızlısı” sanmak — HAYIR, notebook’ta 10. saatte 1024 iken 20. saatte 1 MİLYONU AŞIYOR; üstel büyüme NİTELİKSEL olarak FARKLIDIR.
- Logaritmayı “sadece matematik dersi konusu” sanmak — HAYIR, ML modellerinin SAYISAL olarak ÇÖKMEDEN çalışabilmesinin ARKASINDAKİ pratik ARAÇTIR.
Kendini test et
1. ustel-buyume-tanimi bloğunda 10. saatte 1024 kişi varken, 20. saatte SADECE 2048 değil, 1,048,576 kişiye ulaşılıyor. Bu NEDEN?
- Bir hesaplama hatası
- Üstel büyüme, HER adımda AYNI ORANDA (burada 2 KATINA) katlanır -- bu yüzden büyüme DOĞRUSAL değil, KATLANARAKTIR; 10 adım daha eklemek, sayıyı 2^10=1024 KATINA çıkarır (doğru cevap)
- Söylenti yayılması durur ve sonra tekrar başlar
- 20. saat özel bir sayıdır
Neden: ustel-buyume-tanimi bloğunda bu AÇIKÇA belirtiliyor: 'üstel büyüme, İLK BAŞTA yavaş görünür ama HIZLA patlar'.
2. neden-log-kullanilir bloğunda 400 tane 0.01 olasılığı DOĞRUDAN çarpınca SIFIR çıkıyor, ama logaritmalarını toplayınca -1842.07 (normal bir sayı) çıkıyor. Bu fark NEDEN?
- Logaritma toplamı yanlış hesaplanmıştır
- float64 SAYI TİPİ, ÇOK KÜÇÜK sayıları (400 tane 0.01'in çarpımı gibi) temsil EDEMEZ ve SIFIRA yuvarlar (alt taşma) -- ama logaritmaları TOPLAMAK, aynı bilgiyi SAYISAL olarak KARARLI bir sayıda saklar (doğru cevap)
- 0.01 sayısı özel bir durumdur
- NumPy bir hata vermelidir ama vermiyor
Neden: neden-log-kullanilir bloğunda bu AÇIKÇA belirtiliyor: doğrudan çarpım 0.0'a yuvarlanıyor ('sayısal alt taşma'), log-toplamı ise -1842.07 gibi KULLANILABİLİR bir sayı veriyor.
3. ML ve DL kategorilerindeki 'çapraz entropi' (cross-entropy) kaybının logaritma KULLANMASININ pratik nedeni NEDİR?
- Sadece matematiksel gelenek
- Bir modelin TAHMİN olasılıklarını DOĞRUDAN çarpmak yerine LOGARİTMALARINI toplamak, bu dersteki 400-olasılık örneğindeki GİBİ, sayısal alt taşmayı ÖNLER (doğru cevap)
- Logaritma, hesaplamayı YAVAŞLATMAK için kullanılır
- Çapraz entropi logaritma kullanmaz
Neden: kullanım bölümünde bu AÇIKÇA bağlanıyor: çapraz entropi kaybı, bu dersteki 'log-olasılık' fikrini KULLANIR.
Özet
Özet
- Üstel fonksiyon, katlanarak büyümeyi (ya da küçülmeyi) anlatır -- ilk başta yavaş, sonra HIZLA patlar.
- Logaritma, üstelin TAM TERSİDİR: log(exp(x))=x ve exp(log(x))=x.
- Logaritmanın en pratik faydası: log(a·b) = log(a) + log(b) -- çarpmayı toplamaya ÇEVİRİR.
- Bu dersteki 400-olasılık örneği, doğrudan çarpımın SIFIRA yuvarlandığını (alt taşma), log-toplamının ise KARARLI kaldığını GÖSTERDİ.
- Softmax (exp) ve çapraz entropi (log), bu dersteki fikirlerin, kursun İLERİDEKİ kategorilerindeki DOĞRUDAN uygulamalarıdır.