Transfer öğrenmeyi anlamak için bir makale: derin öğrenme elde etmek için eğitim öncesi modeller nasıl kullanılır?

Han Chen, Analytics Vidhya'dan derlendi

Qubit Üretildi | Genel Hesap QbitAI

Giriş

Geleneksel denetimli makine öğrenimi algoritmalarıyla karşılaştırıldığında, derin sinir ağlarının en büyük dezavantajı nedir?

pahalı.

Özellikle gerçek hayatta görüntü tanıma ve ses tanıma gibi pratik problemlerle uğraşmaya çalışırken. Modeliniz bazı gizli katmanlar içerdiğinde, daha fazla gizli katman eklemek büyük bilgi işlem kaynaklarına mal olacaktır.

Neyse ki, başkaları tarafından eğitilen modeller temelinde küçük değişiklikler yapmamızı ve bunları kullanıma sokmamızı sağlayan "transfer öğrenme" adı verilen bir yöntem var. Bu yazıda, problem çözme sürecini hızlandırmak için önceden eğitilmiş modellerin nasıl kullanılacağını anlatacağım.

Not: Bu makale, okuyucuların sinir ağları ve derin öğrenme konusunda belirli bir anlayışa sahip olduğunu varsaymaktadır. Derin öğrenmeyi anlamıyorsanız, önce derin öğrenmenin temel kavramlarını anlamanızı şiddetle tavsiye ederim:

Derin öğrenmede yeni başlayanlar için mutlaka görülmesi gereken: Bilmeniz gereken 25 kavram

içindekiler

1. Transfer öğrenimi nedir?

2. Önceden eğitilmiş model nedir?

3. Neden önceden eğitilmiş modeller kullanıyoruz? -Hayat örneklerini birleştirin

4. Önceden eğitilmiş modeli nasıl kullanabiliriz?

Özellikleri ayıkla

Modeli ince ayarlayın

5. Modeli optimize etmenin yolları

6. Rakam tanımada önceden eğitilmiş modelleri kullanın

Yalnızca çıktı yoğun katmanı için yeniden eğitim

Ağın ilk katmanlarının ağırlık faktörlerini dondurun

1. Transfer öğrenimi nedir?

Transfer öğrenmenin sezgisel bir anlayışına sahip olmak için, öğretmenler ve öğrenciler arasındaki ilişkiyi bir benzetme olarak da alabiliriz.

Bir öğretmen genellikle öğrettiği alanda uzun yıllara dayanan zengin deneyime sahiptir.Bu birikimler temelinde, öğretmen öğrencilere alandaki en özlü ve öz içeriği öğretebilir. Bu süreç, gaziler ve acemiler arasında bir "bilgi aktarımı" olarak görülebilir.

Bu süreç aynı zamanda sinir ağlarında da geçerlidir.

Sinir ağlarının verilerle eğitilmesi gerektiğini biliyoruz, verilerden bilgi alır ve ardından bunları karşılık gelen ağırlıklara dönüştürür. Bu ağırlıklar çıkarılabilir ve diğer sinir ağlarına aktarılabilir Bu öğrenilmiş özellikleri "aktardığımız" için, sıfırdan bir sinir ağını eğitmemize gerek yok.

Şimdi, bu aktarım öğrenmenin önemini kendi evrimimiz açısından tartışalım. Bu, Tim Urban'ın waitbutwhy.com'daki son makalesinde değindiği noktadır.

Tim, dilin icadından önce, her insan neslinin kendi başına birçok bilgiyi yeniden edinmesi gerektiğini, bu nedenle bilginin önceki nesilden diğerine yavaş yavaş büyüdüğünü söyledi.

Daha sonra, nesiller arasında bilgi aktarımı için bir taşıyıcı sağlayan dili icat ettik Aşağıdaki şekil, dilin icadından sonra aynı zaman ölçeği altında bilgi büyüme oranının şematik bir diyagramıdır.

Harika görünmüyor mu? Aktarım öğrenimi gerçekleştirmek için ağırlık aktarımı ve kuşak geçişinde insanların dil yoluyla bilgiyi yayması bir gerçektir.

2. Önceden eğitilmiş model nedir?

