2 poin oleh GN⁺ 2024-05-02 | 1 komentar | Bagikan ke WhatsApp
  • pykan adalah repositori GitHub untuk makalah “KAN: Kolmogorov-Arnold Networks” dan “KAN 2.0: Kolmogorov-Arnold Networks Meet Science”, yang menyediakan pembelajaran, tutorial, dokumentasi, dan contoh KAN
  • KAN diajukan sebagai alternatif untuk MLP; sebagaimana MLP didasarkan pada teorema aproksimasi universal, KAN didasarkan pada teorema representasi Kolmogorov-Arnold
  • Secara struktural, MLP memiliki fungsi aktivasi pada node, sedangkan KAN memiliki fungsi aktivasi pada edge; perubahan ini dijelaskan dapat meningkatkan akurasi model dan interpretabilitas
  • Pengguna machine learning yang tidak menggunakan cabang komputasi simbolik harus memanggil model.speed() sebelum pelatihan; jika tidak, proses bisa menjadi sangat lambat karena symbolic branch yang tidak diparalelkan
  • Implementasi ini terutama ditujukan untuk masalah ilmiah berskala kecil, sulit dianggap sebagai plugin siap pakai yang bisa langsung dipasang ke tugas machine learning, dan memerlukan tuning hyperparameter serta teknik khusus per penerapan

Gambaran umum pykan dan KAN

  • pykan adalah repositori untuk “KAN: Kolmogorov-Arnold Networks” dan “KAN 2.0: Kolmogorov-Arnold Networks Meet Science”
  • Quick start tersedia di hellokan, contoh tambahan di tutorials, dan dokumentasi di dokumentasi resmi
  • KANs diperkenalkan sebagai alternatif yang menjanjikan untuk Multi-Layer Perceptrons(MLPs)
    • MLP didasarkan pada universal approximation theorem
    • KAN didasarkan pada Kolmogorov-Arnold representation theorem
  • KAN dan MLP dijelaskan memiliki struktur yang dual
    • KAN memiliki fungsi aktivasi pada edge
    • MLP memiliki fungsi aktivasi pada node
  • Perubahan struktur ini dijelaskan dapat membuat akurasi dan interpretabilitas KAN lebih baik daripada MLP

Instalasi dan lingkungan eksekusi

  • pykan dapat diinstal dari PyPI atau GitHub
  • Prasyaratnya adalah Python 3.9.7 atau lebih baru dan pip
  • Cara instalasi untuk developer:
  • Instalasi dari GitHub:
  • Instalasi dari PyPI:
    • pip install pykan
  • Paket utama yang diperlukan mencakup matplotlib, numpy, scikit_learn, sympy, torch, tqdm, pandas, seaborn, pyyaml, dan lainnya
  • Pengguna Conda dapat membuat environment python=3.9.7, lalu menginstal dengan cara GitHub atau PyPI

Mode performa dan kebutuhan komputasi

  • Jika pengguna machine learning menulis training loop sendiri, tidak memakai model.fit(), dan tidak menggunakan symbolic branch, penting untuk memanggil model.speed() sebelum pelatihan
  • Jika model.speed() tidak dipanggil, symbolic branch tetap aktif, dan komputasi simbolik tidak diparalelkan sehingga bisa sangat lambat
  • Contoh di tutorials biasanya dapat dijalankan dalam kurang dari 10 menit pada satu CPU
  • Semua contoh yang disertakan dalam makalah dapat dijalankan dalam kurang dari satu hari pada satu CPU
  • Pelatihan KAN untuk PDE adalah yang paling mahal, dan dapat memakan waktu beberapa jam hingga beberapa hari pada satu CPU
  • Alasan penggunaan CPU untuk pelatihan model adalah karena mereka melakukan sweep parameter pada ribuan model kecil untuk mendapatkan Pareto Frontier MLP dan KAN
  • Untuk tugas berskala besar, penggunaan GPU direkomendasikan

