Bagaimana cara membuat jaringan saraf saya lebih baik dalam memprediksi gelombang sinus?

21

Di sini, lihat: Gelombang Sinus yang Dihasilkan Anda dapat melihat dengan tepat di mana data pelatihan berakhir. Data pelatihan berubah dari menjadi .11

Saya menggunakan Keras dan jaringan padat 1-100-100-2 dengan aktivasi tanh. Saya menghitung hasil dari dua nilai, p dan q sebagai p / q. Dengan cara ini saya dapat mencapai ukuran angka apa pun menggunakan hanya lebih kecil dari 1 nilai.

Harap dicatat bahwa saya masih pemula di bidang ini, jadi tenang saja.

Markus Appel
sumber
1
Untuk memperjelas, data pelatihan Anda berkisar antara -1,5 hingga +1,5, jadi jaringan telah mempelajarinya secara akurat? Jadi pertanyaan Anda adalah tentang mengekstrapolasi hasil menjadi angka yang tidak terlihat di luar kisaran data pelatihan?
Neil Slater
11
Anda bisa mencoba Fourier mengubah segalanya dan bekerja di domain frekuensi.
Nick Alger
4
Untuk pengulas masa depan: Saya tidak tahu mengapa ini ditandai untuk ditutup. Tampak jelas bagi saya: ini tentang strategi untuk memodelkan data periodik dengan jaringan saraf.
Sycorax berkata Reinstate Monica
1
Saya pikir ini adalah pertanyaan yang masuk akal untuk seorang pemula dalam domain pembelajaran mesin, yang harus kami tampung di sini. Saya tidak akan menutupnya
Aksakal
1
Saya tidak tahu apakah ini akan membantu, tetapi di luar kotak vanilla NN hanya akan dapat mempelajari fungsi polinomial. Dalam praktik itu baik-baik saja karena Anda dapat membuat polinomial ditutup secara sewenang-wenang pada interval tetap. Tetapi itu berarti bahwa Anda tidak pernah dapat mempelajari gelombang sinus yang memanjang melewati ujung interval. Trik seperti yang ditunjukkan oleh jawaban lain di bawah ini adalah mentransformasikan masalah menjadi masalah yang dapat dipecahkan dengan cara itu. Itulah yang dilakukan oleh transformasi Fourier, dan dalam hal itu mempelajari gelombang sinus hanyalah mempelajari konstanta.
Ukko

Jawaban:

19

Anda menggunakan jaringan umpan-maju; jawaban lain benar bahwa FFNN tidak hebat dalam ekstrapolasi di luar jangkauan data pelatihan.

Namun, karena data memiliki kualitas periodik, masalahnya mungkin dapat dimodelkan dengan LSTM. LSTM adalah berbagai sel jaringan saraf yang beroperasi pada urutan, dan memiliki "memori" tentang apa yang mereka "lihat" sebelumnya. Abstrak dari bab buku ini menunjukkan bahwa pendekatan LSTM adalah keberhasilan yang memenuhi syarat untuk masalah-masalah berkala.

Dalam hal ini, data pelatihan akan menjadi urutan tupel , dan tugas untuk membuat prediksi yang akurat untuk input baru untuk beberapa dan mengindeks beberapa urutan yang meningkat. Panjang setiap urutan input, lebar interval yang mereka tutup, dan jaraknya, terserah Anda. Secara intuitif, saya berharap grid biasa yang mencakup 1 periode menjadi tempat yang baik untuk memulai, dengan urutan pelatihan yang mencakup berbagai nilai, daripada dibatasi pada beberapa interval.(xi,sin(xi))xi+1xi+nni

(Jimenez-Guarneros, Magdiel dan Gomez-Gil, Pilar dan Fonseca-Delgado, Rigoberto dan Ramirez-Cortes, Manuel dan Alarcon-Aquino, Vicente, "Prediksi Jangka Panjang dari Fungsi Sinus Menggunakan LSTM Neural Network", di Nature- Desain Terinspirasi Sistem Cerdas Hibrida )

Sycorax berkata Reinstate Monica
sumber
2
Apa urutan yang dimodelkan di sini? Apa langkah waktunya? Ini terlihat seperti aplikasi pas kurva sederhana bagi saya.
David J. Harris
@ DavidJ.Harris Saya telah memperbarui jawaban saya.
Sycorax berkata Reinstate Monica
1/(2π)
Apakah ini cara mereka melakukan prediksi pasar, misalnya?
Markus Appel
3
Tidak, itu bukan cara Anda melakukan prediksi pasar. Setidaknya bukan bagaimana Anda melakukannya untuk menghasilkan uang.
Aksakal
13

Jika yang ingin Anda lakukan adalah mempelajari fungsi periodik sederhana seperti ini, maka Anda bisa melihat ke dalam menggunakan Proses Gaussian. Dokter memungkinkan Anda untuk menegakkan pengetahuan domain Anda sampai batas tertentu dengan menentukan fungsi kovarian yang sesuai; dalam contoh ini, karena Anda tahu datanya periodik, Anda dapat memilih kernel periodik, maka model akan memperkirakan struktur ini. Anda dapat melihat contoh dalam gambar; di sini, saya mencoba untuk menyesuaikan data ketinggian pasang, jadi saya tahu itu memiliki struktur periodik. Karena saya menggunakan struktur periodik, modelnya memperkirakan periodisitas ini (kurang lebih) dengan benar. OFC jika Anda mencoba untuk belajar tentang jaringan saraf ini tidak benar-benar relevan, tetapi ini mungkin pendekatan yang sedikit lebih bagus daripada fitur rekayasa tangan. Kebetulan, jaringan saraf dan gp terkait erat dalam teori,masukkan deskripsi gambar di sini

