Mengapa Rekonstruksi dalam Autoencoder Menggunakan Fungsi Aktivasi yang Sama dengan Aktivasi Teruskan, dan bukan Pembalikan?

9

Misalkan Anda memiliki lapisan input dengan n neuron dan lapisan tersembunyi pertama m neuron, dengan biasanya m<n. Kemudian Anda menghitung aktingnyaaj dari j-th neuron di lapisan tersembunyi oleh

aj=f(i=1..nwi,jxi+bj)dimana f adalah fungsi aktivasi seperti tanh atau sigmoid.

Untuk melatih jaringan, Anda menghitung rekonstruksi input, dilambangkan z, dan meminimalkan kesalahan di antara z dan x. Sekarang, ituielemen ke-dalam z biasanya dihitung sebagai:

zi=f(j=1..mwj,iaj+bi)

Saya bertanya-tanya mengapa direkonstruksi z biasanya dihitung dengan fungsi aktivasi yang sama alih-alih menggunakan fungsi terbalik, dan mengapa terpisah w dan bberguna bukannya menggunakan bobot dan bias terikat? Tampaknya jauh lebih intuitif bagi saya untuk menghitung yang direkonstruksi dengan fungsi aktivasi terbalikf1misalnya arctanh, sebagai berikut:

zi=j=1..mf1(aj)bjwj,iT

Perhatikan, bahwa di sini bobot yang diikat digunakan, yaitu, w=wT, dan bias bj lapisan tersembunyi digunakan, alih-alih memperkenalkan set bias tambahan untuk lapisan input.

Dan pertanyaan yang sangat terkait: Untuk memvisualisasikan fitur, alih-alih menghitung rekonstruksi, orang biasanya akan membuat matriks identitas dengan dimensi lapisan tersembunyi. Kemudian, seseorang akan menggunakan setiap kolom matriks sebagai input ke fungsi reaktivasi, yang menginduksi output dalam neuron input. Untuk fungsi reaktivasi, apakah lebih baik menggunakan fungsi aktivasi yang sama (respzi) atau fungsi terbalik (resp zi)?

Manfred Eppe
sumber

Jawaban:

5

Saya tidak berpikir itu asumsi Anda w=wTmemegang. Atau lebih tepatnya tidak perlu, dan jika itu dilakukan, itu tidak untuk entah bagaimana secara otomatis membalikkan perhitungan untuk membuat fitur lapisan tersembunyi. Tidak mungkin untuk membalikkan kompresi secara umum, pergi dari n ke m yang lebih kecil, secara langsung dengan cara ini. Jika itu tujuannya, maka Anda ingin bentuk inversi matriks, bukan transpos sederhana.

Sebaliknya, kami hanya ingin wij untuk representasi fitur tingkat tinggi terkompresi, dan akan dibuang wij setelah auto-encoder selesai.

Anda bisa mengaturw=wTdan ikat beban. Ini dapat membantu dengan regularisasi - membantu autoencoder menggeneralisasi. Tapi itu tidak perlu.

Agar autoencoder berfungsi, sebenarnya tidak masalah fungsi aktivasi apa yang Anda gunakan setelah lapisan yang Anda latih sebelumnya, asalkan lapisan terakhir dari autoencoder dapat mengekspresikan kisaran input yang mungkin. Namun, Anda mungkin mendapatkan kualitas hasil yang bervariasi tergantung pada apa yang Anda gunakan, seperti biasa untuk jaringan saraf.

Sangat masuk akal untuk menggunakan fungsi aktivasi yang sama dengan yang Anda buat untuk layer yang sudah dilatih sebelumnya, karena ini adalah pilihan paling sederhana.

Menggunakan fungsi terbalik juga dimungkinkan, tetapi tidak disarankan untuk sigmoid atau tanh, karena misalnya arctanh tidak didefinisikan <-1 atau> 1, sehingga kemungkinan tidak akan stabil secara numerik.

Neil Slater
sumber
Terima kasih! Namun demikianw=wTtampaknya menjadi praktik umum, seperti itu, misalnya, digunakan dalam tutorial yang sangat mendasar untuk mencela autoencoder dari deeplearning.net: ( deeplearning.net/tutorial/dA.html#daa ) Saya tidak merasa sangat masuk akal untuk menggunakan hal yang sama fungsi aktivasi untuk rekonstruksi, dapatkah Anda menjelaskan hal ini? Memang benar bahwa itu adalah pilihan paling sederhana, tetapi tampaknya lebih alami bagi saya untuk menggunakanzi dengan arctanh, karena ini menghasilkan sebenarnya kebalikan matematika dari aktivasi.
Manfred Eppe
Kamu bisa jika kamu mau. Misalnya dari deeplearning.net/tutorial/dA.html "Secara opsional , matriks bobotW pemetaan terbalik dapat dibatasi menjadi transpose pemetaan maju: W=WT. Ini disebut sebagai bobot terikat. "(Penekanan pada tambang). Inti dari jawaban saya adalah bahwa jika Anda melakukan ini, itu bukan untuk memberikan pembalikan otomatis pengkodean, itu hanya kendala yang akan mengatur pelatihan secara teratur.
Neil Slater
Terima kasih, Neil. Komentar Anda tentangw=wTmasalah membantu saya menggeneralisasi pertanyaan saya dan membuatnya lebih tepat, jadi saya mengedit pertanyaan itu sesuai. Sebenarnya, saya sebenarnya tidak mengerti mengapa ada manfaatnya memisahkanw sama sekali, alih-alih selalu menggunakan matriks transposisi wT. Jawabannya mungkin "karena memberikan hasil yang lebih baik", tetapi kemudian saya bertanya - tanya mengapa itu memberikan hasil yang lebih baik. Itu terlihat tidak intuitif bagi saya.
Manfred Eppe
@ ManfredEppe: Mungkin sebagai gantinya Anda harus berpikir dengan hati-hati tentang mengapa Anda berpikir matriks bobot dan fungsi invers yang terbalik akan berguna? Tidak ada alasan khusus untuk menggunakannya - apa sebenarnya intuisi Anda di balik berpikir bahwa mereka akan berguna? Jika itu untuk "simetri" maka lihat lagi urutan penerapannya - ini bukan pembalikan simetris dari lapisan input-ke-tersembunyi (jika ya, fungsi aktivasi terbalik harus menjadi yang pertama)
Neil Slater