Basitçe söylemek gerekirse, önceden eğitilmiş model, benzer sorunları çözmek için öncekiler tarafından oluşturulmuş bir modeldir. Bir problemi çözdüğünüzde sıfırdan yeni bir model eğitmek zorunda değilsiniz, benzer problemlerde eğitilmiş bir modelle başlayabilirsiniz.

Örneğin, kendi kendine giden bir araba yapmak istiyorsanız, sıfırdan mükemmel performansa sahip bir görüntü tanıma algoritması oluşturmak için birkaç yıl harcayabilir veya Google'dan ImageNet veri kümesinde eğitilmiş başlangıç modelini (önceden eğitilmiş bir model) alabilirsiniz. Başlamak için, görüntüyü tanımak.

Önceden eğitilmiş bir model uygulamanız için% 100 doğru olmayabilir, ancak size çok fazla çaba harcamadan tasarruf sağlayabilir.

Daha sonra açıklamak için bir örnek vereceğim.

3. Neden önceden eğitilmiş modeller kullanıyoruz?

Geçen hafta Crowdanalytix platformundaki bir sorunu çözmeye çalışıyordum: sahneleri cep telefonu resimlerinden ayırmak.

Bu bir görüntü sınıflandırma problemidir Eğitim veri setinde 4591 resim ve test setinde 1.200 resim bulunmaktadır. Görevimiz resimleri buna göre 16 kategoriye ayırmaktır. Resmin bir miktar ön işlemesinden sonra, önce basit bir MLP (Multi-later Perceptron) modelini benimsedim, yapı aşağıdaki şekilde gösterildiği gibidir:

Giriş görüntüsünü (224 * 224 * 3) düzleştirdikten sonra, yukarıdaki yapıyı basitleştirmek için her biri 500 nöron içeren üç gizli katman kullandım. Çıktı katmanında 16 kategoriye karşılık gelen 16 nöron vardır.

Eğitimin doğruluğunu yalnızca% 6,8 oranında kontrol edebiliyorum, bu çok yetersiz bir sonuç. Gizli katmanı, gizli katmandaki nöron sayısını ve bırakma oranını ayarlamaya çalıştım, ancak doğruluk pek gelişmedi. Ancak içerisindeki gizli katman ve nöron sayısı artarsa, her döngünün çalışma süresi 20 saniyeden fazla artacaktır. (Geliştirme ortamım 12GB VRAM, Titan X GPU)

Aşağıdakiler, yukarıdaki yapının MLP modelini kullandım eğitimin sonucudur.

Eğitim süresi katlanarak artırılmadıkça MLP modelinin bana daha iyi sonuçlar sağlayamayacağı görülüyor. Bu nedenle, bu veri setindeki performanslarını ve eğitimin doğruluğunu iyileştirip iyileştiremeyeceğini görmek için CNN'e (Convolutional Neural Network) döndüm.

CNN'in yapısı aşağıdaki gibidir:

Her biri aşağıdaki bölümlerden oluşan 3 evrişimli modül kullandım:

  • 325 * 5 filtre

  • Aktivasyon fonksiyonu olarak doğrusal düzeltme fonksiyonu (ReLU)

  • 4 * 4 maksimum havuz katmanı

Son evrişim modülünün çıktısı düzleştirilir ve 64 nöronlu gizli bir katmana geçirilir ve ardından bir bırakma oranı = 0.5 işlemle çıktı katmanına geçirilir.

Final eğitiminin sonuçları şu şekilde kaydedilir:

Doğruluk oranı% 15,75'tir MLP modeli ile karşılaştırıldığında her döngünün çalışma süresi de artmıştır.

Ve daha da önemlisi, veri setindeki en büyük kategoride yer alan görsellerin sayısı toplamın yaklaşık% 17,6'sını oluşturmaktadır.

Tüm resimler en büyük kategoride sınıflandırıldığı sürece MLP ve CNN ( ,) tarafından eğitilmiş modellerden daha iyi sonuçlar alabiliriz.

Ek olarak, daha fazla evrişim modülü eklemek de eğitim süresini büyük ölçüde artıracaktır.

Bu yüzden, önceden eğitilmiş bir modele geçtim, böylece tüm yapımı yeniden eğitmeme gerek kalmadı, sadece birkaç katman için eğitmem gerekiyor.