Dokter tidak selalu berguna karena tidak seperti jaring saraf, mereka sulit untuk skala ke dataset besar dan jaringan dalam, tetapi jika Anda tertarik pada masalah dimensi rendah seperti ini, mereka mungkin akan lebih cepat dan lebih dapat diandalkan.

(dalam gambar, titik-titik hitam adalah data pelatihan dan merah adalah targetnya; Anda dapat melihat bahwa meskipun tidak tepat, modelnya mempelajari periodisitas sekitar. Pita berwarna adalah interval kepercayaan dari model yang ramalan)

lsgs
sumber
2
Plot ini indah.
Sycorax berkata Reinstate Monica
11

Algoritma pembelajaran mesin - termasuk jaringan saraf - dapat belajar untuk memperkirakan fungsi-fungsi sewenang-wenang, tetapi hanya dalam interval di mana ada cukup banyak data pelatihan.

Algoritma pembelajaran mesin berbasis statistik bekerja paling baik ketika mereka melakukan interpolasi - memprediksi nilai yang dekat atau di antara contoh pelatihan.

Di luar data pelatihan Anda, Anda berharap untuk ekstrapolasi. Tetapi tidak ada cara mudah untuk mencapainya. Jaringan saraf tidak pernah mempelajari suatu fungsi secara analitis, hanya kira-kira melalui statistik - ini berlaku untuk hampir semua teknik pembelajaran ML yang diawasi. Algoritme yang lebih maju dapat mendekati secara sewenang-wenang ke fungsi yang dipilih dengan memberikan contoh yang cukup (dan parameter bebas dalam model), tetapi akan tetap hanya melakukannya dalam kisaran data pelatihan yang disediakan.

Bagaimana jaringan (atau ML lainnya) berperilaku di luar kisaran data pelatihan Anda akan bergantung pada arsitekturnya termasuk fungsi aktivasi yang digunakan.

dosadosa(x),dosa(2x+π/4)dosa

Neil Slater
sumber
"Jaringan saraf tidak pernah mempelajari fungsi secara analitis, hanya kira-kira melalui statistik." - hal yang sama dapat dikatakan tentang apa saja yang digunakan dalam praktik, misalnya FFT juga tidak belajar secara analitis. Anda dapat meningkatkan laju pengambilan sampel dan periode hingga tak terbatas dan menjadi sangat dekat dengan fungsi sebenarnya, tetapi hal yang sama berlaku untuk NN.
Aksakal
@Aksakal: Ya itu benar. Namun saya tidak ingin menyatakan bahwa "Semua algoritma ML tidak pernah mempelajari fungsi secara analitik ..." karena seseorang pasti akan menghasilkan contoh tandingan dari beberapa pelajar analitik Bayesian atau pemrograman genetik dll. Saya akan mencoba mengeditnya untuk membuatnya lebih umum
Neil Slater
9

Dalam beberapa kasus, pendekatan yang disarankan @Neil Slater untuk mengubah fitur Anda dengan fungsi periodik akan bekerja dengan sangat baik, dan mungkin menjadi solusi terbaik. Kesulitan di sini adalah bahwa Anda mungkin perlu memilih periode / panjang gelombang secara manual (lihat pertanyaan ini ).

Jika Anda ingin periodisitas tertanam lebih dalam ke jaringan, cara termudah adalah dengan menggunakan sin / cos sebagai fungsi aktivasi Anda dalam satu atau lebih lapisan. Makalah ini membahas potensi kesulitan dan strategi untuk berurusan dengan fungsi aktivasi berkala.

Atau, makalah ini mengambil pendekatan yang berbeda, di mana bobot jaringan tergantung pada fungsi periodik. Makalah ini juga menyarankan penggunaan splines daripada sin / cos, karena mereka lebih fleksibel. Ini adalah salah satu makalah favorit saya tahun lalu, jadi layak dibaca (atau setidaknya menonton video) bahkan jika Anda tidak menggunakan pendekatannya.

David J. Harris
sumber
9

Anda mengambil pendekatan yang salah, tidak ada yang bisa dilakukan dengan pendekatan ini untuk memperbaiki masalah.

Ada beberapa cara berbeda untuk mengatasi masalah tersebut. Saya akan menyarankan yang paling jelas melalui rekayasa fitur. Alih-alih memasukkan waktu sebagai fitur linier, letakkan sebagai sisa modulus T = 1. Misalnya, t = 0,2, 1,2 dan 2,2 semua akan menjadi fitur t1 = 0,1 dll. Selama T lebih besar dari periode gelombang, ini akan berhasil. Tancapkan benda ini ke jaring Anda dan lihat cara kerjanya.

Rekayasa fitur diremehkan. Ada tren ini dalam AI / ML di mana tenaga penjualan mengklaim bahwa Anda membuang semua input Anda ke internet, dan entah bagaimana itu akan mencari tahu apa yang harus dilakukan dengan mereka. Tentu, memang, seperti yang Anda lihat dalam contoh Anda, tetapi kemudian mudah rusak. Ini adalah contoh yang bagus yang menunjukkan betapa pentingnya membangun fitur yang baik bahkan dalam beberapa kasus paling sederhana.

Juga, saya harap Anda menyadari bahwa ini adalah contoh paling kasar dari rekayasa fitur. Ini hanya untuk memberi Anda gambaran tentang apa yang dapat Anda lakukan dengannya.

Aksakal
sumber