2 puan yazan GN⁺ 2024-05-02 | 1 yorum | WhatsApp'ta paylaş
  • pykan, “KAN: Kolmogorov-Arnold Networks” ve “KAN 2.0: Kolmogorov-Arnold Networks Meet Science” makaleleri için GitHub deposudur; KAN eğitimi, öğreticiler, dokümantasyon ve örnekler sunar
  • KAN, MLP’ye bir alternatif olarak sunulur; MLP evrensel yaklaşım teoremine dayanırken KAN Kolmogorov-Arnold temsil teoremine dayanır
  • Yapısal olarak MLP’de aktivasyon fonksiyonları düğümlerde bulunurken KAN’da kenarlarda aktivasyon fonksiyonları vardır; bunun model doğruluğunu ve yorumlanabilirliği iyileştirebileceği belirtilir
  • Sembolik hesaplama dalını kullanmayan makine öğrenimi kullanıcıları, eğitimden önce model.speed() çağrısı yapmalıdır; aksi halde paralelleştirilmemiş symbolic branch nedeniyle çok yavaş olabilir
  • Bu uygulama esas olarak bilimle ilgili küçük ölçekli problemleri hedefler; makine öğrenimi işlerine doğrudan takılacak bir eklenti olarak görülmesi zordur ve hiperparametre ayarı ile uygulamaya özel teknikler gerektirir

pykan ve KAN genel bakış

  • pykan, “KAN: Kolmogorov-Arnold Networks” ve “KAN 2.0: Kolmogorov-Arnold Networks Meet Science” için bir depodur
  • Hızlı başlangıç için hellokan, ek örnekler için tutorials, dokümantasyon için resmi dokümanlar sunulur
  • KAN’lar, Multi-Layer Perceptron’lara (MLP’ler) umut vadeden bir alternatif olarak tanıtılır
    • MLP, universal approximation theorem temelindedir
    • KAN, Kolmogorov-Arnold representation theorem temelindedir
  • KAN ve MLP ikili yapılar olarak açıklanır
    • KAN’da aktivasyon fonksiyonları kenarlarda bulunur
    • MLP’de aktivasyon fonksiyonları düğümlerde bulunur
  • Bu yapısal değişimin KAN’ın doğruluğunu ve yorumlanabilirliğini MLP’den daha iyi hale getirebileceği belirtilir

Kurulum ve çalışma ortamı

  • pykan, PyPI veya GitHub üzerinden kurulabilir
  • Ön koşullar Python 3.9.7 veya üzeri ve piptir
  • Geliştirici kurulum yöntemi:
  • GitHub üzerinden kurulum:
  • PyPI üzerinden kurulum:
    • pip install pykan
  • Başlıca bağımlı paketler arasında matplotlib, numpy, scikit_learn, sympy, torch, tqdm, pandas, seaborn, pyyaml yer alır
  • Conda kullanıcıları, python=3.9.7 ortamı oluşturduktan sonra GitHub veya PyPI yöntemiyle kurulum yapabilir

Performans modu ve hesaplama gereksinimleri

  • Makine öğrenimi kullanıcıları kendi eğitim döngülerini yazıyor, model.fit() kullanmıyor ve symbolic branch kullanmıyorsa, eğitimden önce model.speed() çağrısı önemlidir
  • model.speed() çağrılmazsa symbolic branch açık kalır ve sembolik hesaplama paralelleştirilmediği için çok yavaş olabilir
  • tutorials içindeki örnekler genellikle tek CPU’da 10 dakika içinde çalıştırılabilir
  • Makalelerde yer alan tüm örnekler tek CPU’da bir gün içinde çalıştırılabilir
  • PDE için KAN eğitimi en maliyetli olandır ve tek CPU’da birkaç saatten birkaç güne kadar sürebilir
  • Model eğitiminde CPU kullanılmasının nedeni, MLP ve KAN’ın Pareto Frontier’ını elde etmek için binlerce küçük model üzerinde parametre taraması yapılmış olmasıdır
  • Problem ölçeği büyük olan işlerde GPU kullanımı önerilir

