instruction-tuning fine-tuning llm sft rlhf hizalama dil-modeli

Instruction Tuning Nedir? SFT ile LLM Hizalama

Orta
person Yapay Zeka Uzmanı

Instruction Tuning Nedir? SFT ile LLM Hizalama cover

Giriş

ChatGPT neden bizimle sohbet edebiliyor? Bu sorunun cevabı, büyük dil modellerinin eğitim hikayesinin tam ortasında yatıyor. GPT-2’yi hatırlayın: metin tamamlama konusunda güçlüydü ama “Bana pasta tarifi ver” gibi bir komuta yanıt vermesi beklenemezdi. Model bunu anlamıyor değildi; sadece böyle davranması için eğitilmemişti.

Ham pretraining aşamasında bir model, internetin büyük bir dilimini okuyarak dil yapısını öğrenir. Ama bu süreç modele “bir kullanıcı senden bir şey istediğinde ne yapmalısın?” sorusunun cevabını vermez. Model, bir ansiklopedi makalesinin ardından gelecek cümleyi tahmin etmeyi öğrenir; kullanıcı sorularına tutarlı, yardımsever yanıtlar üretmeyi değil. Pretraining çıktısına bir soru sorsanız, büyük ihtimalle o soruya benzer başka sorular üretir, cevap vermez.

İşte bu boşluğu kapatan adım instruction tuning. Modele (prompt, yanıt) çiftlerinden oluşan bir veri setiyle ikinci bir eğitim geçişi uygulanır ve model “talimatları takip eden asistan” rolüne yerleşir. ChatGPT, Claude, Gemini gibi modellerin gündelik kullanımda bu kadar tutarlı davranmasının temel mekanizması bu. Bu yazıda instruction tuning’in nasıl çalıştığını, hangi veri setlerinin kullanıldığını ve LoRA ile pratikte nasıl uygulandığını ele alıyoruz.


Instruction Tuning Nedir?

Instruction tuning, önceden eğitilmiş bir dil modeline denetimli fine-tuning (SFT) uygulanarak talimat-yanıt çiftleriyle ince ayar yapılması işlemidir. Model zaten dilin yapısını biliyor; bu adımda öğreneceği şey, bir kullanıcının ne istediğini tanıyıp uygun biçimde yanıt vermek.

Pretraining ile instruction tuning arasındaki fark şu şekilde özetlenebilir:

ÖzellikPretrainingInstruction Tuning
AmaçDil modellemesiTalimat takibi
VeriHam metin (internet, kitaplar)(prompt, yanıt) çiftleri
Eğitim hedefiSonraki token’ı tahmin etAsistan yanıtını üret
ÇıktıTemel dil modeliTalimat izleyen model

Bu yaklaşımı popüler kılan ilk çalışmalardan biri OpenAI’nin InstructGPT makalesidir (2022). Makalede araştırmacılar, 175 milyar parametreli GPT-3’ü yalnızca 13.000 örneklik bir instruction tuning setiyle ince ayarladılar ve modelin insan tercihlerini karşılamakta çok daha iyi hale geldiğini gösterdiler. Stanford’un Alpaca projesi, 52.000 örnekle LLaMA’yı ince ayarlayarak aynı yöntemi akademik ortama açtı. Anthropic ise Claude modellerini bu temel üzerine ek hizalama katmanlarıyla geliştiriyor.

Instruction tuning, modelin parametrelerini sıfırdan yeniden yazmaz. Pretraining’de kazanılan dil bilgisi korunur; üstüne bir davranış katmanı gelir. Bu yüzden pretraining maliyetinin küçük bir kesimiyle uygulanabilir.


SFT Süreci: Veri Hazırlığından Modele

Supervised Fine-Tuning (SFT), instruction tuning’in teknik uygulama adıdır. Süreç üç ana bileşenden oluşur: veri formatı, kayıp fonksiyonu ve gradyan güncellemesi.

Chat Template Formatı

Modern SFT eğitimleri genellikle şu yapıyı kullanır:

<|system|>Sen yardımsever bir asistansın.<|end|>
<|user|>Fotosentez nedir?<|end|>
<|assistant|>Fotosentez, bitkilerin güneş ışığını kimyasal enerjiye dönüştürdüğü süreçtir.<|end|>

