<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://program.sonsuz.us/feed.xml" rel="self" type="application/atom+xml" /><link href="https://program.sonsuz.us/" rel="alternate" type="text/html" /><updated>2026-09-27T00:05:36+00:00</updated><id>https://program.sonsuz.us/feed.xml</id><title type="html">SonsuzUs</title><subtitle>Programlama ve Yazılım</subtitle><author><name>Sonsuz Us</name></author><entry><title type="html">Active Learning: Modelin Etiket Seçme Sanatı</title><link href="https://program.sonsuz.us/posts/active-learning-modelin-etiket-secme-sanati/" rel="alternate" type="text/html" title="Active Learning: Modelin Etiket Seçme Sanatı" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/active-learning-modelin-etiket-secme-sanati</id><content type="html" xml:base="https://program.sonsuz.us/posts/active-learning-modelin-etiket-secme-sanati/"><![CDATA[<p><img src="/img/active-learning-modelin-37.svg" alt="active-learning-modelin-37" /></p>

<p>Elinizde milyonlarca kedi, köpek ve muhtemelen ne olduğu yalnızca biyologların anlayabileceği canlı fotoğrafı olduğunu düşünün. Bunların hepsini insanlara etiketletmek pahalı ve yavaştır. Active Learning, yani aktif öğrenme, modelin kalabalığın içinden öğrenmeye en çok katkı sağlayacak örnekleri seçip uzmana “Şuna bir bakar mısın?” demesidir.
``</p>

<h2 id="active-learning-nedir">Active Learning nedir?</h2>

<p>Klasik denetimli öğrenmede etiketli bir veri kümesi hazırlanır ve model bu kümenin tamamıyla eğitilir. Aktif öğrenmede ise başlangıçta yalnızca küçük bir etiketli küme bulunur. Model eğitildikten sonra etiketsiz veri havuzunu inceler, en faydalı gördüğü örnekleri seçer ve bunları bir insan uzmana gönderir.</p>

<p>Döngü genel olarak şöyledir:</p>

<ol>
  <li>Küçük bir başlangıç kümesini etiketle.</li>
  <li>Modeli bu verilerle eğit.</li>
  <li>Etiketsiz örnekler üzerinde tahmin yap.</li>
  <li>En belirsiz veya bilgilendirici örnekleri seç.</li>
  <li>İnsan uzmanından etiket iste.</li>
  <li>Yeni etiketleri eğitim kümesine ekleyip modeli yeniden eğit.</li>
</ol>

<p>Bu süreç, etiket bütçesi bitene veya model hedeflenen başarıya ulaşana kadar devam eder. Amaç daha fazla veri kullanmak değil, <strong>doğru veriyi etiketlemektir</strong>.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Etiketlenecek veriyi kim seçer?</th>
      <th style="text-align: right">Maliyet</th>
      <th style="text-align: right">Veri verimliliği</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Rastgele örnekleme</td>
      <td>Rastgele seçim</td>
      <td style="text-align: right">Orta</td>
      <td style="text-align: right">Düşük</td>
    </tr>
    <tr>
      <td>Tam etiketleme</td>
      <td>İnsan veya veri sağlayıcı</td>
      <td style="text-align: right">Çok yüksek</td>
      <td style="text-align: right">Değişken</td>
    </tr>
    <tr>
      <td>Active Learning</td>
      <td>Model ve uzman birlikte</td>
      <td style="text-align: right">Daha düşük</td>
      <td style="text-align: right">Yüksek</td>
    </tr>
  </tbody>
</table>

<h2 id="model-hangi-örnekleri-sorar">Model hangi örnekleri sorar?</h2>

<p>En yaygın yöntem <strong>belirsizlik örneklemesi</strong>dir. İkili sınıflandırmada model bir örnek için $P(y=1\mid x)=0.51$ üretiyorsa oldukça kararsızdır. Buna karşılık $0.99$ olasılıklı bir tahmin model açısından kolaydır. Etiket bütçesini kolay örneğe harcamak yerine kararsız örneği uzmana göndermek daha mantıklıdır.</p>

<p>Çok sınıflı problemlerde entropi kullanılabilir:</p>

\[H(x)=-\sum_{i=1}^{K}p_i(x)\log p_i(x)\]

<p>Burada $K$ sınıf sayısını, $p_i(x)$ ise örneğin $i$ sınıfına ait olma olasılığını gösterir. Entropi büyüdükçe tahmin dağılımı daha kararsız hâle gelir.</p>

<table>
  <thead>
    <tr>
      <th>Strateji</th>
      <th>Temel fikir</th>
      <th>Güçlü yönü</th>
      <th>Riski</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>En düşük güven</td>
      <td>En düşük maksimum olasılığı seçer</td>
      <td>Basit ve hızlı</td>
      <td>Dağılımı tam değerlendirmez</td>
    </tr>
    <tr>
      <td>Marjin örnekleme</td>
      <td>En yüksek iki olasılığın farkına bakar</td>
      <td>Sınıf sınırlarını bulur</td>
      <td>Gürültüden etkilenebilir</td>
    </tr>
    <tr>
      <td>Entropi</td>
      <td>Tüm sınıf olasılıklarını kullanır</td>
      <td>Çok sınıflı işlerde etkilidir</td>
      <td>Kalibre edilmemiş olasılıklar yanıltabilir</td>
    </tr>
    <tr>
      <td>Komiteyle sorgulama</td>
      <td>Birden fazla modelin anlaşamadığı örnekleri seçer</td>
      <td>Model çeşitliliğinden yararlanır</td>
      <td>Hesaplama maliyeti yüksektir</td>
    </tr>
  </tbody>
</table>

<h2 id="python-ile-basit-seçim">Python ile basit seçim</h2>

<p>Aşağıdaki kod, sınıf olasılıklarının entropisini hesaplar ve en belirsiz üç örneği seçer:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>

<span class="c1"># Her satır bir örneğin sınıf olasılıklarını temsil eder.
</span><span class="n">probabilities</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span>
    <span class="p">[</span><span class="mf">0.90</span><span class="p">,</span> <span class="mf">0.08</span><span class="p">,</span> <span class="mf">0.02</span><span class="p">],</span>
    <span class="p">[</span><span class="mf">0.34</span><span class="p">,</span> <span class="mf">0.33</span><span class="p">,</span> <span class="mf">0.33</span><span class="p">],</span>
    <span class="p">[</span><span class="mf">0.55</span><span class="p">,</span> <span class="mf">0.40</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">],</span>
    <span class="p">[</span><span class="mf">0.45</span><span class="p">,</span> <span class="mf">0.10</span><span class="p">,</span> <span class="mf">0.45</span><span class="p">],</span>
    <span class="p">[</span><span class="mf">0.80</span><span class="p">,</span> <span class="mf">0.10</span><span class="p">,</span> <span class="mf">0.10</span><span class="p">]</span>
<span class="p">])</span>

<span class="k">def</span> <span class="nf">entropy</span><span class="p">(</span><span class="n">probs</span><span class="p">):</span>
    <span class="n">safe_probs</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">clip</span><span class="p">(</span><span class="n">probs</span><span class="p">,</span> <span class="mf">1e-12</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span>
    <span class="k">return</span> <span class="o">-</span><span class="n">np</span><span class="p">.</span><span class="nf">sum</span><span class="p">(</span><span class="n">safe_probs</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="n">safe_probs</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

<span class="n">scores</span> <span class="o">=</span> <span class="nf">entropy</span><span class="p">(</span><span class="n">probabilities</span><span class="p">)</span>
<span class="n">query_indices</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">argsort</span><span class="p">(</span><span class="n">scores</span><span class="p">)[</span><span class="o">-</span><span class="mi">3</span><span class="p">:][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>

<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Uzmanlara gönderilecek örnekler:</span><span class="sh">"</span><span class="p">,</span> <span class="n">query_indices</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">"</span><span class="s">Belirsizlik puanları:</span><span class="sh">"</span><span class="p">,</span> <span class="n">scores</span><span class="p">[</span><span class="n">query_indices</span><span class="p">])</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">np.clip</code>, sıfır olasılığın logaritmasını alma sorununu önler. En yüksek entropiye sahip indeksler, insan uzmanına gönderilecek adaylardır. Gerçek projede bu indekslere karşılık gelen metinler, görüntüler veya kayıtlar bir etiketleme arayüzünde gösterilir.</p>

<h2 id="her-belirsiz-örnek-faydalı-mı">Her belirsiz örnek faydalı mı?</h2>

<p>Hayır. Model bazen bozuk görüntülere, anlamsız metinlere veya dağılım dışı verilere de aşırı belirsizlik gösterebilir. Bu nedenle çeşitlilik örneklemesi, kümeleme ve kalite filtreleri kullanılmalıdır. Aynı türden yüz kararsız örneği seçmek yerine farklı bölgeleri temsil eden örnekler tercih edilmelidir.</p>

