Sinir ağlarıyla çalışma: hata ayıklama için kontrol listesi

Sinir ağlarıyla çalışma: hata ayıklama için kontrol listesi

Makine öğrenimi yazılım ürünlerinin kodları genellikle karmaşık ve oldukça kafa karıştırıcıdır. İçindeki hataları tespit etmek ve ortadan kaldırmak, kaynak yoğun bir iştir. En basiti bile ileri beslemeli sinir ağları ağ mimarisine, ağırlıkların başlatılmasına ve ağ optimizasyonuna ciddi bir yaklaşım gerektirir. Küçük bir hata hoş olmayan sorunlara yol açabilir.

Bu makale sinir ağlarınızda hata ayıklamaya yönelik bir algoritma hakkındadır.

Skillbox şunları önerir: pratik kurs Sıfırdan Python geliştiricisi.

Hatırlatıyoruz: tüm "Habr" okuyucuları için - "Habr" promosyon kodunu kullanarak herhangi bir Skillbox kursuna kayıt olurken 10 ruble indirim.

Algoritma beş aşamadan oluşur:

  • kolay başlangıç;
  • kayıpların teyidi;
  • ara sonuçların ve bağlantıların kontrol edilmesi;
  • parametre teşhisi;
  • işin kontrolü.

Eğer bir şey size diğerlerinden daha ilginç geliyorsa hemen bu bölümlere geçebilirsiniz.

Kolay başlangıç

Karmaşık bir mimariye, düzenliliğe ve öğrenme oranı planlayıcısına sahip bir sinir ağında hata ayıklamak, normal bir sinir ağından daha zordur. Konunun kendisi dolaylı olarak hata ayıklamayla ilgili olduğundan, burada biraz hile yapıyoruz, ancak bu yine de önemli bir öneri.

Basit bir başlangıç, basitleştirilmiş bir model oluşturmak ve onu tek bir veri kümesi (noktası) üzerinde eğitmektir.

İlk önce basitleştirilmiş bir model oluşturuyoruz

Hızlı bir şekilde başlamak için tek bir gizli katmana sahip küçük bir ağ oluşturuyoruz ve her şeyin doğru çalışıp çalışmadığını kontrol ediyoruz. Daha sonra, yapısının her yeni yönünü (ek katman, parametre vb.) kontrol ederek modeli yavaş yavaş karmaşıklaştırıyoruz ve devam ediyoruz.

Modeli tek bir veri kümesi (nokta) üzerinde eğitiyoruz

Projeniz için hızlı bir sağlık kontrolü olarak, sistemin doğru çalışıp çalışmadığını doğrulamak amacıyla eğitim için bir veya iki veri noktası kullanabilirsiniz. Sinir ağının eğitim ve testlerde %100 doğruluk göstermesi gerekir. Eğer durum böyle değilse, ya model çok küçüktür ya da zaten bir hatanız vardır.

Her şey yolunda olsa bile, devam etmeden önce modeli bir veya daha fazla dönem için hazırlayın.

Kayıp değerlendirmesi

Kayıp tahmini, modelin performansını iyileştirmenin ana yoludur. Kaybın soruna uygun olduğundan ve kayıp fonksiyonlarının doğru ölçekte derecelendirildiğinden emin olmanız gerekir. Birden fazla kayıp türü kullanıyorsanız hepsinin aynı sırada olduğundan ve doğru ölçeklendiğinden emin olun.

İlk kayıplara karşı dikkatli olmak önemlidir. Modelin rastgele bir tahminle başlaması durumunda gerçek sonucun beklenen sonuca ne kadar yakın olduğunu kontrol edin. İÇİNDE Andrey Karpathy'nin çalışması şunları öneriyor:: “Az sayıda parametreyle başladığınızda beklediğiniz sonucu aldığınızdan emin olun. Veri kaybını hemen kontrol etmek daha iyidir (düzenleme derecesi sıfıra ayarlıyken). Örneğin, Softmax sınıflandırıcılı CIFAR-10 için ilk kaybın 2.302 olmasını bekliyoruz çünkü beklenen yayılma olasılığı her sınıf için 0,1'dir (10 sınıf olduğundan) ve Softmax kaybı doğru sınıfın negatif log olasılığıdır. − ln (0.1) = 2.302.”

