Transfer Learning

Ramazan Akkoyun
9 min readDec 19, 2021

--

Transfer Learning Nedir?

Transfer Learning için daha önceden eğitilmiş bir model ile eğitildiği data ile ilişkili başka bir problem çözebilme tekniğidir diyebiliriz. Diğer bir deyişle belirli bir problemi çözerken kazanılan bilgileri depolayan ve aynı bilgiyi farklı ancak ilişkili başka bir problemi çözmek için kullanan bir makine öğrenimi araştırma yöntemidir. Bu sayede, önceden öğrenilen görevden toplanan bilgileri yeniden kullanarak verimliliği artırırız. İnsan odaklı düşündüğümüzde ise, Transfer Learning makine öğrenmesi yöntemlerinin de aynı bizim gibi bir problemi çözerken elde ettiği bilgiyi saklayıp, başka bir problem ile karşılaştığında o bilgiyi kullanmasıdır. Transfer Learning ile önceki bilgiler kullanılarak daha az eğitim verisi ile daha yüksek başarı gösteren ve daha hızlı öğrenen modeller elde edilir.

Eğitim sürenizi azaltmak için diğer eğitilmiş modellerin weight değerlerini kullanmak popülerdir çünkü bir modeli eğitmek için çok fazla veriye ihtiyacımız vardır. Eğitim süresini azaltmak için, diğer eğitilmiş ağları ve weight değerlerini kullanabiliriz ve kendi datamızı işleyebilmek için son katmanı değiştirebiliriz. Böylece son katmanı eğitmek için küçük bir veri kümesi kullanarak büyük bir avantaj elde edebiliriz.

Idea behind transfer learning

Transfer learning sürecinde aşağıda verilen 3 soru sorulur:

  1. Neyin aktarılacağı: Öğrenmenin aktarımı yapılırken uygulanan ilk ve en önemli aşamadır. Kaynak veriden hedefe hangi bilgi aktarılınca hedef görevin başarısının artacağına cevap aranan bölümdür. Dikkat edilmesi gereken husus ise bazı bilgilerin kullanılan veriye/göreve özgü olabileceği ve bazısının kullanılan alan ne olursa olsun ortak olabileceğidir.
  2. Ne zaman aktarılacağı: Bu aşamada verinin hangi durumlarda aktarılacağı ya da hangi durumlarda aktarılmaması gerektiği durumları belirlenir. Bazı durumlarda kaynak veri ve hedef veri birbirinden çok farklı olabilir. Bu gibi durumlarda aktarım başarılı olmayabilir. Hatta hedef veri üzerindeki eğitimin başarısını düşürebilir. Bu duruma ‘olumsuz aktarım/negatif transfer’ denir. Q klavye kullanan birinin F klavyede yazamaması gibi.
  3. Nasıl aktarılacağı: Burada bilginin/öğrenmenin aktarımı için hangi yöntemlerin kullanılacağına karar verilir. Var olan yöntemlerin direkt kullanılması veya değiştirilmesi yaklaşımı izlenir.

Neden Transfer Learning?

  • Daha hızlı eğitim süresi: Önceden eğitilmiş modellerdeki ağırlıklar birçok bilgiyi barındırmaktadır. Dolayısıyla bu bilgileri kullanıp ince ayar(fine-tuning) yapılarak yeni model daha hızlı eğitilir. Hatta bazı problemler için öğrenme aktarımı kullanılarak 2–4 epochta bile yüksek başarı elde edilebilmektedir.
  • Daha az veri: Sıfırdan oluşturulan modellerin en büyük dezavantajı eğitim için büyük ölçekli bir veri kümesinin gerekmesidir. Bu veri kümelerinin oluşturulması için ciddi bir zaman gerekir. Bunun yerine önceden eğitilmiş modellere ince ayar yapılması daha az veri kullanarak yüksek performanslar elde edilmesini sağlar.
  • Daha iyi performans: Önceden eğitilmiş modellere yeni tam bağlantılı katman(lar) eklenerek yapılan basit bir işlemin başarıyı iyileştirdiği görülmektedir.

Transfer learning’de neyin aktarılacağı ile ilgili aşağıdaki yaklaşımlardan bahsedilir:

Örnek aktarımı/Instance transfer: Kaynak verideki bazı örneklerin hedef verisinde kullanılmasıdır. Çoğu durumda kaynak veri doğrudan kullanılamaz. Fakat kaynak verisindeki belirli örneklere uygun ağırlık değerleri verilmesi ve hedef veri üzerinde kullanılmasıyla başarı artırılabilir. Kaynak ve hedef verisinin ortak birçok özelliğe sahip olması durumunda geçerlidir. Örneğin kitap önerisi yapmak üzere kişilerin ilgi alanlarını tespit etmiş bir modelin örneklerini film önerisi yapmak üzere de kullanmak.