KAN hiperparametre ayarı

  • MLP ve diğer ağlardan edinilen sezgiler KAN’a doğrudan uygulanamayabilir
  • Temel tavsiye basit bir yapılandırmayla başlamaktır
    • küçük KAN shape
    • küçük grid size
    • küçük veri
    • düzenlileştirme yok, lamb=0
  • Örneğin, 5 giriş ve 1 çıkışlı bir görev için KAN(width=[5,1,1], grid=3, k=3) gibi çok basit bir yapılandırmayla başlanabilir
  • Çalışmazsa önce width artırılması, yine olmazsa depth artırılması önerilir
  • Performans kabul edilebilir seviyeye ulaştığında daha doğru veya daha yorumlanabilir KAN’lara doğru rafine edilebilir
  • Doğruluk öncelikliyse grid extension tekniği denenebilir, ancak aşırı öğrenmeye dikkat edilmelidir
  • Yorumlanabilirlik öncelikliyse model.train(lamb=0.01) gibi bir yöntemle ağ seyrekleştirilebilir
    • lamb değerinin kademeli olarak artırılması önerilir
    • Eğitimden sonra grafikte açıkça işe yaramayan nöronlar görülürse pruned_model = model.prune() ile budanmış model elde edilebilir
    • Sonrasında doğruluk veya seyreklik için ek eğitim yapılabilir ya da symbolic regression uygulanabilir
  • Doğruluk, yorumlanabilirlik ve parametre verimliliği her zaman birbiriyle çatışmak zorunda değildir; bazı durumlarda pozitif korelasyon olabilir, bazı durumlarda ise tradeoff görülebilir
  • train/test loss arasında büyük fark varsa veri artırma veya modeli küçültme düşünülmelidir
    • grid, widthten daha önemli olduğundan önce grid azaltılması, ardından width azaltılması önerilir
  • Basit modelle başlayıp önce underfitting durumunu görmek, ardından kademeli genişleterek uygun bölgeye ilerlemek önerilir

Uygulama kapsamı ve sınırlamalar

  • Kod, matematik ve fizik örnekleri gibi küçük ölçekli bilimsel problemler düşünülerek tasarlanmıştır
  • Verimlilik ve yeniden kullanılabilirlik büyük ölçüde gözetilmediği için, bu yöndeki eleştirilerin kabul edildiği belirtilir
  • Asıl hedef kitlenin bilimsel keşif ve bilimsel hesaplama ile ilgilenen kullanıcılar olduğu, deponun da esas olarak bu amacı koruyacağı belirtilir
  • Verimlilik iyileştirmeleri için efficientkan ve FourierKAN anılır
  • Makine öğrenimi odaklı kullanıcılar için KAN henüz basit bir out-of-the-box eklenti değildir
    • hiperparametre ayarı gerekir
    • uygulamaya özel teknikler eklenebilir
  • GraphKAN, KAN’ın latent space içinde kullanılmasının daha iyi olabileceğini ve girişten sonra, çıkıştan önce embedding/unembedding linear layer gerektiğini öne sürer
  • KANRL, pekiştirmeli öğrenmede eğitim kararlılığını artırmak için bazı öğrenilebilir parametrelerin sabitlenmesinin daha iyi olabileceğini öne sürer
  • KAN’ın bir sonraki nesil LLM olup olmayacağı konusunda iyi bir sezgi olmadığı belirtilir
    • KAN, yüksek doğruluk ve yorumlanabilirliğe önem veren uygulamalar için tasarlanmıştır
    • LLM’lerdeki yorumlanabilirlik ile bilimdeki yorumlanabilirlik çok farklı olabilir
    • Makalelerdeki sonuçların LLM’lere veya genel makine öğrenimi işlerine doğrudan taşınmasının zor olduğu düşünülür
  • KAN ve MLP birbirinin yerini alamaz; her biri bazı ayarlarda avantajlara ve sınırlamalara sahiptir