Tuning hyperparameter KAN

  • Intuisi yang diperoleh dari MLP dan jaringan lain mungkin tidak berlaku begitu saja pada KAN
  • Saran dasarnya adalah mulai dari konfigurasi sederhana
    • KAN shape kecil
    • grid size kecil
    • data kecil
    • tanpa regularisasi, lamb=0
  • Misalnya, untuk tugas dengan 5 input dan 1 output, Anda dapat mencoba dari konfigurasi yang sangat sederhana seperti KAN(width=[5,1,1], grid=3, k=3)
  • Jika tidak bekerja, disarankan untuk terlebih dahulu memperbesar width, lalu jika masih belum berhasil, memperbesar depth
  • Setelah performa mencapai tingkat yang dapat diterima, KAN dapat disempurnakan agar lebih akurat atau lebih mudah diinterpretasikan
  • Jika mengutamakan akurasi, teknik grid extension dapat dicoba, tetapi perlu berhati-hati terhadap overfitting
  • Jika mengutamakan interpretabilitas, jaringan dapat dibuat sparse dengan cara seperti model.train(lamb=0.01)
    • lamb disarankan dinaikkan secara bertahap
    • Jika setelah pelatihan terlihat neuron yang jelas tidak berguna pada plot, model hasil pruning dapat diperoleh dengan pruned_model = model.prune()
    • Setelah itu, pelatihan tambahan dapat dilakukan untuk akurasi atau sparsity, atau symbolic regression dapat dilakukan
  • Akurasi, interpretabilitas, dan efisiensi parameter tidak selalu saling bertentangan; tergantung kasus, bisa terdapat korelasi positif atau tradeoff
  • Jika terdapat selisih besar antara train/test loss, perlu dipertimbangkan untuk menambah data atau mengecilkan model
    • Karena grid lebih penting daripada width, disarankan untuk lebih dulu mengurangi grid, lalu mengurangi width
  • Disarankan untuk mulai dari model sederhana, terlebih dahulu memastikan kondisi underfitting, lalu memperbesar secara bertahap menuju area yang sesuai

Cakupan penerapan dan keterbatasan

  • Kode ini dirancang dengan mempertimbangkan masalah ilmiah berskala kecil seperti contoh matematika dan fisika
  • Karena efisiensi dan reusability tidak banyak dipertimbangkan, mereka menyatakan menerima kritik pada aspek tersebut
  • Target awalnya adalah pengguna yang tertarik pada penemuan ilmiah dan scientific computing, dan repositori ini juga akan tetap terutama mempertahankan tujuan tersebut
  • Implementasi peningkatan efisiensi yang disebutkan adalah efficientkan dan FourierKAN
  • Bagi pengguna yang berfokus pada machine learning, KAN belum menjadi plugin out-of-the-box yang sederhana
    • Diperlukan tuning hyperparameter
    • Teknik khusus per penerapan mungkin perlu ditambahkan
  • GraphKAN menyarankan bahwa KAN sebaiknya digunakan di latent space, dan menyebutkan perlunya embedding/unembedding linear layer setelah input dan sebelum output
  • KANRL menyarankan bahwa dalam reinforcement learning, sebaiknya beberapa parameter yang dapat dilatih dibuat tetap untuk meningkatkan stabilitas pelatihan
  • Mengenai apakah KAN akan menjadi LLM generasi berikutnya, mereka menyatakan tidak memiliki intuisi yang baik
    • KAN dirancang untuk aplikasi yang mengutamakan akurasi tinggi dan interpretabilitas
    • Interpretabilitas dalam LLM dan interpretabilitas dalam sains bisa sangat berbeda
    • Kesimpulan makalah dianggap sulit untuk langsung dipindahkan ke LLM atau tugas machine learning umum
  • KAN dan MLP tidak dapat saling menggantikan; masing-masing memiliki kelebihan dan keterbatasan pada setting tertentu

