Ana içeriğe geç

Orta9 dk

Düşünce zinciri (chain-of-thought) ve sınırları

Önkoşul:Örnekle öğretme (few-shot)

Kanca

“Bir mağazada 84 elma vardı. Sabah 27, öğleden sonra 19 tane sattılar, sonra 45 elmalık yeni bir teslimat geldi. Şimdi kaç elma var?” — modelden doğrudan cevap istemek mi, yoksa ara adımları göstermesini istemek mi daha güvenilir?

Sezgi

“Düşünce zinciri” (chain-of-thought, CoT), modelden doğrudan cevap yerine, ara adımları yazarak ilerlemesini istemektir. Bunun neden işe yaradığı, 5. kategoride (NLP & LLM) kurduğumuz Transformer mimarisinin bir özelliğinden kaynaklanır: her token, sabit miktarda hesaplama alır.

Mekanizma

Aynı çok-adımlı problemi, doğrudan ve CoT olarak karşılaştıralım — hem istem hem çıktı token’larını sayalım:

Doğrudan cevap vs adım adım gösterim

# "Düşünce zinciri" (chain-of-thought, CoT): modele doğrudan cevabı sormak yerine,
# ara adımları göstermesini istemek. Bir çok-adımlı problem üzerinde karşılaştıralım.
SORU = (
    "A store had 84 apples. They sold 27 in the morning and 19 in the afternoon, "
    "then received a new delivery of 45 apples. How many apples does the store have now?"
)
DOGRUDAN_ISTEM = SORU + " Answer with just the final number."
COT_ISTEM = SORU + " Think step by step, showing each calculation before giving the final answer."

# Öğretici amaçlı örnek çıktılar (gerçek bir LLM'e bu ortamda erişim yok, ama token
# sayımı gerçek bir tokenizer ile yapılıyor):
DOGRUDAN_CIKTI = "83"
COT_CIKTI = (
    "Start: 84 apples.\n"
    "Morning sale: 84 - 27 = 57.\n"
    "Afternoon sale: 57 - 19 = 38.\n"
    "New delivery: 38 + 45 = 83.\n"
    "Final answer: 83"
)

t_dogrudan_istem = mesaj_token_sayisi(DOGRUDAN_ISTEM)
t_cot_istem = mesaj_token_sayisi(COT_ISTEM)
t_dogrudan_cikti = mesaj_token_sayisi(DOGRUDAN_CIKTI)
t_cot_cikti = mesaj_token_sayisi(COT_CIKTI)

print(f"Doğrudan istem: {t_dogrudan_istem} token, çıktı: {t_dogrudan_cikti} token, toplam: {t_dogrudan_istem + t_dogrudan_cikti}")
print(f"CoT istem:      {t_cot_istem} token, çıktı: {t_cot_cikti} token, toplam: {t_cot_istem + t_cot_cikti}")
print(f"\nCoT, toplam maliyeti {(t_cot_istem+t_cot_cikti)/(t_dogrudan_istem+t_dogrudan_cikti):.1f}x artırıyor -- çoğu")
print("ek maliyet, istemden değil, çıktıdan (ara adımların yazılmasından) geliyor.")
Doğrudan istem: 113 token, çıktı: 3 token, toplam: 116
CoT istem:      142 token, çıktı: 97 token, toplam: 239

CoT, toplam maliyeti 2.1x artırıyor -- çoğu
ek maliyet, istemden değil, çıktıdan (ara adımların yazılmasından) geliyor.

Matematik

Neden CoT işe yarar: sabit hesaplama bütçesi

17-19. derste (NLP & LLM kategorisi) gördüğümüz gibi, bir Transformer her yeni token için aynı sayıda katmandan, tek bir ileri geçişte geçer — token başına “düşünme kapasitesi” sabittir. Karmaşık, çok adımlı bir problemi tek bir token’da (doğrudan cevap) çözmek, bu sabit bütçeyi zorlar.

CoT, hesaplamayı adımlara yayar

