Apa pentingnya penggabungan model dalam Keras?

10

Saya telah belajar bahwa Keras memiliki fungsi untuk "menggabungkan" dua model sesuai dengan yang berikut:

from keras.layers import Merge

left_branch = Sequential()
left_branch.add(Dense(32, input_dim=784))

right_branch = Sequential()
right_branch.add(Dense(32, input_dim=784))

merged = Merge([left_branch, right_branch], mode='concat')

Apa gunanya mergint NNs, di mana situasi itu berguna? Apakah ini semacam pemodelan ensemble? Apa perbedaan antara beberapa "mode" (concat, avg, dot dll ...) dalam hal kinerja?

Hendrik
sumber

Jawaban:

14

Ini digunakan karena beberapa alasan, pada dasarnya itu digunakan untuk bergabung dengan beberapa jaringan bersama. Contoh yang baik adalah ketika Anda memiliki dua jenis input, misalnya tag dan gambar. Anda dapat membangun jaringan yang misalnya memiliki:

IMAGE -> Conv -> Max Pooling -> Conv -> Max Pooling -> Dense

TAG -> Embedding -> Lapisan padat

Untuk menggabungkan jaringan-jaringan ini menjadi satu prediksi dan melatihnya bersama, Anda bisa menggabungkan lapisan-lapisan padat ini sebelum klasifikasi akhir.

Jaringan di mana Anda memiliki banyak input adalah penggunaannya yang paling 'jelas', di sini adalah gambar yang menggabungkan kata-kata dengan gambar di dalam RNN, bagian Multimodal adalah tempat dua input digabungkan:

Jaringan Saraf Multimodal

Contoh lain adalah lapisan Inception Google di mana Anda memiliki konvolusi berbeda yang ditambahkan kembali bersama sebelum sampai ke lapisan berikutnya.

Untuk mengumpankan beberapa input ke Keras, Anda dapat melewati daftar array. Dalam contoh kata / gambar Anda akan memiliki dua daftar:

x_input_image = [image1, image2, image3]
x_input_word = ['Feline', 'Dog', 'TV']
y_output = [1, 0, 0]

Maka Anda bisa masuk sebagai berikut:

model.fit(x=[x_input_image, x_input_word], y=y_output]
Jan van der Vegt
sumber
Maaf, saya tidak bisa melihat titik dalam membangun jaringan yang terpisah baik untuk contoh pelatihan dan label sementara ada kemungkinan untuk memberi makan ini dalam satu jaringan dalam fase pemasangan yang tetap melakukan pekerjaan. Saya dapat melihat bahwa penggabungan adalah suatu kemungkinan tetapi bukan keuntungannya dibandingkan "tidak digabungkan".
Hendrik
Bagaimana Anda memberi mereka makan pada fase pemasangan? Input selalu terpisah, Anda tidak dapat menggunakan lapisan konvolusi pada label Anda sehingga lapisan ini perlu digabungkan entah bagaimana.
Jan van der Vegt
Dalam Keras model.fit()menerima X dan y untuk pemasangan dan modeldalam hal ini dapat menjadi model "non-merger". Cukup banyak seperti jenis model lainnya di Sklearn misalnya.
Hendrik
3
Label mungkin nama yang dipilih dengan buruk dari sisi saya, katakanlah Anda memiliki gambar dan anotasi dengan gambar itu, dan Anda ingin mengklasifikasikan apakah kombinasi itu tentang kucing atau bukan, maka Anda memiliki dua jenis input, dan satu output biner . Untuk mendapatkan sinergi di antara mereka, Anda harus menggabungkan lapisan di suatu tempat. Contoh lain adalah di mana Anda memiliki dua gambar, satu dari atas dan satu dari bawah yang harus Anda klasifikasikan bersama
Jan van der Vegt
3
@ Hendrik: Tidak ada "model komponen", hanya ada satu model. Ini adalah yang kompleks, diaktifkan oleh fitur penggabungan layer. Anda mengevaluasinya seperti yang Anda lakukan untuk setiap model tunggal - yaitu dengan metrik terhadap kumpulan data uji tahan (dalam contoh gambar / kata dengan data yang terdiri dari gambar, teks parsial terkait dan kata berikutnya sebagai label untuk diprediksi). Jika mau, Anda dapat memeriksa lapisan dalam model untuk melihat apa yang mereka lakukan - mis. Analisis fitur CNN masih dapat diterapkan ke lapisan convolutional.
Neil Slater