Saya telah menulis MLP sederhana di TensorFlow yang memodelkan XOR-Gate .
Jadi untuk:
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
itu harus menghasilkan yang berikut:
output_data = [[0.], [1.], [1.], [0.]]
Jaringan memiliki lapisan input, lapisan tersembunyi dan lapisan keluaran dengan masing-masing 2, 5 dan 1 neuron.
Saat ini saya memiliki cross entropy berikut:
cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))
Saya juga sudah mencoba alternatif yang lebih sederhana ini:
cross_entropy = tf.square(n_output - output)
bersama dengan beberapa percobaan lainnya.
Namun, tidak peduli apa pengaturan saya, kesalahan dengan GradientDescentOptimizer
menurun jauh lebih lambat daripada AdamOptimizer
.
Bahkan tf.train.AdamOptimizer(0.01)
menghasilkan hasil yang benar-benar baik setelah 400-800 langkah pembelajaran (dalam ketergantungan tingkat pembelajaran, di mana 0.01
memiliki hasil terbaik) sementara tf.train.GradientDescentOptimizer
selalu diperlukan lebih dari 2000 langkah pembelajaran tidak peduli apa perhitungan lintas entropi atau tingkat pembelajaran yang digunakan.
Kenapa begitu? Tampaknya AdamOptimizer
selalu ada pilihan yang lebih baik ?!
Jawaban:
The
tf.train.AdamOptimizer
penggunaan Kingma dan Ba algoritma Adam untuk mengendalikan laju belajar. Adam menawarkan beberapa keunggulan dibandingkan yang sederhanatf.train.GradientDescentOptimizer
. Yang terpenting adalah menggunakan rata-rata bergerak dari parameter (momentum); Bengio membahas alasan mengapa hal ini bermanfaat dalam Bagian 3.1.1 dari makalah ini . Sederhananya, ini memungkinkan Adam untuk menggunakan ukuran langkah efektif yang lebih besar, dan algoritma akan menyatu dengan ukuran langkah ini tanpa penyetelan halus.Sisi bawah utama dari algoritma adalah bahwa Adam membutuhkan lebih banyak perhitungan yang harus dilakukan untuk setiap parameter dalam setiap langkah pelatihan (untuk mempertahankan rata-rata bergerak dan varians, dan menghitung gradien yang diskalakan); dan lebih banyak status yang harus dipertahankan untuk setiap parameter (kira-kira tiga kali lipat ukuran model untuk menyimpan rata-rata dan varians untuk setiap parameter). Sederhana
tf.train.GradientDescentOptimizer
bisa sama-sama digunakan dalam MLP Anda, tetapi akan membutuhkan lebih banyak penyetelan hyperparameter sebelum akan menyatu dengan cepat.sumber
learning_rate
argumen ketf.train.GradientDescentOptimizer
konstruktor sampai konvergen lebih cepat." :)