Bu format üç rolü açıkça ayırır: sistem, kullanıcı ve asistan. Sistem rolü davranış yönergelerini belirler; kullanıcı talebi iletir; asistan yanıtlar. Llama 3, Mistral ve Qwen bu yapının kendi varyantlarını kullanır ama temel mantık ortaktır. Modeli yeni bir template ile ince ayarlıyorsanız, pretraining sırasında hangi formatın kullanıldığını bilmek önemlidir; template uyumsuzluğu performansı düşürebilir.

Çok turlu konuşmalar için aynı format genişletilir: birden fazla kullanıcı ve asistan çifti art arda eklenir. Bu örnekler modele “konuşma geçmişini bağlamda tut” davranışını öğretir.

Kalite mi, Miktar mı?

Kaç örnek yeterli? Alpaca 52.000 örnekle başarılı sonuçlar aldı. Ama 2023’te LIMA makalesi farklı bir tablo ortaya koydu: yalnızca 1.000 dikkatle seçilmiş örnek, çok daha büyük veri setleriyle rekabet edebiliyordu.

Fark orada: kalite, miktarı geride bırakıyor. Tutarsız ya da birbiriyle çelişen örneklerle dolu büyük bir set, seçilmiş 1.000 örnekten daha az etkili olabiliyor. Kaliteli veri için dikkat edilmesi gerekenler; yanıtların tutarlı uzunluk ve formatta olması, cevapların gerçekten doğru ve yardımsever olması, veri setinde görev türleri arasında dengeli dağılım bulunması (soru-cevap, özetleme, yaratıcı yazı, kod, vb.) sayılabilir.

Kayıp Fonksiyonu

SFT’de cross-entropy kaybı yalnızca asistan tokenları üzerinde hesaplanır. Sistem ve kullanıcı bölümleri kayıp hesabına girmez; model sadece “bu prompt karşısında asistan ne demeliydi?” sorusuna göre güncellenir. Böylece model doğrudan yanıt kalitesini optimize eder.

Teknik bir not: kayıp maskesi (loss mask) uygulamaları kütüphaneden kütüphaneye farklılık gösterebilir. TRL ve Axolotl gibi araçlar bunu varsayılan olarak doğru yapıyor, ancak kütüphane olmadan özel eğitim kodu yazıyorsanız bu adımı atlamamak gerekiyor; aksi takdirde model hem prompt hem yanıtı tahminde bulunmaya çalışır.

SFT pipeline diyagramı: veri formatı → tokenization → kayıp hesabı → gradient update


Neden SFT Yetmez? RLHF ve DPO

SFT modeli talimat izlemeye alıştırır, ama pratikte iki sorun çıkıyor.

Birincisi, eğitim verilerindeki örnekler her zaman ideal yanıtları temsil etmez. Kalıpların ortalamasını öğrenen bir model, zararlı ya da yanıltıcı içerik de üretebilir. Özellikle modelin pretraining verisinde gördüğü zararlı metin kalıpları, SFT sonrasında tamamen bastırılmayabilir. İkincisi, SFT modele “tercih” kavramını öğretmez; iki yanıt arasından hangisinin daha iyi olduğunu ayırt edemez. Bu durum özellikle “nasıl daha iyi olunabilir” türü sorularda ortaya çıkar; SFT modeli iyi bir yanıt üretse de mükemmel olanı seçme yeteneğine sahip değildir.

Bu yüzden SFT tek başına bırakılmıyor; arkasına tercih hizalaması ekleniyor.

RLHF (Reinforcement Learning from Human Feedback): İnsan değerlendiriciler modelin ürettiği yanıtlar arasında tercih belirtir. Bu tercihler bir ödül modeli (reward model) eğitmek için kullanılır; ardından model bu ödül modeline göre PPO (Proximal Policy Optimization) algoritmasıyla güncellenir. Süreç boyunca KL divergence kaybı da hesaplanır; bu, modelin SFT başlangıç noktasından çok uzaklaşmasını engeller. Sürecin detaylarına RLHF Nedir? yazısında bakabilirsiniz.