Özellik temsili aktarım /Feature representation transfer: Kaynak verideki özellik temsillerinin hedef verisinde kullanılmasıdır. Kaynak ve hedef verisinin ortak özelliklere sahip olması durumunda geçerlidir. Ortak özelliklerin yanı sıra yalnızca kaynak veya yalnızca hedefte olan özellikler de bulunabilir. Kaynak verisinden hedef verisine daha iyi özellik gösterimleri bularak hedef görevdeki performansın artması beklenir. Örneğin yüz tanıma modelinin göz ile ilgili çıkardığı özellikleri kullanarak yorgunluk tespiti yapan bir model geliştirmek.

Parametre aktarımı/Parameter transfer: Birbirine yakın hedef ve kaynak görevleri için benzer parametre, hiper-parametrelerin kullanılması durumudur. Transfer edilecek bilgi paylaşılan ortak parametreler ile kaynak görevden hedef göreve aktarılır.

İlişki kurma tecrübesinin aktarımı/Relational Knowledge Transfer: Kaynak verideki bazı ilişkilerin hedefteki ilişkilere benzetilmesi durumudur. Kaynak veri ve hedef veri arasında bazı ilişkilerin olduğu varsayılır, veri kaynakları arasında ilişkisel bilginin eşleştirilmesi yapılır.

Transfer Learning’de Convolutional Neural Network-CNN kullanıldığında karşılaşılabilecek senaryolardan bahsedecek olursak:

Hedef veri kümesinin küçük ve kaynak veri kümesine benzer olması durumu:

  • Hedef veri kümesi küçük olduğu için bir CNN üzerinde ince ayar yapılması overfitting problemine karşı risklidir.
  • Hedef verisi kaynak verisine benzer olduğu için CNN ile bulunan yüksek seviyeli özelliklerin kullanılması mantıklıdır.
  • Önceden eğitilmiş CNN’den en sondaki tam bağlantılı katman çıkarılır. Hedef veri kümesindeki sınıf sayısı dikkate alınarak yeni bir tam bağlantılı katman eklenir.
  • Yeni tam bağlantılı katmanın ağırlıkları rastgele verilir ve önceden eğitilmiş olan CNN’deki ağırlıklar ise aynı kalır.
  • Ağın yeni eklenen son katmanı eğitilerek bu katmandaki ağırlıklar öğrenilir.

Hedef veri kümesinin küçük ve kaynak veri kümesine göre çok farklı olması durumu:

  • Hedef veri kümesi kaynaktan çok farklı olduğu için CNN’deki yüksek seviyeli özellikler bir anlam ifade etmez.
  • Önceden eğitilmiş modeldeki çoğu katman çıkarılır ve hedef veri kümesindeki sınıf sayısı dikkate alınarak yeni tam bağlantılı katmanlar eklenir.
  • Yeni tam bağlantılı katmanların ağırlıkları rastgele verilir ve önceden eğitilmiş olan CNN ağındaki ağırlıklar ise aynı kalır.
  • Hedef veri kümesi küçük olduğu için overfit riski bulunduğundan sadece ağa yeni eklenen ağırlıklar eğitilir.

Hedef veri kümesinin büyük ve kaynak veri kümesine benzer olması durumu:

  • Önceden eğitilmiş CNN’deki son tam bağlantılı katman çıkarılır ve hedef veri kümesindeki sınıf sayısı dikkate alınarak yeni bir tam bağlantılı katman eklenir.
  • Yeni tam bağlantılı katmanın ağırlıkları rastgele verilir ve önceden eğitilmiş olan CNN’deki ağırlıklar ise aynı kalır.
  • Hedef veri kümesi büyük olduğu için overfit riski yoktur, bütün ağa ince ayar yapılabilir.

Hedef veri kümesinin büyük ve kaynak veri kümesine göre çok farklı olması durumu:

  • Overfit problem olmayacağı için ağın tamamı en baştan eğitilir. Fakat eğitimin daha hızlı olması için bir üstteki yöntem kullanılabilir.

Örnek Proje Uygulaması

Derin öğrenme dünyasında 2 temel Transfer Learning yaklaşımı mevcuttur:

  • Fine-tuning: Burada önceden eğitilmiş bir model yüklenir ve eğitim için kullanılır. Bu, ağdaki rastgele başlatma yükünü ortadan kaldıracaktır.
  • Feature Extraction: Fine-tuning yaklaşımında olduğu gibi, önceden eğitilmiş bir model yüklenir ve ardından son katman hariç tüm katmanların ağırlıklarını dondururuz , ardından bu halini eğitim için kullanırız.

