Nedir?
Bu, en iyi şekilde çok açık ve basit bir örnekle açıklanabilir.
YZ'nin bir kitaptan (veri setinden) geçen ve bir sınava hazırlanan bir öğrenci olup olmadığını hayal edin. Burada yaptığım tek şey, önemli olduğunu düşündüğü her şeyi yazması için ona bir defter vermeyi denedim.
AI hakkında öğrenirken beni rahatsız eden bir soru, biri nöral netliğe hafıza veriyorsa ne olurdu? Olduğu gibi oldukça açık, doğru geliyor. Sadece bunu yaptım ve seninle, detaylı, nasıl yaptığımı, nasıl yaptığımı, nasıl çalıştığını ve hepsinin en önemli sorusu, işe yaramadım mı?
Çalışıyor mu?
Kısa cevapÂ: Â EVET
Stanford Dogs veri setinde temel olarak standart bir ResNet50 eğitmeye karar verdim ve ardından aynı mimariye biraz bellek ekledim ve tam olarak ResNet50 ile aynı şekilde eğittim.
Standart ResNet50 bu şekilde performans gösterdi, ulaşılan en yüksek model test verilerinde% 15.14 doğruluktu. Doğrulama doğruluğu 7Â çağda artmadığı için eğitim 40. çağda durduruldu.
Aynı AiM ResNet50'nin performansı da budur (AiM, Memory for Artificial Intelligence'dan gelir). Sadece 50. çağa kadar çalışmasına izin verdim. Elliinci çağında, test verilerinde% 20.06 doğruluk elde etti ve hala daha ileri gitme potansiyeline sahipti.
Bu sadece bir tahmin, ancak AiM ResNet50'nin doğrulama doğruluğunun nasıl bu kadar dalgalanmadığına ve sürekli olarak arttığına bakarsak, sadece daha fazlasını öğrenebilecek gibi görünmüyor, aynı zamanda bu kadar çok hata yapmıyor. veri setinden bir şeyler öğrenirken.
Resnet50'nin yaklaşık 23,8 milyon parametreye sahiptir.
Yaklaşık 50.000 kayan bellek boyutuna sahip (yukarıdaki deneyde kullanılan) bir aim-ResNet50, yaklaşık 24.1 milyon parametreye sahiptir.
Nasıl çalışır?
AiM yaparken amacım neydi?
Bunu uygulama şeklim, bir “bellek” katmanına sahip olmaya ve bu katmanı, modeldeki her katman için önceki katmanın çıktısı ile birlikte bir sonraki katmana geçirmeye karar vermekti. Ayrıca, ikinci koşulun karşılanması için “bellek katmanı” için güncelleme blokları yaptım. Bu katmanın ağırlıkları ve önyargısı bana onu aktarmam için bir yol verdi.
Nasıl yaptım?
CNN'ler için hafızam için bir conv2D katmanı kullandım. Doğrusal bir aktivasyonla bu katmana girdi olarak 1'lerin bir dizisini geçirerek, ileriye aktarılan değerler sadece ağırlıklar ve önyargılar olacaktır. Dolayısıyla, bir hafıza katmanı olarak işlev görebilir.
Bu bellek katmanı, mimarideki en küçük evrişimli katmanla aynı sayıda satır ve sütuna sahipse, yeniden şekillendirilebilir ve Giriş katmanına birleştirilebilir ve ayrıca diğer katmanlardan herhangi bir sorun olmadan çıktılar alınabilir.
Diğer evrişimli katmanların n_rows * n_columns, bellek katmanının toplam belleğini (n_rows * n_columns * kanal sayısı) aştığında, bellek yeniden şekillendirilebilir ve bir kanala sıfırlarla doldurulabilir ve daha sonra, katmanın olduğu girdiye birleştirilebilir. zaten alıyor.
Ve aynı şekilde yeniden şekillendirerek ve doldurarak, bu bellek katmanı neredeyse tüm girdilere birleştirilebilir.
Bu bellek katmanını diğer bazı veriler / özelliklerle birlikte evrişimli bir bloktan geçirmek bellek katmanını güncelleyebilir.
Tamamen bağlı sinir ağları için bunu yapmak daha da kolaydır, çünkü bir bellek katmanı için sadece yoğun bir katman kullanırız. Yine, girdi olarak bir 1'ler dizisini geçirip doğrusal aktivasyonu kullanarak, ağırlık + önyargıyı bir bellek birimi olarak kullanabiliriz. Bu bellek katmanı daha sonra bellekli bir sinir ağı elde etmek için her katmanın girdisi ile birleştirilebilir.
Ne kadar çok yönlü?
Uygulandığı yönteme sadece bir kez bakıldığında, belleğin çoğu CNN'ye ve Tamamen Bağlı Sinir Ağı mimarisine minimum değişiklikle eklenebileceği sonucuna varmak kolaydır. ResNet50 ve VGG16'ya bellek eklemeyi test ettim ve eğer performanslarını iyileştirirse, bunun aslında neredeyse her bir derin sinir ağı mimarisini iyileştirme olasılığı çok yüksek.
Sonuç
Bu görünüşte basit ama etkili fikir için büyük umutlarım var. Bu deney kaba ve pek çok iyileştirme alanı olsa da, bu yazıyla dikkatinizi bu kavram kanıtına çekmek istedim.
Derin öğrenme topluluğunun nasıl bu kadar destekleyici ve yardımsever olduğunu seviyorum. Çok fazla makale ve kod ve yararlı blog mesajları ve defterler burada ücretsiz, geri vermenin en iyi yolunu düşündüm, bunu halka açık olacak.
İşim hakkındaki fikirlerinizi duymak isterim ve derin öğrenme topluluğunun bu fikri daha nasıl geliştirdiğini görmek için sabırsızlanıyorum.
Benim hakkımda daha fazla bilgi edinmek ve benimle iletişime geçmek için
Atılım: Tüm Sinir Ağlarına Hafıza Vermek Devrimci Olabilir mi? başlangıçta Towards AI on Medium'da yayınlandı, burada insanlar bu hikayeyi vurgulayarak ve yanıtlayarak sohbete devam ediyor.
AI'ya Doğru aracılığıyla yayınlandı
Kaynak: TowardsAI