<?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://sonsuzus.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://sonsuzus.github.io/" rel="alternate" type="text/html" /><updated>2026-08-08T07:13:24+00:00</updated><id>https://sonsuzus.github.io/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">Büyük Dil Modelleri ve İstem Mühendisliği: Yapay Zekâya Doğru Soruyu Sormak</title><link href="https://sonsuzus.github.io/posts/buyuk-dil-modelleri-ve-istem-muhendisligi-yapay-zekaya-dogru-soruyu-sormak/" rel="alternate" type="text/html" title="Büyük Dil Modelleri ve İstem Mühendisliği: Yapay Zekâya Doğru Soruyu Sormak" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/buyuk-dil-modelleri-ve-istem-muhendisligi-yapay-zekaya-dogru-soruyu-sormak</id><content type="html" xml:base="https://sonsuzus.github.io/posts/buyuk-dil-modelleri-ve-istem-muhendisligi-yapay-zekaya-dogru-soruyu-sormak/"><![CDATA[<p>Bir büyük dil modeliyle sohbet etmek bazen her şeyi bilen bir kütüphaneciyle, bazen de özgüveni bilgisinden yüksek bir stajyerle konuşmaya benzer. Sonuçların arasındaki bu fark yalnızca modelin büyüklüğünden değil; eğitim verisinden, ince ayar yönteminden, bağlam penceresinden ve yazdığımız istemin kalitesinden doğar. Milyarlarca parametre etkileyici görünse de modeli gerçekten kullanışlı yapan şey, bu dev matematik makinesinin nasıl yönlendirildiğini anlamaktır.</p>

<p>``</p>

<h2 id="llm-aslında-ne-yapar">LLM aslında ne yapar?</h2>

<p>Büyük Dil Modelleri, metni insanlar gibi “anlamaya” çalışmaktan önce sıradaki parçayı tahmin eder. Metin, <strong>token</strong> adı verilen kelime, hece veya karakter parçalarına ayrılır. Model, önceki token’ları kullanarak bir sonraki token’ın olasılık dağılımını hesaplar:</p>

\[P(w_t \mid w_1, w_2, ..., w_{t-1})\]

<p>Örneğin “Bugün hava çok” ifadesinden sonra “güzel” token’ına yüksek olasılık verilebilir. Bu işlem art arda tekrarlandığında paragraflar, kodlar ve hatta şiirler ortaya çıkar. Yani sihirli görünen sohbet, temelde olağanüstü gelişmiş bir otomatik tamamlama sürecidir.</p>

<p>Modelin parametreleri, sinir ağındaki öğrenilebilir sayısal ağırlıklardır. Eğitim sırasında tahmin ile gerçek token arasındaki hata ölçülür. Yaygın kayıp fonksiyonu kabaca şöyledir:</p>

\[L = - \sum_t \log P(w_t \mid w_{&lt;t})\]

<p>Geri yayılım ve gradyan inişi, bu kaybı azaltacak biçimde milyarlarca ağırlığı günceller. Transformer mimarisindeki <strong>attention</strong> mekanizması ise cümlenin hangi parçalarının birbirleriyle ilişkili olduğunu belirler. Böylece model, uzak kelimeler arasındaki bağlantıları yakalayabilir.</p>

<h2 id="ön-eğitim-ince-ayar-ve-rag-farkı">Ön eğitim, ince ayar ve RAG farkı</h2>

<p>Her problemi modele yeniden ezberletmek gerekmez. İhtiyaca göre farklı uyarlama yöntemleri kullanılabilir:</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Ne değişir?</th>
      <th>Güçlü yanı</th>
      <th>Uygun senaryo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ön eğitim</td>
      <td>Tüm model ağırlıkları</td>
      <td>Genel dil yeteneği kazandırır</td>
      <td>Temel model geliştirme</td>
    </tr>
    <tr>
      <td>Fine-tuning</td>
      <td>Ağırlıkların tümü veya bir kısmı</td>
      <td>Davranışı kalıcı biçimde özelleştirir</td>
      <td>Sınıflandırma, kurum dili</td>
    </tr>
    <tr>
      <td>RAG</td>
      <td>Model yerine bağlam zenginleşir</td>
      <td>Güncel ve kaynaklı bilgi sağlar</td>
      <td>Doküman arama, destek botu</td>
    </tr>
    <tr>
      <td>Prompting</td>
      <td>Yalnızca giriş metni</td>
      <td>Hızlı ve düşük maliyetlidir</td>
      <td>Günlük görevler, prototipler</td>
    </tr>
  </tbody>
</table>

<p>Fine-tuning sürecinde kaliteli giriş-çıkış örnekleri hazırlanır. Ardından düşük öğrenme oranıyla eğitim yapılır ve model daha önce görmediği doğrulama verisiyle sınanır. Veri azsa LoRA gibi parametre-verimli yöntemler tercih edilebilir. LoRA, dev modelin tamamını değiştirmek yerine küçük ek matrisler öğrenerek maliyeti düşürür.</p>

<h2 id="i̇yi-bir-istem-nasıl-yazılır">İyi bir istem nasıl yazılır?</h2>

<p>“Bana yazılımı anlat” istemi belirsizdir. Model hedef kitleyi, kapsamı ve çıktı biçimini tahmin etmek zorunda kalır. Sağlam bir istem genellikle dört bileşen içerir:</p>

<ol>
  <li><strong>Rol:</strong> Modelin hangi uzman gibi davranacağı.</li>
  <li><strong>Görev:</strong> Tam olarak ne üretileceği.</li>
  <li><strong>Bağlam:</strong> Kullanılacak bilgi ve sınırlamalar.</li>
  <li><strong>Çıktı biçimi:</strong> Tablo, JSON, liste veya kod gibi format.</li>
</ol>