İki yaklaşımda da çıkış katmanımız kendi ihtiyaçlarımıza göre modifiye edilmektedir. Ayrıca yeni bir ara katman ekleyebilir veya çıkarabiliriz.

Projede konu seçimi olarak Alien-Predator ayrımı yapmak istedim. 1970ler ve sonrası yapılan bilim- kurgu filmlerinde sıkça karşılaştığımız dünya dışı varlıklar olan Alien ve Predator kavramları üzerine yoğunlaşıp görsele göre hangisi olduğuna karar veren bir model geliştirdim.

Eğitim kısmında her iki kategori için 347 farklı data, doğrulama kısmında yine her iki kategori için ayrı ayrı olmak üzere 100 farklı data ile çalıştım. Oranlama yaptığımda 0.78 train, 0.22 validation olarak ayrıldı, internette yapmış olduğum okumalar ve best practices dediğimiz çalışmalarda genelde train- validation için 70–30 , 75–25 veya 80–20 gibi oranlar vardı, bu nedenle 78–22 oranının dengeli olduğunu düşünüyorum.

Alien vs Predator Source: Kaggle

Önce kodumuzda kullanacağımız gerekli paketleri import ediyoruz.

Ardından üzerinde çalışacağımız data setimizin kodunu yazıyoruz.

Ardından for döngüsü ile datamızı eğitim ve doğrulama amaçlı ayırıyoruz. Ayrıca data transformasyonu yaparak datamızdaki görüntüleri merkezden kırpacak, yatay bir çevirme işlemi uyguladıktan sonra normalleştirme işlemine dahil ediyoruz. Son olarak da tensor olarak convert ediyoruz.

Veri Artırma

Veri artırma fikri, görüntülere rastgele dönüşümler uygulayarak modelimizin gördüğü eğitim görüntülerinin sayısını yapay olarak artırmaktır. Örneğin, resimleri rastgele döndürebilir veya kırpabilir veya yatay olarak çevirebiliriz. Modelimizin, yönelimden bağımsız olarak nesneleri ayırt etmesini istiyoruz. Veri artırma ile giriş verilerinin dönüşümlerine göre değişmeyen bir model yapmayı amaçlıyoruz.

Görüntü İşlemleri

Bu işlem, görüntü verileriyle çalışmanın en önemli adımıdır. Görüntü ön işleme sırasında, görüntüleri eş zamanlı olarak ağımız için hazırlıyor ve eğitim setine veri büyütme uyguluyoruz. Her modelin farklı girdi gereksinimleri olacaktır, ancak Imagenet’in gerektirdiklerini okursak, görüntülerimizin 224x224 olması ve bir aralığa normalize edilmesi gerektiğini anlarız. PyTorch ile görüntü işleyebilmek için transforms kullanıyoruz. Aşağıda yapılabilecek örnek işlem tiplerini yazmaya çalıştım.

  • Resize
  • Center crop to 224 x 224
  • Convert to a tensor
  • Normalize with mean and standard deviation

Eğitim Kaybı ve Optimizasyon

Eğitim kaybı (tahminler ve gerçek değerler arasındaki hata veya fark), negatif log olabilir (NLL). (PyTorch’daki NLL kaybı, log olasılıklarını bekler, bu nedenle, ham çıktıyı modelin son katmanından geçiririz.) PyTorch, tensörlerin yalnızca değerlerini değil, aynı zamanda her işlemi (çarpma, ekleme, etkinleştirme , vb.) değere katkıda bulunur. Bu, önceki herhangi bir tensöre göre ağdaki herhangi bir tensör için gradyanı hesaplayabileceğimiz anlamına gelir. Bunun pratikte anlamı, kaybın sadece hatayı değil, aynı zamanda modeldeki her ağırlık ve önyargı ile hataya olan katkısını da izlemesidir. Kaybı hesapladıktan sonra, geri yayılım olarak bilinen bir süreç olan her model parametresine göre kaybın gradyanlarını bulabiliriz. Gradyanları elde ettikten sonra, parametreleri optimize edici ile güncellemek için kullanırız.

Optimizer, genellikle öğrenme hızının elle ayarlanmasını gerektirmeyen verimli bir gradyan iniş çeşidi olan SGD’dir. Eğitim sırasında, optimize edici, parametreleri ayarlayarak model çıktısının hatasını denemek ve azaltmak (“optimize etmek”) için kaybın gradyanlarını kullanır. Yalnızca özel sınıflandırıcıya eklediğimiz parametreler optimize edilecektir.

