Ana içeriğe geç

Orta7 dk

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
log(ab)=log(a)+log(b)\log(a \cdot b) = \log(a) + \log(b)

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).
Sol tarafta katlanarak yükselen üstel fonksiyon grafiği, sağ tarafta yavaşça yükselen logaritma fonksiyonu grafiği.
Üstel (exp) fonksiyon HIZLA yükselir; logaritma (log) fonksiyonu YAVAŞÇA yükselir -- birbirinin AYNA görüntüsü (tersi).

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:

  1. Ü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.
  2. 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?
  1. Bir hesaplama hatası
  2. Ü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)
  3. Söylenti yayılması durur ve sonra tekrar başlar
  4. 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?
  1. Logaritma toplamı yanlış hesaplanmıştır
  2. 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)
  3. 0.01 sayısı özel bir durumdur
  4. 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?
  1. Sadece matematiksel gelenek
  2. 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)
  3. Logaritma, hesaplamayı YAVAŞLATMAK için kullanılır
  4. Ç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.
Sonraki adım: Matematik özet kartı →