1 yorum

 
GN⁺ 2024-05-02
Hacker News yorumları
  • Makaleyi hızlıca gözden geçirip daha da basitleştirmeyi denemek istediğim için bir PyTorch katmanı yaptım: https://github.com/GistNoesis/FourierKAN/
    Özünde gerçekten sadece birkaç satır var. Makaledeki kod, daha küçük ölçekleri düşünerek yazılmış gibi; 1 boyutlu fonksiyonları temsil etmek için spline interpolasyonu kullanıyor ve sonuçları topluyor
    Bunun yerine, her koordinattaki fonksiyonları interpolate etmek için Fourier katsayıları kullanan başka bir gösterimi seçtim; Kolmogorov-Arnold ağlarının ifade gücünü anlamaya yardımcı olabilir. Spline sürümüne göre yakınsaması daha kolay olabilir, ama işlem sayısı spline tarafında daha az
    Elbette benim kodumun çalışmaması, makaledeki yöntemin çalışmadığı anlamına gelmez. İsterseniz deneyip makale olarak yayımlayabilirsiniz

    • Dün gece implementasyonla oynarken, Fourier katsayıları yerine radyal taban fonksiyonları kullanmanın derinliği 2’yi aşan ağları eğitirken daha kararlı olduğunu gördüm
      Fourier katsayıları da iyi paralelleştiriliyor ve yazması kolay olduğu için denedim, ama eğitim davranışı radyal taban fonksiyonlarında daha iyiydi
    • Noesis implementasyonunu Blealtan’ın efficientKAN’iyle (https://github.com/Blealtan/efficient-kan) birleştirirseniz, Siren’e (Sin aktivasyon fonksiyonu kullanan MLP) çok benzeyen bir yapı ortaya çıkıyor
      efficientKAN, tüm kenar aktivasyonları için önce ortak taban fonksiyonlarını hesaplıyor; çıktı ise bu tabanların doğrusal kombinasyonu olarak hesaplanıyor
      Taban fonksiyonu Fourier ise, KAN katmanı sabit ağırlıklı doğrusal katman + Sin aktivasyonu + öğrenilebilir ağırlıklı doğrusal katman olarak görülebilir; bu da Siren’in özel bir biçimi
      KAN ile MLP arasındaki bağlantıyı gösteren bir örnek olabilir
    • Kod gerçekten çalışıyor mu? Eğittin mi? Grafiğin var mı?
      “Benim kodumun çalışmaması, makaledeki yöntemin çalışmadığı anlamına gelmez” diyorsun ama gerçekten çalışıp çalışmadığını merak ediyorum
    • Bu model ailesinin GPU dostu olup olmadığını merak ediyorum
  • Yazarların Jupyter notebook’larıyla biraz oynadım; kişisel olarak en faydalı olanın Example_3_classfication.ipynb (https://github.com/KindXiaoming/pykan/blob/master/tutorials/Example_3_classfication.ipynb) olduğunu düşündüm
    Yazarların seçtiği parametrelerde anlatıldığı gibi çalışıyor, ancak öğreticinin ilerleyen kısmındaki sınıflandırma ayarında ağ biçimini (2, 2)’den (2, 2, 2)’ye değiştirince genellemede başarısız oluyor
    Eğitim kaybı 1e-9’a kadar düşüyor ama test kaybı 3e-1 civarında kalıyor; daha büyük ağlara geçmek de yardımcı olmadı
    Parametre ve veri karmaşıklığı çok daha büyük bir örnek gerekiyor; gerçekten eğitilebilir olup olmadığını da görmek istiyorum. MNIST iyi bir başlangıç noktası gibi
    Güncelleme: Eğitim veri kümesinin boyutunu 100 kat artırınca aşırı uyum azaldı, ancak bu kez eğitim kaybını 1e-2’nin altına indiremiyorum. Denemeye devam ediyorum ve GPU hızlandırmasına ciddi ihtiyaç var. Şu anda ilerlemeyi CPU hızı sınırlıyor

    • Güncelleme 2: (2, 2, 2) biçiminde %100 eğitim doğruluğu, %99 test doğruluğu seviyesine ulaştım
      Değiştirdiğim üç şey vardı. Eğitim kümesini 1.000 örnekten 100k örneğe çıkararak aşırı uyumu çözdüm; veri üretiminde gürültüyü 0.1’den 0.07’ye biraz düşürerek sınıfların çakışmamasını sağladım
      En önemli ve KAN’e özgü kısım ise grid=5 ile 30 adım eğittikten sonra, önceki modelden başlatıp grid=10 ile 30 adım, ardından yeniden grid=20 ile 30 adım eğitmekti. Bu, KAN’de alışılmış bir yöntem ve Example_1_function_fitting.ipynb’de (https://github.com/KindXiaoming/pykan/blob/master/tutorials/Example_1_function_fitting.ipynb) yer alıyor
      Genel izlenimim şu: çalışıyor; referans implementasyon çok yavaş, bu yüzden GPU implementasyonu şart; MLP + ReLU’ya göre doğrusal olmayanlığı daha güçlü hissettiriyor ve eğitim kararlılığı daha düşük
      İyi ölçekleneceğinin garantisi henüz yok; bu yaklaşımla MNIST’in çözülüp çözülemeyeceğini mutlaka görmek gerekiyor. Takip etmeye devam edeceğim
    • Daha büyük bir örnek gerektiğine katılıyorum. Modern makine öğrenmesi teknikleri için oyuncak örneklerin pek yararlı olmadığını düşünüyorum
      Transformer, LSTM, ADAM gibi büyük fikirler yalnızca y=sin(x) eğrisi üzerinde 50 sayılık eğitim verisiyle test edilmiş olsaydı, bu fikirleri hatalı biçimde çöpe atmış olmamız muhtemeldi
    • CUDA’da çalıştırmak mümkün; örneklerden biri nasıl yapılacağını gösteriyor. Ancak benim denememde CPU’dan daha yavaştı
      GPU’da çalıştırmak her zaman daha hızlı demek değildir; özellikle de dallanmanın çok olduğu durumlarda bu şaşırtıcı değil
      Ne yazık ki ilgili tensörlerin hepsi doğru cihaza alınmadığından KAN.py ve KANLayer.py dosyalarını düzeltmem gerekti. Bazı formatlara bakınca eskiden device argümanı varmış gibi izler de görünüyor
  • Klasik istatistikte Kolmogorov-Arnold’dan esinlenen GAM (https://en.wikipedia.org/wiki/Generalized_additive_model) adlı bir model var; Hastie ve Tibshirani bunu GLM’in (https://en.wikipedia.org/wiki/Generalized_linear_model) bir uzantısı olarak geliştirdi
    GLM; lojistik regresyonu, doğrusal regresyonu ve birçok popüler regresyon modelini genelleştirir
    Öğrenilmiş taban fonksiyonları kullanan sinir ağı GAM’leri de daha önce önerilmişti; bu yüzden bu yeni makalede önceki çalışmaların anılmaması biraz şaşırtıcı. Önceki uygulamalar daha çok yorumlanabilirliğe odaklanmıştı

    • Doğru. KAN ve GAM diye ararken buraya geldim; benim de aklıma ilk gelen düşünce tam olarak buydu
  • Sinir ağlarının başarısı ölçeklenebilirlik ile yakından bağlantılı. Algoritmanın kendisinin daha fazla katmana ölçeklenmesinin yanı sıra donanımla da iyi uyum sağlaması gerekiyor
    Sinir ağları çoğunlukla matris çarpımından oluşur ve GPU’larda matris çarpımı için özel hızlandırma vardır. AlexNet’in büyük etki yaratmasının nedeni de sinir ağlarının GPU’ya taşınıp ölçeklenebileceğini ve hızlandırılabileceğini göstermesiydi
    Bu algoritmanın ne kadar iyi ölçekleneceği yalnızca makaleden net anlaşılmıyor. Algoritma tarafında katman sayısı arttığında iyi öğrenip öğrenmeyeceği de, donanım hızlandırmadan iyi yararlanıp yararlanamayacağı da belirsiz
    Özellikle her ağırlığa bir aktivasyon fonksiyonunun eklendiği yapının hızlı matris çarpımı hızlandırmasından yararlanıp yararlanamayacağını pek bilmiyorum
    Küçük ölçekte iyi çalışan ve iyi özelliklere sahip ilginç bir fikir; ancak ImageNet ya da LLM gibi alanlara uygun bir mimari olup olmadığı henüz bilinmiyor

    • Ağırlık başına aktivasyon fonksiyonu ayrık kosinüs dönüşümü ile yaklaştırılabilecekmiş gibi geliyor. JPEG sıkıştırma da bunu kullanıyor ve donanım hızlandırması da var
      Hızlı matris çarpımı hızlandırması başlangıçta grafikler gibi belirli problemlerde işe yaradığı için donanımda uygulanmıştı
      Ağırlık başına aktivasyon fonksiyonu gerçekten iyi sonuç verirse, insanlar bunu donanımda çalıştırmanın yolunu kısa sürede bulacaktır
  • Sık görülen “Transformer’ı şu ya da bu şekilde değiştirip şu ya da bu benchmark’ta biraz daha iyi sonuç aldık” tarzında olmayan yeni bir yapay zeka araştırması görmek ferahlatıcı
    Bu tür kademeli iyileştirme makaleleri de önemli, ama herkes biraz yoruluyor; anekdotsal kanıtlar ve son araştırmalar, Transformer’a özgü temel sınırlara yaklaştığımızı düşündürüyor, bu yüzden yeni alternatiflere ihtiyaç olabilir(https://news.ycombinator.com/item?id=40179232)
    Bu çalışmanın en iyi yanı, bunun bir ya-o-ya-bu seçimi olmaması. Önerilen öğrenilebilir spline interpolasyon aktivasyon fonksiyonu, ifade gücünü artırmak için mevcut derin sinir ağlarına da eklenebilir
    Şimdi gerçekten daha iyi çalışıp çalışmadığını test etmek gerekiyor

    • Aslında bu tür araştırmalar oldukça fazla. Ancak çoğu ek incelemeden geçiyor ya da hiç kabul edilmiyor; MIT veya CIT gibi özel bir arka planınız yoksa HN’ye kadar çıkamıyor
      PR çok güçlü bir kuvvet haline geldi; eskiden de vardı ama şimdi etkisi daha da artmış gibi
      Böyle yazılara oy vererek ve eğer hakemlik kapsamındaysa yalnızca en iyi performansın yenilenmesine odaklanmayan bir tutumla buna karşı durabiliriz. O ölçüt zaten oyunlaştırıldı ve bizi yanlış yöne götürdüğü açık
    • 1989’da, o dönemin sinir ağı heyecanı içinde Robert Hecht Nielsen’in sinir ağları kitabını okumuştum. Muhtemelen ikinci dalgaydı; ilki Rosenblatt’ın donanımsal perceptron’uyla başlayıp Minsky ve Papert’in “Perceptrons” el yazmasından sonra sönümlenen akımdı
      Bugünün ölçütleriyle kitaptaki içerik gülünç derecede temeldi, ancak motivasyon olarak Kolmogorov temsil teoremi sunuluyordu. Uygun aktivasyon fonksiyonlarına sahip makul bir 3 katmanlı ağın, herhangi bir sürekli m’den n’ye fonksiyonu temsil edebileceğini söylüyordu
      Belki de bu yüzden o dönemdeki araştırmaların çoğu 3 katmanlı ağlara odaklanıyordu; Sigmoid aktivasyon baskındı ve kaybolan gradyan başlıca sorundu
      AlexNet’in, 1990’lardaki yapay zeka kışından sonra sinir ağı araştırmalarını yeniden canlandırmasına kadar 20 yıl geçti
    • Bilimin doğasında bu var. %95’i mevcut şeyler üzerinde orta ile iyi arası iyileştirmeler üretir; bu süreçte araştırmacılar gelişir ve gerçekten ilginç işler yapacak seviyeye gelir
  • Preprint’e bakınca 100 giriş boyutunu “yüksek” sayıyorlar; ele aldıkları problemlerin çoğunda giriş boyutu 5 veya daha az
    Fizik esinli makine öğrenimi düzeneklerinde gördüğüm tipik tablo bu
    Bir sonraki adım bunu MNIST’te göstermek olur; MNIST’in 784 boyutu bile modern ölçütlere göre çok küçük

    • Gerçek iş süreçlerinde giriş boyutu 100’ün altında olan çok sayıda makine öğrenimi problemi var
      Ancak bu problemlerin çoğunda karar ağaçları hâlâ sinir ağlarıyla rekabetçi, hatta bazen daha iyi
  • İlginç. Kolmogorov sinir ağları süreksiz fonksiyonları temsil edebiliyor(https://arxiv.org/abs/2311.00049), ama pratik uygulanabilirliğinin ne düzeyde olduğunu merak ediyordum
    Bu depo yine de bir ölçüde işe yaradığını gösteriyor gibi

    • Süreksiz fonksiyonlar için henüz pratik değil. Alıntıladığınız makalenin de açıkladığı gibi, süreksiz sınırlı fonksiyonlar için g’nin var olduğunu biliyoruz ama onu bulmanın bir yolu yok
      Makalede de “süreksiz sınırlı ve sınırsız fonksiyonlar durumunda g’yi pratik olarak inşa etmenin bir yöntemi henüz bilinmemektedir” deniyor
      OP’nin arXiv bağlantısına(https://arxiv.org/abs/2404.19756) bakınca spline kullandıklarını görüyoruz
      Yine de ilginç ve potansiyel olarak faydalı, ancak ek keşifler olmadan süreksiz fonksiyonlar için yararlı değil. Yanılıyorsam bir bağlantı paylaşırsanız sevinirim; çok ilgilendiğim bir konu
  • Aceleci bir tepki olabilir ama B-spline’ların doğrusal kombinasyonu yine daha yüksek dereceden başka bir B-spline değil mi?
    Sonuçta sadece fonksiyona yüksek dereceli B-spline uydurmak değil mi, merak ediyorum

    • Tek bir düğüm ya da tek bir katman söz konusuysa doğru. Ancak bir katmanın çıktısı bir sonraki katmanın girdisi olduğunda artık basit bir spline’ların doğrusal kombinasyonu olmuyor
  • İlginç biçimde, bu yaklaşımın ve MLP’nin temelleri yaklaşık 66 yıl önce, neredeyse aynı dönemde icat edilmiş ya da keşfedilmişti
    1957: https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Arnold_representation_theorem
    1958: https://en.wikipedia.org/wiki/Multilayer_perceptron
    Bir diğer avantaj da bu yaklaşımda yerel aktivasyon fonksiyonlarının katsayıları olmak üzere yalnızca tek tür parametre varken, MLP’de ağırlıklar, bias’lar ve küresel olarak aynı aktivasyon fonksiyonu olmak üzere üç tür parametre bulunması
    Herkes Transformer’dan bahsediyor ama ben bu yaklaşımı kullanan difüzyon modelleri görmek isterim

    • Bias, her zaman açık olan bir girdiye ait ağırlıktan ibaret
      Doğrusal toplamın ağırlıkları ile spline katsayıları arasında da büyük bir fark yok gibi görünüyor
    • Üçüncü noktaya gelirsek, çoğu difüzyon modeli zaten Transformer tabanlı mimariler kullanıyor
      Self-attention ve cross-attention eklenmiş U-Net, Vision Transformer, Diffusion Transformer vb. var
    • 2 numaranın bir fark olduğu doğru. Ama bunun neden avantaj olduğunu merak ediyorum
      Sadelik, yani Occam’ın usturası açısından savunulabilir gibi; kastın bu mu, yoksa başka bir nedeni mi var merak ediyorum
    • Yanılıyor olabilirim ama modern LLM’lerde bias’ın pek kullanılmadığını biliyorum
  • Birisi spline’ı karar ağaçlarının içine tıkıştırmış gibi

    • Spline kısmı doğru ama karar ağacından emin değilim. Kaçırdığım bir şey mi var?
      PDF’in 2. sayfasında “KAN düğümleri doğrusal olmama uygulamaz, gelen sinyalleri basitçe toplar” deniyor