
Makine öğrenmesini artık biliyoruz. Bir model var ve eğitim dataset’imiz var. Modelin bu dataset üzerinden gözetimli, gözetimsiz, yarı gözetimli ve pekiştirmeli(ortam, ödül sinyali, etkileşim verisi ile) öğrenme metodlarıyla örüntüler oluşturup öğrenmesine makine öğrenmesi diyoruz. Peki makine unutması nedir? Buna neden ihtiyaç duyulmuş olabilir? Biraz da buna odaklanalım.
Bu ihtiyacın doğmasındaki temel bazı sebepler var. Bunlar;
- Güvenlik ve Gizlilik:
LLM’lerin eğitim verilerini ezberleyebildiklerini biliyoruz. Doğru promptlarla model, eğitim setinden kelimesi kelimesine metin üretebilme kabiliyetine sahip. Bunlar şifreler ve kişisel bilgiler gibi birçok özel veri olabilir. Bu da güvenlik açısından ciddi bir sorun oluşturabilir. - Hatalı veya Zararlı İçerik:
Model önyargılı veri yada yanlış bilgiyle ya da telif hakkı ihlali oluşturabilecek içeriklerle eğitildiyse, bu birçok açıdan sorunlu çıktılar oluşturmasına sebep olabilir. - Veri Minimizasyonu:
Bazı sistemlerde belirli kullanıcıların verileri bir süre sonra silinmelidir ve model bu veriyi bilgi olarak taşımaya devam etmemelidir.
Bunun gibi birçok sebepten kaynaklanabilen ihtiyaca binaen aslında machine unlearning kavramı ortaya çıkmıştır.
Tüm bunlarla beraber bir kullanıcı sistemler seviyesinde verileriyle birlikte unutulma talebinde bulunduğunda klasik yaklaşımla sadece veritabanından verilerini silmek yetmemektedir.
Model o veri ile çoktan öğrendiği ve modelin ağırlıklarına işlediği için bu unutulmanın farklı bir yaklaşım ile ele alınması gerekmektedir.
Neden Sadece Yeniden Eğitmiyoruz?
Çünkü bir LLM’i yeniden eğitmek çok maliyetli bir süreçtir. Bunun için çok büyük compute kaynakları, uzun süreler ve maddi giderler ayrılması gerekir. Retrain sürecinin milyondolarlar ve haftalar alabileceğini göz önünde bulundurduğumuzda her unutulma talebinde modelin yeniden üretilme süreci bu yüzden sürdürülebilir olmaz.
Bundan dolayı exact unlearning(retrain) yanında approximate unlearning(yaklaşık unutma) yöntelmerine de ihtiyaç duyulmuştur.
Unlearning Methodları
Exact Unlearning: SISA olarakta bilinir yani Sharded Isolated Sliced Aggregated. Eğitim verisi S sayıda shard’a bölünür ve her bir shard kendi modelini bağımsız eğitir. Çıkarım anında da bu S modelin çıktısı birleştirilir dolayısıyla biir veri noktası sadece bir modelin ağırlıkların etkilemiş olur.
Her shard da kendi içerisinde slice’lara bölünüyor ve her slice sonunda bir kayıt noktası bulunuyor. Doalyısıyla bir veri silme talebi geldiğinde sadece ilgili shard’ın ilgili slice’ı bulunur ve o slicetan önceki kayıt noktasına dönülüp tekrar eğitime oradan başlanır.
Ancak kayıt noktalarını saklamak ciddi depolama maliyeti oluşturabilir ve art arda gelen silme talepleri shard’ları olumsuz etkileyebilir.
Fine-tuning Tabanlı: Aslında bir silme değil daha çok üstüne yazma gibi düşünebiliriz. Unutulacak örneklere karışık seçimlerle hedefler atayıp normal fine-tuning yaparak modeli doğru cevapları öğrenmemiş hale getirmek.
IDK(I don’t know) doldurması da fine-tuning tabanlı methoddur. Yani cevabı reddetmek gibi. Mesela bu şahsın numarası nedir diye sorulduğunda ben bu cevabı bilmiyorum yanıtı döndürme.
Guardrail Tabanlı: Bu bir unutma değil aslında. Daha çok modelin unutulması istenen verileri söymemesi gibi düşünebilirsiz. Burada modelin ağırlıklarına dokunulmaz bilgi yerinde durur ancak model bu bilgiyi vermez. Diğer metodlarla birlikte kullanılması gerekir. Tek başına kullanılması pek bir anlam ifade etmeyebilir bazı durumlarda. Çünkü kullanıcılar modeli fine-tune edebiliyorsa guardrail silinebilir ya da ağırlıklar açık şekilde yayınlanıyorsa(open-weight) guardrailin pek bir önemi kalmayabilir.
Gradient Tabanlı: Şimdi modelin eğitimi demek çıktı hatasını küçültmek adına modelin ağırlıklarıyla oynamak demek aslında. Gradient descent de modelin öğrenme noktasında hata değerinin 0’a yaklaşmasını ifade eder. Unutma metodu olarak ise gradient ascent yani 0’ın aksine tersi yönde ilerlemesini sağlayarak ilgili bilgi adına doğru token’lerin üretilmesini önlemek. Ancak burada şöyle bir sorun var. gradient descent’in varma istenilen nokta 0’a olabildiğince yaklaşmak. Yani üretilen bilgi ile gerçek bilginin tamamen tutarlı olması. Ancak gradient ascent, bitiş noktası açısından oldukça geniştir. Modelin artık unutmasını istediğimiz bilgi var ancak, dağılımın bozulmasında bir dur noktası olmadığından modelin genel dil yeteneği aynı anda bozulmaya başlayabilmektedir. Bu da model açısından yıkıcı sonuçlar doğurabilmektedir.
GradDiff ile bozulma belirli ölçüde dengelenebilmektedir. Yani unutulması istenen noktalarda hatayı büyütürken mevcut kalması gereken noktalarda hata küçültülebilmektedir.
Model Editing(ROME/MEMIT): Gradient tabanlı olan yöntemler modeli eğitiyor ancak model editing biraz daha farklı. Model üzerinde ameliyat yapıyor gibi düşünebiliriz. Yani ilgili bilgiyi barındıran parametreleri bulup değiştirmek gibi.
ROME(Rank-One Model Editing): İlgili ağırlık matrisine Rank-1 güncelleme uygulanır. Tek seferlik bir işlemdir ve saniye mertebesinde sürer.
MEMIT(Mass-Editing Memory in a Transformer): ROME tek seferde tek bir bilgiyi değiştirebiliyor. Yüzlercesini hatta binlercesini değiştirmek için değişikliği birden fazla katmana yayıyor ve tek seferde değiştirebiliyor.
Model editingdeki bu yöntemler silme silme değil bilgiyi değiştirme metodunu uyguluyor aslında.
Leave a Reply