İkili örnekte, sınıfların her biri için benzer bir hesaplama basitçe yapılır. Örneğin veriler şu şekilde: %20 0'lar ve %80 1'ler. Beklenen başlangıç ​​kaybı –0,2ln (0,5) –0,8ln (0,5) = 0,693147'ye kadar olacaktır. Sonucun 1'den büyük olması sinir ağı ağırlıklarının uygun şekilde dengelenmediğini veya verilerin normalleştirilmediğini gösterebilir.

Ara sonuçların ve bağlantıların kontrol edilmesi

Bir sinir ağında hata ayıklamak için ağ içindeki süreçlerin dinamiklerini ve birbirine bağlıyken bireysel ara katmanların rolünü anlamak gerekir. Karşılaşabileceğiniz yaygın hatalar şunlardır:

  • kepçe güncellemeleri için yanlış ifadeler;
  • ağırlık güncellemeleri uygulanmaz;
  • patlayan gradyanlar.

Degrade değerleri sıfırsa bu, optimize edicideki öğrenme hızının çok yavaş olduğu veya degradeyi güncellemek için yanlış bir ifadeyle karşılaştığınız anlamına gelir.

Ayrıca katmanların her birinin aktivasyon fonksiyonlarının, ağırlıklarının ve güncellemelerinin değerlerinin takip edilmesi gerekmektedir. Örneğin parametre güncellemelerinin büyüklüğü (ağırlıklar ve sapmalar) 1-e3 olmalı.

“Ölmekte olan ReLU” diye bir olgu var ya da "kaybolan degrade sorunu"ReLU nöronları, ağırlıkları için büyük bir negatif önyargı değeri öğrendikten sonra sıfır çıktısı verdiğinde. Bu nöronlar verinin hiçbir noktasında bir daha asla ateşlenmiyor.

Sayısal bir yaklaşım kullanarak degradeye yaklaşık değer vererek bu hataları tanımlamak için degrade denetimini kullanabilirsiniz. Hesaplanan gradyanlara yakınsa geri yayılım doğru bir şekilde uygulanmıştır. Degrade kontrolü oluşturmak için CS231'deki bu harika kaynaklara göz atın burada и buradaYanısıra ders Andrew Nga bu konuyla ilgili.

Faizan Şeyh Bir sinir ağını görselleştirmek için üç ana yöntemi belirtir:

  • Ön hazırlıklar, eğitilen modelin genel yapısını bize gösteren basit yöntemlerdir. Bunlar, sinir ağının ayrı ayrı katmanlarının şekillerinin veya filtrelerinin çıktısını ve her katmandaki parametreleri içerir.
  • Etkinleştirme tabanlı. Onlarda, işlevlerini anlamak için bireysel nöronların veya nöron gruplarının aktivasyonlarını deşifre ediyoruz.
  • Gradyanlara dayanmaktadır. Bu yöntemler, model eğitiminin ileri ve geri geçişlerinden (belirginlik haritaları ve sınıf aktivasyon haritaları dahil) oluşan gradyanları manipüle etme eğilimindedir.

Bireysel katmanların aktivasyonlarını ve bağlantılarını görselleştirmek için çeşitli yararlı araçlar vardır; ConX и tensör tahtası.

Sinir ağlarıyla çalışma: hata ayıklama için kontrol listesi

Parametre teşhisi

Sinir ağlarının birbiriyle etkileşime giren birçok parametresi vardır ve bu da optimizasyonu zorlaştırır. Aslında bu bölüm uzmanların aktif araştırma konusudur, bu nedenle aşağıdaki öneriler yalnızca tavsiye ve temel alınarak inşa edilecek başlangıç ​​noktaları olarak değerlendirilmelidir.

Paket Boyutu (toplu iş boyutu) - Toplu iş boyutunun doğru hata gradyanı tahminleri almaya yetecek kadar büyük, ancak ağınızı düzenli hale getirmek için stokastik gradyan inişine (SGD) yetecek kadar küçük olmasını istiyorsanız. Küçük parti boyutları, eğitim süreci sırasındaki gürültü nedeniyle hızlı yakınsamaya ve ardından optimizasyon zorluklarına yol açacaktır. Bu daha ayrıntılı olarak açıklanmaktadır burada.

