🏷️sec_backprop
Şimdiye kadar modellerimizi minigrup rasgele gradyan inişi ile eğittik. Bununla birlikte, algoritmayı uyguladığımızda, yalnızca model aracılığıyla ileri yayma ile ilgili hesaplamalar hakkında endişelendik. Gradyanları hesaplama zamanı geldiğinde, derin öğrenme çerçevesi tarafından sağlanan geri yayma fonksiyonunu çalıştırdık.
Gradyanların otomatik olarak hesaplanması (otomatik türev alma), derin öğrenme algoritmalarının uygulanmasını büyük ölçüde basitleştirir. Otomatik türev almadan önce, karmaşık modellerde yapılan küçük değişiklikler bile karmaşık türevlerin elle yeniden hesaplanmasını gerektiriyordu. Şaşırtıcı bir şekilde, akademik makaleler güncelleme kurallarını türetmek için çok sayıda sayfa ayırmak zorunda kalırdı. İlginç kısımlara odaklanabilmemiz için otomotik türeve güvenmeye devam etmemiz gerekse de, sığ bir derin öğrenme anlayışının ötesine geçmek istiyorsanız, bu gradyanların kaputun altında nasıl hesaplandığını bilmelisiniz.
Bu bölümde, geriye doğru yaymanın (daha yaygın olarak geri yayma olarak adlandırılır) ayrıntılarına derinlemesine dalacağız. Hem teknikler hem de uygulamaları hakkında bazı bilgiler vermek için birtakım temel matematik ve hesaplama çizgelerine güveniyoruz. Başlangıç olarak, açıklamamızı ağırlık sönümlü (
İleri yayma (veya ileri iletme), girdi katmanından çıktı katmanına sırayla bir sinir ağı için ara değişkenlerin (çıktılar dahil) hesaplanması ve depolanması anlamına gelir. Artık tek bir gizli katmana sahip bir sinir ağı mekaniği üzerinde adım adım çalışacağız. Bu sıkıcı görünebilir ama funk virtüözü James Brown'un ebedi sözleriyle, "patron olmanın bedelini ödemelisiniz".
Kolaylık olması açısından, girdi örneğinin
Kayıp fonksiyonunun
eq_forward-s
burada matrisin Frobenius normu, matris bir vektöre düzleştirildikten sonra uygulanan
Aşağıdaki tartışmada
Hesaplamalı çizgeleri çizmek, hesaplamadaki operatörlerin ve değişkenlerin bağımlılıklarını görselleştirmemize yardımcı olur. :numref:fig_forward
, yukarıda açıklanan basit ağ ile ilişkili çizgeyi içerir, öyleki kareler değişkenleri ve daireler işlemleri temsil eder. Sol alt köşe girdiyi, sağ üst köşesi çıktıyı belirtir. Okların yönlerinin (veri akışını gösteren) esasen sağa ve yukarıya doğru olduğuna dikkat edin.
Geri yayma, sinir ağı parametrelerinin gradyanını hesaplama yöntemini ifade eder. Kısacası yöntem, analizden zincir kuralına göre ağı çıktıdan girdi katmanına ters sırada dolaşır. Algoritma, gradyanı bazı parametrelere göre hesaplarken gerekli olan tüm ara değişkenleri (kısmi türevler) depolar.
Burada, aktarma ve girdi konumlarını değiştirme gibi gerekli işlemler gerçekleştirildikten sonra argümanlarını çarpmak için
Hesaplamalı çizgesi :numref:fig_forward
'de gösterilen bir gizli katmana sahip basit ağın parametrelerinin
Ardından, zincir kuralı ile
Ardından, her iki parametreye göre düzenlileştirme teriminin gradyanlarını hesaplıyoruz:
Şimdi, çıktı katmanına en yakın model parametrelerinin gradyanını,
eq_backprop-J-h
Son olarak, girdi katmanına en yakın model parametrelerinin,
Sinir ağlarını eğitirken, ileri ve geri yayma birbirine bağlıdır. Özellikle, ileri yayma için, hesaplamalı çizgeyi bağımlılıklar yönünde gezeriz ve yoldaki tüm değişkenleri hesaplarız. Bunlar daha sonra grafikteki hesaplama sırasının tersine çevrildiği geri yayma için kullanılır.
Kafanızda canlandırmak için yukarıda belirtilen basit ağı örnek olarak alın.
Bir yandan, ileri yayma sırasında :eqref:eq_forward-s
düzenlileştirme teriminin hesaplanması eq_backprop-J-h
parametresi için gradyan hesaplaması, ileri yayma tarafından verilen gizli
Bu nedenle, sinir ağlarını eğitirken, model parametreleri ilklendikten sonra, ileri yaymayı geri yayma ile değiştiririz, model parametrelerini geri yayma tarafından verilen gradyanları kullanarak güncelleriz. Geri yaymanın, tekrarlanan hesaplamaları önlemek için ileriye yaymadan depolanan ara değerleri yeniden kullandığını unutmayın. Sonuçlardan biri, geri yayma tamamlanana kadar ara değerleri korumamız gerektiğidir. Bu aynı zamanda, eğitimin basit tahminden önemli ölçüde daha fazla bellek gerektirmesinin nedenlerinden biridir. Ayrıca, bu tür ara değerlerin boyutu, ağ katmanlarının sayısı ve iş boyutu ile kabaca orantılıdır. Bu nedenle, daha büyük toplu iş boyutlarını kullanarak daha derin ağlar eğitmek, kolaylıkla yetersiz bellek hatalarına yol açar.
- İleri yayma, ara değişkenleri sırayla hesaplar ve sinir ağı tarafından tanımlanan hesaplamalı çizge içinde depolar. Girdiden çıktı katmanına doğru ilerler.
- Geri yayma, sinir ağı içindeki ara değişkenlerin ve parametrelerin gradyanlarını ters sırayla sırayla hesaplar ve saklar.
- Derin öğrenme modellerini eğitirken, ileri yayma ve geri yayma birbirine bağlıdır.
- Eğitim, tahminlemeden önemli ölçüde daha fazla bellek gerektirir.
-
$\mathbf{X}$ 'in bazı sayıl (skaler) fonksiyonu$f$ 'nin girdilerinin$n \times m$ matrisler olduğunu varsayın.$\mathbf{X}$ 'e göre$f$ 'nin gradyanının boyutsallığı nedir? - Bu bölümde açıklanan modelin gizli katmanına bir ek girdi ekleyiniz (düzenlileştirme teriminde ek girdiyi katmanız gerekmez).
- İlgili hesaplamalı çizgeyi çizin.
- İleri ve geri yayma denklemlerini türetiniz.
- Bu bölümde açıklanan modeldeki eğitim ve tahmin için bellek ayak izini hesaplayın.
- İkinci türevleri hesaplamak istediğinizi varsayın. Hesaplamalı çizgeye ne olur? Hesaplamanın ne kadar sürmesini bekliyorsunuz?
- Hesaplamalı çizgenin GPU'nuz için çok büyük olduğunu varsayın.
- Birden fazla GPU'ya bölebilir misiniz?
- Daha küçük bir minigrup üzerinde eğitime göre avantajları ve dezavantajları nelerdir?