<p>Örneğin API üzerinden yapılandırılmış bir istem şöyle hazırlanabilir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">prompt</span> <span class="o">=</span> <span class="sh">"""</span><span class="s">
Rolün: Kıdemli Python geliştiricisi.
Görev: Aşağıdaki fonksiyondaki performans sorunlarını bul.
Kısıtlar: Davranışı değiştirme, en fazla üç öneri sun.
Çıktı: Sorun, neden ve düzeltilmiş kod başlıklarını kullan.
Kod:
{code}
</span><span class="sh">"""</span>

<span class="n">response</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">uygun-model</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="nf">format</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="n">source_code</span><span class="p">)</span>
<span class="p">)</span>
</code></pre></div></div>

<p>Bu kod, modele yalnızca soru sormaz; rol, sınır ve beklenen yapıyı da bildirir. Üretim ortamında kullanıcı verisi doğrudan isteme ekleniyorsa prompt injection saldırılarına karşı doğrulama ve yetkilendirme uygulanmalıdır.</p>

<h2 id="daha-güvenilir-sonuçlar-için-küçük-taktikler">Daha güvenilir sonuçlar için küçük taktikler</h2>

<p>Karmaşık işleri tek seferde istemek yerine görevi aşamalara bölmek başarıyı artırır. Birkaç kaliteli örnek vermek <strong>few-shot prompting</strong>, hiç örnek vermeden açık talimat kullanmak ise <strong>zero-shot prompting</strong> olarak adlandırılır. Modelden bilinmeyen noktaları belirtmesini, varsayımlarını listelemesini ve mümkünse kaynak göstermesini istemek de halüsinasyon riskini azaltır.</p>

<p>Sonuç olarak LLM, niyet okuyan bir kahin değil; bağlamdan olasılık üreten güçlü bir sistemdir. Fine-tuning davranışı uzmanlaştırır, RAG güncel bilgiyi taşır, iyi prompting ise tüm bu kapasitenin doğru kapıya yönelmesini sağlar. Yapay zekâ çağında yalnızca cevabı bilmek değil, doğru soruyu tasarlamak da temel bir mühendislik becerisidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="LLM" /><category term="İstem Mühendisliği" /><category term="Fine-Tuning" /><summary type="html"><![CDATA[Bir büyük dil modeliyle sohbet etmek bazen her şeyi bilen bir kütüphaneciyle, bazen de özgüveni bilgisinden yüksek bir stajyerle konuşmaya benzer. Sonuçların arasındaki bu fark yalnızca modelin büyüklüğünden değil; eğitim verisinden, ince ayar yönteminden, bağlam penceresinden ve yazdığımız istemin kalitesinden doğar. Milyarlarca parametre etkileyici görünse de modeli gerçekten kullanışlı yapan şey, bu dev matematik makinesinin nasıl yönlendirildiğini anlamaktır.]]></summary></entry><entry><title type="html">CNN ile Görsel Algı: Piksellerden Kenar, Doku ve Şekillere</title><link href="https://sonsuzus.github.io/posts/cnn-ile-gorsel-algi-piksellerden-kenar-doku-ve-sekillere/" rel="alternate" type="text/html" title="CNN ile Görsel Algı: Piksellerden Kenar, Doku ve Şekillere" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/cnn-ile-gorsel-algi-piksellerden-kenar-doku-ve-sekillere</id><content type="html" xml:base="https://sonsuzus.github.io/posts/cnn-ile-gorsel-algi-piksellerden-kenar-doku-ve-sekillere/"><![CDATA[<p>Bir bilgisayar için fotoğraf, sevimli bir kedi veya kırmızı bir otomobil değil; yalnızca sayılardan oluşan çok boyutlu bir matristir. Evrişimli Sinir Ağları, yani CNN’ler, bu sayı yığınını anlamlandırarak kenarları, dokuları, şekilleri ve sonunda nesneleri keşfeder. Bunu yaparken görüntünün mekânsal yapısını koruyan evrişim filtrelerinden ve gereksiz ayrıntıları azaltan havuzlama işlemlerinden yararlanır.</p>

<p>``</p>

<h2 id="görüntü-bilgisayara-nasıl-görünür">Görüntü bilgisayara nasıl görünür?</h2>

<p>Gri tonlamalı bir görüntü $H \times W$ boyutlu bir matris, renkli görüntü ise genellikle $H \times W \times 3$ boyutlu bir tensördür. Son boyuttaki üç kanal kırmızı, yeşil ve maviyi temsil eder. Klasik tam bağlı ağlarda her piksel her nörona bağlanır; bu yaklaşım büyük görüntülerde devasa sayıda parametre üretir ve pikseller arasındaki komşuluk ilişkisini göz ardı eder.</p>

<p>CNN ise küçük bir filtreyi görüntü üzerinde gezdirir. Böylece hem daha az parametre kullanır hem de aynı özelliği görüntünün farklı bölgelerinde arayabilir. Bir kedinin kulağı sağda da olsa solda da olsa aynı filtre tarafından yakalanabilir.</p>

<h2 id="evrişim-görüntü-üzerinde-gezinen-büyüteç">Evrişim: Görüntü üzerinde gezinen büyüteç</h2>

<p>Evrişim katmanındaki filtre, örneğin $3 \times 3$ boyutunda öğrenilebilir bir ağırlık matrisidir. Filtre her konumda görüntünün ilgili bölgesiyle eleman bazında çarpılır ve sonuçlar toplanır:</p>

\[Y(i,j)=\sum_m\sum_n X(i+m,j+n)K(m,n)+b\]

<p>Burada $X$ giriş görüntüsünü, $K$ filtreyi, $b$ bias değerini ve $Y$ üretilen özellik haritasını gösterir. İlk katmanlar çoğunlukla yatay veya dikey kenarları öğrenir. Daha derin katmanlar bu basit bilgileri birleştirerek köşe, doku, göz, tekerlek veya kanat gibi daha karmaşık örüntüler oluşturur.</p>

<p>Çıktı boyutu yaklaşık olarak şu formülle hesaplanır:</p>

\[O=\left\lfloor\frac{N+2P-K}{S}\right\rfloor+1\]

<p>$N$ giriş boyutu, $K$ filtre boyutu, $P$ padding ve $S$ stride değeridir. Padding görüntünün kenarlarına boşluk eklerken stride filtrenin kaç piksel atlayacağını belirler.</p>

<table>
  <thead>
    <tr>
      <th>Kavram</th>
      <th>Görevi</th>
      <th>Etkisi</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Filtre</td>
      <td>Yerel özellikleri arar</td>
      <td>Kenar ve doku haritaları üretir</td>
    </tr>
    <tr>
      <td>Stride</td>
      <td>Filtrenin adımını belirler</td>
      <td>Boyutu ve hesaplama maliyetini değiştirir</td>
    </tr>
    <tr>
      <td>Padding</td>
      <td>Kenarlara değer ekler</td>
      <td>Mekânsal boyutu koruyabilir</td>
    </tr>
    <tr>
      <td>Aktivasyon</td>
      <td>Doğrusal olmayanlık ekler</td>
      <td>Karmaşık örüntülerin öğrenilmesini sağlar</td>
    </tr>
  </tbody>
</table>

<h2 id="havuzlama-önemli-bilgiyi-sıkıştırmak">Havuzlama: Önemli bilgiyi sıkıştırmak</h2>

<p>Pooling katmanı öğrenilebilir filtre taşımaz. Belirli bir pencere içindeki değerleri özetler. Max pooling en büyük değeri seçerken average pooling ortalamayı alır. Örneğin $2 \times 2$ max pooling, dört değerden en güçlü aktivasyonu saklar. Böylece özellik haritası küçülür, hesaplama hızlanır ve küçük konum değişikliklerine karşı dayanıklılık artar.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Seçim biçimi</th>
      <th>Kullanım karakteri</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Max Pooling</td>
      <td>En büyük değer</td>
      <td>Belirgin özellikleri korur</td>
    </tr>
    <tr>
      <td>Average Pooling</td>
      <td>Değerlerin ortalaması</td>
      <td>Daha yumuşak özet üretir</td>
    </tr>
    <tr>
      <td>Global Average Pooling</td>
      <td>Kanalın tamamının ortalaması</td>
      <td>Sınıflandırma öncesi parametreleri azaltır</td>
    </tr>
  </tbody>
</table>

<h2 id="pytorch-ile-küçük-bir-cnn">PyTorch ile küçük bir CNN</h2>

<p>Aşağıdaki model, renkli $32 \times 32$ görüntüleri on sınıftan birine ayırabilecek temel bir mimari kurar:</p>

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

<span class="k">class</span> <span class="nc">MiniCNN</span><span class="p">(</span><span class="n">nn</span><span class="p">.</span><span class="n">Module</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="n">self</span><span class="p">):</span>
        <span class="nf">super</span><span class="p">().</span><span class="nf">__init__</span><span class="p">()</span>
        <span class="n">self</span><span class="p">.</span><span class="n">features</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">Sequential</span><span class="p">(</span>
            <span class="n">nn</span><span class="p">.</span><span class="nc">Conv2d</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="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span>
            <span class="n">nn</span><span class="p">.</span><span class="nc">ReLU</span><span class="p">(),</span>
            <span class="n">nn</span><span class="p">.</span><span class="nc">MaxPool2d</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span>
            <span class="n">nn</span><span class="p">.</span><span class="nc">Conv2d</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="n">kernel_size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">padding</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span>
            <span class="n">nn</span><span class="p">.</span><span class="nc">ReLU</span><span class="p">(),</span>
            <span class="n">nn</span><span class="p">.</span><span class="nc">MaxPool2d</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
        <span class="p">)</span>
        <span class="n">self</span><span class="p">.</span><span class="n">classifier</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">Linear</span><span class="p">(</span><span class="mi">32</span> <span class="o">*</span> <span class="mi">8</span> <span class="o">*</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
        <span class="n">x</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="nf">features</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
        <span class="n">x</span> <span class="o">=</span> <span class="n">x</span><span class="p">.</span><span class="nf">flatten</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">self</span><span class="p">.</span><span class="nf">classifier</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</code></pre></div></div>

<p>İlk evrişim katmanı RGB görüntüden 16 özellik haritası çıkarır. ReLU negatif değerleri sıfırlayarak modele doğrusal olmayanlık kazandırır. İki havuzlama işlemi görüntüyü $32 \times 32$ boyutundan $8 \times 8$ boyutuna indirir. Son katman ise çıkarılan özellikleri sınıf puanlarına dönüştürür.</p>

<p>CNN’lerin asıl gücü hiyerarşik öğrenmedir: erken katmanlar kenarları, orta katmanlar dokuları ve parçaları, derin katmanlar ise bütün nesneleri temsil eder. Bu nedenle CNN’ler yüz tanıma, tıbbi görüntü analizi, otonom sürüş ve kalite kontrol gibi alanlarda dijital dünyanın keskin gözleri hâline gelmiştir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="CNN" /><category term="Görüntü İşleme" /><category term="Derin Öğrenme" /><summary type="html"><![CDATA[Bir bilgisayar için fotoğraf, sevimli bir kedi veya kırmızı bir otomobil değil; yalnızca sayılardan oluşan çok boyutlu bir matristir. Evrişimli Sinir Ağları, yani CNN’ler, bu sayı yığınını anlamlandırarak kenarları, dokuları, şekilleri ve sonunda nesneleri keşfeder. Bunu yaparken görüntünün mekânsal yapısını koruyan evrişim filtrelerinden ve gereksiz ayrıntıları azaltan havuzlama işlemlerinden yararlanır.]]></summary></entry><entry><title type="html">Derin Öğrenmeye Giriş: Katmanlar, Soyut Özellikler ve GPU Gücü</title><link href="https://sonsuzus.github.io/posts/derin-ogrenmeye-giris-katmanlar-soyut-ozellikler-ve-gpu-gucu/" rel="alternate" type="text/html" title="Derin Öğrenmeye Giriş: Katmanlar, Soyut Özellikler ve GPU Gücü" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/derin-ogrenmeye-giris-katmanlar-soyut-ozellikler-ve-gpu-gucu</id><content type="html" xml:base="https://sonsuzus.github.io/posts/derin-ogrenmeye-giris-katmanlar-soyut-ozellikler-ve-gpu-gucu/"><![CDATA[<p>Bir bilgisayara kediyi tanımayı öğretmek istediğimizi düşünelim. Geleneksel yaklaşımda sivri kulak, bıyık ve kuyruk gibi özellikleri tek tek tarif etmemiz gerekebilir. Derin öğrenmede ise modele yeterli sayıda örnek gösteririz; hangi ayrıntıların önemli olduğunu katmanlar boyunca kendisi keşfeder. İşin büyülü görünen, fakat matematik ve bol miktarda hesaplama gücüne dayanan kısmı tam olarak budur.</p>

<p>``</p>

<h2 id="derin-öğrenme-neden-derin">Derin öğrenme neden “derin”?</h2>

<p>Yapay sinir ağları, girdileri belirli ağırlıklarla işleyen yapay nöronlardan oluşur. Tek bir nöronun temel işlemi şöyle gösterilebilir:</p>

\[z = \sum_{i=1}^{n} w_i x_i + b\]

<p>Burada $x_i$ girdileri, $w_i$ öğrenilen ağırlıkları, $b$ ise bias değerini temsil eder. Sonuç genellikle ReLU gibi doğrusal olmayan bir aktivasyon fonksiyonundan geçirilir:</p>

\[\operatorname{ReLU}(z)=\max(0,z)\]

<p>Bir ağın “derin” olması, giriş ile çıkış arasında birden fazla gizli katman bulunması anlamına gelir. Katman sayısı arttıkça model, özellikleri hiyerarşik biçimde birleştirebilir. Bir görüntü ağının ilk katmanları kenarları, sonraki katmanları dokuları, daha ilerideki katmanları ise göz, tekerlek veya yüz gibi soyut yapıları öğrenebilir.</p>

<table>
  <thead>
    <tr>
      <th>Mimari düzeyi</th>
      <th>Öğrenilebilen özellik</th>
      <th>Görüntü örneği</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>İlk katmanlar</td>
      <td>Kenar, yön ve renk geçişi</td>
      <td>Dikey çizgi</td>
    </tr>
    <tr>
      <td>Orta katmanlar</td>
      <td>Doku ve basit şekil</td>
      <td>Kürk veya daire</td>
    </tr>
    <tr>
      <td>Derin katmanlar</td>
      <td>Nesne parçaları</td>
      <td>Kulak veya göz</td>
    </tr>
    <tr>
      <td>Çıkış katmanı</td>
      <td>Sınıf veya tahmin</td>
      <td>Kedi olasılığı</td>
    </tr>
  </tbody>
</table>

<p>Bu özellikler geliştirici tarafından elle yazılmaz. Eğitim sırasında tahmin hatası geriye yayılım ile katmanlara dağıtılır. Ağırlıklar, kayıp fonksiyonunu azaltacak yönde güncellenir:</p>

\[w \leftarrow w-\eta\frac{\partial L}{\partial w}\]

<p>Buradaki $L$ kayıp fonksiyonu, $\eta$ ise öğrenme oranıdır. Kısacası ağ, hatalarından ders çıkarır; ancak bunu kahve molası vermeden milyonlarca kez yapar.</p>

<h2 id="gpu-neden-bu-kadar-önemli">GPU neden bu kadar önemli?</h2>

<p>Derin ağların eğitimi çok sayıda matris çarpımı gerektirir. CPU az sayıda güçlü çekirdekle genel amaçlı işlemlerde başarılıdır. GPU ise binlerce daha küçük çekirdeği sayesinde aynı türden matematiksel işlemleri paralel çalıştırabilir.</p>

<table>
  <thead>
    <tr>
      <th>Donanım</th>
      <th>Güçlü olduğu alan</th>
      <th>Derin öğrenmedeki rolü</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CPU</td>
      <td>Sıralı işlemler ve uygulama mantığı</td>
      <td>Veri hazırlama, küçük modeller</td>
    </tr>
    <tr>
      <td>GPU</td>
      <td>Yoğun paralel hesaplama</td>
      <td>Eğitim ve hızlı çıkarım</td>
    </tr>
    <tr>
      <td>TPU/NPU</td>
      <td>Yapay zekâya özel işlemler</td>
      <td>Büyük ölçekli veya mobil modeller</td>
    </tr>
  </tbody>
</table>

<p>GPU seçiminde yalnızca işlem hızı değil, VRAM kapasitesi de önemlidir. Model parametreleri, ara aktivasyonlar ve gradyanlar bellekte tutulur. Bellek yetmediğinde batch boyutu küçültülebilir, karma hassasiyet kullanılabilir veya model birkaç GPU’ya dağıtılabilir. Daha büyük GPU her zaman daha akıllı model demek değildir; bazen yalnızca elektrik faturasının daha atletik olması demektir.</p>

<h2 id="pytorch-ile-cihaz-seçimi">PyTorch ile cihaz seçimi</h2>

<p>Aşağıdaki örnek, varsa CUDA destekli GPU’yu seçer ve basit bir ağı ilgili cihaza taşı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">from</span> <span class="n">torch</span> <span class="kn">import</span> <span class="n">nn</span>

<span class="n">device</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">device</span><span class="p">(</span><span class="sh">'</span><span class="s">cuda</span><span class="sh">'</span> <span class="k">if</span> <span class="n">torch</span><span class="p">.</span><span class="n">cuda</span><span class="p">.</span><span class="nf">is_available</span><span class="p">()</span> <span class="k">else</span> <span class="sh">'</span><span class="s">cpu</span><span class="sh">'</span><span class="p">)</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">Sequential</span><span class="p">(</span>
    <span class="n">nn</span><span class="p">.</span><span class="nc">Linear</span><span class="p">(</span><span class="mi">784</span><span class="p">,</span> <span class="mi">256</span><span class="p">),</span>
    <span class="n">nn</span><span class="p">.</span><span class="nc">ReLU</span><span class="p">(),</span>
    <span class="n">nn</span><span class="p">.</span><span class="nc">Linear</span><span class="p">(</span><span class="mi">256</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="p">).</span><span class="nf">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>

<span class="n">sample</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">randn</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="mi">784</span><span class="p">).</span><span class="nf">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
<span class="n">predictions</span> <span class="o">=</span> <span class="nf">model</span><span class="p">(</span><span class="n">sample</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="n">device</span><span class="p">,</span> <span class="n">predictions</span><span class="p">.</span><span class="n">shape</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">to(device)</code> çağrısı hem modelin hem de verinin aynı donanıma taşınmasını sağlar. Aksi hâlde PyTorch, CPU ve GPU tensörlerini birlikte işleyemediği için hata üretir.</p>

<h2 id="avantajlar-ve-sınırlar">Avantajlar ve sınırlar</h2>

<p>Derin öğrenme; görüntü tanıma, doğal dil işleme, ses analizi ve üretken yapay zekâda elle özellik çıkarma ihtiyacını azaltır. Büyük ve karmaşık verilerde klasik yöntemlerden daha yüksek başarı sağlayabilir. Ayrıca önceden eğitilmiş modeller, transfer öğrenme ile daha küçük veri kümelerine uyarlanabilir.</p>

<p>Buna karşılık derin mimariler çok veri, enerji, zaman ve dikkatli hiperparametre ayarı ister. Katman eklemek başarıyı otomatik olarak artırmaz; aşırı öğrenme, kaybolan gradyan ve yüksek gecikme gibi sorunlar doğabilir. En iyi yaklaşım, probleme yetecek kadar derin bir model seçmek ve donanım gücünü ölçüm sonuçlarına göre kullanmaktır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="derin öğrenme" /><category term="yapay sinir ağları" /><category term="GPU" /><summary type="html"><![CDATA[Bir bilgisayara kediyi tanımayı öğretmek istediğimizi düşünelim. Geleneksel yaklaşımda sivri kulak, bıyık ve kuyruk gibi özellikleri tek tek tarif etmemiz gerekebilir. Derin öğrenmede ise modele yeterli sayıda örnek gösteririz; hangi ayrıntıların önemli olduğunu katmanlar boyunca kendisi keşfeder. İşin büyülü görünen, fakat matematik ve bol miktarda hesaplama gücüne dayanan kısmı tam olarak budur.]]></summary></entry><entry><title type="html">GAN ve Difüzyon Modelleri: Rekabetten Gürültüye Üretken Yapay Zekâ</title><link href="https://sonsuzus.github.io/posts/gan-ve-difuzyon-modelleri-rekabetten-gurultuye-uretken-yapay-zeka/" rel="alternate" type="text/html" title="GAN ve Difüzyon Modelleri: Rekabetten Gürültüye Üretken Yapay Zekâ" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/gan-ve-difuzyon-modelleri-rekabetten-gurultuye-uretken-yapay-zeka</id><content type="html" xml:base="https://sonsuzus.github.io/posts/gan-ve-difuzyon-modelleri-rekabetten-gurultuye-uretken-yapay-zeka/"><![CDATA[<p>Bir yapay zekânın sıfırdan insan yüzü çizdiğini, kısa bir melodi bestelediğini veya birkaç kelimelik komuttan video ürettiğini düşünün. Bu sihrin arkasında çoğunlukla iki güçlü yaklaşım bulunur: birbirini alt etmeye çalışan ağlardan oluşan <strong>Üretken Çekişmeli Ağlar (GAN)</strong> ve gürültüyü adım adım temizleyen <strong>difüzyon modelleri</strong>. İkisi de öğrendiği veri dağılımından yeni örnekler üretir; ancak hedefe giderken tamamen farklı yollar izler.</p>

<p>``</p>

<h2 id="gan-sahtekâr-ile-dedektifin-oyunu">GAN: Sahtekâr ile dedektifin oyunu</h2>

<p>GAN, 2014 yılında Ian Goodfellow ve çalışma arkadaşları tarafından tanıtıldı. Yapı, iki sinir ağından oluşur:</p>

<ul>
  <li><strong>Üretici (Generator):</strong> Rastgele gürültüyü gerçekçi bir örneğe dönüştürmeye çalışır.</li>
  <li><strong>Ayırt edici (Discriminator):</strong> Karşısındaki örneğin gerçek veriden mi yoksa üreticiden mi geldiğini tahmin eder.</li>
</ul>

<p>Üreticiyi sahte tablo yapan bir ressama, ayırt ediciyi ise sanat uzmanına benzetebiliriz. Ressam geliştikçe uzman daha dikkatli olur; uzman geliştikçe ressam daha başarılı sahte eserler üretmek zorunda kalır.</p>

<p>Bu rekabetin klasik amaç fonksiyonu şöyledir:</p>

\[\min_G \max_D V(D,G)=\mathbb{E}_{x\sim p_{data}}[\log D(x)] + \mathbb{E}_{z\sim p_z}[\log(1-D(G(z)))]\]

<p>Burada $G(z)$ üreticinin gürültüden oluşturduğu örneği, $D(x)$ ise bir örneğin gerçek olma olasılığını gösterir. İdeal dengede ayırt edici artık gerçeği sahteden ayıramaz ve her örnek için yaklaşık $0.5$ sonucu verir.</p>

<p>GAN eğitiminin sadeleştirilmiş PyTorch benzeri akışı şöyledir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Önce ayırt edici, gerçek ve sahte örnekleri tanımayı öğrenir.
</span><span class="n">noise</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">randn</span><span class="p">(</span><span class="n">batch_size</span><span class="p">,</span> <span class="n">latent_size</span><span class="p">)</span>
<span class="n">fake_images</span> <span class="o">=</span> <span class="nf">generator</span><span class="p">(</span><span class="n">noise</span><span class="p">)</span>

<span class="n">d_loss</span> <span class="o">=</span> <span class="nf">discriminator_loss</span><span class="p">(</span>
    <span class="nf">discriminator</span><span class="p">(</span><span class="n">real_images</span><span class="p">),</span>
    <span class="nf">discriminator</span><span class="p">(</span><span class="n">fake_images</span><span class="p">.</span><span class="nf">detach</span><span class="p">())</span>
<span class="p">)</span>
<span class="n">d_loss</span><span class="p">.</span><span class="nf">backward</span><span class="p">()</span>
<span class="n">d_optimizer</span><span class="p">.</span><span class="nf">step</span><span class="p">()</span>

<span class="c1"># Ardından üretici, ayırt ediciyi kandıracak şekilde güncellenir.
</span><span class="n">g_loss</span> <span class="o">=</span> <span class="nf">generator_loss</span><span class="p">(</span><span class="nf">discriminator</span><span class="p">(</span><span class="n">fake_images</span><span class="p">))</span>
<span class="n">g_loss</span><span class="p">.</span><span class="nf">backward</span><span class="p">()</span>
<span class="n">g_optimizer</span><span class="p">.</span><span class="nf">step</span><span class="p">()</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">detach()</code> kullanımı önemlidir: Ayırt edici eğitilirken gradyanların üreticiye akmasını engeller. Sonraki aşamada ise üretici, ayırt edicinin geri bildiriminden doğrudan yararlanır.</p>

<h2 id="difüzyon-gürültüden-düzene-yolculuk">Difüzyon: Gürültüden düzene yolculuk</h2>

<p>Difüzyon modelleri farklı bir oyun oynar. Eğitim sırasında temiz veriye aşamalı olarak Gauss gürültüsü eklenir. İleri süreç yaklaşık olarak şu şekilde ifade edilir:</p>

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

<p>Burada $x_0$ temiz örnek, $x_t$ gürültülü örnek ve $\epsilon$ rastgele gürültüdür. Sinir ağı, belirli bir adımdaki gürültüyü tahmin etmeyi öğrenir. Üretim aşamasında tamamen rastgele bir görüntüden başlanır ve tahmin edilen gürültü defalarca çıkarılır. Bulanık lekeler önce şekillere, ardından ayrıntılı bir görsele dönüşür.</p>

<p>Basitleştirilmiş örnekleme döngüsü şöyledir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Üretim tamamen rastgele gürültüyle başlar.
</span><span class="n">x</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">randn</span><span class="p">(</span><span class="n">image_shape</span><span class="p">)</span>

<span class="k">for</span> <span class="n">timestep</span> <span class="ow">in</span> <span class="nf">reversed</span><span class="p">(</span><span class="nf">range</span><span class="p">(</span><span class="n">total_steps</span><span class="p">)):</span>
    <span class="n">predicted_noise</span> <span class="o">=</span> <span class="nf">model</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">timestep</span><span class="p">)</span>
    <span class="n">x</span> <span class="o">=</span> <span class="n">scheduler</span><span class="p">.</span><span class="nf">remove_noise</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">predicted_noise</span><span class="p">,</span> <span class="n">timestep</span><span class="p">)</span>

<span class="c1"># x artık modelin ürettiği temiz örnektir.
</span></code></pre></div></div>

<p>Gerçek sistemlerde zaman adımı kodlamaları, U-Net mimarileri, dikkat mekanizmaları ve özel gürültü zamanlayıcıları kullanılır. Metin komutları da gömleme vektörlerine çevrilerek üretim sürecini yönlendirebilir.</p>

<h2 id="gan-mı-difüzyon-mu">GAN mı, difüzyon mu?</h2>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>GAN</th>
      <th>Difüzyon modeli</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Temel mantık</td>
      <td>İki ağın rekabeti</td>
      <td>Gürültüyü aşamalı temizleme</td>
    </tr>
    <tr>
      <td>Eğitim kararlılığı</td>
      <td>Hassas ve dengesiz olabilir</td>
      <td>Genellikle daha kararlı</td>
    </tr>
    <tr>
      <td>Üretim hızı</td>
      <td>Tek geçişle hızlı</td>
      <td>Çok sayıda adım nedeniyle yavaş</td>
    </tr>
    <tr>
      <td>Çeşitlilik</td>
      <td>Mod çökmesi yaşayabilir</td>
      <td>Veri çeşitliliğini iyi kapsar</td>
    </tr>
    <tr>
      <td>Görsel kalite</td>
      <td>Keskin sonuçlar</td>
      <td>Ayrıntılı ve yüksek kaliteli sonuçlar</td>
    </tr>
    <tr>
      <td>Kontrol edilebilirlik</td>
      <td>Ek mimariler gerektirebilir</td>
      <td>Metin ve koşullarla güçlü kontrol</td>
    </tr>
  </tbody>
</table>

<p>GAN’ler gerçek zamanlı yüz dönüştürme, görüntü iyileştirme ve hızlı sentez için hâlâ değerlidir. Difüzyon modelleri ise metinden görsel, ses ve video üretiminde öne çıkar. Kısacası GAN bir düello, difüzyon ise sabırlı bir restorasyon sürecidir. Hangisinin seçileceği; hız, kalite, donanım maliyeti ve üretim üzerindeki kontrol ihtiyacına bağlıdır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="GAN" /><category term="Difüzyon Modelleri" /><category term="Üretken Yapay Zekâ" /><summary type="html"><![CDATA[Bir yapay zekânın sıfırdan insan yüzü çizdiğini, kısa bir melodi bestelediğini veya birkaç kelimelik komuttan video ürettiğini düşünün. Bu sihrin arkasında çoğunlukla iki güçlü yaklaşım bulunur: birbirini alt etmeye çalışan ağlardan oluşan Üretken Çekişmeli Ağlar (GAN) ve gürültüyü adım adım temizleyen difüzyon modelleri. İkisi de öğrendiği veri dağılımından yeni örnekler üretir; ancak hedefe giderken tamamen farklı yollar izler.]]></summary></entry><entry><title type="html">Kelimeleri Sayılardan Anlama: NLP ve Word Embeddings Rehberi</title><link href="https://sonsuzus.github.io/posts/kelimeleri-sayilardan-anlama-nlp-ve-word-embeddings-rehberi/" rel="alternate" type="text/html" title="Kelimeleri Sayılardan Anlama: NLP ve Word Embeddings Rehberi" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/kelimeleri-sayilardan-anlama-nlp-ve-word-embeddings-rehberi</id><content type="html" xml:base="https://sonsuzus.github.io/posts/kelimeleri-sayilardan-anlama-nlp-ve-word-embeddings-rehberi/"><![CDATA[<p>İnsanlar için “kedi”, “köpek” ve “uçak” kelimelerini ayırmak kolaydır: İlk ikisi hayvandır, üçüncüsü ise gökyüzünde dolaşan metal bir araçtır. Bilgisayar açısından bakıldığındayse hepsi yalnızca karakter dizileridir. Doğal Dil İşleme (NLP), bu karakterlerin ardındaki anlamı makinelerin işleyebileceği matematiksel temsillere dönüştürür. Kelime gömme yöntemleri de tam burada devreye girerek kelimelere sayısal birer kimlik değil, anlamsal birer koordinat kazandırır.
``</p>

<h2 id="bilgisayar-kelimeleri-nasıl-görür">Bilgisayar kelimeleri nasıl görür?</h2>

<p>En temel yaklaşım, her kelimeyi sözlükteki konumuna göre temsil eden <strong>one-hot encoding</strong> yöntemidir. Örneğin sözlüğümüzde üç kelime varsa “kedi” şu şekilde gösterilebilir:</p>

\[kedi = [1, 0, 0]\]

<p>“köpek” ise:</p>

\[köpek = [0, 1, 0]\]

<p>Bu vektörler farklı kelimeleri ayırır ancak aralarındaki anlam ilişkisini taşımaz. Matematiksel olarak “kedi” ile “köpek”, “kedi” ile “uçak” kadar uzaktır. Ayrıca sözlük yüz binlerce kelime içeriyorsa vektörler gereksiz derecede büyük ve seyrek olur.</p>

<p>Word embeddings, her kelimeyi genellikle 50–300 boyutlu yoğun bir vektörle temsil eder. Eğitim sırasında benzer bağlamlarda kullanılan kelimeler vektör uzayında birbirine yaklaşır. Bu fikir, dağılımsal anlambilimin meşhur özetine dayanır: <strong>Bir kelimeyi, birlikte bulunduğu kelimelerden tanırsın.</strong></p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>One-hot</th>
      <th>Word Embedding</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Boyut</td>
      <td>Sözlük büyüklüğü</td>
      <td>Sabit ve daha küçük</td>
    </tr>
    <tr>
      <td>Yapı</td>
      <td>Seyrek</td>
      <td>Yoğun</td>
    </tr>
    <tr>
      <td>Anlamsal ilişki</td>
      <td>Yok</td>
      <td>Var</td>
    </tr>
    <tr>
      <td>Öğrenilebilirlik</td>
      <td>Sabit temsil</td>
      <td>Veriden öğrenilir</td>
    </tr>
  </tbody>
</table>

<h2 id="word2vec-komşuna-bak-kelimeyi-tanı">Word2Vec: Komşuna bak, kelimeyi tanı</h2>

<p>Word2Vec, kelimelerin yakın çevresinden yararlanır ve iki temel mimari sunar:</p>

<ul>
  <li><strong>CBOW</strong>, çevredeki kelimelerden merkezdeki kelimeyi tahmin eder.</li>
  <li><strong>Skip-gram</strong>, merkez kelimeden çevredeki kelimeleri tahmin eder.</li>
</ul>

<p>“Minik kedi koltukta uyudu” cümlesinde CBOW, “minik” ve “koltukta” kelimelerinden “kedi”yi bulmaya çalışabilir. Skip-gram ise “kedi” verildiğinde çevresindeki sözcükleri tahmin eder. Büyük veri kümelerinde Skip-gram, nadir kelimeleri öğrenmekte çoğu zaman daha başarılıdır.</p>

<p>İki vektörün anlamsal yakınlığı sıklıkla kosinüs benzerliğiyle ölçülür:</p>

\[cos(\theta) = \frac{A \cdot B}{||A||\,||B||}\]

<p>Sonuç 1’e yaklaştıkça yönler ve dolayısıyla anlamlar daha benzerdir. Ünlü vektör aritmetiği örneği de şöyledir:</p>

\[kral - erkek + kadın \approx kraliçe\]

<h2 id="glove-büyük-resmin-istatistiği">GloVe: Büyük resmin istatistiği</h2>

<p><strong>GloVe</strong>, yalnızca yerel kelime pencerelerine odaklanmak yerine bütün metindeki ortak görülme sayılarını kullanır. Bir kelimenin başka kelimelerle kaç kez yan yana geldiğini içeren eş-oluşum matrisi oluşturulur. Model, bu küresel istatistikleri düşük boyutlu vektörlere sıkıştırır.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Temel bilgi kaynağı</th>
      <th>Güçlü yanı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Word2Vec</td>
      <td>Yerel bağlam pencereleri</td>
      <td>Hızlı ve sezgisel eğitim</td>
    </tr>
    <tr>
      <td>GloVe</td>
      <td>Küresel eş-oluşum istatistikleri</td>
      <td>Genel dağılımı iyi yakalama</td>
    </tr>
  </tbody>
</table>

<h2 id="python-ile-hazır-vektörleri-kullanmak">Python ile hazır vektörleri kullanmak</h2>

<p>Aşağıdaki örnek, Gensim üzerinden hazır GloVe vektörlerini yükler ve “computer” kelimesine yakın sözcükleri getirir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">gensim.downloader</span> <span class="k">as</span> <span class="n">api</span>

<span class="c1"># Önceden eğitilmiş 50 boyutlu GloVe modelini indirir.
</span><span class="n">model</span> <span class="o">=</span> <span class="n">api</span><span class="p">.</span><span class="nf">load</span><span class="p">(</span><span class="sh">"</span><span class="s">glove-wiki-gigaword-50</span><span class="sh">"</span><span class="p">)</span>

<span class="c1"># Vektör uzayındaki en yakın kelimeleri listeler.
</span><span class="k">for</span> <span class="n">word</span><span class="p">,</span> <span class="n">score</span> <span class="ow">in</span> <span class="n">model</span><span class="p">.</span><span class="nf">most_similar</span><span class="p">(</span><span class="sh">"</span><span class="s">computer</span><span class="sh">"</span><span class="p">,</span> <span class="n">topn</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="nf">round</span><span class="p">(</span><span class="n">score</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
</code></pre></div></div>

<p>Model, “software” veya “computers” gibi sözcükleri yüksek benzerlik puanlarıyla döndürebilir. Ancak klasik Word2Vec ve GloVe modellerinde her kelimenin yalnızca tek vektörü vardır. Bu nedenle “yüz” kelimesinin insan yüzü ve sayı anlamları bağlama göre ayrılamaz. BERT gibi bağlamsal modeller bu sınırlamayı giderse de kelime gömmeler; arama, öneri sistemleri, duygu analizi ve metin sınıflandırma projelerinde hâlâ hızlı, öğretici ve güçlü bir başlangıç noktasıdır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="NLP" /><category term="Word2Vec" /><category term="GloVe" /><summary type="html"><![CDATA[İnsanlar için “kedi”, “köpek” ve “uçak” kelimelerini ayırmak kolaydır: İlk ikisi hayvandır, üçüncüsü ise gökyüzünde dolaşan metal bir araçtır. Bilgisayar açısından bakıldığındayse hepsi yalnızca karakter dizileridir. Doğal Dil İşleme (NLP), bu karakterlerin ardındaki anlamı makinelerin işleyebileceği matematiksel temsillere dönüştürür. Kelime gömme yöntemleri de tam burada devreye girerek kelimelere sayısal birer kimlik değil, anlamsal birer koordinat kazandırır.]]></summary></entry><entry><title type="html">Pekiştirmeli Öğrenme: Ödüllerle Strateji Öğrenen Ajanlar</title><link href="https://sonsuzus.github.io/posts/pekistirmeli-ogrenme-odullerle-strateji-ogrenen-ajanlar/" rel="alternate" type="text/html" title="Pekiştirmeli Öğrenme: Ödüllerle Strateji Öğrenen Ajanlar" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/pekistirmeli-ogrenme-odullerle-strateji-ogrenen-ajanlar</id><content type="html" xml:base="https://sonsuzus.github.io/posts/pekistirmeli-ogrenme-odullerle-strateji-ogrenen-ajanlar/"><![CDATA[<p>Bir labirentte olduğunuzu düşünün: Haritanız yok, bazı yollar çıkmaza ulaşıyor ve doğru kapıyı bulduğunuzda puan kazanıyorsunuz. Pekiştirmeli öğrenme, bir yapay zekâ ajanının benzer biçimde çevresiyle etkileşime girerek hangi kararların uzun vadede daha iyi sonuç verdiğini öğrenmesini sağlar. Ajana her adımı ezberletmek yerine ona hedefi, olası eylemleri ve geri bildirim mekanizmasını veririz; gerisini deneme, yanılma ve biraz da matematik halleder.</p>

<p>``</p>

<h2 id="temel-fikir-ajan-ortam-ve-ödül">Temel fikir: Ajan, ortam ve ödül</h2>

<p>Pekiştirmeli öğrenmede <strong>ajan</strong>, belirli bir <strong>durumda</strong> eylem seçer. <strong>Ortam</strong> bu eyleme karşılık yeni bir durum ve sayısal bir ödül üretir. Bu döngü, ajan başarılı bir strateji geliştirene kadar sürer.</p>

<table>
  <thead>
    <tr>
      <th>Kavram</th>
      <th>Anlamı</th>
      <th>Oyun örneği</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ajan</td>
      <td>Karar veren sistem</td>
      <td>Oyuncu karakteri</td>
    </tr>
    <tr>
      <td>Durum ($s$)</td>
      <td>Ortamın mevcut görünümü</td>
      <td>Karakterin konumu</td>
    </tr>
    <tr>
      <td>Eylem ($a$)</td>
      <td>Ajanın seçebileceği hamle</td>
      <td>Sağa veya sola gitmek</td>
    </tr>
    <tr>
      <td>Ödül ($r$)</td>
      <td>Hamlenin sayısal geri bildirimi</td>
      <td>Hazine için $+10$</td>
    </tr>
    <tr>
      <td>Policy ($\pi$)</td>
      <td>Duruma göre eylem seçme stratejisi</td>
      <td>Tehlikede geri çekilmek</td>
    </tr>
  </tbody>
</table>

<p>Amaç, yalnızca anlık ödülü değil, gelecekte elde edilecek toplam ödülü büyütmektir. İndirgenmiş toplam getiri şu şekilde gösterilir:</p>

\[G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots\]

<p>Buradaki $\gamma$, $0 \leq \gamma &lt; 1$ aralığındaki <strong>iskonto katsayısıdır</strong>. Küçük bir $\gamma$, ajanı kısa vadeli kazançlara yöneltir. Büyük bir değer ise gelecekteki ödülleri önemseyen, daha sabırlı bir ajan oluşturur.</p>

<h2 id="markov-karar-süreci">Markov karar süreci</h2>

<p>Birçok pekiştirmeli öğrenme problemi, Markov Karar Süreci ile modellenir ve $(S, A, P, R, \gamma)$ bileşenleriyle ifade edilir. $S$ durumları, $A$ eylemleri, $P$ geçiş olasılıklarını, $R$ ödülleri temsil eder. Markov varsayımına göre geleceği tahmin etmek için mevcut durum yeterlidir; ajanın bütün geçmişi yanında taşıması gerekmez.</p>

<p>Bir durumun değerini hesaplayan Bellman eşitliği, bugünkü ödülle gelecekteki olası değeri birleştirir:</p>

\[V^{\pi}(s)=\sum_a \pi(a|s)\sum_{s'}P(s'|s,a)\left[R(s,a,s')+\gamma V^{\pi}(s')\right]\]

<p>Bu ifade ilk bakışta matematik canavarı gibi görünse de mesajı basittir: “Bir durumun değeri, şimdi kazanacağım ödül ile sonra ulaşacağım durumların değeridir.”</p>

<h2 id="keşif-mi-sömürü-mü">Keşif mi, sömürü mü?</h2>

<p>Ajan sürekli bildiği en iyi eylemi seçerse daha iyi seçenekleri keşfedemeyebilir. Sürekli rastgele davranırsa da öğrendiklerinden yararlanamaz. Bu ikileme <strong>exploration-exploitation</strong> dengesi denir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Avantaj</th>
      <th>Risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Keşif</td>
      <td>Yeni ve daha iyi yollar bulabilir</td>
      <td>Kötü eylemler seçebilir</td>
    </tr>
    <tr>
      <td>Sömürü</td>
      <td>Bilinen ödülü verimli toplar</td>
      <td>Yerel optimumda kalabilir</td>
    </tr>
    <tr>
      <td>$\epsilon$-greedy</td>
      <td>İkisini basitçe dengeler</td>
      <td>$\epsilon$ ayarı gerektirir</td>
    </tr>
  </tbody>
</table>

<p>$\epsilon$-greedy yaklaşımında ajan, $\epsilon$ olasılıkla rastgele; diğer durumlarda en yüksek değere sahip eylemi seçer.</p>

<h2 id="q-learning-ile-küçük-bir-uygulama">Q-Learning ile küçük bir uygulama</h2>

<p>Q-Learning, ortam modelini önceden bilmeden durum-eylem değerlerini öğrenir. Güncelleme kuralı şöyledir:</p>

\[Q(s,a) \leftarrow Q(s,a)+\alpha\left[r+\gamma\max_{a'}Q(s',a')-Q(s,a)\right]\]

<p>Aşağıdaki Python kodu bu güncellemenin ö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">random</span>

<span class="n">Q</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">alpha</span><span class="p">,</span> <span class="n">gamma</span><span class="p">,</span> <span class="n">epsilon</span> <span class="o">=</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.95</span><span class="p">,</span> <span class="mf">0.1</span>

<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">Q</span><span class="p">.</span><span class="nf">get</span><span class="p">((</span><span class="n">state</span><span class="p">,</span> <span class="n">action</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">choose_action</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">actions</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">random</span><span class="p">.</span><span class="nf">random</span><span class="p">()</span> <span class="o">&lt;</span> <span class="n">epsilon</span><span class="p">:</span>
        <span class="k">return</span> <span class="n">random</span><span class="p">.</span><span class="nf">choice</span><span class="p">(</span><span class="n">actions</span><span class="p">)</span>  <span class="c1"># Keşif
</span>    <span class="k">return</span> <span class="nf">max</span><span class="p">(</span><span class="n">actions</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="nf">value</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">a</span><span class="p">))</span>  <span class="c1"># Sömürü
</span>
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">reward</span><span class="p">,</span> <span class="n">next_state</span><span class="p">,</span> <span class="n">next_actions</span><span class="p">):</span>
    <span class="n">old_q</span> <span class="o">=</span> <span class="nf">value</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">action</span><span class="p">)</span>
    <span class="n">best_next</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="nf">value</span><span class="p">(</span><span class="n">next_state</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">next_actions</span><span class="p">)</span>
    <span class="n">target</span> <span class="o">=</span> <span class="n">reward</span> <span class="o">+</span> <span class="n">gamma</span> <span class="o">*</span> <span class="n">best_next</span>
    <span class="n">Q</span><span class="p">[(</span><span class="n">state</span><span class="p">,</span> <span class="n">action</span><span class="p">)]</span> <span class="o">=</span> <span class="n">old_q</span> <span class="o">+</span> <span class="n">alpha</span> <span class="o">*</span> <span class="p">(</span><span class="n">target</span> <span class="o">-</span> <span class="n">old_q</span><span class="p">)</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">choose_action</code> keşif-sömürü dengesini kurarken <code class="language-plaintext highlighter-rouge">update</code>, alınan ödülü ve gelecekteki en iyi tahmini kullanarak Q tablosunu düzeltir. Eğitim ilerledikçe yüksek Q değerlerine sahip eylemler ajanın policy’sini oluşturur.</p>

<p>Pekiştirmeli öğrenme robotik, oyun, trafik kontrolü ve kaynak yönetimi gibi alanlarda güçlüdür. Ancak ödül yanlış tasarlanırsa ajan hedefin ruhunu değil, puan kazanmanın açığını öğrenebilir. Kısacası iyi bir ajan yetiştirmek için yalnızca algoritma değil, doğru ödül tasarımı da gerekir; yoksa robotunuz odayı temizlemek yerine kiri halının altına süpürebilir!</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="pekiştirmeli öğrenme" /><category term="yapay zeka" /><category term="makine öğrenmesi" /><summary type="html"><![CDATA[Bir labirentte olduğunuzu düşünün: Haritanız yok, bazı yollar çıkmaza ulaşıyor ve doğru kapıyı bulduğunuzda puan kazanıyorsunuz. Pekiştirmeli öğrenme, bir yapay zekâ ajanının benzer biçimde çevresiyle etkileşime girerek hangi kararların uzun vadede daha iyi sonuç verdiğini öğrenmesini sağlar. Ajana her adımı ezberletmek yerine ona hedefi, olası eylemleri ve geri bildirim mekanizmasını veririz; gerisini deneme, yanılma ve biraz da matematik halleder.]]></summary></entry><entry><title type="html">RNN ve LSTM: Sıralı Verilere Hafıza Kazandırmak</title><link href="https://sonsuzus.github.io/posts/rnn-ve-lstm-sirali-verilere-hafiza-kazandirmak/" rel="alternate" type="text/html" title="RNN ve LSTM: Sıralı Verilere Hafıza Kazandırmak" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/rnn-ve-lstm-sirali-verilere-hafiza-kazandirmak</id><content type="html" xml:base="https://sonsuzus.github.io/posts/rnn-ve-lstm-sirali-verilere-hafiza-kazandirmak/"><![CDATA[<p>Bir cümleyi anlamak, yalnızca son kelimeye bakmakla mümkün değildir; önceki kelimeleri de hatırlamak gerekir. Zaman serileri, borsa fiyatları, ses sinyalleri ve sensör kayıtları da benzer biçimde geçmişten izler taşır. Tekrarlayan Sinir Ağları, yani RNN’ler, bu ardışık bağı yakalamak için geliştirilmiş bellekli mimarilerdir. LSTM ise RNN’in unutkanlığını azaltan daha gelişmiş kuzenidir.
``</p>

<h2 id="sıralı-veri-neden-farklıdır">Sıralı veri neden farklıdır?</h2>

<p>Klasik ileri beslemeli ağlarda her girdi genellikle diğerlerinden bağımsız değerlendirilir. Oysa sıralı verilerde örneklerin konumu ve geliş sırası anlam taşır. “Kedi köpeği kovaladı” ile “Köpek kediyi kovaladı” aynı kelimeleri içerir; ancak sıra değişince anlam da değişir.</p>

<p>Bir RNN, mevcut girdiyi işlerken önceki adımdan gelen gizli durumu kullanır:</p>

\[h_t = f(W_x x_t + W_h h_{t-1} + b)\]

<p>Burada $x_t$ mevcut girdiyi, $h_{t-1}$ geçmişten taşınan bilgiyi, $h_t$ ise güncellenmiş hafızayı temsil eder. Ağın çıktısı çoğunlukla şu şekilde hesaplanır:</p>

\[y_t = W_y h_t + c\]

<p>Başka bir deyişle RNN, her adımda hem yeni veriyi okur hem de eski not defterine göz atar.</p>

<h2 id="rnn-neden-her-şeyi-hatırlayamıyor">RNN neden her şeyi hatırlayamıyor?</h2>

<p>RNN teoride uzun süreli ilişkileri öğrenebilir. Pratikte ise eğitim sırasında kullanılan geriye yayılım, zaman boyunca çok sayıda çarpma işlemi gerçekleştirir. Türevler sürekli küçük değerlerle çarpılırsa gradyan sıfıra yaklaşır; buna <strong>kaybolan gradyan</strong> denir. Büyük değerlerle çarpıldığında ise <strong>patlayan gradyan</strong> oluşabilir.</p>

<p>Sonuç olarak standart RNN, birkaç adım önceki bilgiyi başarıyla kullanırken yüzlerce adım önceki kritik bir ayrıntıyı unutabilir. Romanın ilk bölümündeki karakteri finalde hatırlamayan bir okur gibi davranır.</p>

<h2 id="lstm-kapılarla-yönetilen-hafıza">LSTM: Kapılarla yönetilen hafıza</h2>

<p>Long Short-Term Memory, hücre durumu adı verilen daha kararlı bir bilgi yolu kullanır. Bilginin kaderini üç temel kapı belirler:</p>

<ul>
  <li><strong>Unutma kapısı:</strong> Eski bilginin ne kadarının silineceğine karar verir.</li>
  <li><strong>Girdi kapısı:</strong> Yeni bilginin ne kadarının hafızaya yazılacağını seçer.</li>
  <li><strong>Çıktı kapısı:</strong> Hafızanın hangi bölümünün dışarı aktarılacağını belirler.</li>
</ul>

<p>Unutma kapısının basitleştirilmiş hesabı şöyledir:</p>

\[f_t = sigmoid(W_f [h_{t-1}, x_t] + b_f)\]

<p>$sigmoid$ sonucu 0 ile 1 arasındadır. Sıfıra yakın değer “unut”, bire yakın değer ise “sakla” anlamına gelir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Standart RNN</th>
      <th>LSTM</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Hafıza yapısı</td>
      <td>Gizli durum</td>
      <td>Gizli durum ve hücre durumu</td>
    </tr>
    <tr>
      <td>Uzun bağımlılıklar</td>
      <td>Zayıf</td>
      <td>Daha başarılı</td>
    </tr>
    <tr>
      <td>Parametre sayısı</td>
      <td>Az</td>
      <td>Daha fazla</td>
    </tr>
    <tr>
      <td>Eğitim maliyeti</td>
      <td>Daha düşük</td>
      <td>Daha yüksek</td>
    </tr>
    <tr>
      <td>Uygun senaryo</td>
      <td>Kısa diziler</td>
      <td>Uzun ve karmaşık diziler</td>
    </tr>
  </tbody>
</table>

<h2 id="keras-ile-küçük-bir-lstm-modeli">Keras ile küçük bir LSTM modeli</h2>

<p>Aşağıdaki model, son 30 zaman adımını inceleyerek bir sonraki sayısal değeri tahmin eder. Borsa kapanış fiyatları veya sensör ölçümleri gibi verilerde kullanılabilir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">tensorflow.keras</span> <span class="kn">import</span> <span class="n">Sequential</span>
<span class="kn">from</span> <span class="n">tensorflow.keras.layers</span> <span class="kn">import</span> <span class="n">LSTM</span><span class="p">,</span> <span class="n">Dense</span><span class="p">,</span> <span class="n">Dropout</span>

<span class="n">model</span> <span class="o">=</span> <span class="nc">Sequential</span><span class="p">([</span>
    <span class="nc">LSTM</span><span class="p">(</span><span class="mi">64</span><span class="p">,</span> <span class="n">input_shape</span><span class="o">=</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">return_sequences</span><span class="o">=</span><span class="bp">True</span><span class="p">),</span>
    <span class="nc">Dropout</span><span class="p">(</span><span class="mf">0.2</span><span class="p">),</span>
    <span class="nc">LSTM</span><span class="p">(</span><span class="mi">32</span><span class="p">),</span>
    <span class="nc">Dense</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="p">])</span>

<span class="n">model</span><span class="p">.</span><span class="nf">compile</span><span class="p">(</span><span class="n">optimizer</span><span class="o">=</span><span class="sh">"</span><span class="s">adam</span><span class="sh">"</span><span class="p">,</span> <span class="n">loss</span><span class="o">=</span><span class="sh">"</span><span class="s">mse</span><span class="sh">"</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">epochs</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">batch_size</span><span class="o">=</span><span class="mi">32</span><span class="p">)</span>
</code></pre></div></div>

<p>İlk LSTM katmanı bütün zaman adımlarına ait çıktıları ikinci LSTM katmanına aktarır. <code class="language-plaintext highlighter-rouge">Dropout</code>, nöronların bir bölümünü eğitim sırasında geçici olarak kapatarak ezberlemeyi azaltır. Son <code class="language-plaintext highlighter-rouge">Dense</code> katmanı tek bir tahmin üretir. Modelden önce verileri ölçeklendirmek ve örnekleri <code class="language-plaintext highlighter-rouge">(örnek, zaman_adımı, özellik)</code> biçimine getirmek gerekir.</p>

<h2 id="nerelerde-kullanılır">Nerelerde kullanılır?</h2>

<p>RNN ve LSTM; konuşma tanıma, metin üretimi, duygu analizi, hava tahmini, anomali tespiti ve finansal modelleme gibi alanlarda kullanılabilir. Bununla birlikte borsa tahmininde geçmiş fiyatların geleceği garanti etmediği unutulmamalıdır. Günümüzde Transformer mimarileri birçok dil görevinde öne çıksa da LSTM, daha küçük veri kümeleri ve düşük kaynaklı zaman serisi projeleri için hâlâ güçlü, anlaşılır ve pratik bir seçenektir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="RNN" /><category term="LSTM" /><category term="Derin Öğrenme" /><summary type="html"><![CDATA[Bir cümleyi anlamak, yalnızca son kelimeye bakmakla mümkün değildir; önceki kelimeleri de hatırlamak gerekir. Zaman serileri, borsa fiyatları, ses sinyalleri ve sensör kayıtları da benzer biçimde geçmişten izler taşır. Tekrarlayan Sinir Ağları, yani RNN’ler, bu ardışık bağı yakalamak için geliştirilmiş bellekli mimarilerdir. LSTM ise RNN’in unutkanlığını azaltan daha gelişmiş kuzenidir.]]></summary></entry><entry><title type="html">Ses Dalgalarıyla Konuşan Bir Akustik Modem: FSK ile Veri İletimi</title><link href="https://sonsuzus.github.io/posts/ses-dalgalariyla-konusan-bir-akustik-modem-fsk-ile-veri-iletimi/" rel="alternate" type="text/html" title="Ses Dalgalarıyla Konuşan Bir Akustik Modem: FSK ile Veri İletimi" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/ses-dalgalariyla-konusan-bir-akustik-modem-fsk-ile-veri-iletimi</id><content type="html" xml:base="https://sonsuzus.github.io/posts/ses-dalgalariyla-konusan-bir-akustik-modem-fsk-ile-veri-iletimi/"><![CDATA[<p>Eski çevirmeli modemlerin çıkardığı robotik sesler rastgele gürültü değildi; bilgisayarların veriyi ses dalgalarına dönüştürerek telefon hattından taşıma yöntemiydi. Bu projede aynı fikri daha küçük ölçekte uygulayacak, Frekans Kaydırmalı Anahtarlama (FSK) kullanarak hoparlörden veri gönderen ve mikrofonla çözen basit bir akustik modem tasarlayacağız.</p>

<p>``</p>

<h2 id="akustik-modem-nasıl-çalışır">Akustik modem nasıl çalışır?</h2>

<p>Dijital sistemde bitler yalnızca 0 ve 1’dir. Hoparlör ise doğrudan bit çalamaz; zamana göre değişen bir elektrik sinyalini sese dönüştürür. Bu nedenle bitleri ölçülebilir ses özellikleriyle temsil etmemiz gerekir.</p>

<p>İkili FSK, yani <strong>BFSK</strong>, iki farklı frekans kullanır:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">0</code> biti için $f_0=1200\,Hz$</li>
  <li><code class="language-plaintext highlighter-rouge">1</code> biti için $f_1=2200\,Hz$</li>
</ul>

<p>Bir bitin süresi $T_b$ ise üretilen sinyal şöyle tanımlanabilir:</p>

\[s(t)=A\sin(2\pi f_b t), \qquad 0\leq t&lt;T_b\]

<p>Burada $A$ genlik, $f_b$ ise bitin değerine göre seçilen frekanstır. Bit hızı yaklaşık olarak</p>

\[R_b=\frac{1}{T_b}\]

<p>bağıntısıyla bulunur. Örneğin her bit 20 milisaniye sürerse hız $50\,bit/s$ olur. Daha kısa semboller iletişimi hızlandırır; fakat yankı, gürültü ve zamanlama hatalarına karşı hassasiyeti artırır.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Bitleri temsil eden özellik</th>
      <th>Avantaj</th>
      <th>Dezavantaj</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>FSK</td>
      <td>Frekans</td>
      <td>Gürültüye dayanıklı, anlaşılır</td>
      <td>Daha geniş bant kullanır</td>
    </tr>
    <tr>
      <td>ASK</td>
      <td>Genlik</td>
      <td>Uygulaması kolay</td>
      <td>Ses seviyesi değişimlerinden etkilenir</td>
    </tr>
    <tr>
      <td>PSK</td>
      <td>Faz</td>
      <td>Bant genişliğini verimli kullanır</td>
      <td>Senkronizasyonu daha zordur</td>
    </tr>
  </tbody>
</table>

<p>İlk proje için FSK iyi bir tercihtir; çünkü alıcının yalnızca iki frekanstan hangisinin daha güçlü olduğunu belirlemesi yeterlidir.</p>

<h2 id="verici-tarafı">Verici tarafı</h2>

<p>Aşağıdaki Python kodu metni bitlere çevirir, her bit için uygun sinüs dalgasını üretir ve sonucu WAV dosyasına kaydeder:</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">scipy.io.wavfile</span> <span class="kn">import</span> <span class="n">write</span>

<span class="n">SAMPLE_RATE</span> <span class="o">=</span> <span class="mi">44100</span>
<span class="n">BIT_TIME</span> <span class="o">=</span> <span class="mf">0.02</span>
<span class="n">FREQUENCIES</span> <span class="o">=</span> <span class="p">{</span><span class="sh">'</span><span class="s">0</span><span class="sh">'</span><span class="p">:</span> <span class="mi">1200</span><span class="p">,</span> <span class="sh">'</span><span class="s">1</span><span class="sh">'</span><span class="p">:</span> <span class="mi">2200</span><span class="p">}</span>

<span class="k">def</span> <span class="nf">text_to_bits</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
    <span class="k">return</span> <span class="sh">''</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="sa">f</span><span class="sh">'</span><span class="si">{</span><span class="n">byte</span><span class="si">:</span><span class="mi">08</span><span class="n">b</span><span class="si">}</span><span class="sh">'</span> <span class="k">for</span> <span class="n">byte</span> <span class="ow">in</span> <span class="n">text</span><span class="p">.</span><span class="nf">encode</span><span class="p">(</span><span class="sh">'</span><span class="s">utf-8</span><span class="sh">'</span><span class="p">))</span>

<span class="k">def</span> <span class="nf">make_tone</span><span class="p">(</span><span class="n">frequency</span><span class="p">):</span>
    <span class="n">sample_count</span> <span class="o">=</span> <span class="nf">int</span><span class="p">(</span><span class="n">SAMPLE_RATE</span> <span class="o">*</span> <span class="n">BIT_TIME</span><span class="p">)</span>
    <span class="n">t</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">arange</span><span class="p">(</span><span class="n">sample_count</span><span class="p">)</span> <span class="o">/</span> <span class="n">SAMPLE_RATE</span>
    <span class="k">return</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="n">pi</span> <span class="o">*</span> <span class="n">frequency</span> <span class="o">*</span> <span class="n">t</span><span class="p">)</span>

<span class="n">payload</span> <span class="o">=</span> <span class="nf">text_to_bits</span><span class="p">(</span><span class="sh">'</span><span class="s">Merhaba modem!</span><span class="sh">'</span><span class="p">)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="sh">'</span><span class="s">1010101010101010</span><span class="sh">'</span> <span class="o">+</span> <span class="n">payload</span>
<span class="n">signal</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">([</span><span class="nf">make_tone</span><span class="p">(</span><span class="n">FREQUENCIES</span><span class="p">[</span><span class="n">b</span><span class="p">])</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">frame</span><span class="p">])</span>
<span class="nf">write</span><span class="p">(</span><span class="sh">'</span><span class="s">mesaj.wav</span><span class="sh">'</span><span class="p">,</span> <span class="n">SAMPLE_RATE</span><span class="p">,</span> <span class="n">np</span><span class="p">.</span><span class="nf">int16</span><span class="p">(</span><span class="n">signal</span> <span class="o">*</span> <span class="mi">32767</span><span class="p">))</span>
</code></pre></div></div>

<p>Baştaki dönüşümlü bitler bir <strong>preamble</strong> oluşturur. Alıcı bu bilinen örüntüyü yakalayarak mesajın nerede başladığını ve sembol sınırlarını tahmin edebilir. Gerçek bir protokolde preamble sonrasında veri uzunluğu ve hata denetim alanı da bulunmalıdır.</p>

<h2 id="alıcı-frekansı-nasıl-tanır">Alıcı frekansı nasıl tanır?</h2>

<p>Kaydı <code class="language-plaintext highlighter-rouge">BIT_TIME</code> uzunluğunda parçalara ayırıp her parçada 1200 Hz ile 2200 Hz enerjisini karşılaştırabiliriz. Bunun için FFT kullanılabilir. Yalnızca birkaç frekans aranıyorsa <strong>Goertzel algoritması</strong> daha hesaplıdır.</p>

<p>Bir frekansın ayrıştırılabilmesi örnekleme hızına bağlıdır. Nyquist koşuluna göre</p>

\[f_s&gt;2f_{max}\]

<p>olmalıdır. Burada $f_s=44100\,Hz$ olduğu için 2200 Hz rahatlıkla örneklenebilir.</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="n">samples_per_bit</span> <span class="o">=</span> <span class="nf">int</span><span class="p">(</span><span class="n">SAMPLE_RATE</span> <span class="o">*</span> <span class="n">BIT_TIME</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">energy_at</span><span class="p">(</span><span class="n">chunk</span><span class="p">,</span> <span class="n">frequency</span><span class="p">):</span>
    <span class="n">windowed</span> <span class="o">=</span> <span class="n">chunk</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">hanning</span><span class="p">(</span><span class="nf">len</span><span class="p">(</span><span class="n">chunk</span><span class="p">))</span>
    <span class="n">spectrum</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">fft</span><span class="p">.</span><span class="nf">rfft</span><span class="p">(</span><span class="n">windowed</span><span class="p">)</span>
    <span class="n">freqs</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">fft</span><span class="p">.</span><span class="nf">rfftfreq</span><span class="p">(</span><span class="nf">len</span><span class="p">(</span><span class="n">chunk</span><span class="p">),</span> <span class="mi">1</span> <span class="o">/</span> <span class="n">SAMPLE_RATE</span><span class="p">)</span>
    <span class="n">index</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">argmin</span><span class="p">(</span><span class="n">np</span><span class="p">.</span><span class="nf">abs</span><span class="p">(</span><span class="n">freqs</span> <span class="o">-</span> <span class="n">frequency</span><span class="p">))</span>
    <span class="k">return</span> <span class="nf">abs</span><span class="p">(</span><span class="n">spectrum</span><span class="p">[</span><span class="n">index</span><span class="p">])</span> <span class="o">**</span> <span class="mi">2</span>

<span class="k">def</span> <span class="nf">decode_chunk</span><span class="p">(</span><span class="n">chunk</span><span class="p">):</span>
    <span class="n">low</span> <span class="o">=</span> <span class="nf">energy_at</span><span class="p">(</span><span class="n">chunk</span><span class="p">,</span> <span class="mi">1200</span><span class="p">)</span>
    <span class="n">high</span> <span class="o">=</span> <span class="nf">energy_at</span><span class="p">(</span><span class="n">chunk</span><span class="p">,</span> <span class="mi">2200</span><span class="p">)</span>
    <span class="k">return</span> <span class="sh">'</span><span class="s">1</span><span class="sh">'</span> <span class="k">if</span> <span class="n">high</span> <span class="o">&gt;</span> <span class="n">low</span> <span class="k">else</span> <span class="sh">'</span><span class="s">0</span><span class="sh">'</span>
</code></pre></div></div>

<p>Hann penceresi, sembol sınırındaki ani kesilmelerin FFT üzerinde oluşturduğu spektral sızıntıyı azaltır. Çözülen bitler sekizli gruplara ayrılarak baytlara, ardından UTF-8 metne dönüştürülebilir.</p>

<h2 id="modemi-daha-güvenilir-yapmak">Modemi daha güvenilir yapmak</h2>

<p>Oda yankısı ve arka plan sesi kusursuz dalgaları küçük bir kaosa çevirebilir. Bu nedenle çerçeveye CRC-16 eklemek, her baytı birden fazla göndermek veya Hamming kodu kullanmak faydalıdır. Otomatik eşik belirleme, mikrofon kazancını dengeleme ve korelasyonla preamble arama da başarı oranını yükseltir.</p>

<p>Testleri önce WAV dosyaları arasında, sonra aynı odadaki hoparlör ve mikrofonla yapın. Ses düzeyini rahatsız etmeyecek seviyede tutun. Birkaç ıslık benzeri tonla başlayan bu proje; paketleme, hata düzeltme ve daha gelişmiş modülasyonlarla gerçek bir mini iletişim sistemine dönüşebilir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="akustik modem" /><category term="FSK" /><category term="Python" /><summary type="html"><![CDATA[Eski çevirmeli modemlerin çıkardığı robotik sesler rastgele gürültü değildi; bilgisayarların veriyi ses dalgalarına dönüştürerek telefon hattından taşıma yöntemiydi. Bu projede aynı fikri daha küçük ölçekte uygulayacak, Frekans Kaydırmalı Anahtarlama (FSK) kullanarak hoparlörden veri gönderen ve mikrofonla çözen basit bir akustik modem tasarlayacağız.]]></summary></entry><entry><title type="html">Transformer Mimarisi: Attention ile Kelimeler Arasındaki Görünmez Bağları Yakalamak</title><link href="https://sonsuzus.github.io/posts/transformer-mimarisi-attention-ile-kelimeler-arasindaki-gorunmez-baglari-yakalamak/" rel="alternate" type="text/html" title="Transformer Mimarisi: Attention ile Kelimeler Arasındaki Görünmez Bağları Yakalamak" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/transformer-mimarisi-attention-ile-kelimeler-arasindaki-gorunmez-baglari-yakalamak</id><content type="html" xml:base="https://sonsuzus.github.io/posts/transformer-mimarisi-attention-ile-kelimeler-arasindaki-gorunmez-baglari-yakalamak/"><![CDATA[<p>Bir cümleyi anlamak, kelimeleri soldan sağa doğru ezberlemekten çok daha fazlasıdır. Örneğin “Robot, masadaki kitabı aldı çünkü onu merak etti” cümlesindeki “onu” sözcüğünün kitabı işaret ettiğini bağlam sayesinde anlarız. Transformer mimarisi de benzer biçimde çalışır: Cümledeki kelimelerin birbirleriyle ilişkilerini aynı anda inceler ve hangilerinin daha önemli olduğuna karar verir.</p>

<p>``</p>

<h2 id="transformerdan-önce-ne-vardı">Transformer’dan Önce Ne Vardı?</h2>

<p>Doğal dil işlemede uzun süre RNN ve LSTM gibi tekrarlayan sinir ağları kullanıldı. Bu modeller metni sırayla işler: İkinci kelime için birincinin, üçüncü kelime için ilk ikisinin işlenmesini beklemek gerekir. Bu bağımlılık paralel hesaplamayı zorlaştırır ve uzun cümlelerin başındaki bilgilerin unutulmasına yol açabilir.</p>

<p>Transformer ise eğitim sırasında dizideki bütün konumları paralel olarak ele alır. Böylece hem modern GPU’lardan daha iyi yararlanır hem de birbirinden uzaktaki kelimeler arasında doğrudan bağlantı kurar. Ancak önemli bir ayrıntı var: GPT benzeri otoregresif modeller, metin üretirken sonraki token önceki tokenlara bağlı olduğu için çıkarım aşamasında hâlâ adım adım ilerler.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>RNN / LSTM</th>
      <th>Transformer</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Veri işleme</td>
      <td>Sıralı</td>
      <td>Eğitimde büyük ölçüde paralel</td>
    </tr>
    <tr>
      <td>Uzak ilişkiler</td>
      <td>Yakalamak zor olabilir</td>
      <td>Doğrudan attention ile yakalanır</td>
    </tr>
    <tr>
      <td>Eğitim hızı</td>
      <td>Görece düşük</td>
      <td>Yüksek paralellik sayesinde hızlı</td>
    </tr>
    <tr>
      <td>Temel bellek</td>
      <td>Gizli durum</td>
      <td>Attention ağırlıkları ve temsiller</td>
    </tr>
    <tr>
      <td>Uzun dizi maliyeti</td>
      <td>Zaman adımı sayısıyla büyür</td>
      <td>Standart attention’da karesel büyür</td>
    </tr>
  </tbody>
</table>

<h2 id="attentionın-üç-kahramanı-query-key-ve-value">Attention’ın Üç Kahramanı: Query, Key ve Value</h2>

<p>Self-attention mekanizmasında her token için üç vektör üretilir:</p>

<ul>
  <li><strong>Query (Q):</strong> Tokenın ne aradığını temsil eder.</li>
  <li><strong>Key (K):</strong> Tokenın hangi bilgiyi sunduğunu belirtir.</li>
  <li><strong>Value (V):</strong> Eşleşme gerçekleştiğinde aktarılacak bilgidir.</li>
</ul>

<p>Bir query ile bütün key vektörlerinin benzerliği hesaplanır. Sonuçlar ölçeklenir, <code class="language-plaintext highlighter-rouge">softmax</code> ile olasılık benzeri ağırlıklara dönüştürülür ve value vektörleri bu ağırlıklarla birleştirilir:</p>

\[\text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\]

<p>Buradaki $d_k$, key vektörlerinin boyutudur. $\sqrt{d_k}$ ile bölme işlemi, büyük boyutlarda noktasal çarpımların aşırı büyümesini ve softmax fonksiyonunun dengesizleşmesini önler. Kısacası model, “Bu kelimeyi anlamak için diğer kelimelere ne kadar bakmalıyım?” sorusuna sayısal bir cevap verir.</p>

<h2 id="neden-birden-fazla-dikkat-başı-var">Neden Birden Fazla Dikkat Başı Var?</h2>

<p>Tek bir attention işlemi yalnızca belirli bir ilişki türüne odaklanabilir. <strong>Multi-head attention</strong>, farklı temsil uzaylarında birden fazla attention hesabını paralel yürütür. Bir baş özne-yüklem ilişkisini, başka biri zamirlerin referansını, diğeri ise anlamsal yakınlığı öğrenebilir.</p>

\[\text{MultiHead}(Q,K,V)=\text{Concat}(head_1,\ldots,head_h)W^O\]

<p>Bu yapı, aynı cümleye farklı büyüteçlerle bakmak gibidir. Transformer katmanlarında attention sonrasında ileri beslemeli ağ, residual bağlantılar ve katman normalizasyonu da bulunur. Böylece bilgiler yalnızca seçilmez; dönüştürülür ve kararlı biçimde sonraki katmana aktarılır.</p>

<h2 id="kelime-sırası-nasıl-biliniyor">Kelime Sırası Nasıl Biliniyor?</h2>

<p>Transformer kelimeleri aynı anda işlediği için sıra bilgisini kendiliğinden algılayamaz. Bu nedenle token temsillerine <strong>positional encoding</strong> eklenir. Klasik yaklaşım sinüs ve kosinüs fonksiyonlarını kullanır:</p>

\[PE(pos,2i)=\sin\left(pos/10000^{2i/d}\right)\]

\[PE(pos,2i+1)=\cos\left(pos/10000^{2i/d}\right)\]

<p>Böylece “köpek adamı ısırdı” ile “adam köpeği ısırdı” aynı kelimeleri içerse bile farklı anlamlara sahip olur.</p>

<h2 id="basitleştirilmiş-attention-kodu">Basitleştirilmiş Attention Kodu</h2>

<p>Aşağıdaki PyTorch fonksiyonu, scaled dot-product attention hesabını gerçekleştirir:</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">math</span>

<span class="k">def</span> <span class="nf">attention</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
    <span class="n">d_k</span> <span class="o">=</span> <span class="n">query</span><span class="p">.</span><span class="nf">size</span><span class="p">(</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="n">query</span> <span class="o">@</span> <span class="n">key</span><span class="p">.</span><span class="nf">transpose</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</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="n">scores</span> <span class="o">/</span> <span class="n">math</span><span class="p">.</span><span class="nf">sqrt</span><span class="p">(</span><span class="n">d_k</span><span class="p">)</span>

    <span class="k">if</span> <span class="n">mask</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
        <span class="n">scores</span> <span class="o">=</span> <span class="n">scores</span><span class="p">.</span><span class="nf">masked_fill</span><span class="p">(</span><span class="n">mask</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="nf">float</span><span class="p">(</span><span class="sh">"</span><span class="s">-inf</span><span class="sh">"</span><span class="p">))</span>

    <span class="n">weights</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="nf">softmax</span><span class="p">(</span><span class="n">scores</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">output</span> <span class="o">=</span> <span class="n">weights</span> <span class="o">@</span> <span class="n">value</span>
    <span class="k">return</span> <span class="n">output</span><span class="p">,</span> <span class="n">weights</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">mask</code>, modelin dolgu tokenlarını görmesini veya gelecekteki kelimelere bakmasını engeller. Döndürülen <code class="language-plaintext highlighter-rouge">weights</code> ise hangi tokenın hangisine ne ölçüde dikkat ettiğini incelemeyi sağlar.</p>

<h2 id="güçlü-ama-bedelsiz-değil">Güçlü Ama Bedelsiz Değil</h2>

<p>Standart self-attention’ın zaman ve bellek maliyeti dizi uzunluğuna göre yaklaşık $O(n^2)$ seviyesindedir. Bu nedenle çok uzun belgeler pahalı olabilir. Sparse attention, FlashAttention ve pencere tabanlı yaklaşımlar bu yükü azaltmayı hedefler.</p>

<p>Yine de Transformer; çeviri, metin üretimi, görüntü işleme ve protein analizi gibi alanlarda ortak bir temel oluşturdu. Devrimin özü basit ama güçlüdür: Her kelimeyi tek başına değil, diğer bütün kelimelerle kurduğu ilişkiler üzerinden anlamlandırmak.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="transformer" /><category term="attention" /><category term="yapay zeka" /><summary type="html"><![CDATA[Bir cümleyi anlamak, kelimeleri soldan sağa doğru ezberlemekten çok daha fazlasıdır. Örneğin “Robot, masadaki kitabı aldı çünkü onu merak etti” cümlesindeki “onu” sözcüğünün kitabı işaret ettiğini bağlam sayesinde anlarız. Transformer mimarisi de benzer biçimde çalışır: Cümledeki kelimelerin birbirleriyle ilişkilerini aynı anda inceler ve hangilerinin daha önemli olduğuna karar verir.]]></summary></entry><entry><title type="html">Yapay Zekânın Vicdanı: Önyargı, Açıklanabilirlik ve Güvenlik</title><link href="https://sonsuzus.github.io/posts/yapay-zekanin-vicdani-onyargi-aciklanabilirlik-ve-guvenlik/" rel="alternate" type="text/html" title="Yapay Zekânın Vicdanı: Önyargı, Açıklanabilirlik ve Güvenlik" /><published>2026-08-08T00:00:00+00:00</published><updated>2026-08-08T00:00:00+00:00</updated><id>https://sonsuzus.github.io/posts/yapay-zekanin-vicdani-onyargi-aciklanabilirlik-ve-guvenlik</id><content type="html" xml:base="https://sonsuzus.github.io/posts/yapay-zekanin-vicdani-onyargi-aciklanabilirlik-ve-guvenlik/"><![CDATA[<p>Yapay zekâ modelleri tarafsız matematik makineleri gibi görünse de insanların ürettiği verilerle öğrenir. Dolayısıyla toplumdaki eşitsizlikleri, eksik temsilleri ve geçmiş kararların hatalarını da miras alabilirler. Bir işe alım modelinin belirli grupları sistematik biçimde elemesi veya sağlık uygulamasının bazı hastalarda daha fazla yanılması, yalnızca teknik bir hata değil; etik, hukuki ve toplumsal bir sorundur.</p>

<p>``</p>

<h2 id="algoritmik-önyargı-nereden-gelir">Algoritmik önyargı nereden gelir?</h2>

<p>Bir modelin temel amacı, kayıp fonksiyonunu en aza indirmektir:</p>

\[\theta^* = \arg\min_\theta \frac{1}{n}\sum_{i=1}^{n} L(f_\theta(x_i), y_i)\]

<p>Ancak bu denklem neyin <strong>adil</strong> olduğunu kendiliğinden bilmez. Eğitim verisinde bir grup az temsil ediliyorsa model, toplam hatayı düşürürken o grubun hatasını önemsemeyebilir. Önyargı; veri toplama yönteminden, hatalı etiketlerden, seçilen özelliklerden veya sistemin kullanıldığı bağlamdan kaynaklanabilir.</p>

<table>
  <thead>
    <tr>
      <th>Önyargı türü</th>
      <th>Kaynak</th>
      <th>Olası sonuç</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Örnekleme önyargısı</td>
      <td>Bazı grupların az temsil edilmesi</td>
      <td>Dengesiz hata oranları</td>
    </tr>
    <tr>
      <td>Tarihsel önyargı</td>
      <td>Geçmiş ayrımcılığın veriye yansıması</td>
      <td>Eski eşitsizliklerin otomasyonu</td>
    </tr>
    <tr>
      <td>Ölçüm önyargısı</td>
      <td>Yanlış veya eksik değişkenler</td>
      <td>Hatalı risk puanları</td>
    </tr>
    <tr>
      <td>Dağılım kayması</td>
      <td>Gerçek ortamın eğitim verisinden farklılaşması</td>
      <td>Zamanla düşen güvenilirlik</td>
    </tr>
  </tbody>
</table>

<p>Adalet denetiminde yalnızca genel doğruluk yeterli değildir. Örneğin iki grup için doğru pozitif oranları karşılaştırılabilir:</p>

\[\Delta_{TPR} = |TPR_A - TPR_B|\]

<p>Fark büyüdükçe modelin gruplar arasında eşit fırsat sağlamadığı düşünülebilir. Yine de hiçbir adalet metriği evrensel değildir; demografik eşitlik, eşit fırsat ve hata oranı eşitliği bazı durumlarda birbiriyle çelişebilir.</p>

<h2 id="önyargıyı-kodla-denetlemek">Önyargıyı kodla denetlemek</h2>

<p>Aşağıdaki Python örneği, iki grubun doğru pozitif oranlarını hesaplayarak basit bir denetim gerçekleştirir:</p>

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

<span class="k">def</span> <span class="nf">true_positive_rate</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">):</span>
    <span class="n">tn</span><span class="p">,</span> <span class="n">fp</span><span class="p">,</span> <span class="n">fn</span><span class="p">,</span> <span class="n">tp</span> <span class="o">=</span> <span class="nf">confusion_matrix</span><span class="p">(</span><span class="n">y_true</span><span class="p">,</span> <span class="n">y_pred</span><span class="p">).</span><span class="nf">ravel</span><span class="p">()</span>
    <span class="k">return</span> <span class="n">tp</span> <span class="o">/</span> <span class="p">(</span><span class="n">tp</span> <span class="o">+</span> <span class="n">fn</span><span class="p">)</span> <span class="k">if</span> <span class="n">tp</span> <span class="o">+</span> <span class="n">fn</span> <span class="k">else</span> <span class="mi">0</span>

<span class="k">for</span> <span class="n">group</span> <span class="ow">in</span> <span class="p">[</span><span class="sh">"</span><span class="s">A</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">B</span><span class="sh">"</span><span class="p">]:</span>
    <span class="n">mask</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="sh">"</span><span class="s">group</span><span class="sh">"</span><span class="p">]</span> <span class="o">==</span> <span class="n">group</span>
    <span class="n">rate</span> <span class="o">=</span> <span class="nf">true_positive_rate</span><span class="p">(</span><span class="n">y_test</span><span class="p">[</span><span class="n">mask</span><span class="p">],</span> <span class="n">predictions</span><span class="p">[</span><span class="n">mask</span><span class="p">])</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="nf">round</span><span class="p">(</span><span class="n">rate</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
</code></pre></div></div>

<p>Bu kod nihai bir adalet sertifikası vermez; yalnızca incelemeyi başlatır. Sonuçlar veri bilimciler, alan uzmanları, hukukçular ve etkilenen topluluklarla birlikte değerlendirilmelidir.</p>

<h2 id="xai-model-neden-böyle-karar-verdi">XAI: Model neden böyle karar verdi?</h2>

<p>Açıklanabilir yapay zekâ, model davranışını insanlar için anlaşılır hâle getiren yöntemleri kapsar. SHAP, özelliklerin tahmine katkısını oyun teorisi yaklaşımıyla ölçerken LIME, belirli bir tahminin çevresinde daha basit bir yerel model kurar. Karar ağaçları doğrudan yorumlanabilir olabilir; derin ağlar ise çoğunlukla sonradan açıklama araçlarına ihtiyaç duyar.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Güçlü tarafı</th>
      <th>Sınırlaması</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>SHAP</td>
      <td>Tutarlı özellik katkıları</td>
      <td>Hesaplama maliyeti</td>
    </tr>
    <tr>
      <td>LIME</td>
      <td>Yerel ve sezgisel açıklama</td>
      <td>Farklı çalıştırmalarda değişkenlik</td>
    </tr>
    <tr>
      <td>Özellik önemi</td>
      <td>Kolay özetleme</td>
      <td>Nedensellik göstermemesi</td>
    </tr>
    <tr>
      <td>Model kartı</td>
      <td>Amaç ve sınırları belgeleme</td>
      <td>Güncel tutulma zorunluluğu</td>
    </tr>
  </tbody>
</table>

<p>Açıklama, kararın doğru veya adil olduğunu kanıtlamaz. Model ayrımcı bir kuralı gayet anlaşılır biçimde açıklayabilir! Bu nedenle XAI, adalet testleri ve insan gözetimiyle birlikte kullanılmalıdır.</p>

<h2 id="geleceğin-risklerine-karşı-etik-emniyet-kemeri">Geleceğin risklerine karşı etik emniyet kemeri</h2>

<p>Üretken modeller; yanlış bilgi, mahremiyet ihlali, siber saldırı desteği, manipülasyon ve kontrol kaybı gibi riskler doğurabilir. Çözüm, yalnızca modele “iyi davran” demek değildir. Riskli kullanım senaryoları önceden modellenmeli, kırmızı takım testleri yapılmalı, hassas veriler anonimleştirilmeli ve erişim yetkileri sınırlandırılmalıdır.</p>

<p>Kuruluşlar ayrıca veri ve model kartları yayımlamalı, olay bildirim mekanizmaları kurmalı, yüksek etkili kararlarda insan itiraz hakkını korumalıdır. Modeller dağıtımdan sonra performans, güvenlik ve grup bazlı hata açısından sürekli izlenmelidir. Etik yapay zekâ tek seferlik bir kontrol kutusu değil, modelin tüm yaşam döngüsüne yayılan bir mühendislik disiplinidir. Kısacası güçlü model yapmak önemlidir; fakat kimin için, hangi bedelle ve kimin denetiminde güçlü olduğunu sormak çok daha önemlidir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="yapay-zeka-etiği" /><category term="algoritmik-önyargı" /><category term="XAI" /><summary type="html"><![CDATA[Yapay zekâ modelleri tarafsız matematik makineleri gibi görünse de insanların ürettiği verilerle öğrenir. Dolayısıyla toplumdaki eşitsizlikleri, eksik temsilleri ve geçmiş kararların hatalarını da miras alabilirler. Bir işe alım modelinin belirli grupları sistematik biçimde elemesi veya sağlık uygulamasının bazı hastalarda daha fazla yanılması, yalnızca teknik bir hata değil; etik, hukuki ve toplumsal bir sorundur.]]></summary></entry></feed>