Sinir ağını adım adım eğitmek mümkün müdür?


23

Çıktı sınıflarının en baştan tanımlanmadığı bir sinir ağı eğitmek istiyorum. Daha sonra gelen verilere göre daha fazla sınıf tanıtılacaktır. Bu, her yeni bir sınıfa girdiğimde, NN'yi yeniden eğitmem gerekeceği anlamına geliyor.

Bir NN'yi, önceki eğitim aşamalarında önceden edinilmiş bilgileri unutmadan, artımlı olarak nasıl eğitebilirim?

Yanıtlar:


10

Zaten söylenene, sorunuzun transfer öğrenmesi adı verilen makine öğrenmesinde önemli bir görüşe değindiğini söylemek isterim . Uygulamada, çok az sayıda insan bütün bir evrişimsel ağı sıfırdan eğitir (rastgele başlatma ile), çünkü yeterli büyüklükte bir veri kümesine sahip olmak zaman alıcı ve nispeten nadirdir.

Modern ConvNets, ImageNet'teki birden fazla GPU'da eğitim almak için 2-3 hafta sürüyor. Bu yüzden, insanların ince ayar yapmak için ağları kullanabilecek diğerlerinin yararına son ConvNet kontrol noktalarını bıraktıklarını görmek yaygındır. Örneğin, Caffe kütüphanesinde insanların ağ ağırlıklarını paylaştığı bir Model Hayvanat Bahçesi vardır .

Görüntü tanıma için bir ConvNet'e ihtiyacınız olduğunda, uygulama etki alanınız ne olursa olsun, mevcut bir ağ almayı düşünmelisiniz, örneğin VGGNet ortak bir seçimdir.

Transfer öğrenimi yaparken akılda tutulması gereken birkaç şey vardır :

  • Önceden belirlenmiş modellerin kısıtlamaları. Önceden belirlenmiş bir ağ kullanmak istiyorsanız, yeni veri kümeniz için kullanabileceğiniz mimari açısından biraz kısıtlı olabileceğinizi unutmayın. Örneğin, önceden belirlenmiş ağdaki Conv katmanlarını keyfi bir şekilde çıkaramazsınız. Bununla birlikte, bazı değişiklikler açıktır: parametre paylaşımı nedeniyle, farklı uzamsal boyutlardaki görüntüler üzerinde önceden tanımlanmış bir ağı kolayca çalıştırabilirsiniz. Bu, Conv / Pool katmanları için açıkça bellidir, çünkü ileri işlevleri giriş hacminin uzamsal boyutundan bağımsızdır (basamaklar “uygun” olduğu sürece).

  • Öğrenme oranları Yeni veri kümenizin sınıf puanlarını hesaplayan yeni lineer sınıflandırıcı için (rastgele başlatılan) ağırlıklara kıyasla, daha iyi ayarlanmış olan ConvNet ağırlıkları için daha küçük bir öğrenme oranı kullanmak yaygındır. Bunun nedeni, ConvNet ağırlıklarının nispeten iyi olmasını beklememizdir, bu yüzden onları çok hızlı ve çok fazla çarpıtmak istemiyoruz (özellikle üstlerindeki yeni Doğrusal Sınıflandırıcı rastgele başlatılmadan önce eğitim alırken).

Bu konuyla ilgileniyorsanız ek referans: Derin sinir ağlarındaki özellikler ne kadar aktarılabilir?


Öğrenmeyi aktarma, artımlı öğrenmeyi gerçekleştirmenin tek yolu değildir.
nbro

7

İşte bunu yapabilmenin bir yolu.

Ağınızı çalıştırdıktan sonra, ağırlıklarını diske kaydedebilirsiniz. Bu, yeni veriler mevcut olduğunda bu ağırlıkları yüklemenizi ve son antrenmanınızın bıraktığı yerden çok fazla antrenmana devam etmenizi sağlar. Ancak, bu yeni veriler ek sınıflarla birlikte gelebileceğinden, şimdi ağda önceden kaydedilmiş ağırlıkları kullanarak ön eğitim yapıyorsunuz veya ince ayar yapıyorsunuz . Yapmanız gereken tek şey, bu noktada, son katman (ları) şimdi yeni veri kümenizin gelmesiyle tanıtılan yeni sınıflara uyarlamak, en önemlisi ek sınıfları (örneğin, son katmanınız varsa) barındırmaktır. başlangıçta 10 ders vardı ve şimdi 2 tane daha ders buldunuz, eğitim öncesi / ince ayarın bir parçası olarak, onu 12 dersle değiştirdiniz). Kısacası, bu çevreyi tekrarlayın:

Tekrar et


yeni sınıfları yalnızca son katmana yerleştirirseniz (eğitim sınıfları + yeni sınıflar) model uygun olamaz çünkü yeni sınıflarla (sadece) eğitim almak istiyoruz ve model, (eğitim + yeni sınıflar,).
Joel Carneiro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.