Bir listeyi döngüyle gezerken elemanların sıra numarasına da ihtiyaç duyuyorsan, ayrı bir sayaç değişkeni tutmana gerek yok. enumerate her elemanı numarasıyla birlikte verir.
Kod
urunler=["Kalem","Defter","Silgi"]
forsira,uruninenumerate(urunler,start=1):
print(f"{sira}. {urun}")
# 1. Kalem
# 2. Defter
# 3. Silgi
Bu satır nasıl çalışıyor?
enumerate(urunler) listedeki her elemanı bir sıra numarasıyla eşleştirir: (0, "Kalem"), (1, "Defter"), (2, "Silgi"). for sira, urun in ... yazınca bu çiftler, takas kod kartında gördüğümüz paket açma mantığıyla iki değişkene dağıtılır.
Python saymaya 0’dan başlar. start=1 yazarak numaraların 1’den başlamasını sağladık; ekrana yazdırılacak listeler için genelde bunu istersin.
enumerate olmadan aynı iş şöyle yapılır:
sira=0
foruruninurunler:
sira+=1
print(f"{sira}. {urun}")
Çalışır, ama sayacı artırmayı unutmak ya da yanlış yerde artırmak çok kolay. enumerate bu sorumluluğu senden alıyor.
Bir örnek daha: hangi sıradaki eleman?
Numara, bir elemanın listede nerede olduğunu söylemek istediğinde de işe yarar:
notlar=[70,85,40,90]
forsira,puaninenumerate(notlar,start=1):
ifpuan<50:
print(f"{sira}. öğrenci kaldı ({puan})")
# 3. öğrenci kaldı (40)
Buradaki if‘i Python Dersi 5’te gördük; for döngüsünü ise Python Dersi 6’da ayrıntılı işleyeceğiz.
Dikkat
for satırında iki değişken yazmayı unutursan hata almazsın ama çıktı beklemediğin gibi olur:
forelemaninenumerate(urunler):
print(eleman)
# (0, 'Kalem')
# (1, 'Defter')
# (2, 'Silgi')
eleman her seferinde numara ve değerden oluşan bir demet (tuple). Numarayı ve değeri ayrı ayrı kullanmak istiyorsan for sira, urun in ... şeklinde iki isim ver.
ChatGPT, Gemini ya da Claude ile konuştuğunda aslında bir büyük dil modeli ile konuşuyorsun. İngilizcesi large language model, kısaca LLM. Bu yazıda LLM’in ne olduğunu, nasıl çalıştığını ve neden bazen kendinden emin bir şekilde yanlış söylediğini sade bir dille anlatıyorum.
Kısa tanım
Bir büyük dil modeli, çok büyük miktarda metin üzerinde eğitilmiş ve bir metnin devamında hangi kelimenin geleceğini tahmin etmeyi öğrenmiş bir yapay zekâ modelidir. Ne kadar akıllı görünürse görünsün, temelde yaptığı şey bu: “Buraya kadar yazılana göre sıradaki kelime ne olmalı?”
Telefonundaki klavyeyi düşün
Telefonda mesaj yazarken klavyenin üstünde üç kelime önerisi çıkar. “Günaydın” yazınca “nasılsın” önerir, çünkü daha önce yazdıklarından bu ikisinin sık sık peş peşe geldiğini öğrenmiştir. Bir LLM bu fikrin çok, çok daha büyük bir versiyonu.
Bu fikri birkaç satır Python ile deneyebiliriz. Aşağıdaki minik “dil modeli” beş cümle okuyor ve her kelimeden sonra hangi kelimenin kaç kez geldiğini sayıyor:
fromcollectionsimportCounter,defaultdict
metin="""bugün hava çok güzel
bugün hava biraz soğuk
bugün okula gittim
yarın hava çok sıcak olacak
hava çok güzel olunca parka gideriz"""
# Her kelimeden sonra hangi kelimenin kaç kez geldiğini say
Modelimiz “bugün” kelimesinden sonra %67 ihtimalle “hava” geleceğini öğrendi. Her seferinde en olası kelimeyi seçersek sıfırdan bir cümle bile üretebiliyor: bugün hava çok güzel.
Bu modeli gerçek bir LLM’den ayıran iki şey var:
Sadece bir önceki kelimeye bakıyor. Gerçek bir LLM, yazılan metnin tamamına bakıyor ve hangi kelimenin hangisiyle ilgili olduğunu tartıyor. Bunu sağlayan “dikkat” mekanizmasını, Attention Is All You Need yazısında anlattım.
Beş cümle okudu. Gerçek bir LLM kitaplar, makaleler ve web sayfalarından oluşan devasa bir metin yığını okuyor.
“Büyük” ne demek?
Bir modelin büyüklüğü genellikle parametre sayısıyla ölçülür. Parametreleri, modelin eğitim sırasında ayarladığı milyonlarca düğme gibi düşünebilirsin; bizim minik modelimizde bunların karşılığı “hangi kelimeden sonra ne geliyor” sayacıydı. Örneğin 2020’de tanıtılan GPT-3’ün 175 milyar parametresi vardı. Bugünün modelleri daha da büyük, ama şirketler sayıları artık her zaman açıklamıyor.
Nasıl eğitiliyor?
Kabaca iki aşamada:
Ön eğitim (pre-training): Model devasa bir metin yığını üzerinde, cümlelerin devamını tahmin ederek eğitilir. Tahmin yanlışsa düğmeler biraz düzeltilir. Bu, milyarlarca kez tekrarlanır. GPT’deki “P” harfi buradan geliyor: pre-trained.
İnce ayar (fine-tuning): Sadece metnin devamını tahmin eden bir model sohbet etmeyi bilmez. Bu aşamada model, insanların yazdığı örnek soru-cevaplarla ve insanların hangi cevabı daha iyi bulduğuna dair geri bildirimlerle eğitilir. Bu yöntemlerden birinin adı RLHF, yani insan geri bildirimiyle pekiştirmeli öğrenme.
LLM’ler neden bazen uyduruyor?
Model “doğru olanı” değil, “en olası görüneni” üretmek üzere eğitildi. Bir soruya cevap verirken, gerçekten var olmayan bir kitap adı ya da tarih, dil açısından çok “olası” görünebilir. Buna halüsinasyon deniyor ve ayrı bir yazının konusu. Şimdilik akılda tutman gereken: bir LLM’in verdiği bilgiyi, özellikle sayı, tarih ve kaynaklarda, mutlaka kontrol et.
Bilinen örnekler
ChatGPT (OpenAI): GPT serisi modelleri kullanıyor.
Gemini (Google)
Claude (Anthropic)
Llama (Meta): Açık ağırlıklı modeller; kendi bilgisayarında ya da sunucunda çalıştırabiliyorsun.
Bir cümlede
Bir büyük dil modeli, devasa miktarda metinden “bir metnin devamında ne gelir?” sorusunu cevaplamayı öğrenmiş ve bu basit yeteneği sohbet, özetleme, çeviri ve kod yazmaya kadar genişletmiş bir modeldir.
Squid Game’in cam köprü bölümünü izlerken aklımdan geçen ilk soru şuydu: sıranı seçebilseydin kaçıncı olmak isterdin? Bu yazıda bu soruyu Python’la cevaplıyorum. Önce oyunu 100.000 kez simüle edeceğiz, sonra aynı sonucu basit bir olasılık formülüyle doğrulayacağız.
Squid Game, Hwang Dong-hyuk’un yarattığı, yazdığı ve yönettiği Güney Kore yapımı bir dizi. İlk sezonu 17 Eylül 2021’de Netflix’te dokuz bölüm olarak yayımlandı. Netflix’in açıklamasına göre ilk 28 günde 142 milyondan fazla hanede izlendi ve 1,65 milyar saatlik izlenmeye ulaştı.
Hikâyede borca batık 456 kişi, büyük bir para ödülü için çocuk oyunlarından oluşan bir yarışmaya katılıyor. Oyunlar tanıdık, kuralları basit; ama kaybedenler elendiğinde hayatını kaybediyor. Dizinin adı da Kore’de çocukların oynadığı bir sokak oyunundan geliyor. Basit kuralların ardına saklı büyük riskler, diziyi olasılık ve oyun teorisi merakları için de ilginç bir malzeme yapıyor.
Cam köprü oyunu
Yedinci bölümde (“VIPS”) oyuncular iki sıra cam panelden oluşan bir köprüyü geçmek zorunda. Her adımda biri sağda biri solda iki panel var. Biri temperli cam ve bir insanı taşıyor, diğeri sıradan cam ve kırılıyor. Dışarıdan bakınca ikisi aynı görünüyor.
Aslında bu bir yazı tura oyunu, ama bir farkla: oyuncular sırayla geçiyor ve arkadakiler öndekilerin bastığı yerleri görüyor. Önden giden biri doğru cama basarsa o adım artık herkes için güvenli. Yanlış cama basarsa düşüyor, ama o adımda diğer camın doğru olduğu da ortaya çıkıyor. Yani her bilinmeyen adım ya bir kişinin şansıyla ya da bir kişinin düşüşüyle çözülüyor.
Her adımda iki cam eşit olasılıklı: doğruyu seçme şansı %50.
Oyuncular camları ayırt edemiyor ve öndekilerin açtığı yolu hatasız hatırlıyor.
Süre sınırı, itip kakma ya da ışıkların kapatılması gibi dizideki olaylar modelde yok.
Bu varsayımlar gerçek dünyayı basitleştiriyor. Bunun bedelini yazının sonunda, dizideki sonuçla karşılaştırırken göreceğiz.
Simülasyonu yazmak
Simülasyon, bir olayı bilgisayarda binlerce kez tekrar oynatıp ne sıklıkla ne olduğunu saymak demek. Gerçek hayatta bu oyunu 100.000 kez oynatamayız ama bilgisayarda birkaç saniyede yapabiliriz.
Tek bir oyunu oynatan fonksiyon şöyle:
importnumpyasnp
defkopruyu_gec(oyuncu=16,adim=18,rng=None):
"""Bir oyunu simüle eder; hayatta kalan oyuncuların sıra numaralarını döndürür."""
rng=rngornp.random.default_rng()
bilinen=0# öndekilerin açtığı yol buraya kadar güvenli
kalanlar=[]
forsirainrange(1,oyuncu+1):
konum=bilinen# bilinen yolu güvenle yürü
hayatta=True
whilekonum<adim:
konum+=1# bir sonraki bilinmeyen adıma bas
ifrng.random()>=0.5: # yazı tura: yanlış cam
hayatta=False# düştü, ama bu adım artık biliniyor
break
bilinen=konum
ifhayatta:
# bu oyuncu köprüyü bitirdi; arkadakiler de açılan yoldan geçer
kalanlar=list(range(sira,oyuncu+1))
break
returnkalanlar
Kodun mantığı adım adım:
bilinen değişkeni, önceki oyuncuların çözdüğü son adımı tutuyor. Başta 0, yani hiçbir adım bilinmiyor.
Sıradaki oyuncu bilinen yolu güvenle yürüyüp ilk bilinmeyen adımdan itibaren yazı tura atmaya başlıyor.
Yanlış cama basarsa düşüyor. Ama bastığı adım da artık biliniyor, çünkü kırılan camın yanındaki doğru cam.
Bir oyuncu 18. adımı geçerse köprü tamamen çözülmüş oluyor; ondan sonraki herkes güvenle geçiyor.
rng.random() 0 ile 1 arasında rastgele bir sayı üretiyor. Sayının 0,5’ten küçük olma ihtimali tam %50, yani bu bir yazı tura.
100.000 kez oynatmak
rng=np.random.default_rng(42)# aynı sonucu tekrar alabilmek için tohum
N=100_000
hayatta_kalma=np.zeros(17)# her sıra numarası için kaç kez hayatta kaldı
kalan_sayilari=[]
for_inrange(N):
kalanlar=kopruyu_gec(rng=rng)
kalan_sayilari.append(len(kalanlar))
forsirainkalanlar:
hayatta_kalma[sira]+=1
olasilik=hayatta_kalma[1:]/N# 1'den 16'ya kadar her sıranın hayatta kalma oranı
print("Ortalama hayatta kalan:",np.mean(kalan_sayilari))
default_rng(42) içindeki 42 bir “tohum” (seed). Rastgele sayıları her seferinde aynı sırayla üretir, böylece sen de not defterini çalıştırdığında benimle aynı sonucu alırsın.
Sonuçlar: sıran ne kadar önemli?
100.000 oyunun sonunda ortalama 7,0 oyuncu köprüyü geçti. Asıl ilginç olan, bu yedi kişinin kim olduğu:
İlk sıradaki oyuncunun köprüyü geçmesi için 18 yazı turanın hepsini bilmesi gerekiyor: yaklaşık 262.000’de 1. Son sıradaki oyuncu ise neredeyse kesin geçiyor (%99,93). Eğri ortada çok dikleşiyor: 8. sırada %24 olan şans 10. sırada %59’a, 12. sırada %88’e çıkıyor. Yani dizideki gibi sıra numarasını görmeden seçmek, bu oyundaki en büyük kumar.
Bir de en az bir kişinin köprüyü geçme ihtimali var: simülasyonda 100.000 oyunun %99,94’ünde en az bir kişi karşıya ulaştı.
Aynı sonucu formülle bulmak
Simülasyon güzel ama sonucun doğru olduğundan nasıl emin olacağız? Bu oyunun aslında çok basit bir matematiksel yapısı var.
Şöyle düşün: 18 adımın her biri bir kez, ilk basan kişi tarafından “çözülüyor”. Her çözümde %50 ihtimalle biri düşüyor. Yani köprünün tamamında toplam kaç kişinin düşeceği, 18 kez yazı tura atıp kaç kez tura geldiğini saymakla aynı şey. Bu, olasılıkta binom dağılımı denen yapı.
k. sıradaki oyuncu, toplamda k’den az kişi düşerse hayatta kalıyor. 18 atışta tam d kez tura gelme olasılığı C(18, d) / 2¹⁸, bunları 0’dan k − 1’e kadar topladığımızda cevabı buluyoruz:
frommathimportcomb
deftam_olasilik(oyuncu=16,adim=18):
"""k. oyuncunun hayatta kalma olasılığı: 18 adımda k'den az düşüş olması."""
print(f"Beklenen hayatta kalan: {sum(olasiliklar):.2f}")# 7.00
comb(18, d), 18 adımın hangi d tanesinde birinin düşeceğini seçmenin kaç yolu olduğunu veriyor. Formülün sonuçları simülasyonla her sırada en fazla 0,3 puan farklı; bu fark da sadece rastgelelikten. Beklenen hayatta kalan sayısı da yine 7.
Buradan bir sezgi daha çıkıyor: ortalamada 18 adımın yarısında, yani 9 adımda biri düşüyor. 16 kişiden 9’u düşerse geriye 7 kişi kalır.
Peki dizide neden sadece 3 kişi kaldı?
Dizide köprüyü yalnızca üç oyuncu tamamlayabiliyor. Modele göre 3 veya daha az kişinin kalma ihtimali sadece %4,8. Peki bu kadar kötü bir sonuç nasıl çıktı?
Modelimizin dışarıda bıraktığı şeyler dizide yer alıyor. Bölümde ışıkların kapatılması gibi bir avantajın ortadan kaldırılması, oyuncuların birbirine karışması ve süre baskısı var. Bunların her biri, adım başına %50 olan düşme ihtimalini artırıyor ya da bilinen bir adımı tekrar bilinmez hâle getiriyor.
Bu, her modelin taşıdığı bir uyarı: sonuç, varsayımlar kadar iyi. Matematiğin yanlış olduğunu değil, gerçek dünyanın modelden daha karmaşık olduğunu gösteriyor.
Diziyi izlerken bu bölümde kalbim kulaklarımdaydı. O sırada aklımdan geçen de şuydu: ben olsam ya ortalardan bir numara ya da 8. sırayı seçerdim. Seçimim tamamen sezgiseldi. Şimdi matematiksel temelini bildiğim için biraz farklı bakıyorum: 8. sırada hayatta kalma şansı %24, sadece iki sıra geride, 10. sırada ise %59. Sezgim beni ortaya yakın bir yere götürmüş ama hesap, birkaç adım daha geride durmanın ne kadar fark yarattığını gösteriyor.
Kendin dene
Not defterinde değerleri değiştirip şu soruları cevaplayabilirsin:
Köprü 18 değil 30 adım olsaydı kaç kişi kalırdı? (kopruyu_gec(adim=30))
Oyuncular camları biraz ayırt edebilseydi, doğruyu bulma şansı %50 yerine %60 olsaydı ne değişirdi? (Fonksiyondaki 0.5‘i değiştir.)
16 oyuncunun kaçının hayatta kaldığının dağılımını histogram olarak çiz. En sık görülen sonuç hangisi?
ChatGPT’deki “GPT” kısaltmasının son harfi bir makaleden geliyor. GPT, Generative Pre-trained Transformer demek; o “Transformer” da Haziran 2017’de yayımlanan bir makalenin icadı. Makalenin adı iddialı: Attention Is All You Need, yani “İhtiyacın Olan Tek Şey Dikkat”.
Makaleyi o sırada Google’da çalışan sekiz araştırmacı yazdı ve NeurIPS (o zamanki adıyla NIPS) konferansında sundu. Bugün yapay zekâ tarihinin en çok atıf alan makalelerinden biri. Bu yazıda makalenin ne dediğini formüllere boğmadan, günlük hayattan örneklerle ve birkaç satırlık Python koduyla anlatıyorum. Makine öğrenmesi bilmene gerek yok.
Makaleden önce: kelimeleri tek tek okuyan modeller
2017’den önce çeviri ve metin işleyen modellerin çoğu RNN (tekrarlayan sinir ağı) denen bir yapı kullanıyordu. RNN bir cümleyi senin bir kitabı okuduğun gibi okur: soldan sağa, kelime kelime. Her yeni kelimede o ana kadar okuduğunu kısa bir özet hâlinde aklında tutar ve yola devam eder.
Bunun iki sorunu vardı:
Uzun cümlede başı unutmak. Bir telefonda kulağı oyunu düşün. Mesaj kişiden kişiye geçtikçe bozulur. RNN’de de cümlenin başındaki bilgi, sona gelene kadar birçok adımdan geçip silikleşir.
Yavaş eğitim. 10. kelimeyi işlemek için 9. kelimenin bitmesini beklemek zorundasın. Bu yüzden işi birçok ekran kartına (GPU) bölüp aynı anda yaptırmak zordu. Model büyüdükçe eğitim haftalar sürüyordu.
Araştırmacılar bu sorunu hafifletmek için RNN’lere zaten “attention” (dikkat) denen bir eklenti takıyordu. Makalenin cesur fikri şuydu: RNN’i tamamen çıkar, sadece dikkat mekanizması kalsın. Başlığın “ihtiyacın olan tek şey” kısmı buradan geliyor.
Attention (dikkat) ne demek?
Şu cümleye bak:
Kedi sütü içti çünkü o acıkmıştı.
“O” kim? Sen hiç düşünmeden “kedi” dersin. Ama “Kedi sütü içmedi çünkü o bozulmuştu” deseydim, “o” artık süt olurdu. Bir kelimenin anlamı, cümledeki diğer kelimelere bakarak çıkıyor.
Dikkat mekanizması tam olarak bunu yapıyor: cümledeki her kelime, diğer tüm kelimelere bakıp “anlamımı çıkarmak için hangisine ne kadar dikkat etmeliyim?” diye soruyor. Sonuç her kelime için bir yüzde listesi oluyor.
Günlük hayattan bir benzetme: kalabalık bir toplantıda biri adını söylediğinde kulağın o tarafa döner. Herkesi aynı anda duyuyorsun ama hepsine eşit dikkat etmiyorsun. RNN sırayla tek tek dinliyordu; dikkat mekanizması herkesi aynı anda duyup kime kulak vereceğini seçiyor.
Küçük bir Python gösterimi
Bir bilgisayar kelimeleri anlamaz, sayıları anlar. Bu yüzden her kelime bir sayı listesine (vektöre) çevrilir. Birbirine anlamca yakın kelimelerin vektörleri de birbirine benzer. Aşağıdaki sayıları ben elle seçtim; gerçek bir model bunları milyonlarca cümleden kendisi öğreniyor.
importnumpyasnp
# Her kelimeyi 3 sayıyla temsil ediyoruz (gerçek modellerde yüzlerce sayı olur).
# Sayıları elle seçtik: "kedi" ile "o" birbirine benzesin diye.
“o” kelimesi dikkatinin en büyük payını “kedi”ye veriyor. Makaledeki formülün özü bu üç adım: benzerliği hesapla, boyutun köküne böl, softmax ile yüzdeye çevir. Gerçek modelde her kelime için üç ayrı vektör (soru, anahtar, değer; makalede query, key, value) kullanılıyor ve bu işlem paralel olarak birkaç kez yapılıyor. Makale buna multi-head attention (çok başlı dikkat) diyor: cümleye aynı anda farklı gözlüklerle bakmak gibi. Her başlık kelimeler arasındaki farklı türden bir ilişkiyi yakalayabiliyor.
Makale ne getirdi?
Transformer: sırayla değil, hepsi birden
Makalenin önerdiği mimarinin adı Transformer. İki parçadan oluşuyor:
Kodlayıcı (encoder): Girdi cümlesini okuyup anlamını sayılara döküyor.
Çözücü (decoder): Bu anlamdan yola çıkarak çıktıyı, örneğin çeviriyi, kelime kelime üretiyor.
Asıl fark şu: Transformer cümledeki tüm kelimelere aynı anda bakıyor. 10. kelime 9. kelimeyi beklemiyor. Bu da eğitimin GPU’lara bölünüp çok daha hızlı yapılmasını sağlıyor.
Peki kelimeler aynı anda okunuyorsa model sırayı nereden biliyor? “Kedi köpeği kovaladı” ile “Köpek kediyi kovaladı” aynı şey değil. Makale buna her kelimeye bir konum bilgisi (positional encoding) ekleyerek çözüm buluyor: kelimenin vektörüne “ben cümlenin 3. kelimesiyim” diyen bir işaret ekleniyor.
Sonuçlar
Makale modeli İngilizceden Almancaya ve İngilizceden Fransızcaya çeviri üzerinde denedi ve o dönemin en iyi sonuçlarını geçti. Çeviri kalitesini ölçen BLEU puanında İngilizce-Almanca için 28,4, İngilizce-Fransızca için 41,8 aldı. Daha da çarpıcı olanı maliyetti: büyük model sekiz GPU üzerinde 3,5 günde eğitildi. Bu, kendinden önceki en iyi modellerin harcadığı hesaplama gücünün küçük bir kısmıydı.
Sonrası: BERT, GPT ve ChatGPT
Makale bir çeviri modeli önerdi ama asıl etkisi sonradan görüldü. Araştırmacılar Transformer’ın iki parçasını ayırıp ayrı ayrı kullandı:
BERT (2018, Google): Sadece kodlayıcı kısmı kullanıyor. Metni anlamakta iyi; arama motorlarında, metin sınıflandırmada kullanıldı.
GPT serisi (2018’den itibaren, OpenAI): Sadece çözücü kısmı kullanıyor. Bir sonraki kelimeyi tahmin ederek metin üretmekte iyi. ChatGPT bu serinin üzerine kuruldu.
Bugün kullandığın büyük dil modellerinin neredeyse hepsi bu makaledeki fikrin bir varyasyonu. Bu yüzden makale 2026 itibarıyla 250 binden fazla atıf almış durumda.
Bir makale başlığındaki Beatles
Makalenin başlığı bilerek seçilmiş bir göndermeyle geliyor: Beatles’ın “All You Need Is Love” şarkısı. Bilimsel makaleler genelde “Şu Yöntemle Şu Problemin Verimli Çözümü” gibi uzun ve kuru başlıklar taşır. Bu başlık ise kısa, akılda kalıcı ve iddialı. Bugün yapay zekâ dünyasında “X Is All You Need” kalıbıyla yazılmış sayısız makale var; başlığın kendisi bir mim’e dönüştü.
Mimarinin adının hikâyesi de benzer şekilde basit: Wikipedia’daki anlatıma göre yazarlardan Jakob Uszkoreit “Transformer” kelimesini sadece kulağa hoş geldiği için seçmiş. Bir de bilinmeyen bir ayrıntı: makalede sekiz yazarın katkısı eşit sayılıyor ve isimlerin sırası rastgele belirlenmiş.
Benim yorumum
Bu makaleyi ilk kez bir eğitimde duymuştum. O zaman beni en çok şaşırtan şey şuydu: Google’da çalışan bir grup araştırmacı bir makale yayımlıyor ve bu makale bir süre sonra dünyayı değiştiriyor. Bir şirketin geliştirdiği fikri herkesin okuyabileceği şekilde paylaşması ve başkalarının o fikrin üzerine bambaşka ürünler kurması bana çok etkileyici gelmişti.
Bu yazı için araştırma yaparken başlığın bir Beatles şarkısına gönderme olduğunu öğrenmek de hoşuma gitti; dünyayı değiştiren bir çalışmanın arkasında biraz da oyunbazlık varmış.
Dürüst olmak gerekirse, bu makaleyi ilk gördüğümde aklımdan geçen cümle şuydu: “Ben de bir gün böyle bir çalışma yapmak istiyorum.” Bu yazıyı yazmak da o yolda attığım küçük bir adım.
Makalenin kendisini okumak istersen ücretsiz: arXiv: 1706.03762. Formüllerden korkma; giriş ve sonuç bölümleri bu yazıyı okuduktan sonra rahat anlaşılıyor.
Bu yeni bir seri: her pazar, geçen haftanın teknoloji gündeminden beş gelişmeyi seçip sade bir dille anlatıyorum. Her haberin sonunda “Neden önemli?” kısmı ve kaynağı var. İlk sayıda 14-21 Ekim arasını kapsıyorum.
1. Popüler bir WordPress eklentisine kötü amaçlı kod sokuldu
WordPress’in en çok kullanılan SEO eklentilerinden Rank Math’in ücretli sürümü Rank Math PRO, bir tedarik zinciri saldırısına uğradı. 15 Ekim akşamından 16 Ekim sabahına kadar (UTC) resmi siteden indirilen ya da güncelleme olarak gelen 3.0.123 sürümünde, siteye gizli bir arka kapı (backdoor) açan kod vardı. Sorun 3.0.124 sürümüyle giderildi.
Şirketin uyarısına göre o saatlerde bu sürümü kurup etkinleştiren siteler, sonradan güncellense bile ele geçirilmiş sayılmalı. Bildirim yalnızca PRO sürümü kapsıyor; WordPress.org’daki ücretsiz Rank Math eklentisi bildirimde geçmiyor.
Neden önemli? “Tedarik zinciri saldırısı”, saldırganın doğrudan sana değil, güvendiğin bir yazılımın kaynağına sızması demek. Sen her şeyi doğru yapsan bile resmi güncelleme zararlı olabiliyor. WordPress siten varsa eklentilerini düzenli yedekle ve güvenlik bildirimlerini takip et.
2. Japonya Mars’ın uydusundan toprak getirmek için yola çıktı
Japonya Uzay Ajansı JAXA, MMX (Martian Moons eXploration) görevini 20 Ekim’de Tanegashima Uzay Merkezi’nden H3 roketiyle fırlattı. Uzay aracı Ağustos 2027’de Mars’a varacak, Mars’ın uydusu Phobos’a inip yaklaşık 10 gram toprak örneği toplayacak ve 2031’de Dünya’ya getirecek. Görevde NASA’nın bir ölçüm cihazı ve Almanya ile Fransa’nın birlikte geliştirdiği Idefix adlı küçük bir gezgin robot da var.
Neden önemli? Phobos ile Deimos’un nasıl oluştuğu hâlâ tartışmalı: yakalanmış asteroitler mi, yoksa Mars’tan kopan parçalar mı? Getirilecek örnek bu soruya doğrudan cevap verebilir. 10 gram az görünebilir, ama laboratuvarda tek bir tozdan bile çok şey öğrenilebiliyor.
3. Google yeni amiral gemisi modeli Gemini 4 Argon’u yayımladı
Google, kod yazma, matematik ve bilim problemleri ile çok adımlı yapay zekâ ajanları için tasarlanan Gemini 4 Argon’u geliştiricilere açtı. Model Gemini API ve Google AI Studio üzerinden kullanılabiliyor. Metin, görsel, video, ses ve PDF okuyabiliyor ve tek seferde yaklaşık 1 milyon token’lık bir bağlamı işleyebiliyor. Bu kabaca birkaç kitap uzunluğunda bir metin demek.
Neden önemli? Büyük dil modelleri yarışı hızla sürüyor ve her yeni model “daha uzun metni aynı anda okumak” ve “kendi başına çok adımlı iş yapmak” yönünde ilerliyor. Bu modellerin hepsinin temelindeki fikri bugün yayımladığım Attention Is All You Need yazısında anlattım.
15 Ekim’de aralarında Arizona, Idaho, Kansas ve Montana’nın da bulunduğu en az sekiz ABD eyaleti, ChatGPT’nin çocuklara zarar verdiği ve yetişkinleri yanılttığı gerekçesiyle OpenAI’a dava açtı. Davalarda ürünün tehlikeli sağlık tavsiyeleri verdiği ve şirketin güvenlik testleri konusunda kamuoyunu yanılttığı iddia ediliyor. OpenAI ise ChatGPT’ye çocuk güvenliği önlemleri eklediğini, bunları geliştirmeye devam edeceğini ve 18 yaş altı kullanıcılar için ebeveyn izni istediğini söylüyor.
Neden önemli? Yapay zekâ araçları artık sadece teknoloji haberlerinde değil, mahkemelerde de gündemde. Bu davaların sonucu, sohbet botlarının çocuklara ve hassas konulara nasıl yaklaşacağına dair kuralları şekillendirebilir. Davalar henüz yeni; iddialar mahkemede kanıtlanmadı.
5. Amazon Almanya’ya 2027’de 16 milyar avrodan fazla yatırım yapacak
Amazon, 20 Ekim’de Berlin’deki Invest in Germany Summit’te 2027 yılı için Almanya’da 16 milyar avronun üzerinde yatırım yapacağını duyurdu. Yatırımın bir kısmı bulut ve yapay zekâ altyapısına, örneğin AWS’nin Frankfurt’taki veri merkezlerini büyütmeye ayrılıyor.
Neden önemli? Yapay zekâ modellerini çalıştırmak devasa veri merkezleri ve enerji gerektiriyor. Büyük şirketlerin bu altyapıyı nereye kurduğu, o ülkede hangi işlerin ve becerilerin aranacağını da etkiliyor. Aynı hafta yapay zekâ yatırımlarının maliyetine dair piyasa endişeleri de konuşuldu; yani bu yatırım yarışının sonucunu henüz kimse bilmiyor.
Bugün 13 Ekim, Ekim ayının ikinci salısı. Bu gün dünyanın birçok yerinde Ada Lovelace Günü olarak anılıyor: bilim, teknoloji, mühendislik ve matematikte iz bırakan kadınları görünür kılma günü.
Bu yazıda sana çoğu zaman “ilk bilgisayar programcısı” olarak anılan Ada Lovelace’ı, onun izinden giden üç kadını ve bu hikâyenin bugün teknolojiye adım atan sana ne söylediğini anlatıyorum.
Ada Lovelace kimdi?
Ada Lovelace, 10 Aralık 1815’te Londra’da Augusta Ada Byron adıyla doğdu. Babası şair Lord Byron’dı. Ada şiirle değil, matematikle büyüdü: matematik ve bilim eğitimini özel hocalardan aldı. Hocalarından biri, döneminin en tanınmış bilim insanlarından Mary Somerville’di.
Ada’nın hayatını değiştiren tanışmayı da yine bir kadın sağladı. 5 Haziran 1833’te, henüz 17 yaşındayken, Somerville aracılığıyla matematikçi Charles Babbage ile tanıştı. Babbage o sırada hesap yapan makineler tasarlıyordu ve Ada bu makinelere tutuldu.
Ada Lovelace 27 Kasım 1852’de, 36 yaşında hayatını kaybetti. Kısa hayatına sığdırdığı birkaç sayfa ise bilgisayar tarihinin en çok anılan metinlerinden biri oldu.
Henüz yapılmamış bir makine için program
Babbage’ın en iddialı tasarımı Analitik Makine’ydi: mekanik, her türlü hesabı yapabilecek şekilde düşünülmüş genel amaçlı bir bilgisayar. Makine hiçbir zaman tamamlanamadı. Ama Ada onun ne yapabileceğini kağıt üzerinde, herkesten daha açık gördü.
Babbage 1840’ta İtalya’nın Torino kentinde makinesini anlatan bir konuşma yaptı. İtalyan mühendis Luigi Menabrea bu konuşmayı Fransızca bir makaleye dönüştürdü. Ada’dan makaleyi İngilizceye çevirmesi istendi. O ise yalnızca çevirmekle kalmadı: dokuz ay boyunca çalıştı ve metne A’dan G’ye kadar harflendirdiği yedi not ekledi. Notlar, çevirinin yaklaşık üç katı uzunluğundaydı ve Eylül 1843’te yalnızca baş harfleriyle, “AAL” imzasıyla yayımlandı.
Not G: Adım adım bir algoritma
Notların sonuncusu olan Not G, makinenin Bernoulli sayıları adı verilen bir sayı dizisini nasıl hesaplayacağını adım adım anlatıyordu. Bu yöntem bugün sıkça “ilk yayımlanmış bilgisayar programı” olarak anılıyor.
Bir not düşeyim: Babbage’ın da daha önce yazdığı ama yayımlamadığı programlar vardı. Makine yapılmadığı için Ada’nın programı da hiç çalıştırılamadı. Ama Ada’yı özel kılan tek şey bu algoritma değil.
Makinenin hesaptan fazlasını yapabileceğini gördü
Analitik Makine hesap yapmak için tasarlanmıştı. Ada ise bir adım öteye geçti: makinenin sayılardan başka şeyler üzerinde de çalışabileceğini yazdı. Örneğin müzikteki seslerin arasındaki ilişkiler sembollerle ifade edilebilirse, makinenin karmaşık müzik parçaları bestleyebileceğini öngördü.
Bugün bilgisayarların müzik ürettiği, resim çizdiği, metin yazdığı bir dünyada yaşıyoruz. Ada bunu, makine daha kağıt üzerindeyken hayal etti. Kendi yaklaşımına “şiirsel bilim” (poetical science) diyordu: hayal gücü ile matematiğin bir arada çalışması.
Ada Lovelace Günü nedir?
Ada Lovelace Günü 2009’da İngiltere’de Suw Charman-Anderson tarafından başlatıldı ve her yıl Ekim ayının ikinci salısı anılıyor. Amacı, kadınların bilim, teknoloji, mühendislik ve matematikteki katkılarını görünür kılmak.
Bence günün en güçlü yanı şu: teknolojiye yeni adım atan bir kızın ya da kadının, kendinden önce bu yoldan geçmiş isimleri görmesini sağlıyor. Gördüğün şey, olabileceğini düşündüğün şeyi değiştiriyor.
Ada’nın izinden giden üç kadın
Ada’nın hikâyesi bir başlangıçtı. Bilgisayar tarihinin dönüm noktalarının birçoğunda kadınların imzası var. İşte üç tanesi:
Grace Hopper: Bilgisayarla insan diline yakın bir dilde konuşmak
Grace Hopper, bilgisayara insan diline yakın komutlarla program yazılabileceğini savundu. Ekibiyle birlikte ilk derleyicilerden biri olan A-0’ı geliştirdi. Derleyici, insanın yazdığı kodu makinenin anlayacağı dile çeviren programdır. Hopper’ın anlattığına göre başta bu fikre kimse inanmadı. Onun tasarım anlayışı, iş dünyası için geliştirilen COBOL dilinin temelini oluşturdu. Hopper ABD Donanması’nda amiral rütbesine kadar yükseldi.
Küçük bir düzeltme: Bilgisayardaki hataya “bug” denmesini Hopper icat etmedi; bu kelime ondan önce de kullanılıyordu. Ama 1947’de ekibinin bir rölenin içinde sıkışmış bir güve bulması ve bunu kayıt defterine yapıştırması, terimin bilgisayar dünyasında yayılmasına katkı sağladı.
Katherine Johnson: Bilgisayarın hesabını kontrol eden kadın
Katherine Johnson, NASA’da ve ondan önceki kurum NACA’da 1953’ten 1986’ya kadar uzay araçlarının yörüngelerini hesapladı. NASA, astronot John Glenn’in Dünya etrafındaki yörüngesini ilk kez elektronik bilgisayarlarla hesapladığında, sonuçları doğrulaması için Johnson’a başvurdu. Glenn, uçmayı kabul etmeden önce özellikle onun da hesaplara bakmasını istemişti. Johnson’ın hikâyesi 2016 yapımı Hidden Figures (Gizli Sayılar) filminde anlatılıyor.
Margaret Hamilton: Aya giden yazılım
Margaret Hamilton, MIT’de Apollo programının uçuş yazılımını geliştiren ekibi yönetti. Ekibinin yazdığı yazılım, hataları fark edip sistemi toparlayabilecek şekilde tasarlanmıştı. “Yazılım mühendisliği” terimini ilk kullananlardan biri de oydu. Bu terimi, yazılımı donanımdan ve diğer mühendislik dallarından ayırmak için kullandığını anlatıyor. Hamilton 2016’da ABD Başkanlık Özgürlük Madalyası’nı aldı.
Bu hikâye bugün sana ne söylüyor?
Bu dört kadının ortak bir yanı var: hepsi henüz tam olarak var olmayan bir şey üzerinde çalıştı. Ada, yapılmamış bir makine için program yazdı. Hopper, kimsenin inanmadığı bir fikri savundu. Hamilton, henüz adı bile konmamış bir alanın adını koydu. Johnson, makinenin hesabına güvenin henüz oluşmadığı bir dönemde o güveni sağlayan kişi oldu.
Buradan çıkardığım ders şu: Bir alanda kendine benzeyen çok kişi görmemen, o alana ait olmadığın anlamına gelmez. Bazen yolu sen açarsın, arkandan gelenler de seni görür.
Bilgisayar mühendisliğine Ada Lovelace sayesinde başlamadım. Ama bu yolda ilerlememin, düştüğüm anlarda yeniden kalkmamın sebeplerinden biri o oldu. Notlarını yalnızca baş harfleriyle imzalayan bir kadının bugün bilgisayar tarihinin en çok anılan isimlerinden biri olması, bana her seferinde devam etmemi hatırlatıyor.
Bugün ne yapabilirsin?
Bir hikâye paylaş. Sana ilham veren bir kadın bilim insanının ya da mühendisin hikâyesini #AdaLovelaceDay etiketiyle paylaş.
İlk derste Python’ın ne olduğunu ve neden iyi bir ilk dil olduğunu konuştuk. Bugün iki şey yapacaksın: Python’ı Windows bilgisayarına kuracak ve bu seri boyunca kod yazacağımız yer olan Google Colab’da ilk programını çalıştıracaksın.
Neden ikisi birden? Python’ı bilgisayarına kurmayı bilmek, ileride kendi projelerini yaparken işine yarayacak. Ama derslerin daha kolay takip edilmesi için seri boyunca Google Colab kullanacağız. Colab tarayıcıda çalışır; kurulum yapamasan bile derslere devam edebilirsin.
Kurulum bölümü Windows için yazıldı. Mac kullanıyorsan kurulum dosyasını python.org/downloads adresinden indirebilirsin. Colab bölümü ise her bilgisayarda aynı çalışır.
Bu dersin Colab bölümü ve alıştırmaları hazır bir not defterinde: Colab’da Aç. Serinin tüm not defterleri GitHub’daki python-dersleri deposunda.
Hangi Python sürümünü kurmalısın?
Kısa cevap: en güncel Python 3 sürümünü. Bu yazıyı yazdığım sırada Python’ın resmî belgeleri Python 3.15 sürümünü gösteriyor. Sürüm numarasını ezberlemene gerek yok, çünkü aşağıdaki yöntem en güncel sürümü kendisi kurar.
Bilmen gereken bir değişiklik var: Windows’ta Python kurmak eskisinden farklı. Python’ın resmî Windows belgesi artık Python Install Manager (Python kurulum yöneticisi) adı verilen aracı öneriyor. Eski .exe kurulum dosyası 3.14 sürümünden beri kullanımdan kaldırılacak olarak işaretli ve 3.16’dan itibaren hiç üretilmeyecek.
Bu yüzden eski bir video ya da yazı “Add python.exe to PATH kutusunu işaretle” diyorsa şaşırma; o adım eski kurulum dosyasına ait. Bir de şu: anlatımda print "Merhaba" gibi parantezsiz kod görürsen o kaynak artık kullanılmayan Python 2 için yazılmıştır, kapatabilirsin.
Windows’a Python kurulumu
Kurulum yöneticisini iki yoldan biriyle alabilirsin. Resmî belgeye göre iki yol da aynı aracı kurar.
Yol 1: Microsoft Store
Başlat menüsünden Microsoft Store’u aç.
Arama kutusuna “Python Install Manager” yaz. Yayıncının Python Software Foundation olduğunu kontrol et.
İnen dosyaya çift tıkla ve Yükle’yi (Install) seç.
İlk çalıştırma
Kurulum bitince Başlat menüsüne “Terminal” yaz ve aç. Terminal, bilgisayara yazıyla komut verdiğin penceredir. Bilgisayarında Terminal yoksa “Komut İstemi”ni açabilirsin. Şunu yaz ve Enter’a bas:
python
Bilgisayarında hiç Python yoksa kurulum yöneticisi en güncel sürümü otomatik olarak indirip kurar. Bu sırada bir klasörü PATH’e eklemek isteyip istemediğini sorabilir. PATH, Windows’un komutları aradığı klasörlerin listesidir. Resmî belgeye göre bu adım isteğe bağlı; bu seri için gerekmiyor.
Kurulumu kontrol et
Yeni bir terminal penceresi aç ve şunu yaz:
python --version
Ekranda Python 3.15.0 gibi bir satır görmelisin. Son rakamlar farklı olabilir; 3 ile başlaması yeterli. Bilgisayarında birden fazla Python sürümü varsa py list komutu hepsini ve hangisinin varsayılan olduğunu gösterir.
İlk komutların
Terminale yalnızca python yazıp Enter’a basınca satır başında >>> işareti belirir. Buna shell (kabuk) denir: yazdığın her satırı anında çalıştırır ve sonucu gösterir. İki komut dene:
>>> print("Merhaba")
Merhaba
>>> 2 + 3
5
Shell’den çıkmak için exit() yaz. Shell küçük denemeler için birebirdir ama pencereyi kapatınca yazdığın her şey kaybolur. Bu yüzden seride kodlarımızı Google Colab’da yazacağız.
Bu seride neden Google Colab kullanacağız?
Google Colab, Python kodunu tarayıcıda yazıp çalıştırmana yarayan bir Google aracıdır. Bu seri için üç avantajı var:
Kurulum gerektirmez. Google hesabınla açılır. Okul ya da iş bilgisayarına program kuramıyorsan bile derslere devam edersin.
Her bilgisayarda aynıdır. Windows, Mac ya da tablet fark etmez; ekran görüntüleri herkesinkine benzer.
Veri bilimi için hazırdır. NumPy ve Pandas gibi kütüphaneler yüklü gelir. Serinin sonlarına doğru bunlarla çalışırken ek kurulum yapmayacağız.
Bilmen gereken iki şey de var: Colab’ı kullanmak için internet bağlantısı şart. Bir de Colab’daki Python sürümünü Google belirler, bilgisayarına kurduğun sürümden biraz eski olabilir. Bu seride yazacağımız kodlar için bu fark sorun yaratmaz.
Sol üstteki dosya adına tıkla ve python-ders-2 yap.
Karşına çıkan kutuya hücre (cell) denir. Kodunu hücreye yazar, çalıştırırsın; sonuç hemen altında görünür. Bir not defterinde istediğin kadar hücre olabilir; yenisini eklemek için üstteki + Kod düğmesini kullan.
İlk hücreye Ders 1’deki kodu yapıştır:
# Bir öğrencinin üç sınav notu
notlar=[70,80,90]
# Ortalamayı bul: notların toplamını, not sayısına böl
ortalama=sum(notlar)/len(notlar)
# Sonucu ekrana yazdır
print("Ortalaman:",ortalama)
# Ortalamaya göre karar ver
ifortalama>=50:
print("Dersi geçtin")
else:
print("Bir daha denemelisin")
Hücreyi çalıştırmak için solundaki üçgen düğmeye bas ya da Shift + Enter tuşlarını kullan. İlk çalıştırma birkaç saniye sürebilir, çünkü Colab arka planda sana bir çalışma ortamı hazırlıyor. Hücrenin altında şu iki satırı gördüysen ilk programını çalıştırdın:
Ortalaman: 80.0
Dersi geçtin
Not defterin nerede saklanıyor?
Colab not defterlerini Google Drive’ında, “Colab Notebooks” adındaki klasörde saklar. Ertesi gün kaldığın yerden devam etmek için o dosyayı açman yeter. Her ders için ayrı bir not defteri açmanı öneririm: python-ders-3, python-ders-4 gibi.
Sık karşılaşılan hatalar
python yazınca Microsoft Store açılıyor ya da komut bulunamıyor
Windows’un kendi kısayolları karışmış olabilir. Başlat menüsüne “Manage app execution aliases” yaz (Türkçe Windows’ta “Uygulama yürütme diğer adlarını yönet” olarak görünür) ve “Python (default)” satırlarının açık olduğunu kontrol et. Zaten açıksa kapatıp yeniden aç. Sonra terminali kapatıp yeni bir pencere aç. Bu çözüm Python’ın resmî Windows belgesinde de öneriliyor.
Colab’da hücreyi çalıştırdım ama “NameError” aldım
Colab’da her hücre ayrı çalışır ama aynı belleği paylaşır. Bir hücrede tanımladığın notlar gibi bir değeri başka hücrede kullanacaksan, önce onu tanımlayan hücreyi çalıştırman gerekir. Not defterini yeniden açtığında hücreleri yukarıdan aşağı sırayla çalıştır.
“SyntaxError: ‘(‘ was never closed”
Açtığın bir parantezi kapatmamışsın. Hata mesajı sorunun hangi satırda olduğunu da söyler; o satıra bak. Hata mesajlarını okumayı erken öğrenmek seni çok zamandan kurtarır.
Bu derste ne öğrendin?
Windows’ta Python artık Python Install Manager ile kuruluyor; eski .exe kurulum dosyası emekliye ayrılıyor.
python --version kurulu sürümü gösterir. >>> işaretli shell küçük denemeler içindir.
Bu seride kodları Google Colab’da yazacağız: kodu hücreye yazıp Shift + Enter ile çalıştırırsın.
Colab not defterlerin Google Drive’daki “Colab Notebooks” klasöründe durur.
Alıştırmalar
Hücrede hesap yap. Colab’da yeni bir hücre aç, 7 * 6 yaz ve çalıştır. Sonuç ne çıktı?
Kendi notlarını gir. İlk hücredeki notları [40, 45, 50] yap ve hücreyi yeniden çalıştır. Ekranda ne yazıyor?
Bir satır ekle. Aynı hücrenin en sonuna, satır başında boşluk bırakmadan print("Bu benim ilk Python programım") satırını ekle ve çalıştır. Sonra aynı satırın başına dört boşluk koyup tekrar çalıştır. Ne değişti?
Bilerek hata yap. Bir satırdaki kapanış parantezini sil ve hücreyi çalıştır. Hata mesajı sana ne söylüyor?
Cevaplar
Sonuç 42. Colab’da hücrenin son satırı bir işlemse, print yazmasan da sonucu hücrenin altında görürsün.
Ortalaman: 45.0 ve Bir daha denemelisin. Ortalama 50’nin altında kaldığı için else kısmı çalışır.
Boşluksuz yazdığında satır her seferinde görünür. Dört boşlukla yazdığında satır else bloğunun parçası olur ve ortalaman 50 ya da üstündeyse hiç görünmez. Ders 1’de bahsettiğimiz girinti tam olarak budur.
SyntaxError: '(' was never closed. Python parantezin kapanmadığını ve sorunun hangi satırda olduğunu söyler.
Sıradaki ders
Bir sonraki derste değişkenleri ve veri tiplerini öğreneceğiz. Ders 1’den beri bekleyen sorunun cevabı da orada: ortalama neden 80 değil de 80.0 çıkıyor? Değişkenler ve Veri Tipleri (Python Dersi 3)