1 komentar

 
GN⁺ 2024-05-02
Komentar Hacker News
  • Saya sempat membaca cepat makalahnya dan ingin menyederhanakannya lebih jauh, jadi saya membuat layer PyTorch: https://github.com/GistNoesis/FourierKAN/
    Intinya benar-benar hanya beberapa baris. Di makalahnya, kodenya tampak dibuat dengan asumsi skala yang lebih kecil, menggunakan interpolasi spline untuk merepresentasikan fungsi 1 dimensi lalu menjumlahkan hasilnya
    Sebagai gantinya, saya memilih representasi lain yang memakai koefisien Fourier untuk menginterpolasi fungsi tiap koordinat, dan ini tampaknya membantu untuk memahami daya representasi jaringan Kolmogorov-Arnold. Konvergensinya mungkin lebih mudah dibanding versi spline, tetapi jumlah operasinya lebih sedikit di sisi spline
    Tentu saja, hanya karena kode saya tidak bekerja bukan berarti versi di makalahnya juga tidak bekerja. Kalau mau, silakan bereksperimen dan bahkan menulis makalah darinya

    • Saat saya mengutak-atik implementasinya tadi malam, menggunakan fungsi basis radial alih-alih koefisien Fourier terasa lebih stabil untuk melatih jaringan dengan kedalaman lebih dari 2
      Koefisien Fourier juga saya coba karena mudah ditulis dan mudah diparalelkan, tetapi perilaku pelatihannya lebih baik dengan fungsi basis radial
    • Jika implementasi Noesis digabungkan dengan efficientKAN milik Blealtan(https://github.com/Blealtan/efficient-kan), strukturnya menjadi sangat mirip dengan Siren (MLP yang memakai fungsi aktivasi Sin)
      efficientKAN lebih dulu menghitung fungsi basis bersama untuk semua aktivasi edge, lalu output dihitung sebagai kombinasi linear dari basis tersebut
      Jika fungsi basisnya Fourier, layer KAN bisa dipandang sebagai layer linear berbobot tetap + aktivasi Sin + layer linear berbobot yang dapat dilatih, dan ini merupakan bentuk khusus dari Siren
      Ini bisa menjadi contoh yang menunjukkan hubungan antara KAN dan MLP
    • Apakah kodenya benar-benar berjalan? Sudah dilatih? Ada grafiknya?
      Meski dibilang “hanya karena kode saya tidak bekerja bukan berarti versi di makalahnya juga tidak bekerja”, saya penasaran apakah ini benar-benar berfungsi
    • Saya penasaran seberapa ramah GPU keluarga model ini
  • Saya sempat mengutak-atik notebook Jupyter para penulis, dan menurut saya Example_3_classfication.ipynb(https://github.com/KindXiaoming/pykan/blob/master/tutorials/Example_3_classfication.ipynb) adalah yang paling berguna
    Dengan parameter yang dipilih penulis, hasilnya bekerja seperti yang dijelaskan, tetapi pada konfigurasi klasifikasi di bagian akhir tutorial, jika bentuk jaringannya diubah dari (2, 2) menjadi (2, 2, 2), generalisasinya gagal
    Loss pelatihan turun sampai 1e-9, tetapi loss pengujian bertahan di sekitar 3e-1, dan memakai jaringan yang lebih besar juga tidak membantu
    Kita butuh contoh dengan parameter dan kompleksitas data yang jauh lebih besar, dan saya juga ingin melihat apakah ini benar-benar bisa dilatih. MNIST tampaknya titik awal yang bagus
    Pembaruan: saat ukuran dataset pelatihan saya perbesar 100 kali, overfitting berkurang, tetapi sekarang loss pelatihan tidak bisa turun di bawah 1e-2. Saya masih terus bereksperimen, dan akselerasi GPU sangat dibutuhkan. Saat ini kecepatan CPU menjadi penghambat utama

    • Pembaruan 2: pada bentuk (2, 2, 2), saya berhasil mencapai akurasi pelatihan 100%, akurasi pengujian 99%
      Ada tiga hal yang saya ubah. Saya menaikkan set pelatihan dari 1.000 menjadi 100k sampel untuk mengatasi overfitting, lalu sedikit menurunkan noise pada pembuatan data dari 0.1 ke 0.07 agar kelas-kelasnya tidak saling tumpang tindih
      Bagian yang paling penting dan khas KAN adalah setelah melatih 30 langkah dengan grid=5, saya menginisialisasi dari model sebelumnya lalu melatih 30 langkah dengan grid=10, kemudian 30 langkah lagi dengan grid=20. Ini adalah cara yang lazim di KAN dan dijelaskan di Example_1_function_fitting.ipynb(https://github.com/KindXiaoming/pykan/blob/master/tutorials/Example_1_function_fitting.ipynb)
      Kesan keseluruhan saya adalah ini memang bekerja, implementasi referensinya sangat lambat sehingga implementasi GPU benar-benar diperlukan, rasanya nonlinieritasnya lebih kuat daripada MLP + ReLU, dan stabilitas pelatihannya lebih buruk
      Belum ada jaminan bahwa ini bisa diskalakan dengan baik, dan kita benar-benar perlu melihat apakah pendekatan ini bisa menyelesaikan MNIST. Saya akan terus mengamatinya
    • Saya setuju bahwa kita membutuhkan contoh yang lebih besar. Dalam pembelajaran mesin modern, contoh mainan menurut saya tidak terlalu berguna
      Jika ide-ide besar seperti Transformer, LSTM, atau ADAM hanya diuji pada kurva y=sin(x) dengan data pelatihan 50 angka, besar kemungkinan ide-ide itu akan dibuang secara keliru
    • Menjalankannya di CUDA itu memungkinkan, dan salah satu contohnya menunjukkan caranya. Namun saat saya coba, hasilnya justru lebih lambat daripada CPU
      Menjalankannya di GPU tidak selalu lebih cepat, terutama bila cabangnya banyak, jadi ini tidak terlalu mengejutkan
      Sayangnya, tidak semua tensor terkait ditempatkan pada perangkat yang benar, jadi saya harus memodifikasi KAN.py dan KANLayer.py. Dari beberapa formatnya, bahkan terlihat jejak bahwa dulu tampaknya ada argumen device
  • Dalam statistika klasik ada model bernama GAM(https://en.wikipedia.org/wiki/Generalized_additive_model) yang terinspirasi dari Kolmogorov-Arnold, dan dikembangkan oleh Hastie dan Tibshirani sebagai perluasan dari GLM(https://en.wikipedia.org/wiki/Generalized_linear_model)
    GLM menggeneralisasi regresi logistik, regresi linear, dan berbagai model regresi populer lainnya
    Jaringan saraf GAM yang memakai fungsi basis terlatih juga sudah pernah diajukan sebelumnya, jadi agak mengejutkan bahwa makalah baru ini tidak menyebut penelitian terdahulu. Aplikasi sebelumnya lebih berfokus pada interpretabilitas

    • Betul. Saya sampai ke sini saat mencari KAN dan GAM, dan ini juga langsung menjadi hal pertama yang saya pikirkan
  • Keberhasilan jaringan saraf sangat berkaitan erat dengan skalabilitas. Algoritmenya sendiri tidak hanya harus bisa diskalakan ke lebih banyak layer, tetapi juga harus cocok dengan perangkat keras
    Jaringan saraf sebagian besar terdiri dari perkalian matriks, dan GPU memiliki akselerasi khusus untuk perkalian matriks. Salah satu alasan AlexNet begitu berpengaruh adalah karena ia menunjukkan bahwa jaringan saraf dapat dijalankan di GPU untuk diskalakan dan dipercepat
    Seberapa baik algoritme ini dapat diskalakan tidak jelas hanya dari makalahnya. Dari sisi algoritme, belum pasti apakah ia tetap bisa dilatih dengan baik saat layer bertambah banyak, dan juga belum jelas apakah ia bisa memanfaatkan akselerasi perangkat keras dengan baik
    Khususnya, belum jelas apakah struktur yang menempelkan fungsi aktivasi pada setiap bobot dapat memanfaatkan akselerasi perkalian matriks cepat
    Ini adalah ide menarik yang tampaknya bekerja baik pada skala kecil dan memiliki sifat yang bagus, tetapi belum diketahui apakah ini arsitektur yang cocok untuk hal seperti ImageNet atau LLM

    • Fungsi aktivasi per-bobot terdengar seperti sesuatu yang bisa didekati dengan transformasi kosinus diskret. JPEG juga memakai ini, dan ada akselerasi perangkat keras untuknya
      Akselerasi perkalian matriks cepat pada awalnya diimplementasikan di perangkat keras karena berguna untuk masalah tertentu seperti grafika
      Jika fungsi aktivasi per-bobot benar-benar efektif, orang-orang akan segera menemukan cara untuk menjalankannya di perangkat keras
  • Menyegarkan melihat riset AI baru yang bukan model umum “Transformer diubah begini-begitu lalu sedikit lebih baik pada benchmark ini-itu”
    Makalah tentang perbaikan bertahap seperti itu juga penting, tetapi banyak orang mulai agak lelah, dan dari bukti anekdotal serta riset terbaru, tampaknya kita mungkin sedang mendekati batas fundamental yang melekat pada Transformer, sehingga mungkin dibutuhkan alternatif baru(https://news.ycombinator.com/item?id=40179232)
    Hal terbaik dari pekerjaan ini adalah bahwa ini bukan pilihan biner. Fungsi aktivasi interpolasi spline yang dapat dipelajari yang diusulkan juga bisa dimasukkan ke jaringan saraf dalam yang sudah ada untuk meningkatkan daya representasi
    Sekarang tinggal diuji apakah benar-benar bekerja lebih baik

    • Sebenarnya riset seperti ini cukup banyak. Hanya saja, sering kali tidak lolos atau harus melewati peninjauan tambahan, dan tanpa latar belakang khusus seperti MIT atau CIT, biasanya tidak akan naik sampai ke HN
      PR telah menjadi kekuatan yang terlalu besar, dan meskipun dulu juga ada, sekarang pengaruhnya tampak lebih besar
      Kita bisa melawannya dengan memberi upvote pada tulisan seperti ini, dan jika menjadi peninjau, dengan tidak hanya berfokus pada rekor performa terbaik. Tolok ukur itu sudah terlalu digamifikasi dan jelas mengarahkan kita ke arah yang keliru
    • Pada masa demam jaringan saraf tahun 1989, saya membaca buku jaringan saraf karya Robert Hecht Nielsen. Mungkin itu gelombang kedua, sementara yang pertama dimulai dari perceptron perangkat keras Rosenblatt lalu meredup setelah naskah “Perceptrons” oleh Minsky dan Papert
      Dilihat dari standar sekarang, isi bukunya terasa sangat mendasar sampai hampir lucu, tetapi motivasi yang diajukan adalah teorema representasi Kolmogorov. Isinya bahwa jaringan 3-layer yang sesuai dengan fungsi aktivasi yang tepat dapat merepresentasikan sembarang fungsi kontinu m-ke-n
      Mungkin karena alasan itu, sebagian besar riset saat itu berfokus pada jaringan 3-layer, aktivasi Sigmoid menjadi arus utama, dan vanishing gradient adalah masalah utamanya
      Butuh 20 tahun sampai AlexNet menghidupkan kembali riset jaringan saraf setelah musim dingin AI pada 1990-an
    • Sains memang seperti ini. Sebanyak 95% menghasilkan perbaikan dari yang sudah ada, dari tingkat biasa sampai lumayan, dan dalam proses itu para peneliti berkembang hingga akhirnya mengerjakan hal-hal yang benar-benar menarik
  • Jika melihat preprint-nya, dimensi input 100 dianggap “tinggi”, dan sebagian besar masalah yang dibahas memiliki dimensi input 5 atau kurang
    Dalam setting machine learning berbasis inspirasi fisika yang pernah saya lihat, ini cukup khas
    Langkah berikutnya adalah menunjukkannya di MNIST, dan bahkan 784 dimensi pada MNIST pun sangat kecil menurut standar modern

    • Dalam proses bisnis nyata, ada banyak masalah machine learning dengan dimensi input kurang dari 100
      Tetapi untuk sebagian besar masalah seperti itu, decision tree masih kompetitif dengan jaringan saraf, atau bahkan bekerja lebih baik
  • Menarik. Jaringan saraf Kolmogorov dapat merepresentasikan fungsi diskontinu(https://arxiv.org/abs/2311.00049), tetapi saya penasaran sejauh mana itu benar-benar bisa diterapkan
    Repositori ini setidaknya tampaknya menunjukkan bahwa pendekatan ini cukup berguna sampai tingkat tertentu

    • Untuk fungsi diskontinu, ini masih belum praktis. Seperti dijelaskan juga dalam makalah yang dikutip, kita tahu bahwa g ada untuk fungsi berbatas yang diskontinu, tetapi tidak ada cara untuk menemukannya
      Makalah itu juga menyebutkan bahwa “untuk fungsi berbatas dan tak berbatas yang diskontinu, metode praktis untuk membangun g masih belum diketahui”
      Jika melihat tautan arXiv dari OP(https://arxiv.org/abs/2404.19756), mereka menggunakan spline
      Ini tetap menarik dan berpotensi berguna, tetapi tanpa penemuan tambahan, tidak berguna untuk fungsi diskontinu. Jika saya salah, saya akan senang diberi tautan, karena ini topik yang sangat saya minati
  • Mungkin ini reaksi tergesa-gesa, tetapi bukankah kombinasi linear dari B-spline hanyalah B-spline lain dengan orde yang lebih tinggi?
    Saya jadi bertanya-tanya apakah pada akhirnya ini hanya soal mencocokkan B-spline orde tinggi ke suatu fungsi

    • Untuk satu node atau satu layer, ya. Tetapi ketika keluaran dari satu layer menjadi masukan bagi layer berikutnya, itu bukan lagi sekadar kombinasi linear spline
  • Menariknya, pendekatan ini dan fondasi MLP diciptakan atau ditemukan hampir pada waktu yang sama sekitar 66 tahun lalu
    1957: https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Arnold_representation_theorem
    1958: https://en.wikipedia.org/wiki/Multilayer_perceptron
    Keuntungan lainnya adalah bahwa pendekatan ini hanya memiliki satu jenis parameter, yaitu koefisien fungsi aktivasi lokal, sedangkan MLP memiliki tiga jenis parameter: bobot, bias, dan fungsi aktivasi yang sama secara global
    Semua orang membicarakan Transformer, tetapi saya ingin melihat model difusi yang menggunakan pendekatan ini

    • Bias pada dasarnya hanyalah bobot untuk input yang selalu aktif
      Saya juga tidak melihat perbedaan besar antara bobot pada penjumlahan linear dan koefisien spline
    • Soal poin ketiga, sebagian besar model difusi sudah menggunakan arsitektur berbasis Transformer
      Ada U-Net dengan self-attention dan cross-attention, Vision Transformer, Diffusion Transformer, dan lain-lain
    • Memang benar bahwa poin 2 adalah perbedaannya. Tapi saya penasaran kenapa itu menjadi keunggulan
      Mungkin bisa diperdebatkan dari sudut pandang kesederhanaan, yaitu Pisau Cukur Occam, tetapi saya ingin tahu apakah itu maksudnya atau ada alasan lain
    • Saya bisa saja salah, tetapi setahu saya LLM modern hampir tidak menggunakan bias
  • Rasanya seperti seseorang memasukkan spline ke dalam pohon keputusan

    • Soal spline memang benar, tetapi saya kurang paham bagian pohon keputusannya. Apakah ada yang saya lewatkan?
      Di halaman 2 PDF tertulis, “Node KAN hanya menjumlahkan sinyal yang masuk tanpa menerapkan non-linearitas.”