arsitektur multi-layer perceptron (MLP): kriteria untuk memilih jumlah lapisan tersembunyi dan ukuran lapisan tersembunyi?


104

Jika kita memiliki 10 vektor eigen maka kita dapat memiliki 10 node neural pada input layer, jika kita memiliki 5 kelas output maka kita dapat memiliki 5 node di lapisan output, tetapi apa kriteria pemilihan hidden layer dalam sebuah MLP dan berapa neural. node dalam 1 lapisan tersembunyi?



Jawaban:


217

berapa banyak lapisan tersembunyi ?

model dengan nol lapisan tersembunyi akan menyelesaikan data yang dapat dipisahkan secara linier . Jadi, kecuali jika Anda sudah mengetahui bahwa data Anda tidak dapat dipisahkan secara linier, tidak ada salahnya untuk memverifikasi ini - mengapa menggunakan model yang lebih kompleks daripada yang diminta oleh tugas? Jika dapat dipisahkan secara linier maka teknik yang lebih sederhana akan berhasil, tetapi Perceptron akan melakukan pekerjaan itu juga.

Dengan asumsi data Anda memang memerlukan pemisahan dengan teknik non-linier, maka selalu mulai dengan satu lapisan tersembunyi . Hampir pasti hanya itu yang Anda butuhkan. Jika data Anda dapat dipisahkan menggunakan MLP, MLP tersebut mungkin hanya membutuhkan satu lapisan tersembunyi. Ada justifikasi teoritis untuk ini, tetapi alasan saya murni empiris: Banyak masalah klasifikasi / regresi yang sulit diselesaikan menggunakan MLP lapisan tersembunyi tunggal, namun saya tidak ingat pernah bertemu dengan beberapa MLP lapisan tersembunyi yang digunakan untuk berhasil memodelkan data- -baik di papan buletin ML, Buku Teks ML, makalah akademis, dll. Tentu saja, semua itu ada, tetapi keadaan yang membenarkan penggunaannya secara empiris cukup jarang.


Berapa banyak node di lapisan tersembunyi?

Dari literatur akademik MLP. pengalaman saya sendiri, dll., Saya telah mengumpulkan dan sering mengandalkan beberapa aturan praktis ( RoT ), dan yang juga saya temukan sebagai panduan yang andal (yaitu, panduan itu akurat, dan bahkan jika tidak, itu biasanya jelas apa yang harus dilakukan selanjutnya):

RoT berdasarkan peningkatan konvergensi:

Saat Anda memulai pembuatan model, lakukan kesalahan di sisi lebih banyak node di lapisan tersembunyi.

Mengapa? Pertama, beberapa node tambahan di lapisan tersembunyi kemungkinan besar tidak membahayakan - MLP Anda akan tetap bertemu. Di sisi lain, terlalu sedikit node di lapisan tersembunyi dapat mencegah konvergensi. Anggap saja seperti ini, node tambahan memberikan beberapa kapasitas berlebih - bobot tambahan untuk menyimpan / melepaskan sinyal ke jaringan selama iterasi (pelatihan, atau pembuatan model). Kedua, jika Anda memulai dengan node tambahan di lapisan tersembunyi Anda, maka mudah untuk memangkasnya nanti (selama proses iterasi). Ini biasa terjadi dan ada teknik diagnostik untuk membantu Anda (mis., Diagram Hinton, yang hanya merupakan gambaran visual dari matriks bobot, 'peta panas' dari nilai bobot,).

RoT berdasarkan ukuran lapisan masukan dan ukuran lapisan keluaran:

Aturan praktisnya adalah ukuran lapisan [tersembunyi] ini berada di antara ukuran lapisan masukan ... dan ukuran lapisan keluaran ....

Untuk menghitung jumlah node tersembunyi kami menggunakan aturan umum: (Jumlah input + output) x 2/3

RoT berdasarkan komponen utama:

Biasanya, kami menentukan node tersembunyi sebanyak dimensi [komponen utama] yang diperlukan untuk menangkap 70-90% varian dari kumpulan data masukan .