<p>Ayrıca insan uzmanların hata yapabileceği unutulmamalıdır. Birden fazla uzmanın görüşü, uzlaşma ölçümleri ve düzenli kalite kontrolleri sürece eklenebilir. Başarılı bir Active Learning sistemi yalnızca akıllı bir sorgu algoritması değil; model, veri altyapısı ve insan uzman arasında kurulmuş geri bildirim döngüsüdür. Böylece model sessizce veri yutmak yerine, gerçekten merak ettiği soruları sormayı öğrenir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="active learning" /><category term="makine öğrenmesi" /><category term="yapay zeka" /><category term="veri etiketleme" /><category term="python" /><category term="belirsizlik örneklemesi" /><summary type="html"><![CDATA[Elinizde milyonlarca kedi, köpek ve muhtemelen ne olduğu yalnızca biyologların anlayabileceği canlı fotoğrafı olduğunu düşünün. Bunların hepsini insanlara etiketletmek pahalı ve yavaştır. Active Learning, yani aktif öğrenme, modelin kalabalığın içinden öğrenmeye en çok katkı sağlayacak örnekleri seçip uzmana “Şuna bir bakar mısın?” demesidir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/active-learning-modelin-37.png" /><media:content medium="image" url="https://program.sonsuz.us/img/active-learning-modelin-37.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Contrastive Learning ve SimCLR: Etiketsiz Görsellerden Benzerlik Öğrenmek</title><link href="https://program.sonsuz.us/posts/contrastive-learning-ve-simclr-etiketsiz-gorsellerden-benzerlik-ogrenmek/" rel="alternate" type="text/html" title="Contrastive Learning ve SimCLR: Etiketsiz Görsellerden Benzerlik Öğrenmek" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/contrastive-learning-ve-simclr-etiketsiz-gorsellerden-benzerlik-ogrenmek</id><content type="html" xml:base="https://program.sonsuz.us/posts/contrastive-learning-ve-simclr-etiketsiz-gorsellerden-benzerlik-ogrenmek/"><![CDATA[<p><img src="/img/contrastive-learning-ve-41.svg" alt="contrastive-learning-ve-41" /></p>

<p>Bir makineye binlerce kedi fotoğrafı gösterdiğinizi, fakat hiçbirine “kedi” etiketi koymadığınızı düşünün. Makine yine de kulak, tüy ve yüz şekli gibi ortak özellikleri keşfedebilir mi? Contrastive Learning, yani karşılaştırmalı öğrenme, tam olarak bunu hedefler: Benzer örnekleri temsil uzayında birbirine yaklaştırır, farklı örnekleri ise uzaklaştırır. SimCLR da bu fikri şaşırtıcı derecede sade bir eğitim düzenine dönüştüren popüler yöntemlerden biridir.
``</p>

<h2 id="temel-fikir-etiket-yerine-karşılaştırma">Temel fikir: Etiket yerine karşılaştırma</h2>

<p>Geleneksel denetimli öğrenmede model, bir görseli sınıf etiketiyle eşleştirir. Karşılaştırmalı öğrenmede ise “Bu nedir?” sorusundan önce “Bu iki görüntü aynı şeye mi ait?” sorusu sorulur. Böylece veri kendi eğitim sinyalini üretir.</p>

<p>Bir fotoğrafa rastgele kırpma, döndürme, renk değiştirme veya bulanıklaştırma uygulandığında iki farklı görünüm elde edilir. Bunlar <strong>pozitif çift</strong> kabul edilir. Aynı mini-batch içindeki diğer fotoğraflar ise genellikle <strong>negatif örneklerdir</strong>.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Eğitim sinyali</th>
      <th>Amaç</th>
      <th>Etiket ihtiyacı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Denetimli öğrenme</td>
      <td>İnsan tarafından verilen sınıf</td>
      <td>Doğru sınıfı tahmin etmek</td>
      <td>Yüksek</td>
    </tr>
    <tr>
      <td>Contrastive Learning</td>
      <td>Örnekler arasındaki ilişki</td>
      <td>Yararlı temsil öğrenmek</td>
      <td>Yok veya çok düşük</td>
    </tr>
    <tr>
      <td>SimCLR</td>
      <td>Artırılmış görüntü çiftleri</td>
      <td>Aynı görüntünün görünümlerini yaklaştırmak</td>
      <td>Yok</td>
    </tr>
  </tbody>
</table>

<p>Model, her görseli bir vektöre dönüştürür. İki temsil arasındaki benzerlik çoğunlukla kosinüs benzerliğiyle ölçülür:</p>

\[sim(a,b) = \frac{a \cdot b}{\Vert a\Vert \,\Vert b\Vert }\]

<p>Vektörler aynı yönü gösteriyorsa sonuç 1’e yaklaşır; birbirlerinden farklı yönlerdeyse küçülür. Yani sistem, pikselleri ezberlemek yerine anlamlı bir geometrik harita oluşturmaya çalışır.</p>

<h2 id="simclr-nasıl-çalışır">SimCLR nasıl çalışır?</h2>

<p>SimCLR boru hattı dört temel parçadan oluşur:</p>

<ol>
  <li>Batch içindeki her görüntüden iki rastgele görünüm üretilir.</li>
  <li>Görünümler, ResNet gibi bir encoder üzerinden geçirilerek $h$ temsilleri elde edilir.</li>
  <li>Küçük bir projection head, bu temsilleri $z$ uzayına taşır.</li>
  <li>Contrastive loss, pozitif çiftleri yaklaştırırken diğer örnekleri uzaklaştırır.</li>
</ol>

<p>SimCLR’da sık kullanılan NT-Xent kaybının sadeleştirilmiş biçimi şöyledir:</p>

\[L_{i,j} = -\log \frac{e^{sim(z_i,z_j)/t}}{\sum_{k \ne i} e^{sim(z_i,z_k)/t}}\]

<p>Buradaki $t$ sıcaklık parametresidir. Küçük sıcaklık, modelin benzerlik farklarına daha sert tepki vermesini sağlar. Pay kısmında pozitif eşleşme, paydada ise aday eşleşmeler bulunur. Kısacası modelden kalabalık içinde doğru “ikizi” bulması istenir.</p>

<h2 id="pytorch-ile-sade-bir-loss-örneği">PyTorch ile sade bir loss örneği</h2>

<p>Aşağıdaki kod, iki görünümün temsillerini normalize eder ve doğru çiftleri çapraz entropiyle öne çıkarır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">torch</span>
<span class="kn">import</span> <span class="n">torch.nn.functional</span> <span class="k">as</span> <span class="n">F</span>

<span class="k">def</span> <span class="nf">contrastive_loss</span><span class="p">(</span><span class="n">z1</span><span class="p">,</span> <span class="n">z2</span><span class="p">,</span> <span class="n">temperature</span><span class="o">=</span><span class="mf">0.5</span><span class="p">):</span>
    <span class="n">z1</span> <span class="o">=</span> <span class="n">F</span><span class="p">.</span><span class="nf">normalize</span><span class="p">(</span><span class="n">z1</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
    <span class="n">z2</span> <span class="o">=</span> <span class="n">F</span><span class="p">.</span><span class="nf">normalize</span><span class="p">(</span><span class="n">z2</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>

    <span class="n">logits</span> <span class="o">=</span> <span class="n">z1</span> <span class="o">@</span> <span class="n">z2</span><span class="p">.</span><span class="n">T</span> <span class="o">/</span> <span class="n">temperature</span>
    <span class="n">labels</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">arange</span><span class="p">(</span><span class="n">z1</span><span class="p">.</span><span class="nf">size</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">device</span><span class="o">=</span><span class="n">z1</span><span class="p">.</span><span class="n">device</span><span class="p">)</span>

    <span class="n">loss_1</span> <span class="o">=</span> <span class="n">F</span><span class="p">.</span><span class="nf">cross_entropy</span><span class="p">(</span><span class="n">logits</span><span class="p">,</span> <span class="n">labels</span><span class="p">)</span>
    <span class="n">loss_2</span> <span class="o">=</span> <span class="n">F</span><span class="p">.</span><span class="nf">cross_entropy</span><span class="p">(</span><span class="n">logits</span><span class="p">.</span><span class="n">T</span><span class="p">,</span> <span class="n">labels</span><span class="p">)</span>
    <span class="nf">return </span><span class="p">(</span><span class="n">loss_1</span> <span class="o">+</span> <span class="n">loss_2</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span>
</code></pre></div></div>

<p>Matrisin köşegenindeki elemanlar doğru pozitif çiftlerdir. Fonksiyon iki yönü de hesaplayarak birinci görünümden ikinciyi ve ikinci görünümden birinciyi bulmayı öğretir. Gerçek SimCLR uygulamalarında aynı görünümün kendisiyle karşılaştırılması maskelenir ve batch içindeki tüm $2N$ temsil değerlendirilir.</p>

<h2 id="neden-veri-artırma-bu-kadar-önemli">Neden veri artırma bu kadar önemli?</h2>

<p>Model yalnızca kırpılmış iki görüntüyü eşleştirirse konuma, yalnızca renk değişimini görürse renge bağımlı olabilir. Güçlü ve çeşitli dönüşümler, modele “Renk değişse de nesne aynı kalabilir” fikrini öğretir.</p>

<table>
  <thead>
    <tr>
      <th>Dönüşüm</th>
      <th>Öğretilen dayanıklılık</th>
      <th>Olası risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Rastgele kırpma</td>
      <td>Konum ve ölçek değişimi</td>
      <td>Ana nesneyi kaybetmek</td>
    </tr>
    <tr>
      <td>Renk bozma</td>
      <td>Işık ve ton değişimi</td>
      <td>Sınıfa ait renk bilgisini silmek</td>
    </tr>
    <tr>
      <td>Bulanıklaştırma</td>
      <td>Doku değişimi</td>
      <td>İnce ayrıntıları yok etmek</td>
    </tr>
  </tbody>
</table>

<p>Eğitim tamamlandığında projection head genellikle atılır; encoder’dan çıkan temsiller sınıflandırma, benzer görsel arama veya kümeleme gibi görevlerde kullanılır. SimCLR’ın sihri aslında sihir değildir: İyi veri artırma, yeterince büyük batch ve doğru kayıp fonksiyonunun uyumlu çalışmasıdır. Etiketsiz bir fotoğraf arşivi böylece sessiz bir veri yığınından, kendi benzerlik dilini öğreten güçlü bir öğretmene dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="contrastive learning" /><category term="simclr" /><category term="derin öğrenme" /><category term="bilgisayarlı görü" /><category term="yapay zeka" /><category term="self-supervised learning" /><summary type="html"><![CDATA[Bir makineye binlerce kedi fotoğrafı gösterdiğinizi, fakat hiçbirine “kedi” etiketi koymadığınızı düşünün. Makine yine de kulak, tüy ve yüz şekli gibi ortak özellikleri keşfedebilir mi? Contrastive Learning, yani karşılaştırmalı öğrenme, tam olarak bunu hedefler: Benzer örnekleri temsil uzayında birbirine yaklaştırır, farklı örnekleri ise uzaklaştırır. SimCLR da bu fikri şaşırtıcı derecede sade bir eğitim düzenine dönüştüren popüler yöntemlerden biridir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/contrastive-learning-ve-41.png" /><media:content medium="image" url="https://program.sonsuz.us/img/contrastive-learning-ve-41.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">DDPM: Gürültüden Şahesere Giden Matematiksel Yolculuk</title><link href="https://program.sonsuz.us/posts/ddpm-gurultuden-sahesere-giden-matematiksel-yolculuk/" rel="alternate" type="text/html" title="DDPM: Gürültüden Şahesere Giden Matematiksel Yolculuk" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/ddpm-gurultuden-sahesere-giden-matematiksel-yolculuk</id><content type="html" xml:base="https://program.sonsuz.us/posts/ddpm-gurultuden-sahesere-giden-matematiksel-yolculuk/"><![CDATA[<p>Bir televizyonun çekmediği kanaldaki karıncalanmayı düşünün. Şimdi bu rastgele piksellerin yavaşça bir kediye, uzay gemisine veya Van Gogh esintili bir manzaraya dönüştüğünü hayal edin. Denoising Diffusion Probabilistic Models, yani DDPM, tam olarak bunu yapar: Veriyi kontrollü biçimde gürültüye dönüştürmeyi öğrenir ve ardından zamanı tersine sararak gürültüden yeni görüntüler üretir.
``</p>
<h2 id="termodinamikten-gelen-temel-fikir">Termodinamikten gelen temel fikir</h2>

<p>Difüzyon, fiziksel sistemlerin zamanla daha düzensiz hâle gelmesini anlatır. Bir bardak suya damlatılan mürekkebin kendiliğinden yayılması bunun klasik örneğidir. Başlangıçtaki düzen kaybolurken sistemin entropisi artar. DDPM de gerçek bir görüntüye küçük miktarlarda Gauss gürültüsü ekleyerek benzer bir süreç kurar.</p>

<p>Model iki ayrı süreçten oluşur:</p>

<table>
  <thead>
    <tr>
      <th>Süreç</th>
      <th>Yön</th>
      <th>Amaç</th>
      <th>Öğreniliyor mu?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>İleri difüzyon</td>
      <td>Görüntüden gürültüye</td>
      <td>Veriyi aşamalı olarak bozmak</td>
      <td>Hayır</td>
    </tr>
    <tr>
      <td>Ters difüzyon</td>
      <td>Gürültüden görüntüye</td>
      <td>Gürültüyü aşamalı olarak temizlemek</td>
      <td>Evet</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/ddpm-gurultuden-sahesere-67.svg" alt="ddpm-gurultuden-sahesere-67" /></p>

<p>İleri süreç mürekkebin suya yayılması kadar kolaydır. Asıl marifet, yayılmış mürekkebi yeniden tek bir damlada toplamak gibi davranan ters süreçtedir.</p>

<h2 id="i̇leri-difüzyon-görüntüyü-kontrollü-bozmak">İleri difüzyon: Görüntüyü kontrollü bozmak</h2>

<p>Temiz görüntüyü $x_0$ ile gösterelim. Her $t$ adımında görüntüye, miktarı bir varyans çizelgesiyle belirlenen gürültü eklenir:</p>

\[q(x_t\mid x_{t-1})=\mathcal{N}(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_tI)\]

<p>Buradaki $\beta_t$, ilgili adımdaki gürültü miktarıdır. Küçük değerler görüntünün yavaşça bozulmasını sağlar. Güzel tarafı, yüzlerce adımı sırayla çalıştırmadan herhangi bir $t$ anına doğrudan sıçrayabilmemizdir:</p>

\[x_t=\sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\epsilon\]

<p>Burada $\alpha_t=1-\beta_t$, $\bar{\alpha}<em>t=\prod</em>{s=1}^{t}\alpha_s$ ve $\epsilon\sim\mathcal{N}(0,I)$ olur. İlk terim korunmuş görüntüyü, ikinci terim eklenen rastgeleliği temsil eder.</p>

<table>
  <thead>
    <tr>
      <th>Zaman</th>
      <th style="text-align: right">Görüntü bilgisi</th>
      <th style="text-align: right">Gürültü</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>$t=0$</td>
      <td style="text-align: right">Çok yüksek</td>
      <td style="text-align: right">Yok</td>
    </tr>
    <tr>
      <td>Orta adımlar</td>
      <td style="text-align: right">Kısmen görünür</td>
      <td style="text-align: right">Orta</td>
    </tr>
    <tr>
      <td>$t=T$</td>
      <td style="text-align: right">Neredeyse yok</td>
      <td style="text-align: right">Çok yüksek</td>
    </tr>
  </tbody>
</table>

<h2 id="ters-süreç-gürültüyü-tahmin-etmek">Ters süreç: Gürültüyü tahmin etmek</h2>

<p>Model, $x_t$ görüntüsünü ve zaman adımı $t$ değerini alarak eklenmiş gürültüyü tahmin eder. Genellikle omurgada, farklı çözünürlüklerde ayrıntı yakalayabilen bir <strong>U-Net</strong> bulunur. Sinir ağı $\epsilon_\theta(x_t,t)$ tahminini üretir; bu tahmin kullanılarak biraz daha temiz olan $x_{t-1}$ hesaplanır.</p>

<p>Eğitim kaybı şaşırtıcı derecede sadedir:</p>

\[L=\mathbb{E}_{x_0,t,\epsilon}\left[\lVert\epsilon-\epsilon_\theta(x_t,t)\rVert^2\right]\]

<p>Başka bir deyişle model, gerçek gürültü ile tahmin ettiği gürültü arasındaki karesel farkı küçültür. Görüntünün kendisini ezberlemek yerine her bozulma seviyesinde hangi parçanın rastgele olduğunu öğrenir.</p>

<p>Aşağıdaki PyTorch benzeri kod, tek bir eğitim adımının özünü gösterir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">torch</span>

<span class="c1"># Her örnek için rastgele bir difüzyon zamanı seçilir.
</span><span class="n">t</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">total_steps</span><span class="p">,</span> <span class="p">(</span><span class="n">images</span><span class="p">.</span><span class="nf">size</span><span class="p">(</span><span class="mi">0</span><span class="p">),),</span> <span class="n">device</span><span class="o">=</span><span class="n">images</span><span class="p">.</span><span class="n">device</span><span class="p">)</span>
<span class="n">noise</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">randn_like</span><span class="p">(</span><span class="n">images</span><span class="p">)</span>

<span class="c1"># Kapalı formül sayesinde görüntü doğrudan x_t seviyesine taşınır.
</span><span class="n">noisy</span> <span class="o">=</span> <span class="n">sqrt_alpha_bar</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">*</span> <span class="n">images</span>
<span class="n">noisy</span> <span class="o">+=</span> <span class="n">sqrt_one_minus_alpha_bar</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">*</span> <span class="n">noise</span>

<span class="c1"># U-Net eklenen gürültüyü tahmin eder.
</span><span class="n">predicted_noise</span> <span class="o">=</span> <span class="nf">model</span><span class="p">(</span><span class="n">noisy</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
<span class="n">loss</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">mean</span><span class="p">((</span><span class="n">noise</span> <span class="o">-</span> <span class="n">predicted_noise</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>

<span class="n">optimizer</span><span class="p">.</span><span class="nf">zero_grad</span><span class="p">()</span>
<span class="n">loss</span><span class="p">.</span><span class="nf">backward</span><span class="p">()</span>
<span class="n">optimizer</span><span class="p">.</span><span class="nf">step</span><span class="p">()</span>
</code></pre></div></div>

<h2 id="üretim-neden-yavaş-ama-etkileyici">Üretim neden yavaş ama etkileyici?</h2>

<p>Üretim sırasında süreç saf $x_T$ gürültüsüyle başlar. Model, yüzlerce veya binlerce küçük temizleme adımı uygular. GAN modelleri çoğunlukla tek geçişte sonuç üretirken DDPM daha sabırlıdır; adeta bir heykeltıraş gibi her adımda rastgeleliği biraz daha yontar.</p>

<p>Bu aşamalı yaklaşım yüksek çeşitlilik, kararlı eğitim ve güçlü görüntü kalitesi sağlar. Dezavantajı hesaplama maliyetidir. DDIM, latent diffusion ve gelişmiş örnekleyiciler adım sayısını azaltarak bu sorunu hafifletir. Sonuçta görünen sihir, aslında olasılık teorisi, termodinamik sezgi ve dikkatle eğitilmiş bir gürültü tahmincisinin zarif iş birliğidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="ddpm" /><category term="difüzyon" /><category term="yapay zeka" /><category term="derin öğrenme" /><category term="görüntü üretimi" /><category term="pytorch" /><summary type="html"><![CDATA[Bir televizyonun çekmediği kanaldaki karıncalanmayı düşünün. Şimdi bu rastgele piksellerin yavaşça bir kediye, uzay gemisine veya Van Gogh esintili bir manzaraya dönüştüğünü hayal edin. Denoising Diffusion Probabilistic Models, yani DDPM, tam olarak bunu yapar: Veriyi kontrollü biçimde gürültüye dönüştürmeyi öğrenir ve ardından zamanı tersine sararak gürültüden yeni görüntüler üretir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/ddpm-gurultuden-sahesere-67.png" /><media:content medium="image" url="https://program.sonsuz.us/img/ddpm-gurultuden-sahesere-67.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Direksiyon Başındaki Görünmeyeni Bulmak: Sürücü Davranışı Analizinde HMM</title><link href="https://program.sonsuz.us/posts/direksiyon-basindaki-gorunmeyeni-bulmak-surucu-davranisi-analizinde-hmm/" rel="alternate" type="text/html" title="Direksiyon Başındaki Görünmeyeni Bulmak: Sürücü Davranışı Analizinde HMM" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/direksiyon-basindaki-gorunmeyeni-bulmak-surucu-davranisi-analizinde-hmm</id><content type="html" xml:base="https://program.sonsuz.us/posts/direksiyon-basindaki-gorunmeyeni-bulmak-surucu-davranisi-analizinde-hmm/"><![CDATA[<p><img src="/img/direksiyon-basindaki-gorunmeyeni-86.svg" alt="direksiyon-basindaki-gorunmeyeni-86" /></p>

<p>Bir otomobil sürücünün zihnini okuyamaz; ancak direksiyon hareketlerini, hız değişimlerini ve frenleme biçimini dikkatle dinleyebilir. Hidden Markov Modeli (HMM), doğrudan göremediğimiz <strong>uykulu</strong>, <strong>agresif</strong> veya <strong>normal</strong> sürüş durumlarını sensörlerden gelen ölçümler yardımıyla tahmin eder. Kısacası HMM, aracın küçük ipuçlarından sürücünün perde arkasındaki durumunu anlamaya çalışan istatistiksel bir dedektiftir.</p>

<p>``</p>

<h2 id="gizli-olan-ne-gözlenen-ne">Gizli olan ne, gözlenen ne?</h2>

<p>HMM’de sistemin gerçek durumu doğrudan gözlemlenemez. Sürücünün agresif olduğunu kesin biçimde ölçen bir sensör yoktur. Bunun yerine gaz pedalı konumu, direksiyon açısı, şerit sapması ve ivme gibi dolaylı belirtiler izlenir.</p>

<table>
  <thead>
    <tr>
      <th>HMM bileşeni</th>
      <th>Sürücü analizi karşılığı</th>
      <th>Örnek</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Gizli durum</td>
      <td>Sürücünün gerçek davranışı</td>
      <td>Uykulu, normal, agresif</td>
    </tr>
    <tr>
      <td>Gözlem</td>
      <td>Sensörlerden ölçülen değer</td>
      <td>Hız, ivme, direksiyon açısı</td>
    </tr>
    <tr>
      <td>Geçiş olasılığı</td>
      <td>Durumlar arasındaki değişim</td>
      <td>Normalden uykuluya geçiş</td>
    </tr>
    <tr>
      <td>Yayılım olasılığı</td>
      <td>Durumun belirli ölçümü üretmesi</td>
      <td>Agresifken yüksek ivme görülmesi</td>
    </tr>
    <tr>
      <td>Başlangıç olasılığı</td>
      <td>Yolculuk başındaki durum</td>
      <td>Yüzde 80 normal sürüş</td>
    </tr>
  </tbody>
</table>

<p>Bir HMM, gizli durum dizisini $S_1,S_2,…,S_T$ ve gözlem dizisini $O_1,O_2,…,O_T$ olarak ele alır. Model üç temel olasılık kümesiyle tanımlanır:</p>

<ul>
  <li>Başlangıç dağılımı: $P(S_1)$</li>
  <li>Geçiş olasılığı: $P(S_t \mid S_{t-1})$</li>
  <li>Gözlem olasılığı: $P(O_t \mid S_t)$</li>
</ul>

<p>Ortak olasılık genel olarak şöyle yazılır:</p>

\[P(S,O)=P(S_1)P(O_1 \mid S_1)\prod_{t=2}^{T}P(S_t \mid S_{t-1})P(O_t \mid S_t)\]

<p>Buradaki kritik varsayım, mevcut durumun yalnızca önceki duruma bağlı olmasıdır. Başka bir deyişle model, sürücünün bütün hayat hikâyesini değil yakın geçmişini hatırlar. Bu sadeleştirme hesaplamayı mümkün kılar.</p>

<h2 id="sensör-verisi-nasıl-hazırlanır">Sensör verisi nasıl hazırlanır?</h2>

<p>Ham sensör akışı doğrudan modele verilirse çukurlar, GPS hataları veya ani trafik olayları yanlış alarm üretebilir. Bu nedenle veriler kısa zaman pencerelerine ayrılır. Her pencere için ortalama hız, ivme varyansı, sert fren sayısı ve şerit sapmasının standart sapması gibi özellikler hesaplanır.</p>

<table>
  <thead>
    <tr>
      <th>Davranış</th>
      <th>Muhtemel sensör örüntüsü</th>
      <th>Karıştırılabileceği durum</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Uykulu</td>
      <td>Yavaş direksiyon düzeltmeleri, artan şerit sapması</td>
      <td>Bozuk yol</td>
    </tr>
    <tr>
      <td>Agresif</td>
      <td>Sert hızlanma, ani fren, keskin dönüş</td>
      <td>Acil manevra</td>
    </tr>
    <tr>
      <td>Normal</td>
      <td>Dengeli hız ve düşük değişkenlik</td>
      <td>Yoğun trafik</td>
    </tr>
  </tbody>
</table>

<p>Gözlemler sürekli değerliyse her gizli durum için Gauss dağılımı kullanılabilir. Çok sayıda özelliğin birlikte değerlendirilmesi gerekiyorsa çok değişkenli Gauss dağılımı tercih edilir.</p>

<h2 id="python-ile-küçük-bir-model">Python ile küçük bir model</h2>

<p>Aşağıdaki örnek, hız, boylamsal ivme ve şerit sapması özelliklerinden üç davranış durumu öğrenir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>
<span class="kn">from</span> <span class="n">hmmlearn.hmm</span> <span class="kn">import</span> <span class="n">GaussianHMM</span>

<span class="c1"># Her satır: [hız, ivme, şerit_sapması]
</span><span class="n">X</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([</span>
    <span class="p">[</span><span class="mi">82</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.08</span><span class="p">],</span> <span class="p">[</span><span class="mi">80</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.10</span><span class="p">],</span>
    <span class="p">[</span><span class="mi">110</span><span class="p">,</span> <span class="mf">2.4</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">],</span> <span class="p">[</span><span class="mi">105</span><span class="p">,</span> <span class="o">-</span><span class="mf">3.1</span><span class="p">,</span> <span class="mf">0.30</span><span class="p">],</span>
    <span class="p">[</span><span class="mi">68</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.65</span><span class="p">],</span> <span class="p">[</span><span class="mi">66</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.72</span><span class="p">]</span>
<span class="p">])</span>

<span class="n">model</span> <span class="o">=</span> <span class="nc">GaussianHMM</span><span class="p">(</span>
    <span class="n">n_components</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
    <span class="n">covariance_type</span><span class="o">=</span><span class="sh">"</span><span class="s">full</span><span class="sh">"</span><span class="p">,</span>
    <span class="n">n_iter</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
    <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span>
<span class="p">)</span>
<span class="n">model</span><span class="p">.</span><span class="nf">fit</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>

<span class="n">hidden_states</span> <span class="o">=</span> <span class="n">model</span><span class="p">.</span><span class="nf">predict</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="n">hidden_states</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">fit</code>, geçiş ve gözlem dağılımlarını veriden öğrenir. <code class="language-plaintext highlighter-rouge">predict</code> ise Viterbi algoritmasını kullanarak en olası gizli durum dizisini çıkarır. Ancak dönen <code class="language-plaintext highlighter-rouge">0</code>, <code class="language-plaintext highlighter-rouge">1</code> ve <code class="language-plaintext highlighter-rouge">2</code> etiketleri otomatik olarak “uykulu” anlamına gelmez; durumların sensör ortalamaları incelenerek uzmanlar tarafından adlandırılması gerekir.</p>

<h2 id="gerçek-hayatta-dikkat-edilmesi-gerekenler">Gerçek hayatta dikkat edilmesi gerekenler</h2>

<p>HMM zamansal bağımlılığı hesaba kattığı için tek ölçümlük eşik sistemlerinden daha kararlıdır. Yine de hava koşulları, araç tipi ve sürücünün kişisel alışkanlıkları modeli etkiler. Eğitim verisi farklı sürücülerden ve yol koşullarından toplanmalı; sonuçlar precision, recall ve karışıklık matrisiyle değerlendirilmelidir.</p>

<p>Üstelik “agresif” etiketi güvenlik, sigorta ve mahremiyet sonuçları doğurabilir. Bu yüzden tahminler kesin hüküm değil, sürücü destek sistemine sunulan olasılıksal uyarılar olarak ele alınmalıdır. HMM sihirli bir zihin okuyucu değildir; fakat sensörlerin fısıltısını anlamlı bir davranış hikâyesine dönüştürmekte oldukça yeteneklidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="hidden markov modeli" /><category term="hmm" /><category term="sürücü analizi" /><category term="makine öğrenmesi" /><category term="sensör verisi" /><category term="python" /><summary type="html"><![CDATA[Bir otomobil sürücünün zihnini okuyamaz; ancak direksiyon hareketlerini, hız değişimlerini ve frenleme biçimini dikkatle dinleyebilir. Hidden Markov Modeli (HMM), doğrudan göremediğimiz uykulu, agresif veya normal sürüş durumlarını sensörlerden gelen ölçümler yardımıyla tahmin eder. Kısacası HMM, aracın küçük ipuçlarından sürücünün perde arkasındaki durumunu anlamaya çalışan istatistiksel bir dedektiftir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/direksiyon-basindaki-gorunmeyeni-86.png" /><media:content medium="image" url="https://program.sonsuz.us/img/direksiyon-basindaki-gorunmeyeni-86.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Federated Learning ve Diferansiyel Gizlilik: Veri Cihazdan Çıkmadan Model Eğitmek</title><link href="https://program.sonsuz.us/posts/federated-learning-ve-diferansiyel-gizlilik-veri-cihazdan-cikmadan-model-egitmek/" rel="alternate" type="text/html" title="Federated Learning ve Diferansiyel Gizlilik: Veri Cihazdan Çıkmadan Model Eğitmek" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/federated-learning-ve-diferansiyel-gizlilik-veri-cihazdan-cikmadan-model-egitmek</id><content type="html" xml:base="https://program.sonsuz.us/posts/federated-learning-ve-diferansiyel-gizlilik-veri-cihazdan-cikmadan-model-egitmek/"><![CDATA[<p><img src="/img/federated-learning-ve-24.svg" alt="federated-learning-ve-24" /></p>

<p>Telefonunuzun yazdığınız kelimeleri tahmin etmeyi öğrendiğini, ancak mesajlarınızın hiçbir zaman merkezi bir sunucuya gönderilmediğini düşünün. Federated Learning, yani federe öğrenme, tam olarak bu fikri hayata geçirir: Veriyi modele taşımak yerine modeli veriye götürür. Diferansiyel gizlilik ise paylaşılan model güncellemelerinden kişisel bilgilerin çıkarılmasını matematiksel olarak zorlaştırır.</p>

<p>``</p>

<h2 id="federe-öğrenme-nasıl-çalışır">Federe öğrenme nasıl çalışır?</h2>

<p>Klasik makine öğrenmesinde kullanıcı verileri merkezi bir veri tabanında toplanır ve model burada eğitilir. Federe öğrenmede sunucu, mevcut global modeli seçilen cihazlara yollar. Her cihaz modeli kendi yerel verisiyle birkaç tur eğitir ve yalnızca hesapladığı ağırlık güncellemesini sunucuya gönderir.</p>

<p>Sunucu, bu güncellemeleri genellikle <strong>Federated Averaging (FedAvg)</strong> algoritmasıyla birleştirir:</p>

\[w_{t+1} = \sum_{k=1}^{K} \frac{n_k}{N} w_{t+1}^{(k)}\]

<p>Burada $w_{t+1}^{(k)}$, $k$ numaralı cihazın güncellediği ağırlıkları; $n_k$, cihazdaki örnek sayısını; $N$ ise katılan cihazlardaki toplam örnek sayısını temsil eder. Daha fazla veriye sahip cihazın katkısı doğal olarak daha yüksek olur.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Veri nerede?</th>
      <th>Sunucuya giden</th>
      <th>Temel risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Merkezi eğitim</td>
      <td>Sunucuda</td>
      <td>Ham kullanıcı verisi</td>
      <td>Veri tabanı sızıntısı</td>
    </tr>
    <tr>
      <td>Federe öğrenme</td>
      <td>Kullanıcı cihazında</td>
      <td>Model güncellemesi</td>
      <td>Güncellemeden bilgi çıkarımı</td>
    </tr>
    <tr>
      <td>Federe öğrenme + DP</td>
      <td>Kullanıcı cihazında</td>
      <td>Gürültülü güncelleme</td>
      <td>Kontrollü doğruluk kaybı</td>
    </tr>
  </tbody>
</table>

<h2 id="güncellemeler-gerçekten-güvenli-mi">Güncellemeler gerçekten güvenli mi?</h2>

<p>Ham verinin gönderilmemesi tek başına kusursuz gizlilik sağlamaz. Saldırganlar gradyanlardan eğitim örneklerini yaklaşık olarak yeniden oluşturabilir veya belirli bir kullanıcının eğitime katılıp katılmadığını tahmin edebilir. İşte diferansiyel gizlilik, kısaca <strong>DP</strong>, burada devreye girer.</p>

<p>Bir mekanizma $M$, komşu iki veri kümesi $D$ ve $D’$ için şu koşulu sağlıyorsa $(\varepsilon, \delta)$-diferansiyel gizlidir:</p>

\[P[M(D) \in S] \leq e^{\varepsilon}P[M(D') \in S] + \delta\]

<p>Komşu veri kümeleri yalnızca bir kullanıcının eklenmesi veya çıkarılması bakımından farklıdır. Küçük $\varepsilon$ daha güçlü gizlilik, fakat çoğunlukla daha fazla gürültü ve daha düşük model doğruluğu demektir. $\delta$ ise ideal garantinin çok küçük bir olasılıkla aşılmasına izin verir.</p>

<h2 id="kırpma-ve-gürültü-ekleme">Kırpma ve gürültü ekleme</h2>

<p>Cihaz güncellemeleri önce norm sınırı $C$ ile kırpılır. Böylece tek bir kullanıcının global modele yapabileceği maksimum etki kontrol edilir:</p>

\[\bar{g}_k = g_k \cdot \min\left(1, \frac{C}{\lVert g_k \rVert_2}\right)\]

<p>Ardından toplama Gaussian gürültüsü eklenir. Aşağıdaki basitleştirilmiş Python kodu bu iki adımı gösterir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>

<span class="k">def</span> <span class="nf">privatize_update</span><span class="p">(</span><span class="n">update</span><span class="p">,</span> <span class="n">clip_norm</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">noise_scale</span><span class="o">=</span><span class="mf">0.2</span><span class="p">):</span>
    <span class="c1"># Güncellemenin etkisini belirlenen üst sınırda tutar.
</span>    <span class="n">norm</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">linalg</span><span class="p">.</span><span class="nf">norm</span><span class="p">(</span><span class="n">update</span><span class="p">)</span>
    <span class="n">clipped</span> <span class="o">=</span> <span class="n">update</span> <span class="o">*</span> <span class="nf">min</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">clip_norm</span> <span class="o">/</span> <span class="p">(</span><span class="n">norm</span> <span class="o">+</span> <span class="mf">1e-12</span><span class="p">))</span>

    <span class="c1"># Bireysel katkının ayırt edilmesini zorlaştırır.
</span>    <span class="n">noise</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">random</span><span class="p">.</span><span class="nf">normal</span><span class="p">(</span>
        <span class="n">loc</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
        <span class="n">scale</span><span class="o">=</span><span class="n">noise_scale</span> <span class="o">*</span> <span class="n">clip_norm</span><span class="p">,</span>
        <span class="n">size</span><span class="o">=</span><span class="n">update</span><span class="p">.</span><span class="n">shape</span>
    <span class="p">)</span>
    <span class="k">return</span> <span class="n">clipped</span> <span class="o">+</span> <span class="n">noise</span>
</code></pre></div></div>

<p>Gerçek sistemlerde gürültü her cihazda veya güvenli toplama sonrasında sunucuda uygulanabilir. <strong>Secure Aggregation</strong> kullanıldığında sunucu tek tek güncellemeleri göremez; yalnızca toplam sonucu elde eder. Bu teknik DP’nin alternatifi değil, güçlü bir tamamlayıcısıdır.</p>

<h2 id="milyonlarca-cihaz-neden-zorlu">Milyonlarca cihaz neden zorlu?</h2>

<p>Cihazların işlem gücü, bağlantı kalitesi ve veri dağılımları farklıdır. Bir telefonda gece çekilmiş fotoğraflar, diğerinde gündüz görüntüleri bulunabilir; yani veriler çoğunlukla bağımsız ve özdeş dağılımlı değildir. Ayrıca her turda cihazların yalnızca küçük bir bölümü çevrim içidir.</p>

<table>
  <thead>
    <tr>
      <th>Karar</th>
      <th>Avantaj</th>
      <th>Bedel</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Daha küçük $\varepsilon$</td>
      <td>Güçlü gizlilik</td>
      <td>Daha fazla doğruluk kaybı</td>
    </tr>
    <tr>
      <td>Büyük kırpma sınırı</td>
      <td>Faydalı sinyal korunur</td>
      <td>Kullanıcı etkisi artar</td>
    </tr>
    <tr>
      <td>Fazla eğitim turu</td>
      <td>Model gelişebilir</td>
      <td>Gizlilik bütçesi tüketilir</td>
    </tr>
    <tr>
      <td>Güvenli toplama</td>
      <td>Güncellemeleri saklar</td>
      <td>İletişim maliyeti yaratır</td>
    </tr>
  </tbody>
</table>

<p>Sonuç olarak federe öğrenme veriyi cihazda tutar, diferansiyel gizlilik ise modelin veriyi istemeden ezberlemesini sınırlar. İkisi güvenli toplama, şifreli iletişim ve düzenli gizlilik muhasebesiyle birleştiğinde milyonlarca kullanıcıdan öğrenen; ancak tek bir kullanıcı hakkında mümkün olduğunca az şey söyleyen dev modeller kurulabilir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="federated learning" /><category term="diferansiyel gizlilik" /><category term="makine öğrenmesi" /><category term="yapay zeka" /><category term="veri güvenliği" /><category term="python" /><summary type="html"><![CDATA[Telefonunuzun yazdığınız kelimeleri tahmin etmeyi öğrendiğini, ancak mesajlarınızın hiçbir zaman merkezi bir sunucuya gönderilmediğini düşünün. Federated Learning, yani federe öğrenme, tam olarak bu fikri hayata geçirir: Veriyi modele taşımak yerine modeli veriye götürür. Diferansiyel gizlilik ise paylaşılan model güncellemelerinden kişisel bilgilerin çıkarılmasını matematiksel olarak zorlaştırır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/federated-learning-ve-24.png" /><media:content medium="image" url="https://program.sonsuz.us/img/federated-learning-ve-24.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Generative AI’da Temperature ve Top-P: Yaratıcılığın Ayar Düğmeleri</title><link href="https://program.sonsuz.us/posts/generative-aida-temperature-ve-top-p-yaraticiligin-ayar-dugmeleri/" rel="alternate" type="text/html" title="Generative AI’da Temperature ve Top-P: Yaratıcılığın Ayar Düğmeleri" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/generative-aida-temperature-ve-top-p-yaraticiligin-ayar-dugmeleri</id><content type="html" xml:base="https://program.sonsuz.us/posts/generative-aida-temperature-ve-top-p-yaraticiligin-ayar-dugmeleri/"><![CDATA[<p><img src="/img/generative-aida-temperature-32.svg" alt="generative-aida-temperature-32" /></p>

<p>Bir dil modeline “Bana bir hikâye yaz” dediğinizde bazen güvenli ve tahmin edilebilir, bazen de uzayda simit satan melankolik bir robot kadar sıra dışı sonuçlar alabilirsiniz. Bu farkın önemli nedenlerinden ikisi <strong>temperature</strong> ve <strong>top-p</strong> parametreleridir. Bu ayarlar modelin bilgisini değiştirmez; bir sonraki token seçilirken ne kadar temkinli veya maceracı davranacağını belirler.
``</p>
<h2 id="model-aslında-neyi-seçiyor">Model aslında neyi seçiyor?</h2>

<p>Dil modelleri metni tek seferde yazmaz. Her adımda mevcut bağlama bakarak olası sonraki token’lara puan verir. Bu puanlar <strong>softmax</strong> fonksiyonu ile olasılığa dönüştürülür:</p>

\[P(x_i)=\frac{e^{z_i}}{\sum_j e^{z_j}}\]

<p>Burada $z_i$, ilgili token’ın ham skorudur. Model daha sonra bu dağılımdan seçim yapar. Örneğin “Gökyüzü bugün çok…” ifadesinden sonra dağılım şöyle olabilir:</p>

<table>
  <thead>
    <tr>
      <th>Token</th>
      <th style="text-align: right">Olasılık</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>güzel</td>
      <td style="text-align: right">%45</td>
    </tr>
    <tr>
      <td>mavi</td>
      <td style="text-align: right">%30</td>
    </tr>
    <tr>
      <td>bulutlu</td>
      <td style="text-align: right">%20</td>
    </tr>
    <tr>
      <td>turşulu</td>
      <td style="text-align: right">%5</td>
    </tr>
  </tbody>
</table>

<p>En yüksek olasılıklı token’ı sürekli seçmek tutarlı sonuçlar üretir; ancak metin kısa sürede tahmin edilebilir hâle gelebilir. İşte temperature ve top-p bu noktada sahneye çıkar.</p>

<h2 id="temperature-olasılıkların-ses-mikseri">Temperature: Olasılıkların ses mikseri</h2>

<p>Temperature, softmax hesabındaki skorları yeniden ölçeklendirir:</p>

\[P(x_i)=\frac{e^{z_i/T}}{\sum_j e^{z_j/T}}\]

<p>$T$ temperature değeridir. Düşük değerlerde güçlü adaylar daha baskın hâle gelir. Yüksek değerlerde dağılım düzleşir ve düşük olasılıklı seçeneklerin seçilme şansı artar.</p>

<table>
  <thead>
    <tr>
      <th style="text-align: right">Temperature</th>
      <th>Davranış</th>
      <th>Uygun kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: right">0–0.2</td>
      <td>Çok kararlı, tekrarlanabilir</td>
      <td>Sınıflandırma, veri çıkarma</td>
    </tr>
    <tr>
      <td style="text-align: right">0.3–0.7</td>
      <td>Dengeli ve kontrollü</td>
      <td>Açıklama, özetleme, kod yardımı</td>
    </tr>
    <tr>
      <td style="text-align: right">0.8–1.2</td>
      <td>Çeşitli ve yaratıcı</td>
      <td>Hikâye, slogan, beyin fırtınası</td>
    </tr>
    <tr>
      <td style="text-align: right">1.2 üzeri</td>
      <td>Sürprizli, hata riski yüksek</td>
      <td>Deneysel üretim</td>
    </tr>
  </tbody>
</table>

<p>Temperature sıfıra yaklaştığında sistem çoğunlukla en güçlü adayı seçer. Fakat API davranışı sağlayıcıya göre değişebilir; “temperature 0” her platformda matematiksel olarak tamamen deterministik sonuç garantisi değildir.</p>

<h2 id="top-p-davetli-listesini-daraltmak">Top-P: Davetli listesini daraltmak</h2>

<p><strong>Top-p</strong>, diğer adıyla nucleus sampling, token’ları olasılıklarına göre sıralar ve toplam olasılığı $p$ eşiğine ulaşan en küçük aday kümesini tutar. Örneğin $p=0.90$ ise model, toplam olasılığın en az %90’ını kapsayan seçenekler arasından seçim yapar.</p>

<p>Önceki örnekte top-p değeri 0.75 olursa “güzel” ve “mavi” adayları toplamda %75’e ulaştığı için diğerleri elenir. Böylece “turşulu” gökyüzü şimdilik kuliste bekler.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Temperature</th>
      <th>Top-P</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Müdahale biçimi</td>
      <td>Dağılımın keskinliğini değiştirir</td>
      <td>Aday havuzunu sınırlar</td>
    </tr>
    <tr>
      <td>Düşük değer etkisi</td>
      <td>Güçlü adayları baskınlaştırır</td>
      <td>Yalnızca en olası adayları bırakır</td>
    </tr>
    <tr>
      <td>Yüksek değer etkisi</td>
      <td>Rastlantısallığı artırır</td>
      <td>Daha geniş aday kümesi sunar</td>
    </tr>
    <tr>
      <td>Temel risk</td>
      <td>Anlamsız seçimler</td>
      <td>Fazla dar ve tekdüze metin</td>
    </tr>
  </tbody>
</table>

<h2 id="python-ile-küçük-bir-deney">Python ile küçük bir deney</h2>

<p>Aşağıdaki kod, OpenAI uyumlu bir istemcide aynı istemi farklı ayarlarla çalıştırarak sonuçları karşılaştırır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">openai</span> <span class="kn">import</span> <span class="n">OpenAI</span>

<span class="n">client</span> <span class="o">=</span> <span class="nc">OpenAI</span><span class="p">()</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="sh">"</span><span class="s">Yağmuru anlatan tek cümlelik yaratıcı bir slogan yaz.</span><span class="sh">"</span>

<span class="n">ayarlar</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span><span class="sh">"</span><span class="s">temperature</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.2</span><span class="p">,</span> <span class="sh">"</span><span class="s">top_p</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.9</span><span class="p">},</span>
    <span class="p">{</span><span class="sh">"</span><span class="s">temperature</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.8</span><span class="p">,</span> <span class="sh">"</span><span class="s">top_p</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.95</span><span class="p">},</span>
    <span class="p">{</span><span class="sh">"</span><span class="s">temperature</span><span class="sh">"</span><span class="p">:</span> <span class="mf">1.2</span><span class="p">,</span> <span class="sh">"</span><span class="s">top_p</span><span class="sh">"</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">},</span>
<span class="p">]</span>

<span class="k">for</span> <span class="n">ayar</span> <span class="ow">in</span> <span class="n">ayarlar</span><span class="p">:</span>
    <span class="n">yanit</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="n">responses</span><span class="p">.</span><span class="nf">create</span><span class="p">(</span>
        <span class="n">model</span><span class="o">=</span><span class="sh">"</span><span class="s">gpt-4.1-mini</span><span class="sh">"</span><span class="p">,</span>
        <span class="nb">input</span><span class="o">=</span><span class="n">prompt</span><span class="p">,</span>
        <span class="n">temperature</span><span class="o">=</span><span class="n">ayar</span><span class="p">[</span><span class="sh">"</span><span class="s">temperature</span><span class="sh">"</span><span class="p">],</span>
        <span class="n">top_p</span><span class="o">=</span><span class="n">ayar</span><span class="p">[</span><span class="sh">"</span><span class="s">top_p</span><span class="sh">"</span><span class="p">]</span>
    <span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">ayar</span><span class="p">,</span> <span class="n">yanit</span><span class="p">.</span><span class="n">output_text</span><span class="p">)</span>
</code></pre></div></div>

<p>Kod aynı görevi üç örnekleme profiliyle çalıştırır. İlk profil güvenli, ikincisi dengeli, üçüncüsü ise daha sürprizli ifadeler üretmeye eğilimlidir. Sonuçların değişkenliğini görmek için her profili birkaç kez çalıştırmak gerekir.</p>

<h2 id="hangisini-ne-zaman-ayarlamalıyız">Hangisini ne zaman ayarlamalıyız?</h2>

<p>Fatura bilgisi çıkarma, JSON üretme veya kod düzeltme gibi doğruluğun önemli olduğu görevlerde düşük temperature ve nispeten dar top-p tercih edilebilir. Pazarlama metni, karakter diyaloğu ve fikir üretiminde değerler yükseltilebilir. Yine de iki parametreyi aynı anda aşırı değiştirmek, hangi ayarın sonucu etkilediğini anlamayı zorlaştırır.</p>

<p>Pratik başlangıç noktası olarak temperature için <strong>0.6–0.8</strong>, top-p için <strong>0.9–1.0</strong> denenebilir. Ardından yalnızca bir parametre değiştirilerek kalite, çeşitlilik ve tutarlılık ölçülmelidir. Kısacası temperature modelin ne kadar cesur konuşacağını, top-p ise konuşmadan önce kaç kelime adayını masada tutacağını belirler. İyi ayarlandıklarında yapay zekâ ne toplantı tutanağı kadar sıkıcı ne de rüya günlüğü kadar kontrolsüz olur.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="generative ai" /><category term="temperature" /><category term="top-p" /><category term="dil modelleri" /><category term="yapay zeka" /><category term="olasılık" /><summary type="html"><![CDATA[Bir dil modeline “Bana bir hikâye yaz” dediğinizde bazen güvenli ve tahmin edilebilir, bazen de uzayda simit satan melankolik bir robot kadar sıra dışı sonuçlar alabilirsiniz. Bu farkın önemli nedenlerinden ikisi temperature ve top-p parametreleridir. Bu ayarlar modelin bilgisini değiştirmez; bir sonraki token seçilirken ne kadar temkinli veya maceracı davranacağını belirler.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/generative-aida-temperature-32.png" /><media:content medium="image" url="https://program.sonsuz.us/img/generative-aida-temperature-32.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Isolation Forest ile Anomali Tespiti: Ormanda En Çabuk Yalnız Kalanı Bulmak</title><link href="https://program.sonsuz.us/posts/isolation-forest-ile-anomali-tespiti-ormanda-en-cabuk-yalniz-kalani-bulmak/" rel="alternate" type="text/html" title="Isolation Forest ile Anomali Tespiti: Ormanda En Çabuk Yalnız Kalanı Bulmak" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/isolation-forest-ile-anomali-tespiti-ormanda-en-cabuk-yalniz-kalani-bulmak</id><content type="html" xml:base="https://program.sonsuz.us/posts/isolation-forest-ile-anomali-tespiti-ormanda-en-cabuk-yalniz-kalani-bulmak/"><![CDATA[<p>Bir veri kümesinde aykırı değer ararken çoğu yöntem önce “normal” davranışın nasıl göründüğünü öğrenmeye çalışır. Isolation Forest ise meseleyi tersinden ele alır: Normal değerlerin ayrıntılı profilini çıkarmak yerine, rastgele bölmelerle hangi gözlemlerin daha çabuk yalnız kaldığına bakar. Çünkü kalabalıktan uzak duran bir veri noktasını izole etmek, mahallenin ortasında yaşayan bir noktayı izole etmekten genellikle daha kolaydır.</p>

<p><img src="/img/isolation-forest-ile-14.svg" alt="isolation-forest-ile-14" /></p>

<p>``</p>

<h2 id="temel-fikir-anomali-neden-çabuk-izole-edilir">Temel fikir: Anomali neden çabuk izole edilir?</h2>

<p>Elimizde işlem tutarı ve işlem saati gibi özelliklerden oluşan bir veri kümesi bulunduğunu düşünelim. Noktaların çoğu birbirine yakınken çok yüksek tutarlı, gece yarısı yapılmış tek bir işlem uzak bir bölgede kalabilir. Isolation Forest, rastgele bir özellik seçer ve bu özelliğin minimum ile maksimum değerleri arasında rastgele bir bölme üretir.</p>

<p>Bu işlem ağaç boyunca tekrarlandığında aykırı nokta birkaç bölmeden sonra tek başına kalabilir. Normal bir noktanın ayrılması içinse kalabalık komşuluğun tekrar tekrar parçalanması gerekir. Bir gözlemin kökten yaprağa kadar geçtiği kenar sayısına <strong>yol uzunluğu</strong> denir ve $h(x)$ ile gösterilir.</p>

<table>
  <thead>
    <tr>
      <th>Gözlem türü</th>
      <th style="text-align: right">Ortalama yol uzunluğu</th>
      <th>Beklenen sonuç</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Yoğun bölgede normal nokta</td>
      <td style="text-align: right">Uzun</td>
      <td>Düşük anomali skoru</td>
    </tr>
    <tr>
      <td>Sınırda bulunan nokta</td>
      <td style="text-align: right">Orta</td>
      <td>Şüpheli</td>
    </tr>
    <tr>
      <td>Uzak ve seyrek nokta</td>
      <td style="text-align: right">Kısa</td>
      <td>Yüksek anomali skoru</td>
    </tr>
  </tbody>
</table>

<p>Tek bir rastgele ağaç yanıltıcı olabilir. Bu nedenle algoritma birçok izolasyon ağacı oluşturur ve sonuçların ortalamasını alır. “Forest” kelimesinin hakkını veren kısım da tam olarak budur.</p>

<h2 id="anomali-skoru-nasıl-hesaplanır">Anomali skoru nasıl hesaplanır?</h2>

<p>Bir $x$ gözleminin skorunda, ağaçlar üzerindeki ortalama yol uzunluğu $E[h(x)]$ kullanılır:</p>

\[s(x,n)=2^{-\frac{E[h(x)]}{c(n)}}\]

<p>Buradaki $n$ örnek sayısını, $c(n)$ ise başarısız bir ikili arama ağacındaki ortalama yol uzunluğunu temsil eden normalleştirme katsayısını belirtir:</p>

\[c(n)=2H(n-1)-\frac{2(n-1)}{n}\]

<p>$H(i)$ harmonik sayıdır ve yaklaşık olarak $H(i)\approx \ln(i)+\gamma$ biçiminde hesaplanabilir. Skor 1’e yaklaştıkça gözlem daha anormal, 0,5 civarında kaldıkça daha sıradan kabul edilir. Böylece farklı veri büyüklüklerinden elde edilen yol uzunlukları karşılaştırılabilir hâle gelir.</p>

<h2 id="python-ile-küçük-bir-anomali-avı">Python ile küçük bir anomali avı</h2>

<p>Scikit-learn içindeki <code class="language-plaintext highlighter-rouge">IsolationForest</code> sınıfı, yöntemi birkaç satırda uygulamamızı sağlar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">pandas</span> <span class="k">as</span> <span class="n">pd</span>
<span class="kn">from</span> <span class="n">sklearn.ensemble</span> <span class="kn">import</span> <span class="n">IsolationForest</span>

<span class="n">veri</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">({</span>
    <span class="sh">"</span><span class="s">tutar</span><span class="sh">"</span><span class="p">:</span> <span class="p">[</span><span class="mi">42</span><span class="p">,</span> <span class="mi">48</span><span class="p">,</span> <span class="mi">51</span><span class="p">,</span> <span class="mi">46</span><span class="p">,</span> <span class="mi">49</span><span class="p">,</span> <span class="mi">1200</span><span class="p">,</span> <span class="mi">44</span><span class="p">,</span> <span class="mi">53</span><span class="p">],</span>
    <span class="sh">"</span><span class="s">saat</span><span class="sh">"</span><span class="p">:</span>  <span class="p">[</span><span class="mi">13</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">13</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">12</span><span class="p">]</span>
<span class="p">})</span>

<span class="n">model</span> <span class="o">=</span> <span class="nc">IsolationForest</span><span class="p">(</span>
    <span class="n">n_estimators</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
    <span class="n">contamination</span><span class="o">=</span><span class="mf">0.125</span><span class="p">,</span>
    <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span>
<span class="p">)</span>

<span class="n">model</span><span class="p">.</span><span class="nf">fit</span><span class="p">(</span><span class="n">veri</span><span class="p">)</span>
<span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tahmin</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">model</span><span class="p">.</span><span class="nf">predict</span><span class="p">(</span><span class="n">veri</span><span class="p">)</span>
<span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">anomali_skoru</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">model</span><span class="p">.</span><span class="nf">score_samples</span><span class="p">(</span><span class="n">veri</span><span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="n">veri</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="sh">"</span><span class="s">anomali_skoru</span><span class="sh">"</span><span class="p">,</span> <span class="n">ascending</span><span class="o">=</span><span class="bp">False</span><span class="p">))</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">n_estimators</code>, ormandaki ağaç sayısını belirler. Daha fazla ağaç genellikle daha kararlı sonuç üretir ancak hesaplama maliyetini artırır. <code class="language-plaintext highlighter-rouge">contamination</code>, veride beklenen anomali oranıdır. <code class="language-plaintext highlighter-rouge">predict</code> normal gözlemler için <code class="language-plaintext highlighter-rouge">1</code>, anomaliler için <code class="language-plaintext highlighter-rouge">-1</code> döndürür. <code class="language-plaintext highlighter-rouge">score_samples</code> sonucunun işaretini ters çevirerek büyük değerin daha şüpheli olduğu, okunması kolay bir skor elde ediyoruz.</p>

<h2 id="neden-tercih-edilir">Neden tercih edilir?</h2>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Normal dağılım varsayımı</th>
      <th>Büyük veride hız</th>
      <th>Yüksek boyuta uygunluk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Z-skoru</td>
      <td>Genellikle gerekli</td>
      <td>Yüksek</td>
      <td>Düşük</td>
    </tr>
    <tr>
      <td>Kümeleme tabanlı yöntemler</td>
      <td>Gerekli değil</td>
      <td>Değişken</td>
      <td>Orta</td>
    </tr>
    <tr>
      <td>Isolation Forest</td>
      <td>Gerekli değil</td>
      <td>Yüksek</td>
      <td>İyi</td>
    </tr>
  </tbody>
</table>

<p>Isolation Forest’ın eğitim maliyeti örnekleme sayesinde yaklaşık $O(t\,\psi\log\psi)$ düzeyindedir. Burada $t$ ağaç sayısını, $\psi$ ise her ağaç için kullanılan örnek büyüklüğünü gösterir. Bu yapı, milyonlarca satırın bulunduğu dolandırıcılık, sensör arızası ve sistem günlüğü senaryolarında yöntemi cazip kılar.</p>

<p>Yine de algoritma “neden anomali?” sorusunu tek başına açıklamaz. Kategorik değişkenler uygun biçimde kodlanmalı, özellik ölçekleri ve veri sızıntısı kontrol edilmeli, <code class="language-plaintext highlighter-rouge">contamination</code> iş bilgisiyle seçilmelidir. Kısacası Isolation Forest hızlı bir bekçidir; alarmı iyi çalar, fakat olay yerindeki son kararı yine alan bilgisi verir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="isolation forest" /><category term="anomali tespiti" /><category term="makine öğrenmesi" /><category term="python" /><category term="scikit-learn" /><category term="veri bilimi" /><summary type="html"><![CDATA[Bir veri kümesinde aykırı değer ararken çoğu yöntem önce “normal” davranışın nasıl göründüğünü öğrenmeye çalışır. Isolation Forest ise meseleyi tersinden ele alır: Normal değerlerin ayrıntılı profilini çıkarmak yerine, rastgele bölmelerle hangi gözlemlerin daha çabuk yalnız kaldığına bakar. Çünkü kalabalıktan uzak duran bir veri noktasını izole etmek, mahallenin ortasında yaşayan bir noktayı izole etmekten genellikle daha kolaydır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/isolation-forest-ile-14.png" /><media:content medium="image" url="https://program.sonsuz.us/img/isolation-forest-ile-14.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Karar Ağaçlarında Gini Impurity ve Entropy: Bölünme Kriterlerinin Matematiği</title><link href="https://program.sonsuz.us/posts/karar-agaclarinda-gini-impurity-ve-entropy-bolunme-kriterlerinin-matematigi/" rel="alternate" type="text/html" title="Karar Ağaçlarında Gini Impurity ve Entropy: Bölünme Kriterlerinin Matematiği" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/karar-agaclarinda-gini-impurity-ve-entropy-bolunme-kriterlerinin-matematigi</id><content type="html" xml:base="https://program.sonsuz.us/posts/karar-agaclarinda-gini-impurity-ve-entropy-bolunme-kriterlerinin-matematigi/"><![CDATA[<p>Bir karar ağacı, verileri dallara ayırırken sürekli aynı soruyu sorar: “Hangi bölünme, sınıfları birbirinden en iyi şekilde ayırır?” Bu soruyu yalnızca sezgilerle cevaplamak yerine düğümlerin ne kadar karışık olduğunu ölçeriz. Sınıflandırma ağaçlarında bu amaçla en sık kullanılan iki ölçüt <strong>Gini Impurity</strong> ve <strong>Entropy</strong>’dir. İkisi de aynı hedefe koşar; ancak hedefe giderken kullandıkları matematiksel rota biraz farklıdır.</p>

<p>``</p>

<h2 id="saflık-ve-belirsizlik-ne-anlama-gelir">Saflık ve belirsizlik ne anlama gelir?</h2>

<p>Bir düğümdeki örneklerin tamamı aynı sınıfa aitse düğüm saftır. Örneğin kutuda yalnızca elmalar bulunuyorsa belirsizlik yoktur. Kutuda eşit sayıda elma ve armut varsa hangi meyveyi çekeceğimizi tahmin etmek daha zordur.</p>

<p>İki sınıflı bir problemde pozitif sınıfın oranı $p$, negatif sınıfın oranı $1-p$ olsun. Hem Gini hem de Entropy, $p=0$ veya $p=1$ olduğunda sıfır değerini alır. En yüksek belirsizlik ise sınıflar dengeliyken, yani $p=0.5$ civarında ortaya çıkar.</p>

<h2 id="gini-impurity-matematiği">Gini Impurity matematiği</h2>

<p>Gini Impurity, rastgele seçilen bir örneğin düğümdeki sınıf dağılımına göre rastgele etiketlenmesi durumunda yanlış sınıflandırılma olasılığını temsil eder:</p>

\[Gini = 1 - \sum_{i=1}^{K} p_i^2\]

<p>Burada $K$ sınıf sayısını, $p_i$ ise $i$ sınıfının düğümdeki oranını gösterir. Yüzde 50 kedi ve yüzde 50 köpek bulunan bir düğüm için:</p>

\[Gini = 1-(0.5^2+0.5^2)=0.5\]

<p>Dağılım yüzde 90 kedi ve yüzde 10 köpek olduğunda sonuç $0.18$ olur. Değerin küçülmesi, düğümün daha saf hâle geldiğini gösterir.</p>

<h2 id="entropy-ve-bilgi-teorisi">Entropy ve bilgi teorisi</h2>

<p>Entropy, bilgi teorisinden gelir ve bir dağılımdaki şaşkınlığı ya da belirsizliği ölçer:</p>

\[Entropy = -\sum_{i=1}^{K} p_i\log_2(p_i)\]

<p>Eşit dağılımlı iki sınıfta Entropy değeri $1$’dir. Tek bir sınıftan oluşan düğümde ise $0$ olur. Hesaplama sırasında $0\log_2(0)$ ifadesi limit yaklaşımıyla sıfır kabul edilir.</p>

<p>Entropy ile bölünme değerlendirilirken çoğunlukla <strong>Information Gain</strong> kullanılır:</p>

\[IG = H(parent)-\sum_j \frac{n_j}{n}H(child_j)\]

<p>Yani çocuk düğümlerin ağırlıklı belirsizliği, ebeveynin belirsizliğinden çıkarılır. En yüksek bilgi kazancını sağlayan bölünme seçilir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Gini Impurity</th>
      <th>Entropy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Formül yapısı</td>
      <td>Kare alma</td>
      <td>Logaritma</td>
    </tr>
    <tr>
      <td>İkili sınıfta maksimum</td>
      <td>$0.5$</td>
      <td>$1$</td>
    </tr>
    <tr>
      <td>Hesaplama maliyeti</td>
      <td>Genellikle daha düşük</td>
      <td>Biraz daha yüksek</td>
    </tr>
    <tr>
      <td>Hassasiyet</td>
      <td>Baskın sınıfa odaklanabilir</td>
      <td>Nadir sınıflara biraz daha duyarlıdır</td>
    </tr>
    <tr>
      <td>Yaygın kullanım</td>
      <td>CART, scikit-learn varsayılanı</td>
      <td>ID3, C4.5 ve bilgi kazancı</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/karar-agaclarinda-gini-71.svg" alt="karar-agaclarinda-gini-71" /></p>

<h2 id="bölünme-nasıl-puanlanır">Bölünme nasıl puanlanır?</h2>

<p>Bir aday bölünmenin kalitesi, çocuk düğümlerin ağırlıklı impurity değeriyle hesaplanır:</p>

\[I_{split}=\frac{n_L}{n}I_L+\frac{n_R}{n}I_R\]

<p>Amaç bu değeri küçültmek veya ebeveyn düğüme göre impurity azalmasını büyütmektir. Çok saf fakat yalnızca iki örnek içeren bir dalın ağacı yanıltmaması için örnek sayılarıyla ağırlıklandırma kritik öneme sahiptir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">sklearn.tree</span> <span class="kn">import</span> <span class="n">DecisionTreeClassifier</span>

<span class="c1"># Aynı veri üzerinde iki farklı saflık ölçütü kullanan modeller
</span><span class="n">models</span> <span class="o">=</span> <span class="p">{</span>
    <span class="sh">'</span><span class="s">gini</span><span class="sh">'</span><span class="p">:</span> <span class="nc">DecisionTreeClassifier</span><span class="p">(</span><span class="n">criterion</span><span class="o">=</span><span class="sh">'</span><span class="s">gini</span><span class="sh">'</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span><span class="p">),</span>
    <span class="sh">'</span><span class="s">entropy</span><span class="sh">'</span><span class="p">:</span> <span class="nc">DecisionTreeClassifier</span><span class="p">(</span><span class="n">criterion</span><span class="o">=</span><span class="sh">'</span><span class="s">entropy</span><span class="sh">'</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span><span class="p">)</span>
<span class="p">}</span>

<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">model</span> <span class="ow">in</span> <span class="n">models</span><span class="p">.</span><span class="nf">items</span><span class="p">():</span>
    <span class="n">model</span><span class="p">.</span><span class="nf">fit</span><span class="p">(</span><span class="n">X_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">model</span><span class="p">.</span><span class="nf">score</span><span class="p">(</span><span class="n">X_test</span><span class="p">,</span> <span class="n">y_test</span><span class="p">))</span>
</code></pre></div></div>

<p>Bu kod iki ağacı aynı eğitim verisiyle kurar ve test doğruluklarını karşılaştırır. Sağlıklı bir deneyde yalnızca doğruluğa değil; eğitim süresine, ağaç derinliğine, çapraz doğrulama skorlarına ve dengesiz veri varsa F1 ya da ROC-AUC değerlerine de bakılmalıdır.</p>

<h2 id="hangisini-seçmeliyiz">Hangisini seçmeliyiz?</h2>

<p>Pratikte iki kriter çoğu zaman benzer bölünmeler ve tahmin performansı üretir. Gini, logaritma hesaplamadığı için teorik olarak daha hızlıdır; Entropy ise olasılıklardaki değişimleri bilgi miktarı olarak yorumlamayı sağlar. Küçük hız farkları modern uygulamalarda genellikle belirleyici değildir.</p>

<p>En doğru yaklaşım, kriteri bir hiperparametre gibi değerlendirmektir. Çapraz doğrulamayla ikisini de deneyin; genelleme performansı, model karmaşıklığı ve çalışma süresi açısından daha uygun olanı seçin. Kısacası Gini hızlı bir saflık dedektörü, Entropy ise bilgi teorisi gözlüğü takmış meraklı bir matematikçidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="makine öğrenmesi" /><category term="karar ağaçları" /><category term="gini impurity" /><category term="entropy" /><category term="python" /><category term="veri bilimi" /><summary type="html"><![CDATA[Bir karar ağacı, verileri dallara ayırırken sürekli aynı soruyu sorar: “Hangi bölünme, sınıfları birbirinden en iyi şekilde ayırır?” Bu soruyu yalnızca sezgilerle cevaplamak yerine düğümlerin ne kadar karışık olduğunu ölçeriz. Sınıflandırma ağaçlarında bu amaçla en sık kullanılan iki ölçüt Gini Impurity ve Entropy’dir. İkisi de aynı hedefe koşar; ancak hedefe giderken kullandıkları matematiksel rota biraz farklıdır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/karar-agaclarinda-gini-71.png" /><media:content medium="image" url="https://program.sonsuz.us/img/karar-agaclarinda-gini-71.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">LightGBM’in Sırrı: Histogram Tabanlı Öğrenme ile XGBoost’u Nasıl Geçti?</title><link href="https://program.sonsuz.us/posts/lightgbmin-sirri-histogram-tabanli-ogrenme-ile-xgboostu-nasil-gecti/" rel="alternate" type="text/html" title="LightGBM’in Sırrı: Histogram Tabanlı Öğrenme ile XGBoost’u Nasıl Geçti?" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/lightgbmin-sirri-histogram-tabanli-ogrenme-ile-xgboostu-nasil-gecti</id><content type="html" xml:base="https://program.sonsuz.us/posts/lightgbmin-sirri-histogram-tabanli-ogrenme-ile-xgboostu-nasil-gecti/"><![CDATA[<p>Gradient boosting dünyasında doğruluk kadar eğitim süresi ve bellek tüketimi de önemlidir. LightGBM, sürekli özelliklerdeki her değeri ayrı ayrı incelemek yerine değerleri küçük aralıklara, yani <strong>bin</strong> adı verilen sepetlere yerleştirerek bu dengeyi değiştirdi. Milyonlarca satırlık veriyle çalışan bir algoritma için bu yaklaşım, tek tek bozuk para saymak yerine onları önceden hazırlanmış kutularda tartmaya benzer.</p>

<p>``</p>

<h2 id="gradient-boosting-neden-pahalıdır">Gradient boosting neden pahalıdır?</h2>

<p>Gradient boosting, önceki ağaçların hatalarını azaltacak yeni karar ağaçlarını ardışık biçimde üretir. Modelin genel tahmini kabaca şöyle yazılabilir:</p>

\[F_t(x) = F_{t-1}(x) + \eta f_t(x)\]

<p>Burada $f_t(x)$ yeni ağacı, $\eta$ ise öğrenme oranını temsil eder. Her düğümde algoritmanın “Bu özelliği hangi değerden bölersem kayıp en fazla azalır?” sorusunu cevaplaması gerekir.</p>

<p>Klasik yaklaşımda sürekli bir özelliğin değerleri sıralanır ve olası eşikler değerlendirilir. $n$ örnek ve $m$ özellik için bu işlem büyük veri kümelerinde ciddi sıralama, tarama ve bellek maliyeti oluşturabilir. Üstelik aynı tür hesaplamalar ağacın birçok düğümünde tekrarlanır.</p>

<h2 id="histogram-numarası">Histogram numarası</h2>

<p>LightGBM, her sürekli özelliği genellikle birkaç yüz bin içine dönüştürür. Örneğin yaş değerleri tek tek tutulmak yerine <code class="language-plaintext highlighter-rouge">18-25</code>, <code class="language-plaintext highlighter-rouge">26-35</code> ve <code class="language-plaintext highlighter-rouge">36-50</code> gibi gruplara eşlenebilir. Gerçekte sınırlar veri dağılımına göre daha sistematik belirlenir.</p>

<p>Her bin için gradyan ve Hessian değerleri toplanır:</p>

\[G_b = \sum_{i \in b} g_i, \qquad H_b = \sum_{i \in b} h_i\]

<p>Bölünme kazancı artık bütün örnekler yerine bu özetler üzerinden hesaplanabilir. Böylece çalışma maliyeti örnek sayısından çok bin sayısına bağlı hâle gelir. Ayrıca ham ondalıklı değerler yerine küçük tamsayı bin kimlikleri saklanabildiği için bellek kullanımı azalır ve işlemci önbelleği daha verimli kullanılır.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th style="text-align: right">Bölünme adayları</th>
      <th style="text-align: right">Bellek ihtiyacı</th>
      <th>Eğitim davranışı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Geleneksel exact yöntem</td>
      <td style="text-align: right">Neredeyse tüm benzersiz değerler</td>
      <td style="text-align: right">Yüksek</td>
      <td>Küçük veride hassas, büyük veride pahalı</td>
    </tr>
    <tr>
      <td>Histogram yöntemi</td>
      <td style="text-align: right">Sınırlı sayıda bin</td>
      <td style="text-align: right">Daha düşük</td>
      <td>Büyük veride hızlı ve ölçeklenebilir</td>
    </tr>
    <tr>
      <td>Çok az bin</td>
      <td style="text-align: right">Çok az eşik</td>
      <td style="text-align: right">Çok düşük</td>
      <td>Hızlı fakat bilgi kaybına açık</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/lightgbmin-sirri-histogram-54.svg" alt="lightgbmin-sirri-histogram-54" /></p>

<p>Histogramlar yalnızca hız sağlamaz. Bir düğümün histogramı ile çocuklarından birinin histogramı biliniyorsa diğer çocuk çıkarma işlemiyle bulunabilir. Bu <strong>histogram subtraction</strong> tekniği, aynı verinin tekrar tekrar taranmasını önler.</p>

<h2 id="lightgbmi-farklılaştıran-diğer-parçalar">LightGBM’i farklılaştıran diğer parçalar</h2>

<p>LightGBM’in avantajını yalnızca histogramlara bağlamak eksik olur. Algoritma çoğunlukla ağacı seviye seviye değil, kaybı en fazla azaltan yaprağı büyüterek oluşturur. <strong>Leaf-wise</strong> büyüme daha düşük kayba hızlı ulaşabilir; ancak küçük verilerde aşırı öğrenme riski taşır. Bu nedenle <code class="language-plaintext highlighter-rouge">num_leaves</code>, <code class="language-plaintext highlighter-rouge">max_depth</code> ve <code class="language-plaintext highlighter-rouge">min_data_in_leaf</code> kritik ayarlardır.</p>

<p>Ayrıca <strong>GOSS</strong>, gradyanı büyük örnekleri koruyup kolay örneklerden örnekleme yapar. <strong>EFB</strong> ise aynı anda sıfır olmayan seyrek özellikleri tek özellikte paketleyerek boyutu azaltır.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>LightGBM yaklaşımı</th>
      <th>Pratik sonuç</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ağaç büyütme</td>
      <td>Leaf-wise</td>
      <td>Hızlı kayıp azalması, daha yüksek overfitting riski</td>
    </tr>
    <tr>
      <td>Örnek seçimi</td>
      <td>GOSS</td>
      <td>Daha az örnekle önemli hataları koruma</td>
    </tr>
    <tr>
      <td>Seyrek özellikler</td>
      <td>EFB</td>
      <td>Daha az özellik taraması</td>
    </tr>
    <tr>
      <td>Değer işleme</td>
      <td>Histogram binleri</td>
      <td>Daha düşük bellek ve daha hızlı eğitim</td>
    </tr>
  </tbody>
</table>

<h2 id="python-ile-küçük-bir-deney">Python ile küçük bir deney</h2>

<p>Aşağıdaki kod, histogram çözünürlüğünü belirleyen <code class="language-plaintext highlighter-rouge">max_bin</code> seçeneğiyle bir sınıflandırıcı kurar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">lightgbm</span> <span class="kn">import</span> <span class="n">LGBMClassifier</span>
<span class="kn">from</span> <span class="n">sklearn.metrics</span> <span class="kn">import</span> <span class="n">accuracy_score</span>

<span class="n">model</span> <span class="o">=</span> <span class="nc">LGBMClassifier</span><span class="p">(</span>
    <span class="n">n_estimators</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
    <span class="n">learning_rate</span><span class="o">=</span><span class="mf">0.05</span><span class="p">,</span>
    <span class="n">num_leaves</span><span class="o">=</span><span class="mi">31</span><span class="p">,</span>
    <span class="n">max_bin</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span>
    <span class="n">min_child_samples</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
    <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span>
<span class="p">)</span>

<span class="n">model</span><span class="p">.</span><span class="nf">fit</span><span class="p">(</span><span class="n">X_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
<span class="n">predictions</span> <span class="o">=</span> <span class="n">model</span><span class="p">.</span><span class="nf">predict</span><span class="p">(</span><span class="n">X_test</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">accuracy_score</span><span class="p">(</span><span class="n">y_test</span><span class="p">,</span> <span class="n">predictions</span><span class="p">))</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">max_bin</code> artırılırsa daha hassas eşikler elde edilebilir; fakat eğitim ve bellek maliyeti yükselir. Azaltılırsa model hızlanır, ancak önemli ayrımlar aynı sepete düşebilir.</p>

<p>Sonuç olarak LightGBM, özellikle büyük ve yüksek boyutlu verilerde XGBoost’un tarihsel exact yaklaşımını hız ve bellek bakımından geçebildi. Güncel XGBoost sürümlerinin de histogram tabanlı yöntemler sunduğunu unutmamak gerekir; dolayısıyla mutlak bir şampiyon yoktur. Asıl sır, daha fazla hesaplamak değil, veriyi akıllıca özetleyerek doğru hesapları yapmaktır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="lightgbm" /><category term="xgboost" /><category term="gradient-boosting" /><category term="makine-öğrenmesi" /><category term="histogram" /><category term="python" /><summary type="html"><![CDATA[Gradient boosting dünyasında doğruluk kadar eğitim süresi ve bellek tüketimi de önemlidir. LightGBM, sürekli özelliklerdeki her değeri ayrı ayrı incelemek yerine değerleri küçük aralıklara, yani bin adı verilen sepetlere yerleştirerek bu dengeyi değiştirdi. Milyonlarca satırlık veriyle çalışan bir algoritma için bu yaklaşım, tek tek bozuk para saymak yerine onları önceden hazırlanmış kutularda tartmaya benzer.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/lightgbmin-sirri-histogram-54.png" /><media:content medium="image" url="https://program.sonsuz.us/img/lightgbmin-sirri-histogram-54.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Makine Çevirisinde BLEU Skoru Bizi Kandırıyor mu?</title><link href="https://program.sonsuz.us/posts/makine-cevirisinde-bleu-skoru-bizi-kandiriyor-mu/" rel="alternate" type="text/html" title="Makine Çevirisinde BLEU Skoru Bizi Kandırıyor mu?" /><published>2026-09-26T00:00:00+00:00</published><updated>2026-09-26T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/makine-cevirisinde-bleu-skoru-bizi-kandiriyor-mu</id><content type="html" xml:base="https://program.sonsuz.us/posts/makine-cevirisinde-bleu-skoru-bizi-kandiriyor-mu/"><![CDATA[<p><img src="/img/makine-cevirisinde-bleu-94.svg" alt="makine-cevirisinde-bleu-94" /></p>

<p>Bir çeviri sistemi yüksek BLEU skoru aldığında gerçekten iyi çeviri yapıyor diyebilir miyiz? Kısa cevap: Her zaman değil. BLEU, makine çevirisi dünyasının en meşhur ölçüm araçlarından biri olsa da anlamı, akıcılığı ve bağlamı doğrudan ölçmez. Üstelik bazen kulağa robotik gelen bir çeviriyi ödüllendirirken gayet doğal bir alternatifi cezalandırabilir.</p>

<p>``</p>

<h2 id="bleu-aslında-neyi-ölçüyor">BLEU aslında neyi ölçüyor?</h2>

<p>BLEU, yani <strong>Bilingual Evaluation Understudy</strong>, aday çevirideki kelime dizilerini insan tarafından hazırlanmış referans çevirilerle karşılaştırır. Buradaki temel fikir, iki metnin ortak $n$-gram sayısı arttıkça çevirinin daha başarılı kabul edilmesidir.</p>

<p>Bir $n$-gram, art arda gelen $n$ adet parçadan oluşur:</p>

<ul>
  <li>1-gram: <code class="language-plaintext highlighter-rouge">yapay</code></li>
  <li>2-gram: <code class="language-plaintext highlighter-rouge">yapay zeka</code></li>
  <li>3-gram: <code class="language-plaintext highlighter-rouge">yapay zeka sistemi</code></li>
</ul>

<p>Basitleştirilmiş $n$-gram kesinliği şöyle gösterilebilir:</p>

\[p_n = \frac{\text{Eşleşen aday n-gram sayısı}}{\text{Adaydaki toplam n-gram sayısı}}\]

<p>BLEU, farklı uzunluklardaki $n$-gram kesinliklerinin geometrik ortalamasını alır ve çok kısa çevirileri engellemek için bir uzunluk cezası ekler:</p>

\[BLEU = BP \cdot \exp\left(\sum_{n=1}^{N} w_n \log p_n\right)\]

<p>Buradaki $BP$, <strong>brevity penalty</strong> olarak bilinen kısalık cezasıdır. Sistem yalnızca birkaç doğru kelime üretip yüksek puanı kapamasın diye kullanılır.</p>

<h2 id="aynı-anlam-farklı-kelimeler">Aynı anlam, farklı kelimeler</h2>

<p>Kaynak cümlenin “The meeting was called off” olduğunu düşünelim. Referans çeviri “Toplantı iptal edildi” olsun.</p>

<table>
  <thead>
    <tr>
      <th>Aday çeviri</th>
      <th style="text-align: right">Anlamsal kalite</th>
      <th>BLEU açısından durum</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Toplantı iptal edildi</td>
      <td style="text-align: right">Yüksek</td>
      <td>Tam eşleşme</td>
    </tr>
    <tr>
      <td>Görüşme iptal oldu</td>
      <td style="text-align: right">Yüksek</td>
      <td>Düşük kelime eşleşmesi</td>
    </tr>
    <tr>
      <td>Toplantı edildi iptal</td>
      <td style="text-align: right">Düşük</td>
      <td>Bazı n-gramlar eşleşebilir</td>
    </tr>
    <tr>
      <td>Toplantı ertelendi</td>
      <td style="text-align: right">Yanlış</td>
      <td>“Toplantı” nedeniyle kısmi puan alabilir</td>
    </tr>
  </tbody>
</table>

<p>İkinci çeviri bağlama göre son derece doğal olabilir. Ancak BLEU, “görüşme” ile “toplantı” arasındaki yakınlığı veya “iptal oldu” ifadesinin aynı mesajı taşıdığını bilmez. Çünkü kelimelerin anlamlarını değil, yüzeydeki parçaların örtüşmesini sayar.</p>

<p>Bu durum özellikle eş anlamlıların bol olduğu dillerde, serbest sözcük diziliminde ve Türkçe gibi eklemeli dillerde belirginleşir. “Evlerimizden” tek bir kelimeyken başka bir dilde birkaç ayrı sözcüğe karşılık gelebilir. Tokenizasyon tercihi bile sonucu değiştirebilir.</p>

<h2 id="skoru-hızlıca-hesaplamak">Skoru hızlıca hesaplamak</h2>

<p>Python’da <code class="language-plaintext highlighter-rouge">sacrebleu</code> paketiyle standartlaştırılmış bir BLEU hesabı yapılabilir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">sacrebleu</span>

<span class="n">referanslar</span> <span class="o">=</span> <span class="p">[[</span><span class="sh">'</span><span class="s">Toplantı iptal edildi</span><span class="sh">'</span><span class="p">]]</span>
<span class="n">adaylar</span> <span class="o">=</span> <span class="p">[</span><span class="sh">'</span><span class="s">Görüşme iptal oldu</span><span class="sh">'</span><span class="p">]</span>

<span class="n">sonuc</span> <span class="o">=</span> <span class="n">sacrebleu</span><span class="p">.</span><span class="nf">corpus_bleu</span><span class="p">(</span><span class="n">adaylar</span><span class="p">,</span> <span class="n">referanslar</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">'</span><span class="s">BLEU: </span><span class="si">{</span><span class="n">sonuc</span><span class="p">.</span><span class="n">score</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="sh">'</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod aday çeviriyi referansla karşılaştırır. Sonuç düşük çıkarsa adayın mutlaka kötü olduğunu söyleyemeyiz; yalnızca referansın kelime dizilimine yeterince benzemediğini söyleyebiliriz. Ayrıca farklı kütüphanelerin tokenizasyon ve düzeltme yöntemleri farklı sonuçlar üretebildiğinden deneylerde kullanılan BLEU sürümü açıkça belirtilmelidir.</p>

<h2 id="bleu-ne-zaman-işe-yarar">BLEU ne zaman işe yarar?</h2>

<p>BLEU tamamen kullanışsız değildir. Büyük veri kümelerinde, aynı test seti üzerinde eğitilen sistemlerin genel ilerlemesini hızlı ve ucuz biçimde karşılaştırmak için pratiktir. Ancak tek bir cümlenin kalitesini değerlendirmekte güvenilir değildir. Korpus düzeyinde anlamlı olan istatistikler, cümle düzeyinde oynak hale gelir.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Güçlü yanı</th>
      <th>Temel kusuru</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>BLEU</td>
      <td>Hızlı ve tekrarlanabilir</td>
      <td>Anlamı doğrudan ölçmez</td>
    </tr>
    <tr>
      <td>chrF</td>
      <td>Karakter ve ek benzerliğine duyarlı</td>
      <td>Bağlam bilgisi sınırlıdır</td>
    </tr>
    <tr>
      <td>COMET</td>
      <td>Anlamsal ilişkileri modelleyebilir</td>
      <td>Eğitildiği verilere bağımlıdır</td>
    </tr>
    <tr>
      <td>İnsan değerlendirmesi</td>
      <td>Akıcılık ve doğruluğu birlikte görebilir</td>
      <td>Pahalı ve öznel olabilir</td>
    </tr>
  </tbody>
</table>

<h2 id="tek-sayı-yerine-ölçüm-sepeti">Tek sayı yerine ölçüm sepeti</h2>

<p>Sağlıklı değerlendirme için BLEU; chrF, COMET veya BERTScore gibi metriklerle desteklenmelidir. Kritik uygulamalarda insan değerlendiriciler doğruluk, akıcılık, terminoloji ve kültürel uygunluk başlıklarını ayrı ayrı puanlamalıdır.</p>

<p>Sonuç olarak BLEU bizi bilinçli biçimde kandırmaz; yalnızca kendisine sormadığımız soruları cevaplayamaz. O, “Bu çeviri referansa ne kadar benziyor?” sorusunda iyidir. “Bu çeviri anlamı doğru, doğal ve güvenli biçimde aktarıyor mu?” sorusu içinse tek başına oldukça sessizdir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="bleu" /><category term="makine çevirisi" /><category term="doğal dil işleme" /><category term="yapay zeka" /><category term="değerlendirme metrikleri" /><summary type="html"><![CDATA[Bir çeviri sistemi yüksek BLEU skoru aldığında gerçekten iyi çeviri yapıyor diyebilir miyiz? Kısa cevap: Her zaman değil. BLEU, makine çevirisi dünyasının en meşhur ölçüm araçlarından biri olsa da anlamı, akıcılığı ve bağlamı doğrudan ölçmez. Üstelik bazen kulağa robotik gelen bir çeviriyi ödüllendirirken gayet doğal bir alternatifi cezalandırabilir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/makine-cevirisinde-bleu-94.png" /><media:content medium="image" url="https://program.sonsuz.us/img/makine-cevirisinde-bleu-94.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>