Yapay Zekânın Vicdanı: Önyargı, Açıklanabilirlik ve Güvenlik

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.

Devamı...

WebAssembly ile Tarayıcıda Turbo Hızında Görüntü İşleme ve Video Kodlama

Tarayıcıda bir fotoğrafa filtre uygularken arayüzün donması veya video dönüştürürken fanların uçuşa geçmesi tanıdık geliyor mu? WebAssembly, hesaplama yoğun algoritmaları JavaScript’in tek başına zorlanabileceği noktalarda yüksek performansla çalıştırmamızı sağlar. Bu projede Rust ile yazılmış bir görüntü işleme çekirdeğini WebAssembly’ye derleyecek, JavaScript üzerinden çağıracak ve video kodlama seçeneklerini inceleyeceğiz.

Devamı...

Verinin Bavulunu Toplamak: Huffman Ağacı ve LZW’yi Sıfırdan Kodlamak

Bir metin dosyasını küçültmek sihir değil; tekrarları ve olasılıkları akıllıca temsil etme sanatıdır. Bu projede kayıpsız sıkıştırmanın iki klasiğini, Huffman ağacını ve LZW algoritmasını Python ile sıfırdan kuracağız. Böylece hazır kütüphanelerin düğmesine basmak yerine makinenin veriyi nasıl “katladığını” göreceğiz.

Devamı...

Transformer Mimarisi: Attention ile Kelimeler Arasındaki Görünmez Bağları Yakalamak

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.

Devamı...

Ses Dalgalarıyla Konuşan Bir Akustik Modem: FSK ile Veri İletimi

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.

Devamı...

RTS Oyunları İçin Dinamik Akış Alanı Yol Bulma Sistemi

Yüzlerce askerin aynı hedefe koştuğu bir gerçek zamanlı strateji oyununda her birim için ayrı ayrı A* çalıştırmak, işlemciyi kısa sürede savaş alanına çevirebilir. Akış alanı yol bulma, tek bir ortak yön haritası üreterek bütün birimlerin hedefe akmasını sağlar. Üstelik hareketli engeller ve değişen arazi maliyetleri hesaba katıldığında sistem hem performanslı hem de oldukça doğal sonuçlar verir.

Devamı...

RNN ve LSTM: Sıralı Verilere Hafıza Kazandırmak

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.

Devamı...

Proof of Work ve Blok Zincirini Sıfırdan Kodlamak

Blok zinciri çoğu zaman kripto paralarla özdeşleştirilse de temelinde oldukça anlaşılır bir fikir vardır: Kayıtları bloklar hâlinde birbirine bağlamak ve geçmişi değiştirmeyi hesaplama açısından pahalılaştırmak. Bu projede hazır blockchain kütüphanelerine dokunmadan Python ile blok, zincir ve Proof of Work mekanizması oluşturacağız.

Devamı...

Pekiştirmeli Öğrenme: Ödüllerle Strateji Öğrenen Ajanlar

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.

Devamı...

MIDI’den Müziğe: Algoritmik Arpej ve Akor Motoru Geliştirmek

Bir MIDI klavyede tek bir notaya basıp karşılığında tonaliteye uygun akorlar, kıvrak arpejler ve küçük beste fikirleri duyduğunuzu düşünün. Bunu yapmak için yapay zekâ ordusuna ihtiyacımız yok; biraz müzik teorisi, MIDI mesajları ve iyi tasarlanmış olasılık kuralları yeterli. Bu projede gelen notaları analiz eden ve seçilen gama sadık kalarak gerçek zamanlı müzikal çıktılar üreten bir beste motorunun temelini kuracağız.

Devamı...

Metinlerin Ruh Hâlini Okuyan Temel Bir Duygu Analizi Motoru

Bir bilgisayarın “Bu uygulamaya bayıldım!” ile “Bir daha asla kullanmam!” arasındaki farkı anlayabilmesi kulağa sihir gibi gelebilir. Oysa temel seviyede bir duygu analizi motoru; metni temizleme, kelimeleri puanlama ve sonuçları birleştirme adımlarından oluşur. Bu projede makine öğrenmesine dalmadan, sözlük tabanlı ve açıklanabilir bir doğal dil işleme motoru geliştireceğiz.

Devamı...

Kelimeleri Sayılardan Anlama: NLP ve Word Embeddings Rehberi

İ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.

Devamı...

GAN ve Difüzyon Modelleri: Rekabetten Gürültüye Üretken Yapay Zekâ

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.

Devamı...

Derin Öğrenmeye Giriş: Katmanlar, Soyut Özellikler ve GPU Gücü

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.

Devamı...

Conway'in Hayat Oyunu'na Turbo Takmak: Hashlife Algoritması

Conway’in Hayat Oyunu basit kurallardan şaşırtıcı derecede karmaşık yapılar üretir. Ancak milyonlarca hücreden oluşan bir evreni klasik yöntemle simüle etmek, her nesilde bütün ızgarayı taramak anlamına gelir. Glider filoları büyüdükçe işlemciniz de küçük bir yaşam krizi geçirebilir! Hashlife, tekrar eden uzay-zaman desenlerini tanıyıp sonuçlarını önbelleğe alarak devasa ve seyrek evrenlerde inanılmaz sıçramalar yapar.

Devamı...

CNN ile Görsel Algı: Piksellerden Kenar, Doku ve Şekillere

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.

Devamı...

Cep Telefonu Sensörleriyle Adım Sayma ve Aktivite Sınıflandırma

Telefonunuz cebinizde sessizce duruyor gibi görünse de ivmeölçer sensörü her saniye onlarca ölçüm üretir. Bu ham veriyi doğru biçimde işlediğimizde kaç adım atıldığını hesaplayabilir; kullanıcının yürüdüğünü, koştuğunu veya hareketsiz kaldığını tahmin edebiliriz. Bu projede gürültülü sensör değerlerini anlamlı aktivite bilgisine dönüştüren uçtan uca bir sistem kuracağız.

Devamı...

Cebirsel Veri Tipleriyle Mini Derleyici: Örüntü Eşlemeden Bayt Koduna

Bir programlama dilinin nasıl çalıştığını anlamanın en eğlenceli yollarından biri, küçük ama gerçek bir derleyici yazmaktır. Bu projede Haskell benzeri, cebirsel veri tiplerini ve örüntü eşlemeyi destekleyen bir dili yığın tabanlı sanal makine komutlarına çevireceğiz. Hedefimiz yeni bir Haskell üretmek değil; sözdizimi ağacı, tipler, örüntüler ve kod üretimi arasındaki ilişkiyi elle tutulur hâle getirmek.

Devamı...

C ile Epoll Tabanlı Bloklamayan Web Sunucusu Yazmak

Bir web sunucusunun aynı anda binlerce istemciyle konuşabilmesi, her bağlantıya ayrı bir iş parçacığı tahsis etmekten çok daha akıllı bir yaklaşım gerektirir. Bu projede Linux üzerinde epoll, BSD ve macOS tarafında ise benzer görev üstlenen kqueue mantığını inceleyerek bloklamayan, olay güdümlü ve küçük ama öğretici bir HTTP sunucusunun temelini kuracağız.

Devamı...

Büyük Dil Modelleri ve İstem Mühendisliği: Yapay Zekâya Doğru Soruyu Sormak

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.

Devamı...