2 पॉइंट द्वारा GN⁺ 2024-05-02 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 तरीका:
  • GitHub install:
  • PyPI install:
    • pip install pykan
  • प्रमुख आवश्यक packages में matplotlib, numpy, scikit_learn, sympy, torch, tqdm, pandas, seaborn, pyyaml आदि शामिल हैं
  • Conda उपयोगकर्ता python=3.9.7 environment बनाकर 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 टिप्पणियां

 
GN⁺ 2024-05-02
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 भी निकाल सकते हैं

    • कल रात implementation से छेड़छाड़ करते समय, Fourier coefficients की जगह radial basis functions इस्तेमाल करना depth 2 से ऊपर के networks को train करने में ज्यादा stable लगा
      Fourier coefficients भी अच्छी तरह parallelize होते हैं और लिखने में आसान हैं, इसलिए उन्हें आजमाया, लेकिन learning behavior radial basis functions में बेहतर था
    • Noesis implementation को Blealtan के efficientKAN(https://github.com/Blealtan/efficient-kan) के साथ मिलाने पर structure Siren (Sin activation function इस्तेमाल करने वाला MLP) से बहुत मिलता-जुलता हो जाता है
      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 सच में काम करता है? Train करके देखा है? Graphs हैं?
      “मेरे code के काम न करने का मतलब यह नहीं कि पेपर वाला काम नहीं करता” कहा है, लेकिन मैं जानना चाहता हूं कि यह सच में काम करता है या नहीं
    • उत्सुक हूं कि इस family के models की GPU-friendliness कैसी है
  • 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 कर रही है

    • Update 2: (2, 2, 2) shape में training accuracy 100%, test accuracy 99% तक पहुंच गया
      मैंने तीन चीजें बदलीं। 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 हो सकता है या नहीं, यह जरूर देखना होगा। मैं इसे देखते रहने वाला हूं
    • मैं सहमत हूं कि बड़ा example चाहिए। modern machine learning techniques के लिए toy examples ज्यादा उपयोगी नहीं लगते
      अगर Transformer, LSTM, ADAM जैसे बड़े ideas को सिर्फ y=sin(x) curve पर 50 numbers वाले training data से test किया गया होता, तो शायद हम उन ideas को गलत तरीके से discard कर देते
    • CUDA पर चलाना संभव है, और examples में से एक तरीका दिखाता है। हालांकि जब मैंने किया तो यह CPU से धीमा था
      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 थे

    • सही। KAN और GAM search करते हुए मैं यहां तक आया, और मेरा भी पहला ख्याल यही था
  • 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 है या नहीं, अभी पता नहीं

    • per-weight activation function को discrete cosine transform से approximate किया जा सकता है, ऐसा लगता है। JPEG compression भी इसका इस्तेमाल करता है, और hardware acceleration भी उपलब्ध है
      तेज़ 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 करना है कि यह असल में बेहतर काम करता है या नहीं

    • असल में ऐसे research काफी हैं। बस वे अक्सर अतिरिक्त review से गुजरते हैं या बिल्कुल pass नहीं हो पाते, और MIT या CIT जैसी खास background न हो तो HN तक नहीं पहुंचते
      PR बहुत ताकतवर हो गया है; पहले भी था, लेकिन लगता है अब उसका असर और बढ़ गया है
      ऐसे posts को upvote करके, और अगर आप reviewer हैं तो सिर्फ state-of-the-art performance improvement पर focus न करके इसका मुकाबला किया जा सकता है। वह criterion पहले ही game हो चुका है और साफ है कि हमें गलत दिशा में ले जा रहा है
    • 1989 में neural network boom के दौरान Robert Hecht Nielsen की neural network book पढ़ी थी। शायद यह दूसरा boom था; पहला Rosenblatt के hardware perceptron से शुरू हुआ और Minsky और Papert की “Perceptrons” manuscript के बाद ठंडा पड़ गया था
      आज के हिसाब से देखें तो 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 साल लगे
    • science में मूल रूप से ऐसा पहलू होता है। 95% काम पहले से मौजूद चीज़ों में average से decent level के improvements बनाता है, और उसी प्रक्रिया में researchers grow करके सच में दिलचस्प काम करने लगते हैं
  • preprint देखें तो input dimension 100 को “high” माना गया है, और जिन problems को handle किया गया है उनमें से ज़्यादातर की input dimension 5 या उससे कम है
    physics-inspired machine learning settings में मैंने यही typical pattern देखा है
    अगला step इसे MNIST पर दिखाना होगा, और MNIST की 784 dimensions भी modern standards से बहुत छोटी हैं

    • real business processes में input dimension 100 से कम वाली machine learning problems बहुत हैं
      लेकिन ऐसी ज़्यादातर problems में decision trees अब भी neural networks के मुकाबले competitive हैं, या कई बार उनसे बेहतर करते हैं
  • दिलचस्प है। Kolmogorov neural network discontinuous functions को represent कर सकते हैं(https://arxiv.org/abs/2311.00049), लेकिन मैं सोच रहा था कि practical applicability कितनी होगी
    यह repository फिर भी दिखाती है कि कुछ हद तक उपयोगिता है

    • discontinuous functions के लिए यह अभी practical नहीं है। आपने जिस paper को cite किया है, वह भी समझाता है कि discontinuous bounded function के लिए g मौजूद है, यह तो पता है, लेकिन उसे खोजने का तरीका नहीं है
      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 करने जैसा ही नहीं है, यह सोच रहा हूं

    • single node या single layer हो तो सही है। लेकिन जब एक layer का output अगली layer का input बनता है, तो यह अब सिर्फ splines का linear combination नहीं रह जाता
  • दिलचस्प बात यह है कि इस 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 देखना चाहूंगा

    • bias तो बस ऐसे input का weight है जो हमेशा on रहता है
      linear sum के weights और spline के coefficients के बीच भी कोई बड़ा फर्क नहीं दिखता
    • तीसरे point पर कहें तो, ज्यादातर diffusion models पहले से ही Transformer-based architectures इस्तेमाल करते हैं
      self-attention और cross-attention वाले U-Net, Vision Transformer, Diffusion Transformer वगैरह हैं
    • यह सही है कि point 2 एक फर्क है। लेकिन मैं जानना चाहता हूं कि यह फायदा क्यों है
      इसे simplicity, यानी Occam's razor के नजरिए से argue किया जा सकता है, लेकिन जानना चाहता हूं कि आपका मतलब वही है या कोई और वजह है
    • हो सकता है मैं गलत होऊं, लेकिन मेरी जानकारी में modern LLMs में biases लगभग इस्तेमाल नहीं होते
  • ऐसा लगता है जैसे किसी ने splines को decision tree में ठूंस दिया हो

    • splines तो हैं, लेकिन decision tree को लेकर मुझे पक्का नहीं। क्या मुझसे कुछ छूट गया?
      PDF के पेज 2 में लिखा है: “KAN के nodes nonlinearity apply नहीं करते, वे incoming signals को बस sum करते हैं”