Namun penulis FAQ NN menyebut Aturan ini "tidak masuk akal" (secara harfiah) karena mereka: mengabaikan jumlah contoh pelatihan, gangguan dalam target (nilai variabel respons), dan kompleksitas ruang fitur.

Dalam pandangannya (dan bagi saya selalu tampak bahwa dia tahu apa yang dia bicarakan), pilih jumlah neuron di lapisan tersembunyi berdasarkan apakah MLP Anda menyertakan beberapa bentuk regularisasi, atau penghentian awal .

Satu-satunya teknik yang valid untuk mengoptimalkan jumlah neuron di Hidden Layer:

Selama pembuatan model Anda, uji secara obsesif; pengujian akan mengungkapkan tanda tangan dari arsitektur jaringan yang "salah". Misalnya, jika Anda memulai dengan MLP yang memiliki lapisan tersembunyi yang terdiri dari sejumlah kecil node (yang akan Anda tingkatkan secara bertahap sesuai kebutuhan, berdasarkan hasil pengujian) kesalahan pelatihan dan generalisasi Anda akan menjadi tinggi yang disebabkan oleh bias dan underfitting.

Kemudian tingkatkan jumlah node di lapisan tersembunyi, satu per satu, hingga kesalahan generalisasi mulai meningkat, kali ini karena overfitting dan varians yang tinggi.


Dalam praktiknya, saya melakukannya dengan cara ini:

input layer : ukuran data vactor saya (jumlah fitur dalam model saya) +1 untuk node bias dan tentu saja tidak termasuk variabel respon

lapisan keluaran : soley ditentukan oleh model saya: regresi (satu node) versus klasifikasi (jumlah node yang setara dengan jumlah kelas, dengan asumsi softmax)

lapisan tersembunyi : untuk memulai , satu lapisan tersembunyidengan jumlah node yang sama dengan ukuran lapisan masukan. Ukuran "ideal" lebih cenderung lebih kecil (yaitu, beberapa jumlah node antara nomor di lapisan masukan dan nomor di lapisan keluaran) daripada lebih besar - sekali lagi, ini hanya pengamatan empiris, dan massal pengamatan ini adalah pengalaman saya sendiri. Jika proyek membenarkan waktu tambahan yang diperlukan, maka saya mulai dengan satu lapisan tersembunyi yang terdiri dari sejumlah kecil node, lalu (seperti yang saya jelaskan di atas) saya menambahkan node ke Hidden Layer, satu per satu, sambil menghitung generalisasi kesalahan, kesalahan pelatihan, bias, dan varians. Ketika kesalahan generalisasi telah menurun dan sebelum mulai meningkat lagi, jumlah node pada saat itu adalah pilihan saya. Lihat gambar di bawah.

masukkan deskripsi gambar di sini


1
Saya ingin menambahkan beberapa hasil terkait mengenai # 1 RoT: Dalam SVM yang sukses Anda benar-benar memetakan input Anda ke ruang dimensi yang lebih tinggi (node ​​lebih tersembunyi daripada node di lapisan input dalam bahasa NN). Tugas lapisan keluaran adalah mendapatkan keputusan dari representasi yang terlalu lengkap ini. Mungkin ada koneksi ke Proyeksi Acak juga. Makalah brilian Adam Coates & Andrew Y. Ng (2011) membahas topik terkait.
Vladislavs Dovgalecs

Penjelasan yang bagus. Adakah ide tentang bagaimana saya bisa memplot gambar seperti di atas saat menggunakan sklearn dan MLPClassifier?
seralouk

1
@sera maksudmu gaya xkcd?
denfromufa

Pada prinsipnya, dapatkah Anda mengotomatiskan proses pengoptimalan jumlah neuron di lapisan tersembunyi? Selain itu, dapatkah Anda juga mengoptimalkan jumlah lapisan tersembunyi secara otomatis?
Addison

2

Sangat sulit untuk memilih jumlah neuron di lapisan tersembunyi, dan untuk memilih jumlah lapisan tersembunyi di jaringan saraf Anda.