Öğrenme oranı - çok düşük, yakınsamanın yavaşlamasına veya yerel minimumlara takılıp kalma riskine yol açacaktır. Aynı zamanda, yüksek öğrenme oranı optimizasyonun sapmasına neden olur çünkü kayıp fonksiyonunun derin ama dar kısmından atlama riskiyle karşı karşıya kalırsınız. Sinir ağını eğitirken hızı azaltmak için hız planlamayı kullanmayı deneyin. CS231n ile güncel bu soruna ayrılmış geniş bir bölüm var.

Gradyan kırpma  - maksimum değerde veya marjinal normda geri yayılım sırasında parametre gradyanlarının düzeltilmesi. Üçüncü noktada karşılaşabileceğiniz patlayan degradelerin sorunlarını gidermek için kullanışlıdır.

Toplu normalleştirme - her katmanın giriş verilerini normalleştirmek için kullanılır, bu da dahili ortak değişken kayması sorununu çözmemize olanak tanır. Dropout ve Batch Norma'yı birlikte kullanıyorsanız, bu makaleye göz atın.

Stokastik gradyan inişi (SGD) — Momentum, uyarlanabilir öğrenme oranları ve Nesterov yöntemini kullanan çeşitli SGD türleri vardır. Ancak hiçbirinin hem öğrenme verimliliği hem de genelleme açısından belirgin bir avantajı yoktur (ayrıntılar burada).

Düzenleme - genelleştirilebilir bir model oluşturmak için çok önemlidir, çünkü model karmaşıklığı veya aşırı parametre değerleri için bir ceza ekler. Bu, sapmayı önemli ölçüde artırmadan model sapmasını azaltmanın bir yoludur. Daha ayrıntılı bilgi - burada.

Her şeyi kendiniz değerlendirmek için düzenlemeyi devre dışı bırakmanız ve veri kaybı eğimini kendiniz kontrol etmeniz gerekir.

Bırakma tıkanıklığı önlemek için ağınızı düzenlemenin başka bir yöntemidir. Eğitim sırasında, bırakma yalnızca nöronun aktivitesinin belirli bir p (hiperparametre) olasılığıyla sürdürülmesi veya tam tersi durumda sıfıra ayarlanmasıyla gerçekleştirilir. Sonuç olarak ağ, her eğitim grubu için farklı bir parametre alt kümesi kullanmalıdır; bu da belirli parametrelerde baskın hale gelen değişiklikleri azaltır.

Önemli: Hem bırakma hem de toplu normalleştirme kullanıyorsanız, bu işlemlerin sırasına ve hatta bunları birlikte kullanmaya dikkat edin. Bütün bunlar hala aktif olarak tartışılıyor ve destekleniyor. İşte bu konuyla ilgili iki önemli tartışma Stackoverflow'ta и Arxiv.

iş kontrolü

İş akışlarını ve deneyleri belgelemekle ilgilidir. Hiçbir şeyi belgelemezseniz, örneğin hangi öğrenme oranının veya sınıf ağırlıklarının kullanıldığını unutabilirsiniz. Kontrol sayesinde önceki deneyleri kolaylıkla görüntüleyebilir ve çoğaltabilirsiniz. Bu, yinelenen deneylerin sayısını azaltmanıza olanak tanır.

Ancak, büyük hacimli işlerde manuel dokümantasyon zor bir iş haline gelebilir. Modeliniz hakkındaki önemli bilgiler (hiper parametreler, model performans ölçümleri ve çevresel bilgiler) dahil olmak üzere veri kümelerini, kod değişikliklerini, deneysel geçmişi ve üretim modellerini otomatik olarak günlüğe kaydetmenize yardımcı olmak için Comet.ml gibi araçlar devreye giriyor.

Bir sinir ağı küçük değişikliklere karşı çok hassas olabilir ve bu durum model performansında düşüşe yol açacaktır. Çalışmanızı takip etmek ve belgelemek, ortamınızı ve modellemenizi standartlaştırmak için atabileceğiniz ilk adımdır.

Sinir ağlarıyla çalışma: hata ayıklama için kontrol listesi

Umarım bu yazı sinir ağınızda hata ayıklamaya başlamanız için bir başlangıç ​​noktası olabilir.

Skillbox şunları önerir:

Kaynak: habr.com

Yorum ekle