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
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:
- CoT’u her göreve otomatik olarak uygulamak — basit görevlerde sadece maliyet ve gecikme ekler, doğruluğa katkısı yoktur.
- 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?
- Sadece istemden (soru metninden)
- Çı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)
- İkisi arasında hiçbir fark yoktur
- 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?
- CoT modelin parametrelerini geçici olarak artırır
- 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)
- CoT modele internetten ek bilgi indirtir
- 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?
- Modelin yalan söylemesi
- 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)
- Modelin CoT kullanmayı reddetmesi
- 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.