Sejauh yang saya tahu dua formula yang Anda berikan cukup banyak inisialisasi standar. Saya telah melakukan tinjauan literatur beberapa waktu lalu, saya menyalinnya di bawah ini jika tertarik.
[1] menjawab pertanyaan:
Pertama, bobot tidak boleh diatur ke nol untuk memecah simetri saat memprogram kembali:
Bias umumnya dapat diinisialisasi ke nol tetapi bobot harus diinisialisasi dengan hati-hati untuk memecah simetri antara unit tersembunyi dari lapisan yang sama. Karena unit output yang berbeda menerima sinyal gradien yang berbeda, masalah pemecahan simetri ini tidak menyangkut bobot output (ke dalam unit output), yang karenanya dapat juga diatur ke nol.
Beberapa strategi inisialisasi:
- [2] dan [3] merekomendasikan penskalaan dengan kebalikan dari akar kuadrat dari kipas-in
- Glorot dan Bengio (2010) dan Tutorial Belajar Dalam menggunakan kombinasi fan-in dan fan-out:
- untuk unit sigmoid: sampel Seragam (-r, r) dengan (fan-in adalah jumlah input unit).r = 6fan-in + fan-out---------√
- untuk unit singgung hiperbolik: sampel Seragam (-r, r) dengan (fan-in adalah jumlah input unit).r = 4 6fan-in + fan-out---------√
- dalam kasus RBM, Gaussian rata-rata nol dengan standar deviasi kecil sekitar 0,1 atau 0,01 bekerja dengan baik (Hinton, 2010) untuk menginisialisasi bobot.
- Inisialisasi matriks acak ortogonal, yaitu
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
kemudian digunakan u
sebagai matriks inisialisasi Anda.
Juga, pra-pelatihan tanpa pengawasan dapat membantu dalam beberapa situasi:
Pilihan penting adalah apakah seseorang harus menggunakan pra-pelatihan tanpa pengawasan (dan algoritma pembelajaran fitur tanpa pengawasan yang digunakan) untuk menginisialisasi parameter. Dalam sebagian besar pengaturan kami telah menemukan pra-pelatihan tanpa pengawasan untuk membantu dan sangat jarang menyakitkan, tetapi tentu saja itu menyiratkan waktu pelatihan tambahan dan parameter hiper tambahan.
Beberapa perpustakaan ANN juga memiliki beberapa daftar menarik, misalnya Lasagna :
Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b]) Glorot weight initialization.
GlorotNormal([gain, c01b]) Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b]) He weight initialization.
HeNormal([gain, c01b]) He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain]) Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.
[1] Bengio, Yoshua. " Rekomendasi praktis untuk pelatihan arsitektur mendalam berbasis gradien. " Neural Networks: Tricks of the Trade. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB, dan Muller, K. (1998a). Backprop yang efisien. Dalam Jaringan Saraf Tiruan, Trik Perdagangan .
[3] Glorot, Xavier, dan Yoshua Bengio. " Memahami kesulitan melatih jaringan saraf feedforward yang mendalam ." Konferensi internasional tentang kecerdasan buatan dan statistik. 2010