Bu nedenle, Keras kütüphanesinde bulunan ImageNet veri setinde önceden eğitilmiş VGG16 modelini kullandım.

Modelin yapısı aşağıdaki gibidir:

VGG16 yapısına dayanarak, problemimizin senaryosuna uyum sağlamak için softmax katmanının yalnızca 1000 çıktısını 16 olarak değiştirdim ve ardından yoğun katmanı yeniden eğittim.

MLP ve CNN ile karşılaştırıldığında bu yapının doğruluğu% 70'e ulaşabilir. Aynı zamanda, VGG16 kullanmanın en büyük avantajı eğitim süresini büyük ölçüde azaltmasıdır.Sadece yoğun katman için eğitilmesi gerekir ve gereken süre temelde göz ardı edilebilir.

4. Önceden eğitilmiş model nasıl kullanılır?

Ağı eğitirken amacımız nedir? Ağın çoklu ileri ve geri yinelemeler sırasında uygun ağırlıkları bulabileceğini umuyoruz.

Daha önce büyük veri kümeleri üzerinde eğitilmiş önceden eğitilmiş modelleri kullanarak, karşılaştığımız sorunlara bunları uygulamak için doğrudan ilgili yapıları ve ağırlıkları kullanabiliriz. Buna "transfer öğrenimi" denir, bu da önceden eğitilmiş modelin ilgilendiğimiz spesifik soruna "aktarıldığı" anlamına gelir.

Eğitim öncesi model seçerken çok dikkatli olmalısınız.Sorununuz eğitim öncesi model eğitim senaryosundan çok farklı ise modelin elde ettiği tahmin sonuçları çok yanlış olacaktır.

Örneğin, başlangıçta konuşma tanıma için kullanılan bir model kullanıcı tanıma için kullanılıyorsa, sonuç kesinlikle ideal değildir.

Neyse ki, Keras kütüphanesinde bu tür önceden eğitilmiş birçok yapı var.

ImageNet veri kümesi, evrensel modellerin eğitilmesine yardımcı olacak kadar büyük olduğundan (1,2 milyon görüntü dahil) bir eğitim seti olarak yaygın bir şekilde kullanılmaktadır. ImageNet'in eğitim hedefi, tüm görüntüleri 1000 sınıflandırma öğesi olarak doğru şekilde sınıflandırmaktır. Bu 1000 kategori, temel olarak kedi ve köpek türleri, çeşitli ev eşyaları, günlük işe gidip gelme araçları vb. Gibi günlük yaşamlarımızdan türetilmiştir.

Transfer öğrenmede, bu önceden eğitilmiş ağlar, ImageNet veri kümesinin dışındaki görüntüler için de iyi genelleme performansı gösterir.

Ön eğitim modeli iyi eğitildiğinden, çok fazla ağırlığı kısa bir süre içinde değiştirmeyeceğiz.Göç öğrenmede kullanıldığında, genellikle ince ayar yapılır.

Modeli değiştirme sürecinde, genel eğitim modelinden daha düşük bir öğrenme oranı benimseyeceğiz.

5. Modele ince ayar nasıl yapılır

Özellik çıkarma

Önceden eğitilmiş modeli bir özellik çıkarma cihazı olarak kullanabiliriz. Spesifik yöntem, çıktı katmanını kaldırmak ve ardından kalan tüm ağı yeni veri kümesine uygulamak için sabit bir özellik çıkarma makinesi olarak kullanmaktır.

Önceden eğitilmiş modele sahip yapı

Ayrıca ön eğitim modelinin yapısını da kullanabiliriz, ancak önce tüm ağırlıkları rastgele hale getirip ardından kendi veri setimize göre egzersiz yapabiliriz.

Belirli katmanları eğitin, diğer katmanları dondurun

Önceden eğitilmiş bir modeli kullanmanın başka bir yolu, onu kısmen eğitmektir. Spesifik yöntem, modelin bazı ilk katmanlarının ağırlıklarını değiştirmeden tutmak ve yeni ağırlıklar elde etmek için sonraki katmanları yeniden eğitmektir. Bu süreçte, donmuş katmanlar arasındaki en iyi eşleşmeyi bulmaya ve sonuçlara göre katmanları yeniden eğitmeye birçok kez deneyebiliriz.