Biasanya, untuk sebagian besar aplikasi, satu lapisan tersembunyi sudah cukup. Selain itu, jumlah neuron di lapisan tersembunyi itu harus berada di antara jumlah masukan (10 dalam contoh Anda) dan jumlah keluaran (5 dalam contoh Anda).

Tetapi cara terbaik untuk memilih jumlah neuron dan lapisan tersembunyi adalah eksperimen. Latih beberapa jaringan saraf dengan jumlah lapisan tersembunyi dan neuron tersembunyi yang berbeda, dan ukur kinerja jaringan tersebut menggunakan validasi silang . Anda dapat tetap menggunakan nomor yang menghasilkan jaringan berkinerja terbaik.


2

Untuk mengotomatiskan pemilihan jumlah lapisan terbaik dan jumlah neuron terbaik untuk setiap lapisan, Anda dapat menggunakan pengoptimalan genetik .

Potongan kuncinya adalah:

  1. Kromosom : Vektor yang menentukan berapa banyak unit di setiap lapisan tersembunyi (misalnya [20,5,1,0,0] berarti 20 unit di lapisan tersembunyi pertama, 5 di kedua, ..., dengan lapisan 4 dan 5 hilang). Anda dapat menetapkan batas jumlah maksimum lapisan untuk dicoba, dan jumlah maksimum unit di setiap lapisan. Anda juga harus membatasi bagaimana kromosom dihasilkan. Misalnya [10, 0, 3, ...] tidak boleh dibuat, karena setiap unit setelah lapisan yang hilang ('3, ...') akan menjadi tidak relevan dan akan membuang siklus evaluasi.
  2. Fungsi Kebugaran : Sebuah fungsi yang mengembalikan kebalikan dari kesalahan pelatihan terendah dalam set validasi silang jaringan yang ditentukan oleh kromosom tertentu. Anda juga dapat memasukkan jumlah unit total, atau waktu komputasi jika Anda ingin menemukan "jaringan terkecil / tercepat namun terakurat".

Anda juga bisa mempertimbangkan:

  • Pemangkasan : Mulailah dengan jaringan yang besar, kemudian kurangi lapisan dan unit tersembunyi, sambil tetap melacak kinerja set validasi silang.
  • Berkembang : Mulailah dengan jaringan yang sangat kecil, lalu tambahkan unit dan lapisan, dan sekali lagi lacak kinerja kumpulan CV.

0

Baru-baru ini ada pekerjaan teoritis tentang https://arxiv.org/abs/1809.09953 ini . Dengan asumsi Anda menggunakan RELU MLP, semua lapisan tersembunyi memiliki jumlah node yang sama dan fungsi kerugian serta fungsi sebenarnya yang Anda perkirakan dengan jaringan saraf tiruan mematuhi beberapa properti teknis (di makalah), Anda dapat memilih kedalaman Anda untuk pesan $ \ log (n) $ dan lebar lapisan tersembunyi Anda sesuai urutan $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Di sini $ n $ adalah ukuran sampel Anda, $ d $ adalah dimensi vektor masukan Anda, dan $ \ beta $ adalah parameter kelancaran untuk fungsi Anda yang sebenarnya. Karena $ \ beta $ tidak diketahui, Anda mungkin ingin memperlakukannya sebagai hyperparameter.

Dengan melakukan ini, Anda dapat menjamin bahwa dengan probabilitas yang menyatu menjadi $ 1 $ sebagai fungsi ukuran sampel, kesalahan perkiraan Anda menyatu menjadi $ 0 $ sebagai fungsi ukuran sampel. Mereka memberi nilai. Perhatikan bahwa ini tidak dijamin menjadi arsitektur 'terbaik', tetapi setidaknya dapat memberi Anda tempat yang baik untuk memulai. Lebih jauh, pengalaman saya sendiri menunjukkan bahwa hal-hal seperti putus sekolah masih dapat membantu dalam praktiknya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.