# 17-19. dersten (NLP kategorisi) hatırla: bir Transformer, her token için sabit
# miktarda hesaplama yapar (N katman, tek ileri geçiş) -- token başına "düşünme" sınırlıdır.
print("\n17-19. dersten (NLP & LLM kategorisi) hatırla: bir Transformer, her yeni token için")
print("sabit sayıda katmandan sadece bir kez geçer -- 'tek adımda' ne kadar karmaşık bir")
print("hesaplama yapabileceği sınırlıdır. Ama her üretilen token, bir sonraki token'ın")
print("bağlamının bir parçası olur (17. ders, otoregresif üretim).")
print("\nCoT, bu sınırı 'aşmanın' bir yolu: modelin karmaşık problemi tek bir ileri geçişte")
print("çözmesini istemek yerine, hesaplamayı ara adımlara yayarak, her adımı ayrı (ve daha")
print("basit) bir ileri geçişte ürettirmek -- ve her adım, bir sonrakinin girdisi olur.")

17-19. dersten (NLP & LLM kategorisi) hatırla: bir Transformer, her yeni token için
sabit sayıda katmandan sadece bir kez geçer -- 'tek adımda' ne kadar karmaşık bir
hesaplama yapabileceği sınırlıdır. Ama her üretilen token, bir sonraki token'ın
bağlamının bir parçası olur (17. ders, otoregresif üretim).

CoT, bu sınırı 'aşmanın' bir yolu: modelin karmaşık problemi tek bir ileri geçişte
çözmesini istemek yerine, hesaplamayı ara adımlara yayarak, her adımı ayrı (ve daha
basit) bir ileri geçişte ürettirmek -- ve her adım, bir sonrakinin girdisi olur.

CoT, bu sınırı “aşmanın” bir yolu: karmaşık problemi tek bir ileri geçişte çözdürmek yerine, hesaplamayı ardışık, basit adımlara yayıyor — NLP kategorisinin 17. dersindeki otoregresif üretim sayesinde her yazılan adım, sonrakinin bağlamının bir parçası oluyor.

Kod

Doğrudan cevap ve chain-of-thought yaklaşımlarının istem ve çıktı token sayılarını yığılmış çubuklarla gösteren grafik; CoT belirgin biçimde daha yüksek, farkın çoğu çıktıdan geliyor.(grafiği tam boyutta, yeni sekmede aç)
CoT'un ek maliyetinin büyük kısmı çıktıdan (turuncu) geliyor -- ara adımların yazılması, doğrudan cevabın (3 token) aksine 97 token tutuyor.

Nerede işe yarar

CoT güçlü ama mükemmel olmayan bir teknik:

CoT'un bilinen sınırları

# CoT mükemmel değildir. Araştırmalar (Anthropic, 2023, "Measuring Faithfulness in
# Chain-of-Thought Reasoning") gösterdi: modelin yazdığı ara adımlar, cevaba gerçekten
# nasıl ulaştığını her zaman dürüstçe yansıtmayabilir -- bu "sadakatsizlik" (unfaithfulness)
# olarak adlandırılır.
print("\nCoT'un bilinen sınırları:")
print("  1. Maliyet: bu dersteki örnekte toplam token maliyetini belirgin biçimde artırdı.")
print("  2. Basit görevlerde faydasız: tek adımlı bir soruda ('2+2 kaç eder?') CoT gereksiz")
print("     uzunluk ve gecikme (latency) ekler.")
print("  3. Sadakatsizlik (unfaithfulness): araştırmalar, modelin yazdığı 'akıl yürütmenin',")
print("     cevaba nasıl ulaştığının her zaman doğru bir açıklaması olmayabileceğini gösterdi --")
print("     yazılan adımlar 'makul görünen' ama gerçek süreci yansıtmayan bir anlatı olabilir.")

CoT'un bilinen sınırları:
  1. Maliyet: bu dersteki örnekte toplam token maliyetini belirgin biçimde artırdı.
  2. Basit görevlerde faydasız: tek adımlı bir soruda ('2+2 kaç eder?') CoT gereksiz
     uzunluk ve gecikme (latency) ekler.
  3. Sadakatsizlik (unfaithfulness): araştırmalar, modelin yazdığı 'akıl yürütmenin',
     cevaba nasıl ulaştığının her zaman doğru bir açıklaması olmayabileceğini gösterdi --
     yazılan adımlar 'makul görünen' ama gerçek süreci yansıtmayan bir anlatı olabilir.
  • Çok-adımlı mantık ve aritmetik görevlerinde en çok fayda sağlar — tek adımlı, doğrudan bilgi sorularında (2. derste gördüğümüz “Türkiye’nin başkenti” gibi) genelde gereksizdir.
  • “Sadakatsizlik” (unfaithfulness), aktif bir araştırma konusudur — modelin yazdığı adımların, gerçek iç hesaplamayı ne kadar doğru yansıttığı hâlâ tam netleşmemiştir.
  • Maliyet ve gecikme (latency) her zaman artar — CoT’u sadece gerçekten faydalı olacağı görevlerde kullanmak, gereksiz uzun yanıtlardan kaçınmanın yoludur.

