Permutasi jaringan saraf invarian

14

Diberikan jaringan neural f yang mengambil sebagai input n titik data: x1,,xn . Kita katakan f adalah invarian permutasi jika

f(x1...xn)=f(pi(x1...xn))

untuk permutasi pi .

Bisakah seseorang merekomendasikan titik awal (artikel, contoh, atau makalah lain) untuk permutasi jaringan syaraf invarian?

Josef Ondrej
sumber
Pertanyaan menarik. Anda ingin memperlakukan input Anda sebagai set daripada vektor. Dengan asumsi input Anda skalar atau dapat dibandingkan, apakah Anda mempertimbangkan untuk menyortir input Anda untuk membuat representasi kanonis invarian permutasi dan memasukkannya ke jaringan biasa?
mjul
@mjul Input saya adalah serangkaian taruhan klien (setiap taruhan diwakili oleh vektor dari beberapa variabel kategori dan kontinu). Saya bisa memesannya secara kronologis misalnya, tetapi karena jarak waktu antara taruhan untuk setiap klien sangat berbeda, ini tidak masuk akal. Ini mungkin dapat diselesaikan dengan menggunakan beberapa fungsi (tetap atau dipelajari) dari waktu yang akan meluruhkan koefisien untuk setiap taruhan. Tapi saya pikir pemesanan benar-benar tidak masalah dalam kasus ini jadi saya ingin mencoba data yang tidak teratur terlebih dahulu, yang jelas mengharuskan untuk memperlakukan taruhan untuk setiap klien secara simetris.
Josef Ondrej
Apa output jaringannya? Jika jaringan invarian permutasi, output akan sama untuk urutan input apa pun. Apa ini yang kau inginkan?
BlueMoon93
@ BlueMoon93 Ya, itulah tepatnya yang saya inginkan. Output dapat berupa apa saja (angka, vektor) selama tidak bergantung pada urutan input.
Josef Ondrej
mengapa Anda ingin permutasi jaringan saraf invarian?
kc sayz 'kc sayz'

Jawaban:

2

Sejauh yang saya tahu, tidak ada yang mencoba ini, karena cara jaringan terstruktur. Setiap input memiliki satu set bobot, yang terhubung ke lebih banyak input. Jika input beralih, output juga akan .

Namun, Anda dapat membangun jaringan yang mendekati perilaku ini. Di set pelatihan Anda, gunakan pembelajaran batch dan untuk setiap sampel pelatihan, berikan semua permutasi yang mungkin ke jaringan sehingga itu belajar untuk menjadi permutasi invarian. Ini tidak akan pernah persis invarian, mungkin saja dekat .

Cara lain untuk melakukan ini adalah memiliki bobot yang direplikasi untuk semua input. Sebagai contoh, anggaplah Anda memiliki 3 input (i0, i1, i2), dan lapisan tersembunyi berikutnya memiliki 2 node (hl0, hl1) dan fungsi aktivasi F. Dengan asumsi layer yang terhubung penuh, Anda memiliki 2 bobot w0 dan w1. Node layer tersembunyi hl0 dan hl1 diberikan, masing-masing, oleh

  • hl0 = F (i0w0 + i1w0 + i2w0)

  • hl1 = F (i0w1 + i1w1 + i2w1)

Dengan demikian memberi Anda lapisan tersembunyi yang nilainya invarian permutasi dari input. Mulai sekarang, Anda dapat mempelajari dan membangun sisa jaringan sesuai keinginan Anda. Ini adalah pendekatan yang berasal dari lapisan konvolusional.


Di luar topik, ini sepertinya proyek yang keren. Jika Anda ingin bekerja sama dalam beberapa proyek penelitian, hubungi saya (periksa profil saya)

BlueMoon93
sumber
Pendekatan pertama yang disarankan akan tidak mungkin dalam kasus saya karena kompleksitas komputasi. Yang kedua di sisi lain tampaknya mungkin terlalu ketat. Tetapi ini tentu saja merupakan awal yang baik. Apa yang saya temukan sejauh ini adalah pendekatan yang mirip dengan yang saya temukan dalam makalah ini: arxiv.org/pdf/1612.04530.pdf . Pertama, saya mempertimbangkan semua pasangan (umumnya semua k-tupel) dari input x_i, x_j, i, j dalam 0 ... n dan menerapkan beberapa jaringan saraf pada semuanya (nn yang sama pada setiap pasangan). Ini memberi saya n ** 2 output f (x_i, x_j) dan kemudian saya rata-rata (atau mengambil maksimum) dan menerapkan anoter nn atas hasilnya.
Josef Ondrej
Inilah yang telah saya kemukakan
Josef Ondrej
3

Saya telah mengimplementasikan Permutational Layer di sini menggunakan Keras: https://github.com/off99555/superkeras/blob/master/permutational_layer.py

Anda dapat memanggil PermutationalModulefungsi untuk menggunakannya.

Diimplementasikan mengikuti makalah ini: https://arxiv.org/pdf/1612.04530.pdf

Idenya adalah untuk membandingkan semua pasangan N ^ 2 pasangan dari input N , gunakan model dengan bobot bersama, lalu gunakan fungsi pooling N kali pada input N. Output yang Anda dapat menggunakan pooling lagi tetapi di koran, mereka tidak menyebutkan pooling lain.

off99555
sumber