Kolmogorov-Arnold ağlarının geliştirilmesi
(github.com/KindXiaoming)- 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:
git clone https://github.com/KindXiaoming/pykan.gitcd pykanpip install -e .
- GitHub üzerinden kurulum:
pip install git+https://github.com/KindXiaoming/pykan.git
- PyPI üzerinden kurulum:
pip install pykan
- Başlıca bağımlı paketler arasında
matplotlib,numpy,scikit_learn,sympy,torch,tqdm,pandas,seaborn,pyyamlyer alır - Conda kullanıcıları,
python=3.9.7ortamı 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 öncemodel.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ştirilebilirlambdeğ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 öncegridazaltılması, ardındanwidthazaltı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
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
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
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
“Benim kodumun çalışmaması, makaledeki yöntemin çalışmadığı anlamına gelmez” diyorsun ama gerçekten çalışıp çalışmadığı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
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
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
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ı
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
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
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
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
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
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
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
İ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
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
Self-attention ve cross-attention eklenmiş U-Net, Vision Transformer, Diffusion Transformer vb. var
Sadelik, yani Occam’ın usturası açısından savunulabilir gibi; kastın bu mu, yoksa başka bir nedeni mi var merak ediyorum
Birisi spline’ı karar ağaçlarının içine tıkıştırmış gibi
PDF’in 2. sayfasında “KAN düğümleri doğrusal olmama uygulamaz, gelen sinyalleri basitçe toplar” deniyor