Derin bir NN'nin temel konseptinin 2012'den bu yana değişmediği konusunda haklısınız. Ancak, derin NN'lerin niteliksel olarak daha güçlü hale getirilmesinde eğitim alma yollarında çeşitli iyileştirmeler yapıldı. Bugün de çok çeşitli mimariler bulunmaktadır. 2012'den bu yana, eğitim iyileştirmeleri ve mimari iyileştirmelerle gruplandırılmış bazı gelişmeleri listeledim:
Donanım : En bariz değişiklik Moore yasasının acımasız ilerlemesidir. Bugün daha fazla bilgi işlem gücü var. Bulut bilişim ayrıca insanların büyük bir teçhizat satın almadan büyük NN'leri eğitmelerini kolaylaştırır.
Yazılım : Derin öğrenme için açık kaynaklı yazılım 2012'den itibaren gerçekten çok geliştirildi. 2012 yılında Theano, belki Caffe de vardı. Eminim başkaları da vardır. Ancak bugün, hepsi büyük teknoloji şirketleri tarafından desteklenen TensorFlow, Torch, Paddle ve CNTK var. Bu, donanım mermi noktasıyla yakından ilgilidir, çünkü bu platformların çoğu GPU'larda eğitim almayı kolaylaştırır ve bu da eğitim süresini önemli ölçüde hızlandırır.
Aktivasyon fonksiyonları : ReLU aktivasyon fonksiyonlarının kullanımı bu günlerde muhtemelen daha yaygındır, bu da eğitimi çok derin ağları kolaylaştırır. Araştırma tarafında, sızan ReLU , parametrik ReLU ve maxout birimleri dahil olmak üzere daha çeşitli aktivasyon fonksiyonları incelenmektedir .
Optimizasyon algoritmaları : Bugün daha fazla optimizasyon algoritması var. Adagrad ve Adadelta sırasıyla 2011 ve 2012'de tanıtıldı. Ama şimdi de Adam optimizer'ımız var ve çok popüler bir seçim haline geldi.
Bırakma : Son birkaç yıl içinde, bırakma sinir ağlarını eğitirken standartlaştırma için standart bir araç haline gelmiştir. Bırakma, NN'ler için hesaplamalı olarak ucuz bir toplanma şeklidir. Genel olarak, veri kümesinin rastgele örnekleri üzerinde eğitilmiş bir dizi model, tüm veri kümesi üzerinde eğitilmiş tek bir modelden daha iyi performans gösterecektir. NN'ler için bunu açıkça yapmak zordur çünkü eğitilmesi çok pahalıdır. Ancak benzer bir etki, her bir adımda nöronları rastgele "kapatarak" tahmin edilebilir. NN'deki farklı altgraflar, farklı veri kümeleri üzerinde eğitim alır ve böylece farklı şeyler öğrenir. Toplanma gibi, bu genel NN'yi aşırı takmaya karşı daha sağlam hale getirme eğilimindedir. Bırakma neredeyse her durumda performansı artıran basit bir tekniktir, bu yüzden '
Toplu normalleştirme : NN'lerin normalize edilen veriler üzerinde en iyi şekilde eğittikleri bir süredir bilinmektedir - yani sıfır ortalama ve birim varyansı vardır. Çok derin bir ağda, veriler her katmandan geçerken, girdiler dönüştürülecek ve genellikle bu güzel, normalleştirilmiş özelliğe sahip olmayan bir dağılıma sürüklenecektir. Bu, bu daha derin katmanlarda öğrenmeyi daha zor hale getirir, çünkü bakış açısından, girdilerinin sıfır ortalaması ve birim varyansı yoktur. Ortalama çok büyük olabilir ve varyans çok küçük olabilir. Yığın normalizasyonu , sıfır ortalama ve birim varyansına sahip girişleri bir katmana dönüştürerek bunu giderir. Bu çok derin NN'lerin eğitiminde son derece etkili görünmektedir.
Teori : Yakın zamana kadar, derin NN'lerin eğitilmesinin zor olmasının, optimizasyon algoritmalarının yerel minima'da sıkışıp kalması ve küresel minima'yı bulmakta zorluk çektiği düşünülüyordu. Son dört yılda, bu sezginin yanlış olduğunu gösteren bir dizi çalışma yapılmıştır (ör . Goodfellow ve ark. 2014). Derin bir NN'nin çok yüksek boyutlu parametre alanında, yerel minima küresel minimadan çok daha kötü olma eğilimindedir. Sorun şu ki, eğitim sırasında NN kendisini uzun, geniş bir platoda bulabilir. Ayrıca, bu platolar dik bir uçurumda aniden sonlanabilir. NN küçük adımlar atarsa, öğrenmesi çok uzun zaman alır. Ancak adımlar çok büyükse, uçurumun içine girdiğinde büyük bir gradyanla karşılaşır ve bu da önceki tüm işleri geri alır. (Bu, 2012 sonrası bir başka yenilik olan degrade kırpma ile önlenebilir.)
Artık ağlar : Araştırmacılar inanılmaz derin ağları eğitmek mümkün olmuştur kullanarak (daha 1000 katmanlar daha!) Artık ağlar . Buradaki fikir, her katmanın yalnızca önceki katmanın çıktısını değil, aynı zamanda orijinal girdiyi de almasıdır. Düzgün eğitilirse, bu her katmanı önceki katmanlardan farklı bir şey öğrenmeye teşvik eder, böylece her ek katman bilgi ekler.
Geniş ve derin ağlar : Geniş, sığ ağlar, girdileri ve çıktıları arasındaki eşlemeyi basitçe ezberleme eğilimindedir. Derin ağlar daha iyi genelleme yapar. Genellikle iyi bir genelleme istersiniz, ancak genelleme olmadan basit ezberlemenin de önemli olduğu tavsiye sistemleri gibi bazı durumlar vardır. Bu durumlarda, bir kullanıcı genel bir sorgu yaptığında iyi, sağlam çözümler sağlamak, ancak kullanıcı çok özel bir sorgu yaptığında çok kesin çözümler sunmak istersiniz. Geniş ve derin ağlar bu görevi güzel bir şekilde yerine getirebilir.
Sinirsel turing makinesi : Geleneksel tekrarlayan NN'lerin eksikliği (standart RNN veya LSTM gibi daha sofistike bir şey olmaları) belleklerinin bir şekilde "sezgisel" olmasıdır. Ürettikleri gizli katman aktivasyonlarını geleceğe kaydederek geçmiş girdileri hatırlamayı başardılar. Ancak, bazen bazı verileri açıkça saklamak daha mantıklıdır. (Bu, bir kağıda bir telefon numarası yazmak ile sayının yaklaşık 7 basamaklı olduğunu ve orada birkaç tane 3s ve ortada bir yerde bir tire olduğunu hatırlamak arasındaki fark olabilir.) Nöral Turing makinesibu sorunu çözmeye çalışmanın bir yoludur. Buradaki fikir, ağın belirli gerçekleri bir bellek bankasına aktarmayı öğrenebilmesidir. Bunu yapmak kolay değildir, çünkü backprop algoritmaları farklılaştırılabilir işlevler gerektirir, ancak bir bellek adresine bir veri vermek doğal olarak ayrı bir işlemdir. Sonuç olarak, nöral Turing makineleri, farklı bellek adreslerinin dağıtımına biraz veri göndererek bu sorunu çözer. Bu mimariler henüz çok iyi çalışmıyor gibi görünüyor, ancak fikir çok önemli. Bunların bazı varyantları gelecekte muhtemelen yaygınlaşacaktır.
Üretken çekişmeli ağlar : GAN'lar zaten çok fazla pratik kullanım görüyor gibi görünen çok heyecan verici bir fikir. Buradaki fikir, iki NN'yi aynı anda eğitmektir: biri temel olasılık dağılımından (bir jeneratör) örnekler üretmeye çalışır ve diğeri gerçek veri noktaları ile jeneratör tarafından üretilen sahte veri noktaları (bir ayırıcı) arasında ayrım yapmaya çalışır. Örneğin, veri kümeniz yatak odası resimlerinin bir koleksiyonuysa, jeneratör kendi yatak odası resimlerini yapmaya çalışacak ve ayrımcı, yatak odalarının gerçek resimlerine mi yoksa yatak odalarının sahte resimlerine mi baktığını anlamaya çalışacak. Sonunda, iki çok yararlı NN'niz var: biri yatak odası olarak değil, yatak odası olarak sınıflandırmakta gerçekten iyi olan ve gerçekçi yatak odası görüntüleri oluşturmada gerçekten iyi olan biri.