Alternatif untuk generalisasi L1, L2 dan Dropout

8

Saya memiliki pengaturan berikut untuk proyek penelitian Keuangan / Pembelajaran Mesin di universitas saya: Saya menerapkan Jaringan Saraf (Jauh) (MLP) dengan struktur berikut di Keras / Theano untuk membedakan saham berkinerja lebih baik (label 1) dari saham berkinerja buruk ( label 0). Pertama-tama saya hanya menggunakan kelipatan valuasi aktual dan historis. Karena ini adalah data stok, orang dapat mengharapkan untuk memiliki data yang sangat bising. Selain itu, akurasi sampel yang stabil di atas 52% sudah dapat dianggap baik di domain ini.

Struktur jaringan:

  • Layer Padat dengan 30 fitur sebagai input
  • Aktivasi Relu
  • Layer Normalisasi Batch (Tanpa itu, jaringan sebagian tidak konvergen sama sekali)
  • Lapisan Dropout Opsional
  • Padat
  • Relu
  • Batch
  • Keluar
  • .... Lapisan selanjutnya, dengan struktur yang sama
  • Lapisan Padat dengan aktivasi Sigmoid

Pengoptimal: RMSprop

Kehilangan-Fungsi: Binary Cross-Entropy

Satu-satunya hal yang saya lakukan untuk pra pemrosesan adalah mengubah ukuran fitur ke kisaran [0,1].

Sekarang saya mengalami masalah khas overfitting / underfitting, yang biasanya saya atasi dengan Dropout atau / dan L1 dan L2 regularisasi kernel. Tetapi dalam hal ini, baik regularisasi Dropout dan L1 dan L2 memiliki dampak buruk pada kinerja, seperti yang Anda lihat pada grafik berikut.

Pengaturan dasar saya adalah: 5 Layer NN (termasuk input dan output layer), 60 Neuron per Layer, Learning Rate 0,02, no L1 / L2 dan no dropout, 100 Epochs, Normalisasi Batch, Batch-Size 1000. Semuanya sudah dilatih tentang 76000 sampel input (kelas hampir seimbang 45% / 55%) dan diterapkan pada jumlah sampel uji yang kira-kira sama. Untuk grafik, saya hanya mengubah satu parameter pada satu waktu. "Perf-Diff" berarti perbedaan kinerja stok rata-rata dari saham yang diklasifikasikan sebagai 1 dan saham yang diklasifikasikan sebagai 0, yang pada dasarnya adalah metrik inti pada akhirnya. (Lebih tinggi lebih baik)

Regularisasi Dalam kasus l1 jaringan pada dasarnya mengklasifikasikan setiap sampel ke satu kelas. Lonjakan terjadi karena jaringan melakukan ini lagi tetapi mengklasifikasikan 25 sampel secara acak benar. Jadi lonjakan ini seharusnya tidak diartikan sebagai hasil yang baik, tetapi sebuah pencilan.

Parameter lainnya memiliki dampak sebagai berikut: masukkan deskripsi gambar di sini

Apakah Anda punya ide bagaimana saya bisa meningkatkan hasil saya? Apakah ada kesalahan nyata yang saya lakukan atau apakah ada jawaban yang mudah untuk hasil regularisasi? Apakah Anda menyarankan untuk melakukan segala jenis pemilihan fitur sebelum Pelatihan (misalnya PCA)?

Edit : Parameter Lebih Lanjut: masukkan deskripsi gambar di sini

SebastianB
sumber
2
Hanya beberapa pemikiran yang tidak teratur: Ukuran batch Anda cukup besar. Strategi regularisasi lainnya adalah norma maks: membatasi norma L2 total bobot pada lapisan tertentu pada suatu nilai. Data stok secara alami memiliki sifat deret waktu, jadi mungkin lapisan RNN dapat membantu. Tetapi mengkonfigurasi JST lebih dari seni daripada sains - bahkan ketika masalah sederhana, dibutuhkan kombinasi parameter yang tepat untuk dipelajari jaringan.
Sycorax berkata Reinstate Monica
@ Scorax: Saya baru saja mengedit pertanyaan saya dan memasukkan Max-norm dan Batch size: Perilaku yang menarik, tetapi tidak berpengaruh besar pada hasil tes, lebih pada hasil kereta. Sayangnya saya tidak benar-benar memiliki data deretan waktu tetapi lebih banyak data snapshot waktu, jadi saya pikir RNN tidak berlaku dalam kasus saya.
SebastianB

Jawaban:

2

Karena ini adalah data keuangan, kemungkinan bahwa distribusi fitur di kereta dan set validasi Anda berbeda - sebuah fenomena yang dikenal sebagai pergeseran kovariat - dan jaringan saraf tidak cenderung cocok dengan ini. Memiliki distribusi fitur yang berbeda dapat menyebabkan overfitting walaupun jaringannya relatif kecil.

Mengingat bahwa l1 dan l2 tidak membantu hal-hal yang saya curigai langkah-langkah regularisasi standar lainnya seperti menambahkan noise ke input / bobot / gradien mungkin tidak akan membantu, tetapi mungkin patut dicoba.

Saya akan tergoda untuk mencoba algoritma klasifikasi yang tidak terlalu terpengaruh oleh besaran absolut fitur, seperti gradient boosted treees.

housecat64
sumber