DPO (Direct Preference Optimization): RLHF’in daha sade bir versiyonu. Ayrı bir ödül modeli eğitmeden, tercih verisiyle doğrudan modeli günceller. Daha az hesaplama gerektirir ve pratikte RLHF ile benzer sonuçlar verir. Kendi ödül modelini eğitmek yerine tercih çiftlerini (seçilen yanıt, reddedilen yanıt) doğrudan kayıp fonksiyonuna dahil eder. DPO Nedir? yazısında karşılaştırmalı inceleme bulabilirsiniz.

Constitutional AI: Anthropic’in kural tabanlı hizalama yaklaşımı. İnsan tercih etiketleri yerine, “anayasa” olarak tanımlanan bir ilkeler listesi kullanılır. Model kendi yanıtlarını bu ilkelere göre değerlendirip revize eder; bu sürece RLAIF (Reinforcement Learning from AI Feedback) denir. Constitutional AI ve RLAIF yazısı bu konuyu ele alıyor.

Bu üç yaklaşım birbirini dışlamaz; büyük modeller çoğunlukla SFT + RLHF ya da SFT + DPO kombinasyonu kullanır.


Instruction Tuning Veri Setleri

SFT’de her şey veriye bağlı. Yaygın açık kaynak seçenekler şunlar:

Alpaca: Stanford’un LLaMA tabanlı çalışması için hazırlanmış 52.000 örneklik İngilizce set. GPT-3.5 çıktısıyla oluşturuldu; hızlı deneme için hala kullanılıyor ama kalite tutarsız.

OpenHermes: Mistral ve Llama modellerini ince ayarlamak için derlenen, akıl yürütme ağırlıklı yüksek kaliteli set. Birden fazla veri kaynağından bir araya getirildi.

ShareGPT: Gerçek kullanıcıların ChatGPT ile yaptığı konuşmalardan toplanan veri. Çok turlu diyalog örnekleri içeriyor ve bu açıdan diğer setlerden ayrışıyor.

Dolly: Databricks çalışanlarının elle yazdığı 15.000 örneklik set. Tamamen insan tarafından üretilmiş olması bakımından farklı duruyor; sentetik veri sorunlarından uzak.

Aya: Cohere’in çok dilli projesi; 100’den fazla dili kapsıyor. Düşük kaynaklı diller için önemli bir referans. Yalnızca çeviri içermiyor; yerel konuşmacılar tarafından oluşturulmuş özgün örnekler de var.

Türkçe instruction tuning veri setleri açısından açık kaynak seçenekler hala dar. Aya bu boşluğu kısmen kapatıyor ama kapsam ve kalite İngilizce setlerin gerisinde kalıyor. Türkçe bir model üzerinde çalışıyorsanız, yüksek kaliteli İngilizce verinin çevirisi ya da özgün Türkçe veri üretimi büyük ihtimalle ilk adım olacak. Makine çevirisiyle üretilen verinin kalite denetimini atlamak, modelde tutarsız Türkçe çıktılara yol açabiliyor. Aya’ya ek olarak mTülu, Bactrian-X ve bazı akademik veri setleri de Türkçe örnek içeriyor; ancak bunların büyük çoğunluğu çeviri tabanlı.


Pratik: LoRA ile Instruction Tuning

Tam fine-tuning, milyarlarca parametreli bir modelin tüm ağırlıklarını güncellemek demektir. Çoğu ekip için bu masraflı; hem zaman hem GPU belleği açısından. 7B parametreli bir modeli tam fine-tuning ile eğitmek için birden fazla A100 GPU gerekebilir ve bu maliyet araştırma bütçelerinin çoğu için uygun değildir. Bu noktada LoRA (Low-Rank Adaptation) devreye girer.

LoRA, modelin orijinal ağırlıklarını dondurur ve yalnızca küçük, düşük rankli ek matrisler ekler. Bu matrisler mevcut ağırlık matrislerinin yanına eklenir; eğitim biterken ikisi birleştirilebilir ya da ayrı tutulabilir. Güncellenen parametre sayısı çok azalır; 7B parametreli bir modeli LoRA ile ince ayarlamak için tek bir tüketici GPU yeterli olabilir.

