Kolmogorov-Arnold नेटवर्क का विकास
(github.com/KindXiaoming)- pykan पेपर “KAN: Kolmogorov-Arnold Networks” और “KAN 2.0: Kolmogorov-Arnold Networks Meet Science” के लिए GitHub repository है, जो KAN training, tutorials, documentation और examples प्रदान करती है
- KAN को MLP के एक विकल्प के रूप में प्रस्तुत किया जाता है; जैसे MLP universal approximation theorem पर आधारित है, वैसे ही KAN Kolmogorov-Arnold representation theorem पर आधारित है
- संरचनात्मक रूप से MLP में activation function node पर होता है, जबकि KAN में edge पर activation function होता है; इसके बारे में बताया गया है कि यह बदलाव मॉडल की accuracy और interpretability को बेहतर बना सकता है
- जो machine learning उपयोगकर्ता symbolic computation branch का उपयोग नहीं करते, उन्हें training से पहले
model.speed()कॉल करना चाहिए; अन्यथा non-parallelized symbolic branch के कारण यह बहुत धीमा हो सकता है - यह implementation मुख्य रूप से science से जुड़े छोटे पैमाने की समस्याओं के लिए है, इसलिए इसे machine learning tasks में तुरंत जोड़कर इस्तेमाल करने वाला plug-in मानना कठिन है; इसके लिए hyperparameter tuning और application-specific techniques की जरूरत होती है
pykan और KAN का अवलोकन
- pykan “KAN: Kolmogorov-Arnold Networks” और “KAN 2.0: Kolmogorov-Arnold Networks Meet Science” के लिए repository है
- त्वरित शुरुआत के लिए hellokan, अतिरिक्त examples के लिए tutorials, और documentation आधिकारिक दस्तावेज़ में उपलब्ध है
- KANs को Multi-Layer Perceptrons (MLPs) के एक आशाजनक विकल्प के रूप में पेश किया गया है
- MLP universal approximation theorem पर आधारित है
- KAN Kolmogorov-Arnold representation theorem पर आधारित है
- KAN और MLP को dual संरचना के रूप में समझाया गया है
- KAN में activation function edge पर होता है
- MLP में activation function node पर होता है
- बताया गया है कि यह संरचनात्मक बदलाव KAN की accuracy और interpretability को MLP की तुलना में बेहतर बना सकता है
इंस्टॉलेशन और रनटाइम वातावरण
- pykan को PyPI या GitHub से install किया जा सकता है
- पूर्वापेक्षाएँ हैं Python 3.9.7 या उससे ऊपर और
pip - developer install तरीका:
git clone https://github.com/KindXiaoming/pykan.gitcd pykanpip install -e .
- GitHub install:
pip install git+https://github.com/KindXiaoming/pykan.git
- PyPI install:
pip install pykan
- प्रमुख आवश्यक packages में
matplotlib,numpy,scikit_learn,sympy,torch,tqdm,pandas,seaborn,pyyamlआदि शामिल हैं - Conda उपयोगकर्ता
python=3.9.7environment बनाकर GitHub या PyPI वाले तरीके से install कर सकते हैं
performance mode और compute आवश्यकताएँ
- यदि machine learning उपयोगकर्ता अपना training loop खुद लिखते हैं,
model.fit()का उपयोग नहीं करते, और symbolic branch का उपयोग नहीं करते, तो training से पहलेmodel.speed()कॉल करना महत्वपूर्ण है - अगर
model.speed()कॉल नहीं किया जाता, तो symbolic branch चालू रहती है, और symbolic computation parallelized न होने के कारण यह बहुत धीमी हो सकती है - tutorials के examples आमतौर पर एक single CPU पर 10 मिनट के भीतर चल सकते हैं
- पेपर में शामिल सभी examples एक single CPU पर एक दिन के भीतर चल सकते हैं
- PDE के लिए KAN training सबसे महंगी है, और एक single CPU पर कुछ घंटों से लेकर कुछ दिनों तक लग सकते हैं
- मॉडल training में CPU का उपयोग इसलिए किया गया क्योंकि MLP और KAN की Pareto Frontier पाने के लिए हजारों छोटे models पर parameter sweep किया गया था
- बड़े पैमाने की समस्याओं में GPU का उपयोग सुझाया गया है
KAN hyperparameter tuning
- MLP और अन्य networks से मिली समझ KAN पर सीधे लागू नहीं हो सकती
- बुनियादी सलाह है कि सरल configuration से शुरुआत करें
- छोटा KAN shape
- छोटा grid size
- छोटा data
- कोई regularization नहीं,
lamb=0
- उदाहरण के लिए, 5 inputs और 1 output वाले task में
KAN(width=[5,1,1], grid=3, k=3)जैसी बहुत सरल configuration से शुरुआत की जा सकती है - अगर यह काम न करे, तो पहले width बढ़ाने और उसके बाद भी समस्या रहे तो depth बढ़ाने की सलाह दी जाती है
- जब performance स्वीकार्य स्तर तक पहुँच जाए, तब उसे अधिक accurate या अधिक interpretable KAN में refine किया जा सकता है
- अगर accuracy अधिक महत्वपूर्ण है, तो grid extension technique आजमाई जा सकती है, लेकिन overfitting से सावधान रहना चाहिए
- अगर interpretability अधिक महत्वपूर्ण है, तो
model.train(lamb=0.01)जैसे तरीके से network को sparse बनाया जा सकता हैlambको धीरे-धीरे बढ़ाने की सलाह दी गई है- training के बाद अगर plot में स्पष्ट रूप से बेकार neurons दिखें, तो
pruned_model = model.prune()से pruned model प्राप्त किया जा सकता है - इसके बाद accuracy या sparsity के लिए आगे training की जा सकती है, या symbolic regression किया जा सकता है
- accuracy, interpretability और parameter efficiency हमेशा एक-दूसरे से टकराने वाले लक्ष्य नहीं होते; कुछ मामलों में इनमें positive correlation हो सकता है, जबकि कुछ में tradeoff हो सकता है
- अगर train/test loss के बीच बड़ा अंतर हो, तो data बढ़ाने या model को छोटा करने पर विचार करना चाहिए
grid,widthसे अधिक महत्वपूर्ण है, इसलिए पहलेgridघटाने और फिरwidthघटाने का सुझाव दिया गया है
- सरल model से शुरुआत कर पहले underfitting की स्थिति पहचानने और फिर धीरे-धीरे विस्तार करके उपयुक्त क्षेत्र तक पहुँचने की सलाह दी जाती है
उपयोग-क्षेत्र और सीमाएँ
- यह code गणित और physics examples जैसे छोटे पैमाने की scientific problems को ध्यान में रखकर डिज़ाइन किया गया है
- efficiency और reusability को बहुत अधिक ध्यान में नहीं रखा गया, और इस पहलू की आलोचना को स्वीकार किया गया है
- मूल लक्षित उपयोगकर्ता वे हैं जो scientific discovery और scientific computing में रुचि रखते हैं, और repository भी मुख्यतः इसी उद्देश्य को बनाए रखेगी
- efficiency सुधारने वाले implementations के रूप में efficientkan और FourierKAN का उल्लेख किया गया है
- machine learning-केंद्रित उपयोगकर्ताओं के लिए KAN अभी भी कोई आसान out-of-the-box plug-in नहीं है
- hyperparameter tuning की जरूरत है
- application-specific विशेष techniques जोड़ी जा सकती हैं
- GraphKAN सुझाव देता है कि latent space में KAN का उपयोग अधिक उपयुक्त हो सकता है, और input के बाद तथा output से पहले embedding/unembedding linear layer की आवश्यकता बताता है
- KANRL सुझाव देता है कि reinforcement learning में training stability बढ़ाने के लिए कुछ trainable parameters को स्थिर रखना बेहतर हो सकता है
- KAN अगली पीढ़ी का LLM बनेगा या नहीं, इस बारे में स्पष्ट सहज समझ नहीं होने की बात कही गई है
- KAN को high accuracy और interpretability पर ज़ोर देने वाले applications के लिए डिज़ाइन किया गया है
- LLM में interpretability और science में interpretability काफ़ी अलग हो सकती है
- पेपर के निष्कर्षों को सीधे LLM या सामान्य machine learning tasks पर लागू करना कठिन माना गया है
- KAN और MLP एक-दूसरे को पूरी तरह replace नहीं कर सकते, और दोनों की अलग-अलग settings में अपनी-अपनी strengths और limitations हैं
1 टिप्पणियां
Hacker News की राय
पेपर को जल्दी से पढ़कर इसे और सरल बनाकर देखना चाहता था, इसलिए एक PyTorch layer बनाया: https://github.com/GistNoesis/FourierKAN/
मुख्य बात सच में बस कुछ लाइनों की है। पेपर में कोड शायद छोटे scale को ध्यान में रखकर है, जो 1D function को व्यक्त करने के लिए spline interpolation इस्तेमाल करता है और फिर परिणामों को जोड़ता है
इसके बजाय मैंने हर coordinate के function को interpolate करने के लिए Fourier coefficients वाली अलग representation चुनी, और यह Kolmogorov-Arnold networks की expressive power का अंदाजा लगाने में मदद कर सकती है। spline version की तुलना में converge करना आसान हो सकता है, लेकिन operations की संख्या spline वाले में कम है
जाहिर है, मेरे code के काम न करने का मतलब यह नहीं कि पेपर वाला काम नहीं करता। चाहें तो experiment करके paper भी निकाल सकते हैं
Fourier coefficients भी अच्छी तरह parallelize होते हैं और लिखने में आसान हैं, इसलिए उन्हें आजमाया, लेकिन learning behavior radial basis functions में बेहतर था
efficientKAN सभी edge activations के लिए पहले common basis functions calculate करता है, और output उस basis के linear combination के रूप में calculate होता है
अगर basis functions Fourier हों, तो KAN layer को fixed-weight linear layer + Sin activation + trainable-weight linear layer के रूप में देखा जा सकता है, जो Siren का एक special form है
यह KAN और MLP के बीच connection दिखाने वाला example हो सकता है
“मेरे code के काम न करने का मतलब यह नहीं कि पेपर वाला काम नहीं करता” कहा है, लेकिन मैं जानना चाहता हूं कि यह सच में काम करता है या नहीं
Authors के Jupyter notebook से थोड़ा खेलकर देखा, और व्यक्तिगत रूप से Example_3_classfication.ipynb(https://github.com/KindXiaoming/pykan/blob/master/tutorials/Example_3_classfication.ipynb) सबसे उपयोगी लगा
Authors द्वारा चुने गए parameters पर यह वर्णन के मुताबिक काम करता है, लेकिन tutorial के दूसरे हिस्से में classification setting में network shape को (2, 2) से (2, 2, 2) करने पर generalize करने में fail हो जाता है
training loss 1e-9 तक नीचे चला जाता है, लेकिन test loss 3e-1 के आसपास रहता है, और बड़े network पर जाने से भी मदद नहीं मिली
parameters और data complexity के लिहाज से कहीं बड़ा example चाहिए, और यह भी देखना चाहता हूं कि क्या यह सच में train हो सकता है। MNIST अच्छा starting point लग सकता है
Update: training dataset size को 100 गुना बढ़ाने पर overfitting कम हुआ, लेकिन अब training loss को 1e-2 से नीचे नहीं ला पा रहा हूं। experiments जारी हैं और GPU acceleration की बहुत जरूरत है। फिलहाल CPU speed progress को limit कर रही है
मैंने तीन चीजें बदलीं। training set को 1,000 से 100k samples तक बढ़ाकर overfitting को ठीक किया, और data generation में noise को 0.1 से थोड़ा घटाकर 0.07 किया ताकि classes overlap न करें
सबसे महत्वपूर्ण और KAN-specific हिस्सा यह था कि grid=5 पर 30 steps train किया, फिर पिछले model से initialize करके grid=10 पर 30 steps, और फिर grid=20 पर 30 steps train किया। KAN में यह एक customary तरीका है और Example_1_function_fitting.ipynb(https://github.com/KindXiaoming/pykan/blob/master/tutorials/Example_1_function_fitting.ipynb) में दिया है
कुल impression यह है कि यह काम करता है, reference implementation बहुत धीमा है इसलिए GPU implementation जरूरी है, और MLP + ReLU की तुलना में nonlinearity ज्यादा मजबूत लगती है और training stability कम है
अभी यह guarantee नहीं है कि यह अच्छी तरह scale करेगा, और इस approach से MNIST solve हो सकता है या नहीं, यह जरूर देखना होगा। मैं इसे देखते रहने वाला हूं
अगर Transformer, LSTM, ADAM जैसे बड़े ideas को सिर्फ y=sin(x) curve पर 50 numbers वाले training data से test किया गया होता, तो शायद हम उन ideas को गलत तरीके से discard कर देते
GPU पर चलाने का मतलब हमेशा तेज होना नहीं है, खासकर जब branching ज्यादा हो तो यह चौंकाने वाली बात नहीं है
अफसोस की बात है कि संबंधित tensors सभी सही device पर नहीं जाते थे, इसलिए KAN.py और KANLayer.py में बदलाव करने पड़े। कुछ formats देखकर लगता है कि पहले device argument रहा होगा
classical statistics में Kolmogorov-Arnold से inspired GAM(https://en.wikipedia.org/wiki/Generalized_additive_model) नाम का model है, जिसे Hastie और Tibshirani ने GLM(https://en.wikipedia.org/wiki/Generalized_linear_model) के extension के रूप में develop किया था
GLM logistic regression, linear regression और कई popular regression models को generalize करता है
learned basis functions इस्तेमाल करने वाले neural network GAM भी पहले propose किए जा चुके हैं, इसलिए इस नए paper में prior work का mention न होना थोड़ा surprising है। पहले के applications interpretability पर ज्यादा focused थे
neural network की सफलता scalability से गहराई से जुड़ी है। algorithm को खुद ज़्यादा layers तक scale होना ही नहीं, hardware के साथ भी अच्छी तरह fit होना चाहिए
neural network ज़्यादातर matrix multiplication से बने होते हैं, और GPU में matrix multiplication के लिए dedicated acceleration होता है। AlexNet का बड़ा असर इसलिए भी था क्योंकि उसने दिखाया कि neural network को GPU पर चढ़ाकर scale और accelerate किया जा सकता है
यह algorithm कितना अच्छी तरह scale होगा, यह सिर्फ paper से स्पष्ट नहीं है। algorithm के लिहाज़ से layers बढ़ने पर भी यह अच्छी तरह train होगा या नहीं, और hardware acceleration का सही फायदा उठा पाएगा या नहीं—दोनों अनिश्चित हैं
खासकर हर weight के साथ activation function जुड़ी होने वाली structure तेज़ matrix multiplication acceleration का उपयोग कर पाएगी या नहीं, यह साफ नहीं है
छोटे scale पर यह अच्छी तरह काम करने वाला और अच्छे गुणों वाला दिलचस्प idea है, लेकिन ImageNet या LLM जैसी जगहों के लिए यह उपयुक्त architecture है या नहीं, अभी पता नहीं
तेज़ matrix multiplication acceleration शुरुआत में graphics जैसी specific problems के लिए उपयोगी होने के कारण hardware में implement किया गया था
अगर per-weight activation function सच में बहुत कारगर निकला, तो लोग जल्दी ही इसे hardware पर चलाने का तरीका खोज लेंगे
आम तौर पर दिखने वाले “Transformer को इस-उस तरीके से बदलकर इस-उस benchmark में थोड़ा बेहतर हुआ” जैसे कामों के बजाय नया AI research देखना ताज़गी भरा है
ऐसे incremental improvement papers भी महत्वपूर्ण हैं, लेकिन सब थोड़ा थकने लगे हैं, और anecdotal evidence तथा हालिया research देखकर लगता है कि हम Transformer की अपनी बुनियादी सीमाओं के करीब पहुंच रहे हैं, इसलिए नए विकल्प की ज़रूरत हो सकती है(https://news.ycombinator.com/item?id=40179232)
इस काम की सबसे अच्छी बात यह है कि यह either-or नहीं है। प्रस्तावित trainable spline interpolation activation function को existing deep neural networks में भी डालकर expressiveness बढ़ाई जा सकती है
अब बस test करना है कि यह असल में बेहतर काम करता है या नहीं
PR बहुत ताकतवर हो गया है; पहले भी था, लेकिन लगता है अब उसका असर और बढ़ गया है
ऐसे posts को upvote करके, और अगर आप reviewer हैं तो सिर्फ state-of-the-art performance improvement पर focus न करके इसका मुकाबला किया जा सकता है। वह criterion पहले ही game हो चुका है और साफ है कि हमें गलत दिशा में ले जा रहा है
आज के हिसाब से देखें तो book की सामग्री हास्यास्पद रूप से basic थी, लेकिन motivation के रूप में Kolmogorov representation theorem दिया गया था। इसका मतलब था कि suitable activation function वाला उचित 3-layer network किसी भी continuous m-to-n function को represent कर सकता है
शायद इसी वजह से उस समय का ज़्यादातर research 3-layer networks पर केंद्रित था, Sigmoid activation mainstream था, और vanishing gradients मुख्य समस्या थी
1990s के AI winter के बाद AlexNet द्वारा neural network research को फिर से जिंदा करने में 20 साल लगे
preprint देखें तो input dimension 100 को “high” माना गया है, और जिन problems को handle किया गया है उनमें से ज़्यादातर की input dimension 5 या उससे कम है
physics-inspired machine learning settings में मैंने यही typical pattern देखा है
अगला step इसे MNIST पर दिखाना होगा, और MNIST की 784 dimensions भी modern standards से बहुत छोटी हैं
लेकिन ऐसी ज़्यादातर problems में decision trees अब भी neural networks के मुकाबले competitive हैं, या कई बार उनसे बेहतर करते हैं
दिलचस्प है। Kolmogorov neural network discontinuous functions को represent कर सकते हैं(https://arxiv.org/abs/2311.00049), लेकिन मैं सोच रहा था कि practical applicability कितनी होगी
यह repository फिर भी दिखाती है कि कुछ हद तक उपयोगिता है
paper में भी लिखा है कि “discontinuous bounded और unbounded functions के मामले में g को practical तरीके से construct करने की विधि अभी ज्ञात नहीं है”
OP के arXiv link(https://arxiv.org/abs/2404.19756) को देखें तो वे splines इस्तेमाल कर रहे हैं
यह अब भी दिलचस्प और संभावित रूप से उपयोगी है, लेकिन किसी अतिरिक्त discovery के बिना discontinuous functions के लिए उपयोगी नहीं है। अगर मैं गलत हूं तो link दें, यह मेरे लिए बहुत रुचि का topic है
हो सकता है यह जल्दबाज़ी वाली प्रतिक्रिया हो, लेकिन B-splines का linear combination क्या एक और higher-order B-spline नहीं होता?
अंत में क्या यह सिर्फ function पर high-order B-spline fit करने जैसा ही नहीं है, यह सोच रहा हूं
दिलचस्प बात यह है कि इस approach और MLP की बुनियादें करीब 66 साल पहले लगभग एक ही समय पर invent या discover हुई थीं
1957: https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Arnold_representation_theorem
1958: https://en.wikipedia.org/wiki/Multilayer_perceptron
एक और फायदा यह है कि इस approach में सिर्फ एक तरह के parameter होते हैं—local activation function के coefficients—जबकि MLP में तीन तरह के parameter होते हैं: weights, biases, और globally same activation function
सब Transformer की बात करते हैं, लेकिन मैं इस approach का इस्तेमाल करने वाला diffusion model देखना चाहूंगा
linear sum के weights और spline के coefficients के बीच भी कोई बड़ा फर्क नहीं दिखता
self-attention और cross-attention वाले U-Net, Vision Transformer, Diffusion Transformer वगैरह हैं
इसे simplicity, यानी Occam's razor के नजरिए से argue किया जा सकता है, लेकिन जानना चाहता हूं कि आपका मतलब वही है या कोई और वजह है
ऐसा लगता है जैसे किसी ने splines को decision tree में ठूंस दिया हो
PDF के पेज 2 में लिखा है: “KAN के nodes nonlinearity apply नहीं करते, वे incoming signals को बस sum करते हैं”