Bu 2 hatayı yaparsın:

  1. CoT’u her göreve otomatik olarak uygulamak — basit görevlerde sadece maliyet ve gecikme ekler, doğruluğa katkısı yoktur.
  2. Modelin yazdığı “akıl yürütmeyi” her zaman gerçek iç sürecin dürüst bir açıklaması sanmak — araştırmalar, bunun her zaman böyle olmadığını gösteriyor.

Kendini test et

1. Notebook'ta CoT (adım adım düşünme), toplam maliyeti 2.1 kat artırıyor. Bu ek maliyetin büyük kısmı nereden geliyor?
  1. Sadece istemden (soru metninden)
  2. Çıktıdan -- doğrudan cevap sadece 3 token iken, ara adımları gösteren CoT çıktısı 97 token; asıl maliyet farkı modelin yazdığı ek metinden geliyor (doğru cevap)
  3. İkisi arasında hiçbir fark yoktur
  4. Sadece istem uzunluğundan

Neden: dogrudan-vs-cot bloğunda doğrudan çıktı 3 token, CoT çıktısı 97 token -- istem farkı (113 vs 142) çok daha küçük, asıl fark çıktıda.

2. CoT'un işe yaramasının altında yatan mimari neden nedir?
  1. CoT modelin parametrelerini geçici olarak artırır
  2. Bir Transformer her token için sabit miktarda hesaplama yapar (tek ileri geçiş); CoT, karmaşık bir problemi tek bir token'da çözmek yerine, hesaplamayı basit ardışık adımlara yayarak bu sabit bütçeyi aşar (doğru cevap)
  3. CoT modele internetten ek bilgi indirtir
  4. CoT, modelin eğitim verisini günceller

Neden: MathBox ve neden-ise-yarar bloğunda açıkça belirtildiği gibi, 17-19. dersteki (NLP kategorisi) 'her token sabit hesaplama alır' ilkesi, CoT'un neden işe yaradığının mimari temelidir.

3. 'Sadakatsizlik' (unfaithfulness) kavramı CoT bağlamında neyi ifade eder?
  1. Modelin yalan söylemesi
  2. Modelin yazdığı ara akıl yürütme adımlarının, cevaba gerçekten nasıl ulaşıldığının her zaman doğru/dürüst bir açıklaması olmayabileceği -- yazılan adımlar 'makul görünen' ama gerçek süreci yansıtmayan bir anlatı olabilir (doğru cevap)
  3. Modelin CoT kullanmayı reddetmesi
  4. Modelin yanlış dilde cevap vermesi

Neden: sinirlar bloğunda bu açıkça tanımlanıyor: araştırmalar (Anthropic, 2023), yazılan akıl yürütmenin gerçek iç süreci her zaman yansıtmayabileceğini gösterdi.

Özet

Özet

  • CoT, modelden doğrudan cevap yerine ara adımları yazmasını ister.
  • Bunun mimari nedeni: bir Transformer her token için sabit hesaplama yapar -- CoT, karmaşık hesaplamayı ardışık, basit adımlara yayar.
  • Bu dersteki örnekte CoT toplam maliyeti 2.1x artırdı -- farkın büyük kısmı çıktıdan (ara adımlardan) geldi.
  • CoT çok-adımlı mantık/aritmetik görevlerinde en faydalı, tek-adımlı sorularda genelde gereksizdir.
  • "Sadakatsizlik" (unfaithfulness): modelin yazdığı adımlar, gerçek iç süreci her zaman dürüstçe yansıtmayabilir.
Sonraki adım: Yapılandırılmış çıktı alma (JSON, şema) →