Öğrenme Hızı (Learning Rate) ve Momentum Katsayısı (Momentum)

Derin öğrenmede parametrelerin güncellenmesi geriye yayılım (“backpropagation”) işlemi ile yapılmaktadır. Backpropagation işleminde bu güncelleme işi “chain rule” olarak adlandırılan geriye doğru türev alarak farkın bulunması ve bulunan fark değerinin “learning rate” parametresiyle çarpılması, çıkan sonucun ağırlık değerlerinden çıkarılarak yeni ağırlık değerinin hesaplanmasıyla yapılmaktadır. Bu işlem esnasında kullanılan “learning rate” parametresi sabit değer olarak belirlenebilir, ya da adım adım artan bir değer olarak da belirlenebilir (örneğin belli bir öğrenme adımına kadar 0.001 o adımdan sonra 0.01 gibi), momentum değerine bağlı olarak belirlenebilir ya da adaptif algoritmalar tarafından öğrenme esnasında öğrenilebilir.

Öğrenme hızı ve momentum ile ilgili bazı özellikler aşağıdaki gibidir;

  • Öğrenme hızı yüksek tutuyor olmam veriden çok etkileniyorum demektir.
  • Öğrenme hızı yüksek olması salınıma neden olacaktır. Buna karşı küçük olması da küçük adımlarla ilerleyeceğinden öğrenimin çok uzun sürmesine neden olacaktır.
  • Öğrenme hızı için en uygun çözüm başlangıçta öğrenme hızı yüksek tutmak, gittikçe azaltmaktır.
  • Öğrenme hızı başlangıçta çok küçük olması, lokal optimum değere takılarak, global optimum değere hiç ulaşılamamasına neden olabilir.
  • Öğrenme hızı değeri genelde varsayılan değer olarak 0.01 kullanılmakta belli bir epoch’dan sonra 0.001'e düşürülmektedir.
  • Scholastic gredient descent momentum ile kullanıldığında hızı artırmakta, salınımları azaltmaktadır.
  • Genelde kullanılan momentum beta katsayısı 0.9'dur. Uygun parametre aralığı ise 0.8 to 0.99'dur.

Eğitim Tur (Epoch) Sayısı

Model eğitilirken verilerin tamamı aynı anda eğitime katılmaz. Belli sayıda parçalar halinde eğitimde yer alırlar. İlk parça eğitilir, modelin başarımı test edilir, başarıma göre geriyeyayılım (“backpropagation”) ile ağırlıklar güncellenir. Daha sonra yeni eğitim kümesi ile model tekrar eğitilip ağırlıklar tekrar güncellenir. Bu işlem her bir eğitim adımında tekrarlanarak model için en uygun ağırlık değerleri hesaplanmaya çalışılır. Bu eğitim adımlarının her birine “epoch” denilmektedir. Derin öğrenmede problemi çözecek en uygun ağırlık değerleri adım adım hesaplandığı için ilk epoch’larda başarım düşük olacak, epoch sayısı arttıkça başarım da artacaktır. Bununla birlikte belli bir adımdan sonra modelimizin öğrenme durumu oldukça azalacaktır.

Model Geliştirme

Bu aşamada model = models.resnet34(pretrained=True) ile fine-tuning yapıyoruz. Ek olarak aşağıdaki gibi kullanım yapınca Feature Extraction yapmış oluyoruz.

ResNet34'te son katman, 1000 nöron içeren tam bağlantılı bir katmandır. İkili sınıflandırma yaptığımız için son katmanı iki nörona sahip olacak şekilde değiştireceğiz.

Model Eğitme

Yukarıdaki kod bloğumuz ile modelimizi eğitiyoruz.

Program Çıktıları

  • Fine-tuning step size = 7 , num_epochs = 25

En düşük loss : 0.1295 , En yüksek doğruluk: 0.9500

  • Fine-tuning step size = 5 , num_epochs = 26

En düşük loss : 0.1117 , En yüksek doğruluk: 0.9650

  • Feature-extraction step size = 7 , num_epochs = 25

En düşük loss : 0.1937 , En yüksek doğruluk: 0.9150

  • Feature-extraction step size = 5 , num_epochs = 26

En düşük loss : 0.2400 , En yüksek doğruluk: 0.9150

Kaynakça

--

--

Ramazan Akkoyun
Ramazan Akkoyun

Written by Ramazan Akkoyun

Solution Architect 💻 lives in Amsterdam 🇱🇺

No responses yet