LoRA ve Unsloth ile Türkçe LLM Fine-Tuning yazısında bu süreci adım adım ele aldık. Kısa bir örnek:

from trl import SFTTrainer
from peft import LoraConfig
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.2-3B-Instruct",
    load_in_4bit=True,
)

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
)

trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    peft_config=lora_config,
    dataset_text_field="text",
    max_seq_length=2048,
)

trainer.train()

trl’nin SFTTrainer’ı ve peft’in LoraConfig’u birlikte kullanılıyor. load_in_4bit=True modeli 4-bit kuantizasyonla yükler, bu da bellek tüketimini daha da düşürür. r=16 rankı, düşük bellek kullanımı ile yeterli model kapasitesi arasındaki dengedir; büyük ve karmaşık görevler için r=32 veya r=64 deneyebilirsiniz. Unsloth aynı süreci belirgin biçimde daha hızlı çalıştırıyor ve uzun context uzunluklarında bellek verimliliği konusunda ek optimizasyonlar sunuyor.

LoRA adaptörlerini orijinal modele birleştirmek (merge_and_unload) ya da ayrı tutmak da mümkün. Ayrı tutursanız, birden fazla adaptörü dinamik olarak değiştirebilirsiniz; bu, aynı temel modeli farklı görevler için özelleştirmeniz gerektiğinde işe yarar.


Değerlendirme

İyi bir instruction tuning modeli nasıl ölçülür? Standart dil modeli ölçütleri (perplexity, BLEU) bu iş için yeterli gelmiyor; talimat izleme kalitesini doğrudan yakalamıyorlar. Bu yüzden birkaç özel çerçeve var.

MT-Bench: Çok turlu konuşma senaryolarında modeli değerlendiren kıyaslama seti. 80 sorudan oluşur ve yazma, akıl yürütme, matematik, kod gibi farklı kategorileri kapsar. Yanıtları 1-10 arası puanlamak için GPT-4 kullanılıyor; bu da değerlendirmenin otomasyon maliyetini düşürüyor.

AlpacaEval: İki modelin yanıtlarını karşılaştırmalı değerlendiren çerçeve. GPT-4 hangi yanıtı tercih ettiğini seçiyor; bu tercihler üzerinden sıralama oluşturuluyor. Win-rate olarak ifade edilen sonuçlar, modelin referans modele (genellikle davinci-003) kıyasla ne kadar iyi olduğunu gösteriyor.

IFEval (Instruction Following Eval): Talimat izlemenin daha nesnel ölçümü için tasarlandı. “100 kelimeden uzun yaz”, “madde işareti kullan”, “JSON formatında döndür” gibi doğrulanabilir kısıtlar içeriyor. Model yanıtı kısıtı karşılıyor mu karşılamıyor mu; bu soruya otomatik cevap verilebiliyor. GPT-4 jüri gerektirmiyor, bu açıdan MT-Bench ve AlpacaEval’dan farklı.

Değerlendirme çerçevesi seçimi, modelin ne için kullanıldığına göre değişiyor. Genel sohbet asistanı için MT-Bench mantıklı; belirli kısıtları takip etmesi gereken bir API aracısı için IFEval daha bilgi verici olacaktır. LLM değerlendirmesinin daha geniş bağlamı için LLM Eval Nedir? yazısına bakabilirsiniz.


Sonuç

Instruction tuning olmadan ham dil modeli, metin tamamlama motorundan öteye geçemiyor. SFT bu motora “talimata uy” davranışını öğretiyor; RLHF ya da DPO ise üstüne tercih hizalaması ekliyor.

Kendi modelinizi ince ayarlayacaksanız sıra şu: kaliteli veri toplama, SFT eğitimi (LoRA ile başlamak mantıklı), ardından tercih hizalaması. Uygun metrik seçmezseniz yanlış yönde ilerlediğinizi geç fark edersiniz. Özellikle Türkçe projeler için veri kalitesi standartları koymak, eğitim başlamadan önce yapılması gereken en kritik adım.

Sonraki adımlar için RLHF Nedir? ve DPO Nedir? yazılarına, fine-tuning ile RAG arasındaki strateji kararı için ise Fine-Tuning vs RAG yazısına bakabilirsiniz.