Apakah ada metode standar dan diterima untuk memilih jumlah lapisan, dan jumlah node di setiap lapisan, dalam jaringan saraf umpan maju? Saya tertarik dengan cara otomatis membangun jaringan saraf.
Apakah ada metode standar dan diterima untuk memilih jumlah lapisan, dan jumlah node di setiap lapisan, dalam jaringan saraf umpan maju? Saya tertarik dengan cara otomatis membangun jaringan saraf.
Jawaban:
Saya menyadari bahwa pertanyaan ini telah dijawab, tetapi saya tidak berpikir bahwa jawaban yang ada benar-benar melibatkan pertanyaan di luar menunjuk ke tautan yang umumnya terkait dengan masalah pokok pertanyaan. Secara khusus, tautan tersebut menjelaskan satu teknik untuk konfigurasi jaringan terprogram, tetapi itu bukan " [a] metode standar dan diterima " untuk konfigurasi jaringan.
Dengan mengikuti seperangkat aturan yang jelas, seseorang dapat secara terprogram mengatur arsitektur jaringan yang kompeten (yaitu jumlah dan jenis lapisan neuron dan jumlah neuron yang terdiri dari setiap lapisan). Mengikuti skema ini, ini akan memberi Anda arsitektur yang kompeten tetapi mungkin tidak optimal.
Tetapi begitu jaringan ini diinisialisasi, Anda dapat menyesuaikan konfigurasi selama pelatihan dengan menggunakan beberapa algoritma tambahan; satu keluarga dari karya-karya ini dengan memangkas node berdasarkan nilai vektor bobot (kecil) setelah sejumlah periode pelatihan - dengan kata lain, menghilangkan node yang tidak perlu / redundan (lebih lanjut tentang ini di bawah).
Jadi setiap NN memiliki tiga jenis lapisan: input , tersembunyi , dan output .
Oleh karena itu, membuat arsitektur NN berarti memberikan nilai untuk jumlah lapisan dari setiap jenis dan jumlah node di setiap lapisan ini.
Lapisan Input
Sederhana - setiap NN memiliki persis salah satunya - tidak ada pengecualian yang saya ketahui.
Sehubungan dengan jumlah neuron yang terdiri dari lapisan ini, parameter ini sepenuhnya dan unik ditentukan setelah Anda mengetahui bentuk data pelatihan Anda. Secara khusus, jumlah neuron yang terdiri dari lapisan itu sama dengan jumlah fitur (kolom) dalam data Anda . Beberapa konfigurasi NN menambahkan satu node tambahan untuk istilah bias.
Lapisan Keluaran
Seperti layer Input, setiap NN memiliki tepat satu layer output. Menentukan ukurannya (jumlah neuron) sederhana; itu sepenuhnya ditentukan oleh konfigurasi model yang dipilih.
Apakah NN Anda akan berjalan dalam Mode Mesin atau Mode Regresi (konvensi ML tentang penggunaan istilah yang juga digunakan dalam statistik tetapi menetapkan makna yang berbeda untuk itu sangat membingungkan). Mode mesin: mengembalikan label kelas (misalnya, "Akun Premium" / "Akun Dasar"). Mode Regresi mengembalikan nilai (misalnya, harga).
Jika NN adalah sebuah regressor, maka layer output memiliki satu node.
Jika NN adalah classifier, maka ia juga memiliki satu simpul kecuali jika softmax digunakan dalam hal ini lapisan keluaran memiliki satu simpul per label kelas dalam model Anda.
Lapisan Tersembunyi
Jadi beberapa aturan itu mengatur jumlah layer dan ukuran (neuron / layer) untuk layer input dan output. Yang meninggalkan lapisan tersembunyi.
Berapa banyak lapisan tersembunyi? Nah jika data Anda terpisah secara linear (yang sering Anda ketahui saat Anda mulai mengkode NN) maka Anda tidak memerlukan lapisan tersembunyi sama sekali. Tentu saja, Anda juga tidak perlu NN untuk menyelesaikan data Anda, tetapi masih akan melakukan pekerjaan.
Di luar itu, seperti yang mungkin Anda ketahui, ada segunung komentar tentang pertanyaan konfigurasi lapisan tersembunyi di NN (lihat FAQ NN yang sangat teliti dan mendalam untuk ringkasan yang luar biasa dari komentar itu). Salah satu masalah dalam subjek ini di mana ada konsensus adalah perbedaan kinerja dari menambahkan lapisan tersembunyi tambahan: situasi di mana kinerja meningkat dengan lapisan tersembunyi kedua (atau ketiga, dll.) Sangat sedikit. Satu lapisan tersembunyi sudah cukup untuk sebagian besar masalah.
Jadi bagaimana dengan ukuran lapisan tersembunyi - berapa banyak neuron? Ada beberapa aturan yang diturunkan secara empiris, di antaranya, yang paling sering diandalkan adalah ' ukuran optimal dari lapisan tersembunyi biasanya antara ukuran input dan ukuran lapisan output '. Jeff Heaton, penulis Pengantar Neural Networks di Jawa menawarkan beberapa lagi.
Singkatnya, untuk sebagian besar masalah, orang mungkin bisa mendapatkan kinerja yang layak (bahkan tanpa langkah optimasi kedua) dengan mengatur konfigurasi lapisan tersembunyi hanya dengan menggunakan dua aturan: (i) jumlah lapisan tersembunyi sama dengan satu; dan (ii) jumlah neuron di lapisan itu adalah rata-rata dari neuron di lapisan input dan output.
Optimalisasi Konfigurasi Jaringan
Pemangkasanmenjelaskan serangkaian teknik untuk memangkas ukuran jaringan (bukan node) untuk meningkatkan kinerja komputasi dan kadang-kadang kinerja resolusi. Inti dari teknik ini adalah menghapus node dari jaringan selama pelatihan dengan mengidentifikasi simpul-simpul yang, jika dihapus dari jaringan, tidak akan secara nyata mempengaruhi kinerja jaringan (yaitu, resolusi data). (Bahkan tanpa menggunakan teknik pemangkasan formal, Anda bisa mendapatkan gambaran kasar node mana yang tidak penting dengan melihat matriks bobot Anda setelah pelatihan; lihat bobotnya sangat dekat dengan nol - itu adalah simpul di kedua ujung bobot yang sering dihapus selama pemangkasan.) Jelas, jika Anda menggunakan algoritma pemangkasan selama pelatihan kemudian mulai dengan konfigurasi jaringan yang lebih cenderung memiliki kelebihan (yaitu, 'prunable') node - dengan kata lain,
Dengan kata lain, dengan menerapkan algoritma pemangkasan ke jaringan Anda selama pelatihan, Anda dapat mendekati konfigurasi jaringan yang optimal; apakah Anda dapat melakukannya dalam satu "muka" (seperti algoritma berbasis-genetika) saya tidak tahu, meskipun saya tahu bahwa untuk saat ini, optimasi dua langkah ini lebih umum.
Jawaban @ doug telah bekerja untuk saya. Ada satu aturan tambahan yang membantu untuk masalah pembelajaran yang diawasi. Anda biasanya dapat mencegah pemasangan berlebihan jika Anda mempertahankan jumlah neuron Anda di bawah ini:
= jumlah neuron input. = jumlah neuron keluaran. = jumlah sampel dalam kumpulan data pelatihan. = faktor penskalaan yang berubah-ubah biasanya 2-10.
Lainnya merekomendasikan pengaturan ke nilai antara 5 dan 10, tetapi saya menemukan nilai 2 akan sering bekerja tanpa overfitting. Anda dapat menganggap alpha sebagai faktor percabangan yang efektif atau jumlah bobot bukan-nol untuk setiap neuron. Lapisan dropout akan menurunkan faktor percabangan "efektif" dari faktor percabangan rata-rata aktual untuk jaringan Anda.
Seperti yang dijelaskan oleh teks NN Design yang luar biasa ini , Anda ingin membatasi jumlah parameter gratis dalam model Anda ( derajat atau jumlah bobot bukan nol) hingga sebagian kecil dari derajat kebebasan dalam data Anda. Derajat kebebasan dalam data Anda adalah jumlah sampel * derajat kebebasan (dimensi) dalam setiap sampel atau (dengan asumsi mereka semua independen). Jadi adalah cara untuk menunjukkan seberapa umum model yang Anda inginkan, atau seberapa banyak Anda ingin mencegah overfitting.
Untuk prosedur otomatis Anda akan mulai dengan alfa 2 (dua kali lebih banyak derajat kebebasan dalam data pelatihan Anda sebagai model Anda) dan bekerja hingga 10 jika kesalahan (kerugian) untuk dataset pelatihan Anda secara signifikan lebih kecil daripada untuk dataset uji Anda.
N_h
(jumlah rata-rata neuron tersembunyi per lapisan) solusi untuk ini N_s = (N_i + N_o) * N_h ^ N_hidden_layers
. Tetapi saya masih tidak akan menggunakan formula ini. Ini hanya untuk masalah yang sangat mendasar (masalah mainan) ketika Anda tidak berencana untuk menerapkan pendekatan regularisasi lainnya.
Dari Pengantar Neural Networks for Java (edisi kedua) oleh Jeff Heaton - pratinjau tersedia secara gratis di Google Buku dan sebelumnya di situs web penulis :
Jumlah Lapisan Tersembunyi
Sebenarnya ada dua keputusan yang harus dibuat mengenai lapisan tersembunyi: berapa banyak lapisan tersembunyi yang benar-benar ada dalam jaringan saraf dan berapa banyak neuron akan berada di masing-masing lapisan ini. Kami pertama-tama akan memeriksa bagaimana menentukan jumlah lapisan tersembunyi untuk digunakan dengan jaringan saraf.
Masalah yang membutuhkan dua lapisan tersembunyi jarang dijumpai. Namun, jaringan saraf dengan dua lapisan tersembunyi dapat mewakili fungsi dengan bentuk apa pun. Saat ini tidak ada alasan teoritis untuk menggunakan jaringan saraf dengan lebih dari dua lapisan tersembunyi. Bahkan, untuk banyak masalah praktis, tidak ada alasan untuk menggunakan lebih dari satu lapisan tersembunyi. Tabel 5.1 merangkum kemampuan arsitektur jaringan saraf dengan berbagai lapisan tersembunyi.
Tabel 5.1: Menentukan Jumlah Lapisan Tersembunyi
| Jumlah Lapisan Tersembunyi | Hasil | 0 - Hanya mampu mewakili fungsi atau keputusan linier yang dapat dipisahkan. 1 - Dapat memperkirakan fungsi apa pun yang berisi pemetaan berkelanjutan dari satu ruang terbatas ke yang lain. 2 - Dapat mewakili batas keputusan sewenang-wenang untuk akurasi sewenang-wenang dengan fungsi aktivasi yang rasional dan dapat mendekati segala kelancaran pemetaan dengan akurasi apa pun.Memutuskan jumlah lapisan neuron tersembunyi hanya sebagian kecil dari masalahnya. Anda juga harus menentukan berapa banyak neuron di masing-masing lapisan tersembunyi ini. Proses ini dibahas di bagian selanjutnya.
Jumlah Neuron dalam Lapisan Tersembunyi
Memutuskan jumlah neuron dalam lapisan tersembunyi adalah bagian yang sangat penting dalam menentukan arsitektur jaringan saraf Anda secara keseluruhan. Meskipun lapisan-lapisan ini tidak secara langsung berinteraksi dengan lingkungan eksternal, mereka memiliki pengaruh yang luar biasa pada hasil akhir. Baik jumlah lapisan tersembunyi dan jumlah neuron di masing-masing lapisan tersembunyi ini harus dipertimbangkan dengan cermat.
Menggunakan terlalu sedikit neuron di lapisan tersembunyi akan menghasilkan sesuatu yang disebut underfitting. Underfitting terjadi ketika ada terlalu sedikit neuron di lapisan tersembunyi untuk secara memadai mendeteksi sinyal dalam kumpulan data yang rumit.
Menggunakan terlalu banyak neuron di lapisan tersembunyi dapat menyebabkan beberapa masalah. Pertama, terlalu banyak neuron di lapisan tersembunyi dapat menyebabkan overfitting. Overfitting terjadi ketika jaringan saraf memiliki begitu banyak kapasitas pemrosesan informasi sehingga jumlah informasi yang terkandung dalam set pelatihan tidak cukup untuk melatih semua neuron dalam lapisan tersembunyi. Masalah kedua dapat terjadi bahkan ketika data pelatihan cukup. Sejumlah besar neuron dalam lapisan tersembunyi dapat meningkatkan waktu yang dibutuhkan untuk melatih jaringan. Jumlah waktu pelatihan dapat meningkat ke titik yang tidak mungkin untuk melatih jaringan saraf secara memadai. Jelas, beberapa kompromi harus dicapai antara terlalu banyak dan terlalu sedikit neuron di lapisan tersembunyi.
Ada banyak metode aturan praktis untuk menentukan jumlah neuron yang tepat untuk digunakan dalam lapisan tersembunyi, seperti berikut ini:
- Jumlah neuron tersembunyi harus antara ukuran lapisan input dan ukuran lapisan output.
- Jumlah neuron tersembunyi harus 2/3 ukuran lapisan input, ditambah ukuran lapisan output.
- Jumlah neuron yang tersembunyi harus kurang dari dua kali ukuran lapisan input.
Tiga aturan ini memberikan titik awal untuk Anda pertimbangkan. Pada akhirnya, pemilihan arsitektur untuk jaringan saraf Anda akan menuju ke coba-coba. Tapi apa sebenarnya yang dimaksud dengan coba-coba? Anda tidak ingin mulai melemparkan sejumlah layer dan neuron secara acak ke jaringan Anda. Untuk melakukannya akan sangat memakan waktu. Bab 8, "Memangkas Jaringan Saraf Tiruan" akan mengeksplorasi berbagai cara untuk menentukan struktur optimal untuk jaringan saraf.
Saya juga suka cuplikan berikut dari jawaban yang saya temukan di researchgate.net , yang menyampaikan banyak hal hanya dalam beberapa kata:
Steffen B Petersen · Universitas Aalborg
[...]
Untuk mengamankan kemampuan jaringan untuk menggeneralisasi jumlah node harus dijaga serendah mungkin. Jika Anda memiliki banyak node, jaringan Anda menjadi bank memori yang dapat memanggil kembali set pelatihan dengan sempurna, tetapi tidak berkinerja baik pada sampel yang bukan bagian dari set pelatihan.
Saya sedang mengerjakan studi empiris tentang hal ini pada saat ini (menyetujui simulasi abad prosesor pada fasilitas HPC kami!). Saran saya adalah menggunakan jaringan "besar" dan regularisasi, jika Anda menggunakan regularisasi maka arsitektur jaringan menjadi kurang penting (asalkan itu cukup besar untuk mewakili fungsi dasar yang ingin kita tangkap), tetapi Anda perlu menyelaraskan regularisasi tersebut. parameter dengan benar.
Salah satu masalah dengan pemilihan arsitektur adalah bahwa itu adalah kontrol diskrit, daripada kontinu, dari kompleksitas model, dan karena itu dapat menjadi sedikit instrumen tumpul, terutama ketika kompleksitas ideal rendah.
Namun, ini semua tunduk pada teorema "tidak ada makan siang gratis", sementara regularisasi efektif dalam banyak kasus, akan selalu ada kasus di mana pemilihan arsitektur bekerja lebih baik, dan satu-satunya cara untuk mengetahui apakah itu benar dari masalah yang dihadapi. adalah mencoba pendekatan dan validasi silang.
Jika saya membangun pembangun jaringan saraf otomatis, saya akan menggunakan pendekatan Bayesian Hybrid Monte Carlo (HMC) berbasis sampel Radford, dan menggunakan jaringan besar dan berintegrasi pada bobot daripada mengoptimalkan bobot satu jaringan. Namun itu mahal secara komputasional dan sedikit "seni hitam", tetapi hasil yang dicapai Prof. Neal menunjukkan bahwa itu sepadan!
Sejauh yang saya tahu tidak ada cara untuk memilih secara otomatis jumlah lapisan dan neuron di setiap lapisan. Tetapi ada jaringan yang dapat membangun topologi mereka secara otomatis, seperti EANN (Jaringan Syaraf Tiruan Evolusi, yang menggunakan Algoritma Genetika untuk mengembangkan topologi).
Ada beberapa pendekatan, yang kurang lebih modern yang tampaknya memberikan hasil yang baik adalah NEAT (Neuro Evolution of Augmented Topologies) .
Cara otomatis membangun jaringan saraf menggunakan pencarian parameter hiper global:
Lapisan input dan output adalah ukuran tetap.
Apa yang bisa bervariasi:
Beberapa metode dapat digunakan untuk masalah optimasi diskrit ini , dengan jaringan keluar dari kesalahan sampel sebagai fungsi biaya.
Maaf saya belum bisa memposting komentar, jadi tolong tahan dengan saya. Ngomong-ngomong, aku menabrak utas diskusi ini yang mengingatkanku pada sebuah makalah yang baru saja kulihat. Saya pikir mungkin menarik bagi orang-orang yang berpartisipasi di sini:
AdaNet: Pembelajaran Struktural Adaptif Jaringan Syaraf Tiruan
Corinna Cortes, Xavier Gonzalvo, Vitaly Kuznetsov, Mehryar Mohri, Scott Yang; Prosiding Konferensi Internasional ke-34 tentang Pembelajaran Mesin, PMLR 70: 874-883, 2017.
Abstrak Kami menyajikan kerangka kerja baru untuk menganalisis dan mempelajari jaringan saraf tiruan. Pendekatan kami secara simultan dan adaptif mempelajari struktur jaringan serta bobotnya. Metodologi ini didasarkan pada dan disertai dengan jaminan pembelajaran teoretis yang bergantung pada data, sehingga arsitektur jaringan akhir terbukti beradaptasi dengan kerumitan setiap masalah yang diberikan.
Saya telah mendaftarkan banyak cara pembelajaran topologi dalam tesis master saya, bab 3 . Kategori besar adalah:
Saya ingin menyarankan metode yang kurang umum tetapi sangat efektif .
Pada dasarnya, Anda dapat memanfaatkan sekumpulan algoritma yang disebut "algoritma genetika" yang mencoba sebagian kecil dari opsi potensial (jumlah acak layer dan node per layer). Kemudian memperlakukan populasi pilihan ini sebagai "orang tua" yang menciptakan anak-anak dengan menggabungkan / bermutasi satu atau lebih dari orang tua seperti organisme berevolusi. Anak-anak terbaik dan beberapa anak ok acak disimpan di setiap generasi dan dari generasi ke generasi, yang terkuat bertahan.
Untuk ~ 100 atau lebih sedikit parameter (seperti pilihan jumlah lapisan, jenis lapisan, dan jumlah neuron per lapisan), metode ini sangat efektif. Gunakan dengan membuat sejumlah arsitektur jaringan potensial untuk setiap generasi dan melatihnya sebagian hingga kurva pembelajaran dapat diperkirakan (100-10k mini-batch biasanya tergantung pada banyak parameter). Setelah beberapa generasi, Anda mungkin ingin mempertimbangkan titik di mana kereta dan validasi mulai memiliki tingkat kesalahan yang sangat berbeda (overfitting) sebagai fungsi tujuan Anda untuk memilih anak-anak. Sebaiknya gunakan subset data Anda yang sangat kecil (10-20%) hingga Anda memilih model akhir untuk mencapai kesimpulan lebih cepat. Juga, gunakan satu seed untuk inisialisasi jaringan Anda untuk membandingkan hasilnya dengan benar.
10-50 generasi harus menghasilkan hasil yang bagus untuk jaringan berukuran layak.
Jumlah Lapisan Tersembunyi dan apa yang dapat mereka raih:
0 - Hanya mampu mewakili fungsi atau keputusan linier yang dapat dipisahkan.
1 - Dapat memperkirakan fungsi apa pun yang berisi pemetaan terus menerus dari satu ruang terbatas ke yang lain.
2 - Dapat mewakili batas keputusan arbitrer untuk akurasi sewenang-wenang dengan fungsi aktivasi rasional dan dapat memperkirakan pemetaan yang mulus untuk akurasi apa pun.
Lebih dari 2 - Lapisan tambahan dapat mempelajari representasi kompleks (semacam rekayasa fitur otomatis) untuk lapisan lapisan.