Modelin nasıl kullanılacağı ve eğitileceği, veri kümesinin boyutuna ve eski ve yeni veri kümeleri arasındaki verilerin benzerliğine (önceden eğitilmiş veri kümesi ve çözmek istediğimiz veri kümesi) göre belirlenir.

Aşağıdaki grafik, önceden eğitilmiş modelin çeşitli durumlarda nasıl kullanılacağını gösterir:

Senaryo 1: Veri seti küçük ve veri benzerliği yüksek (önceden eğitilmiş modelin eğitim verileriyle karşılaştırıldığında)

Bu durumda, veriler önceden eğitilmiş modelin eğitim verilerine çok benzediğinden, modeli yeniden eğitmemize gerek yoktur. Sadece çıktı katmanını problem durumuna uygun bir yapıya dönüştürmemiz gerekiyor.

Ön işleme modelini desen çıkarıcı olarak kullanıyoruz.

Örneğin, yeni bir fotoğraf setinde yavru kedileri ve yavruları tanımak için ImageNet üzerinde eğitilmiş bir model kullanıyoruz. Burada, tanınması gereken resim ImageNet kitaplığındaki resme benzer, ancak çıktı kedi veya köpeğimizde yalnızca iki öğeye ihtiyacımız var.

Bu örnekte tek yapmamız gereken, yoğun katmanın çıktısını ve son softmax katmanını 1000 kategoriden 2 kategoriye değiştirmektir.

Senaryo 2: Veri kümesi küçük ve veri benzerliği yüksek değil

Bu durumda, ön eğitim modelinde ilk k katmandaki ağırlıkları dondurabilir ve ardından sonraki n-k katmanlarını yeniden eğitebiliriz.Elbette, son katmanın da ilgili çıktı formatına göre değiştirilmesi gerekir.

Verilerin benzerliği yüksek olmadığı için yeniden eğitim süreci çok kritik hale geliyor. Yeni veri seti boyutunun olmaması, eğitim öncesi modelin ilk k katmanının dondurulmasıyla telafi edilir.

Senaryo 3: Büyük veri kümesi, düşük veri benzerliği

Bu durumda büyük bir veri setine sahip olduğumuz için sinir ağının eğitim süreci daha verimli olacaktır. Ancak, önceden eğitilmiş modelin gerçek verileriyle eğitim verileri arasında büyük bir fark olduğu için önceden eğitilmiş modeli kullanmak verimli bir yol olmayacaktır.

Bu nedenle, en iyi yöntem, ön işleme modelindeki tüm ağırlıkları başlatmak ve yeni veri seti temelinde eğitime baştan başlamaktır.

Senaryo 4: Büyük veri kümesi, yüksek veri benzerliği

Bu ideal durumdur ve önceden eğitilmiş modellerin kullanımı çok verimli hale gelecektir. Bunu kullanmanın en iyi yolu, modelin orijinal yapısını ve başlangıç ağırlığını değiştirmeden korumak ve ardından yeni veri seti üzerinde yeniden çalışmaktır.

6. El yazısı rakam tanımada önceden eğitilmiş modelleri kullanın

Şimdi basit bir problemi önceden eğitilmiş modelle çözmeye çalışalım.

Vgg16'yı önceden eğitilmiş bir model yapısı olarak kullandım ve el yazısı rakam tanımaya uyguladım.

Önce bu sorunun önceki dört senaryodan hangisine karşılık geldiğine bakalım. Eğitim setimiz (MNIST) el yazısıyla yazılmış yaklaşık 60.000 resimden oluşuyor.Böyle bir veri seti açıkça küçük. Yani bu soru birinci veya ikinci senaryoya ait olmalıdır.

Nihai etkiyi görmek için karşılık gelen iki yöntemi kullanmayı deneyebiliriz.

Yalnızca çıktı katmanını ve yoğun katmanı yeniden eğitin

Burada özellik çıkarıcı olarak vgg16 kullanıyoruz. Bu özellikler daha sonra veri setimiz üzerinde eğitilen yoğun katmana aktarılacaktır. Çıktı katmanı da bizim problemimize karşılık gelen softmax katman işlevi ile değiştirilir.

Vgg16'da çıktı katmanı 1000 kategori içeren bir softmax katmanıdır. Bu katmanı kaldırdık ve onu sadece 10 kategori içeren bir softmax katmanı ile değiştirdik. Sadece bu katmanları eğitiyoruz ve sonra sayıları tanımaya çalışıyoruz.

# gerekli kütüphaneleri keras.models'ten içe aktarma Sıralı içe aktarma scipy.misc'den içe aktarma imread

Ağın ilk birkaç katmanının ağırlıklarını dondurun

Burada vgg16 ağının ilk 8 katmanını donduracağız ve ardından aşağıdaki ağı yeniden eğiteceğiz. Bu, ağın ilk birkaç katmanının sorunumuzla ilgili olan eğrilerin ve kenarların ortak özelliklerini yakalaması nedeniyle yapılır. Bu ağırlıkların değişmeden kalmasını sağlamak istiyoruz, böylece ağ, sonraki ağı ayarlamak için öğrenme sürecinde bu veri setinin bazı benzersiz özelliklerine odaklanacaktır.

keras.models'den Sequentialfrom scipy.misc'den import imread

alakalı kaynaklar

orijinal:

https://www.analyticsvidhya.com/blog/2017/06/transfer-learning-the-art-of-fine-tuning-a-pre-trained-model/

VGG-16:

https://gist.github.com/baraldilorenzo/07d7802847aaad0a35d3

Keras kitaplığında ImageNet önceden eğitilmiş model:

https://keras.io/applications/

El yazısı rakam veri seti MNIST:

Bitiş

Bir uyarı

Qubit'ler, otonom sürüşle ilgili alanlarda çalışan öğrenciler veya ön saflardaki mühendisler için otonom bir sürüş teknolojisi grubu oluşturuyor. Li Kaifu, Wang Yonggang, Wang Naiyan, Wang Tao Grupta büyük sığırları bekliyorlar. Herkese qubit WeChat (qbitbot) eklemeye hoş geldiniz, ha'ya katılmak için başvurmak için "otomatik sürüş" diyor ~

İşe Alım

Qubit, editörleri, muhabirleri, operasyonları, ürünleri ve diğer pozisyonları işe alıyor ve çalışma yeri Pekin, Zhongguancun'da bulunuyor. İlgili ayrıntılar için lütfen şu yanıtı verin: resmi hesabın diyalog arayüzünde "İşe Alım".

Birlikte 3.15 Kalite için savaş
önceki
Neden kalın kaş bırakmak zorundasın? Bu kariyerdeki 5 büyük karşılaşmaya baktığımda, sarayı kalmaktansa zorlamayı tercih etmeme şaşmamalı!
Sonraki
Yeni sahibi gitti mi? Douyu, DNF sunucusu Xu Xubao ile anlaşmayı ima etti, netizenler: maaş artışı
Çıkar onu! Çıkar onu! Çıkar onu! Cenevre Otomobil Fuarı'nda öne çıkmak üzere olan iki beyin
Chengdu İlk Ring Mozi Köprüsü Tüneli Projesi ana inşaat aşamasına girdi
Python'da büyük metinlerden konular nasıl çıkarılır?
70 yaşındaki Lippi savaşı yönetmek için puro içti, 72 yaşındaki Hiddink Olimpiyat Oyunlarına karşı oynadı, bir veri daha da çarpıcı
Rockets, sezon başında beş hedefine kaç kişi ulaştı? İkisi işe yaramaz olmaya kararlı ve diğer üçü de çok asılıyor!
China Fire Fighting PlayerUnknown's Battlegrounds: Orange Battlefield! Oyuncu: Ateş oyununa katılmak için tavuk yemek mi?
BYD'nin yeni arabası listelendi, arka arkaya üç ok ana akıma geri dönmeyi umuyor
Lippi taktikleri düşünmek için puro içiyor Zheng Zhi yokken orta saha oyuncusunu nasıl kontrol ediyor? Wu Xi'nin sözleri hayranlara bir dip veriyor
Resmi duyuru! Beş takım acele ediyordu, Thunder başka bir güçlü destek kazandı, Westbrook George harekete geçirildi ve eksiklikler telafi edildi!
Fotoğraflar: Guang'an, Wusheng'deki "Olimpik" BMX üssünü aydınlatıyor
"Resmi" tarz muhteşem bir şekilde döndü, yeni nesil Audi A6 daha genç
To Top