การพัฒนาเครือข่าย Kolmogorov-Arnold
(github.com/KindXiaoming)- pykan เป็นที่เก็บ GitHub สำหรับงานวิจัย “KAN: Kolmogorov-Arnold Networks” และ “KAN 2.0: Kolmogorov-Arnold Networks Meet Science” โดยมีทั้งการฝึก KAN, บทช่วยสอน, เอกสาร และตัวอย่าง
- KAN ถูกนำเสนอเป็นทางเลือกของ MLP โดย MLP อิงกับ universal approximation theorem ขณะที่ KAN อิงกับ Kolmogorov-Arnold representation theorem
- ในเชิงโครงสร้าง MLP มี activation function อยู่ที่โหนด ส่วน KAN มี activation function อยู่ที่ edge และอธิบายว่าการเปลี่ยนแปลงนี้อาจช่วยเพิ่มความแม่นยำและความสามารถในการตีความของโมเดล
- ผู้ใช้สายแมชชีนเลิร์นนิงที่ไม่ใช้ symbolic branch ควรเรียก
model.speed()ก่อนฝึก มิฉะนั้นอาจช้ามากเพราะ symbolic branch ที่ไม่ถูกทำงานแบบขนาน - อิมพลีเมนเทชันนี้มุ่งเป้าไปที่ปัญหาทางวิทยาศาสตร์ขนาดเล็กเป็นหลัก และมองได้ยากว่าเป็นปลั๊กอินแบบเสียบใช้ได้ทันทีสำหรับงานแมชชีนเลิร์นนิง เพราะต้องมีการปรับจูนไฮเปอร์พารามิเตอร์และเทคนิคเฉพาะตามงาน
ภาพรวมของ pykan และ KAN
- pykan เป็นที่เก็บสำหรับ “KAN: Kolmogorov-Arnold Networks” และ “KAN 2.0: Kolmogorov-Arnold Networks Meet Science”
- เริ่มต้นอย่างรวดเร็วได้ที่ hellokan, ตัวอย่างเพิ่มเติมอยู่ที่ tutorials, และเอกสารอยู่ที่ เอกสารทางการ
- KANs ถูกแนะนำว่าเป็นทางเลือกที่มีอนาคตสำหรับ Multi-Layer Perceptrons (MLPs)
- MLP อิงกับ universal approximation theorem
- KAN อิงกับ Kolmogorov-Arnold representation theorem
- KAN และ MLP ถูกอธิบายว่าเป็นโครงสร้างแบบคู่กัน
- KAN มี activation function อยู่ที่ edge
- MLP มี activation function อยู่ที่ node
- มีการอธิบายว่าการเปลี่ยนโครงสร้างนี้อาจทำให้ ความแม่นยำ และ ความสามารถในการตีความ ของ KAN ดีกว่า MLP
การติดตั้งและสภาพแวดล้อมการรัน
- pykan สามารถติดตั้งได้จาก PyPI หรือ GitHub
- ข้อกำหนดเบื้องต้นคือ Python 3.9.7 ขึ้นไป และ
pip - วิธีติดตั้งสำหรับนักพัฒนา:
git clone https://github.com/KindXiaoming/pykan.gitcd pykanpip install -e .
- ติดตั้งจาก GitHub:
pip install git+https://github.com/KindXiaoming/pykan.git
- ติดตั้งจาก PyPI:
pip install pykan
- แพ็กเกจที่จำเป็นหลักได้แก่
matplotlib,numpy,scikit_learn,sympy,torch,tqdm,pandas,seaborn,pyyamlเป็นต้น - ผู้ใช้ Conda สามารถสร้างสภาพแวดล้อมด้วย
python=3.9.7แล้วติดตั้งด้วยวิธี GitHub หรือ PyPI ได้
โหมดประสิทธิภาพและความต้องการด้านการคำนวณ
- หากผู้ใช้สายแมชชีนเลิร์นนิงเขียนลูปฝึกเอง ไม่ใช้
model.fit()และไม่ใช้ symbolic branch การเรียกmodel.speed()ก่อนฝึกเป็นเรื่องสำคัญ - หากไม่เรียก
model.speed()symbolic branch จะยังเปิดอยู่ และการคำนวณเชิงสัญลักษณ์ที่ไม่ทำงานแบบขนานอาจทำให้ช้ามาก - ตัวอย่างใน tutorials โดยทั่วไปสามารถรันได้บน CPU เดียวภายใน 10 นาที
- ตัวอย่างทั้งหมดที่อยู่ในงานวิจัยสามารถรันได้บน CPU เดียวภายใน 1 วัน
- การฝึก KAN สำหรับ PDE มีต้นทุนสูงที่สุด และอาจใช้เวลา หลายชั่วโมงถึงหลายวัน บน CPU เดียว
- เหตุผลที่ใช้ CPU ในการฝึกโมเดลคือเพื่อทำ parameter sweep กับโมเดลขนาดเล็กหลายพันตัวเพื่อให้ได้ Pareto Frontier ของ MLP และ KAN
- สำหรับงานที่มีขนาดปัญหาใหญ่ แนะนำให้ใช้ GPU
การปรับจูนไฮเปอร์พารามิเตอร์ของ KAN
- สัญชาตญาณที่ได้จาก MLP และเครือข่ายแบบอื่นอาจนำมาใช้กับ KAN ได้ไม่ตรงนัก
- คำแนะนำพื้นฐานคือให้เริ่มจาก การตั้งค่าที่เรียบง่าย
- KAN shape ขนาดเล็ก
- grid size ขนาดเล็ก
- ข้อมูลขนาดเล็ก
- ไม่มี regularization,
lamb=0
- ตัวอย่างเช่น งานที่มีอินพุต 5 ตัวและเอาต์พุต 1 ตัว อาจเริ่มจากการตั้งค่าที่ง่ายมากอย่าง
KAN(width=[5,1,1], grid=3, k=3) - หากยังใช้ไม่ได้ แนะนำให้เพิ่ม width ก่อน และหากยังไม่พอค่อยเพิ่ม depth
- เมื่อประสิทธิภาพถึงระดับที่ยอมรับได้แล้ว จึงค่อยปรับให้เป็น KAN ที่แม่นยำขึ้นหรือตีความได้มากขึ้น
- หากให้ความสำคัญกับความแม่นยำ อาจลองใช้เทคนิค grid extension แต่ต้องระวัง overfitting
- หากให้ความสำคัญกับความสามารถในการตีความ สามารถทำให้เครือข่ายเบาบางลงด้วยวิธีอย่าง
model.train(lamb=0.01)- แนะนำให้ค่อย ๆ เพิ่ม
lambทีละน้อย - หากหลังฝึกแล้วเห็นนิวรอนที่ไม่มีประโยชน์อย่างชัดเจนในกราฟ ก็สามารถตัดทิ้งได้ด้วย
pruned_model = model.prune() - หลังจากนั้นสามารถฝึกต่อเพื่อเพิ่มความแม่นยำหรือความเบาบาง หรือทำ symbolic regression ได้
- แนะนำให้ค่อย ๆ เพิ่ม
- ความแม่นยำ ความสามารถในการตีความ และประสิทธิภาพด้านพารามิเตอร์ ไม่ได้อยู่ในความสัมพันธ์แบบขัดแย้งกันเสมอไป บางกรณีอาจสัมพันธ์กันเชิงบวก หรืออาจมี tradeoff ก็ได้
- หาก train/test loss ต่างกันมาก ควรพิจารณาเพิ่มข้อมูลหรือลดขนาดโมเดล
- เนื่องจาก
gridสำคัญกว่าwidthจึงมีข้อเสนอให้ลดgridก่อน แล้วค่อยลดwidth
- เนื่องจาก
- แนะนำให้เริ่มจากโมเดลที่เรียบง่าย ตรวจดูสถานะ underfitting ก่อน แล้วค่อยขยายอย่างค่อยเป็นค่อยไปเพื่อเข้าสู่ช่วงที่เหมาะสม
ขอบเขตการใช้งานและข้อจำกัด
- โค้ดนี้ถูกออกแบบโดยคำนึงถึง ปัญหาทางวิทยาศาสตร์ขนาดเล็ก เป็นหลัก เช่น ตัวอย่างทางคณิตศาสตร์และฟิสิกส์
- เนื่องจากไม่ได้คำนึงถึงประสิทธิภาพและการนำกลับมาใช้ซ้ำมากนัก ผู้พัฒนาระบุว่ายอมรับคำวิจารณ์ในด้านนี้
- เดิมทีตั้งเป้าไว้สำหรับผู้ใช้ที่สนใจการค้นพบทางวิทยาศาสตร์และ scientific computing และที่เก็บนี้ก็มีแนวโน้มจะคงจุดประสงค์นี้ไว้เป็นหลัก
- มีการกล่าวถึงอิมพลีเมนเทชันที่ปรับปรุงประสิทธิภาพอย่าง efficientkan และ FourierKAN
- สำหรับผู้ใช้ที่เน้นงานแมชชีนเลิร์นนิง KAN ยังไม่ใช่ ปลั๊กอินแบบ out-of-the-box อย่างแท้จริง
- ต้องมีการปรับจูนไฮเปอร์พารามิเตอร์
- อาจต้องเพิ่มเทคนิคเฉพาะตามงาน
- GraphKAN เสนอว่าการใช้ KAN ใน latent space อาจเหมาะกว่า และระบุว่าจำเป็นต้องมี embedding/unembedding linear layer หลังอินพุตและก่อนเอาต์พุต
- KANRL เสนอว่าในงาน reinforcement learning ควรตรึงพารามิเตอร์ที่ฝึกได้บางส่วนไว้เพื่อเพิ่มเสถียรภาพของการฝึก
- เกี่ยวกับคำถามว่า KAN จะกลายเป็น LLM รุ่นถัดไปหรือไม่ ผู้พัฒนาระบุว่ายังไม่มีสัญชาตญาณที่ดีพอ
- KAN ถูกออกแบบมาสำหรับงานที่ให้ความสำคัญกับความแม่นยำสูงและความสามารถในการตีความ
- ความสามารถในการตีความใน LLM อาจแตกต่างอย่างมากจากความสามารถในการตีความในงานวิทยาศาสตร์
- มองว่ายากที่จะนำข้อสรุปจากงานวิจัยไปใช้กับ LLM หรืองานแมชชีนเลิร์นนิงทั่วไปโดยตรง
- KAN และ MLP ไม่สามารถแทนกันได้ทั้งหมด และแต่ละแบบก็มีจุดแข็งและข้อจำกัดในสภาพแวดล้อมที่ต่างกัน
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ลองไล่อ่าน paper แบบเร็ว ๆ แล้วอยากทำให้มันง่ายกว่านี้ เลยลองทำเป็น เลเยอร์ PyTorch: https://github.com/GistNoesis/FourierKAN/
แก่นจริง ๆ มีอยู่แค่ไม่กี่บรรทัด ใน paper ใช้โค้ดที่ดูเหมือนออกแบบมาสำหรับสเกลเล็กกว่า โดยใช้ spline interpolation เพื่อแทนฟังก์ชันหนึ่งมิติแล้วนำผลมารวมกัน
แต่ผมเลือกใช้อีกรูปแบบหนึ่งที่ใช้ สัมประสิทธิ์ฟูเรียร์ ในการอินเตอร์โพเลตฟังก์ชันของแต่ละพิกัด ซึ่งน่าจะช่วยให้พอจับภาพความสามารถในการแทนค่าของ Kolmogorov-Arnold network ได้ รุ่นนี้อาจคอนเวิร์จง่ายกว่ารุ่น spline แต่ฝั่ง spline ใช้จำนวนการคำนวณน้อยกว่า
แน่นอนว่าแค่โค้ดของผมไม่ทำงาน ไม่ได้แปลว่าของใน paper จะไม่ทำงาน ถ้าอยากก็ลองเอาไปทดลองต่อแล้วเขียนเป็น paper ได้
สัมประสิทธิ์ฟูเรียร์ก็ขนานงานได้ดีและเขียนง่ายเลยลองใช้ดู แต่พฤติกรรมระหว่างการเทรนฝั่ง radial basis function ดีกว่า
efficientKAN จะคำนวณ basis function ร่วมกันก่อนสำหรับ activation ของทุก edge แล้วค่อยคำนวณเอาต์พุตเป็น linear combination ของ basis เหล่านั้น
ถ้า basis function เป็นฟูเรียร์ เลเยอร์ KAN ก็อาจมองได้เป็นเลเยอร์เชิงเส้นน้ำหนักคงที่ + activation แบบ Sin + เลเยอร์เชิงเส้นที่มีน้ำหนักเรียนรู้ได้ ซึ่งเป็นรูปแบบพิเศษของ Siren
นี่อาจเป็นตัวอย่างที่แสดงความเชื่อมโยงระหว่าง KAN กับ MLP
ถึงจะบอกว่า “แค่โค้ดของผมไม่ทำงาน ไม่ได้แปลว่าของใน paper จะไม่ทำงาน” แต่ก็ยังอยากรู้ว่ามัน ใช้งานได้จริง ไหม
ผมลองเล่นกับ Jupyter notebook ของผู้เขียนอยู่พักหนึ่ง และโดยส่วนตัวคิดว่า Example_3_classfication.ipynb(https://github.com/KindXiaoming/pykan/blob/master/tutorials/Example_3_classfication.ipynb) มีประโยชน์ที่สุด
ด้วยพารามิเตอร์ที่ผู้เขียนเลือก มันทำงานตามที่อธิบายไว้ แต่ในโจทย์ classification ช่วงท้ายของ tutorial ถ้าเปลี่ยนรูปทรงเครือข่ายจาก (2, 2) เป็น (2, 2, 2) มันจะ generalize ไม่ได้
training loss ลงไปถึง 1e-9 ได้ แต่ test loss ยังอยู่แถว ๆ 3e-1 และต่อให้ใช้เครือข่ายใหญ่ขึ้นก็ไม่ช่วย
น่าจะต้องมีตัวอย่างที่พารามิเตอร์และความซับซ้อนของข้อมูลใหญ่กว่านี้มาก และอยากเห็นด้วยว่ามันเทรนได้จริงไหม MNIST น่าจะเป็นจุดเริ่มที่ดี
อัปเดต: พอเพิ่มขนาดชุดข้อมูลฝึกเป็น 100 เท่า อาการ overfitting ก็น้อยลง แต่ตอนนี้กลับกด training loss ให้ต่ำกว่า 1e-2 ไม่ได้ กำลังทดลองต่อ และต้องการ GPU acceleration อย่างมาก ตอนนี้ความเร็วของ CPU เป็นคอขวด
สิ่งที่เปลี่ยนมีสามอย่าง แก้ overfitting โดยเพิ่มชุดฝึกจาก 1,000 เป็น 100k ตัวอย่าง และลด noise ในการสร้างข้อมูลจาก 0.1 เป็น 0.07 เล็กน้อยเพื่อไม่ให้คลาสซ้อนกัน
ส่วนที่สำคัญที่สุดและเป็นเทคนิคเฉพาะของ KAN คือเทรนด้วย grid=5 เป็นเวลา 30 สเต็ปก่อน จากนั้นใช้โมเดลก่อนหน้าเป็นค่าเริ่มต้นแล้วเทรนต่อด้วย grid=10 อีก 30 สเต็ป และ grid=20 อีก 30 สเต็ป ซึ่งเป็นวิธีที่ใช้กันใน KAN และมีอยู่ใน Example_1_function_fitting.ipynb(https://github.com/KindXiaoming/pykan/blob/master/tutorials/Example_1_function_fitting.ipynb)
โดยรวมความรู้สึกคือมันใช้งานได้ แต่ reference implementation ช้ามากจนจำเป็นต้องมี implementation บน GPU และมันให้ความรู้สึกว่ามี nonlinearity สูงกว่า MLP + ReLU และมีเสถียรภาพในการเทรนน้อยกว่า
ยังไม่มีหลักประกันว่ามันจะสเกลได้ดี และควรได้เห็นจริง ๆ ว่าแนวทางนี้แก้ MNIST ได้ไหม ผมจะตามดูต่อไป
ถ้าไอเดียใหญ่ ๆ อย่าง Transformer, LSTM, ADAM ถูกทดสอบแค่กับเส้นโค้ง y=sin(x) และข้อมูลฝึกเพียง 50 ตัวอย่าง ก็มีโอกาสสูงมากที่เราจะตัดทิ้งไอเดียเหล่านั้นไปผิด ๆ
การรันบน GPU ไม่ได้แปลว่าจะเร็วกว่าเสมอไป โดยเฉพาะเวลาที่มี branching เยอะ แบบนี้ก็ไม่ได้น่าแปลกใจนัก
น่าเสียดายที่ tensor ที่เกี่ยวข้องไม่ได้ถูกย้ายไปยังอุปกรณ์ที่ถูกต้องทั้งหมด เลยต้องแก้ทั้ง KAN.py และ KANLayer.py และจากบางฟอร์แมตก็ดูเหมือนว่าเมื่อก่อนอาจเคยมีอาร์กิวเมนต์
deviceอยู่ในสถิติคลาสสิกมีโมเดลที่ชื่อ GAM(https://en.wikipedia.org/wiki/Generalized_additive_model) ซึ่งได้แรงบันดาลใจจาก Kolmogorov-Arnold และถูกพัฒนาโดย Hastie กับ Tibshirani ให้เป็นส่วนขยายของ GLM(https://en.wikipedia.org/wiki/Generalized_linear_model)
GLM เป็นกรอบทั่วไปของ logistic regression, linear regression และโมเดลรีเกรสชันยอดนิยมอีกหลายแบบ
ก่อนหน้านี้ก็มีการเสนอ neural-network GAM ที่ใช้ learned basis function มาแล้ว จึงค่อนข้างน่าแปลกใจเล็กน้อยที่ paper ใหม่นี้ไม่ได้อ้างถึงงานก่อนหน้า งานประยุกต์ก่อนหน้านี้เน้นเรื่องการตีความได้มากกว่า
ความสำเร็จของโครงข่ายประสาทเชื่อมโยงอย่างใกล้ชิดกับ ความสามารถในการขยายขนาด ไม่ใช่แค่อัลกอริทึมเองต้องขยายไปเป็นเลเยอร์จำนวนมากได้ แต่ยังต้องเข้ากับฮาร์ดแวร์ได้ดีด้วย
โครงข่ายประสาทส่วนใหญ่ประกอบด้วยการคูณเมทริกซ์ และบน GPU ก็มีตัวเร่งสำหรับการคูณเมทริกซ์โดยเฉพาะ เหตุผลที่ AlexNet มีอิทธิพลมากก็เพราะมันแสดงให้เห็นว่าสามารถนำโครงข่ายประสาทไปรันบน GPU เพื่อขยายขนาดและเร่งความเร็วได้
แค่อ่านจากตัวบทความยังไม่ชัดเจนว่าอัลกอริทึมนี้จะขยายขนาดได้ดีแค่ไหน ทั้งในแง่ที่เมื่อเพิ่มจำนวนเลเยอร์แล้วจะยังฝึกได้ดีหรือไม่ และจะใช้ประโยชน์จากฮาร์ดแวร์เร่งความเร็วได้ดีหรือไม่ ล้วนยังไม่แน่นอน
โดยเฉพาะโครงสร้างที่มีฟังก์ชันกระตุ้นติดอยู่กับทุกน้ำหนักนั้น ยังไม่แน่ชัดว่าจะใช้ประโยชน์จากตัวเร่งการคูณเมทริกซ์ความเร็วสูงได้หรือไม่
มันเป็นไอเดียที่น่าสนใจซึ่งทำงานได้ดีในสเกลเล็กและมีคุณสมบัติที่ดี แต่ยังไม่รู้ว่าเป็นสถาปัตยกรรมที่เหมาะกับงานอย่าง ImageNet หรือ LLM หรือไม่
ตัวเร่งการคูณเมทริกซ์ความเร็วสูงเอง ในช่วงแรกก็ถูกนำไปทำเป็นฮาร์ดแวร์เพราะมีประโยชน์กับปัญหาเฉพาะอย่างงานกราฟิก
ถ้าฟังก์ชันกระตุ้นรายน้ำหนักได้ผลดีจริง ผู้คนก็น่าจะหาวิธีทำให้มันรันบนฮาร์ดแวร์ได้อย่างรวดเร็ว
ได้เห็นงานวิจัย AI ใหม่ที่ไม่ใช่แนว “เอา Transformer ไปดัดแปลงแบบนั้นแบบนี้แล้วดีขึ้นนิดหน่อยบนเบนช์มาร์กนั้นนี้” ก็รู้สึกสดใหม่ดี
งานปรับปรุงแบบค่อยเป็นค่อยไปเหล่านั้นก็สำคัญ แต่ทุกคนก็เริ่มล้ากันบ้างแล้ว และจากหลักฐานเชิงเกร็ดกับงานวิจัยช่วงหลัง ๆ ดูเหมือนเรากำลังเข้าใกล้ข้อจำกัดพื้นฐานที่มีเฉพาะกับ Transformer จึงอาจต้องมีทางเลือกใหม่(https://news.ycombinator.com/item?id=40179232)
ข้อดีที่สุดของงานนี้คือมันไม่ใช่การเลือกอย่างใดอย่างหนึ่งทิ้งอีกอย่างหนึ่ง เพราะ ฟังก์ชันกระตุ้นแบบ spline interpolation ที่เรียนรู้ได้ ที่เสนอมา สามารถใส่เข้าไปในโครงข่ายประสาทเชิงลึกแบบเดิมเพื่อเพิ่มพลังในการแทนค่าได้ด้วย
ตอนนี้ก็แค่ต้องทดสอบว่ามันทำงานได้ดีกว่าจริงหรือไม่
PR กลายเป็นพลังที่แรงเกินไป แม้เมื่อก่อนก็มีอยู่แล้ว แต่ตอนนี้ดูจะยิ่งมีอิทธิพลมากขึ้น
เราสามารถรับมือกับเรื่องนี้ได้ด้วยการกดโหวตให้โพสต์แบบนี้ และถ้าเป็นผู้ประเมินก็อย่าไปโฟกัสแค่ การทำสถิติใหม่ด้านประสิทธิภาพสูงสุด เกณฑ์นั้นถูกทำให้เป็นเกมไปแล้ว และชัดเจนว่ากำลังพาเราไปผิดทาง
เมื่อมองจากวันนี้ เนื้อหาในหนังสือพื้นฐานเสียจนแทบจะน่าขำ แต่แรงจูงใจที่ยกมาคือ ทฤษฎีบทการแทนค่าของ Kolmogorov ซึ่งบอกว่าโครงข่ายสามชั้นที่เหมาะสมและมีฟังก์ชันกระตุ้นที่เหมาะสม สามารถแทนฟังก์ชันต่อเนื่องแบบ m-to-n ใด ๆ ก็ได้
อาจเพราะเหตุนี้ งานวิจัยส่วนใหญ่ในตอนนั้นจึงโฟกัสที่โครงข่ายสามชั้น โดยมี Sigmoid activation เป็นกระแสหลัก และปัญหาการหายไปของกราเดียนต์เป็นประเด็นสำคัญ
ต้องใช้เวลาอีก 20 ปี กว่า AlexNet จะปลุกงานวิจัยโครงข่ายประสาทให้กลับมามีชีวิตอีกครั้งหลัง AI winter ในทศวรรษ 1990
ดูจาก preprint แล้ว พวกเขามองว่ามิติอินพุต 100 ตัว นั้น “สูง” และปัญหาส่วนใหญ่ที่จัดการก็มีมิติอินพุตไม่เกิน 5
ในงานแมชชีนเลิร์นนิงที่ได้แรงบันดาลใจจากฟิสิกส์ที่ผมเคยเห็น นี่ถือเป็นภาพที่พบได้ทั่วไป
ขั้นต่อไปคือต้องแสดงผลบน MNIST และแม้ 784 มิติของ MNIST ก็ยังเล็กมากตามมาตรฐานปัจจุบัน
แต่ในปัญหาเหล่านั้นส่วนใหญ่ decision tree ก็ยังแข่งขันกับโครงข่ายประสาทได้ หรือบางครั้งทำได้ดีกว่าด้วยซ้ำ
น่าสนใจดี Kolmogorov network สามารถแทน ฟังก์ชันไม่ต่อเนื่อง ได้(https://arxiv.org/abs/2311.00049) แต่ผมก็สงสัยอยู่เหมือนกันว่ามันนำไปใช้ได้จริงแค่ไหน
อย่างน้อยรีโพซิทอรีนี้ก็ดูเหมือนจะแสดงให้เห็นว่ามันพอมีประโยชน์ใช้งานได้บ้าง
ในบทความก็บอกไว้ว่า “สำหรับฟังก์ชันมีขอบเขตและไม่มีขอบเขตที่ไม่ต่อเนื่อง ยังไม่รู้วิธีสร้าง g ที่ใช้ได้จริง”
ถ้าดูจากลิงก์ arXiv ของ OP(https://arxiv.org/abs/2404.19756) จะเห็นว่าพวกเขาใช้ spline
มันยังน่าสนใจและอาจมีประโยชน์ได้อยู่ แต่หากไม่มีการค้นพบเพิ่มเติม ก็ยังไม่เป็นประโยชน์กับฟังก์ชันไม่ต่อเนื่อง ถ้าผมเข้าใจผิดก็ขอให้ส่งลิงก์มาได้เลย เพราะเป็นหัวข้อที่ผมสนใจมาก
อาจเป็นปฏิกิริยาที่ด่วนเกินไป แต่ผลรวมเชิงเส้นของ B-spline ก็ไม่ใช่แค่ B-spline อีกตัวที่มีลำดับสูงกว่าหรือ?
เลยสงสัยว่าสุดท้ายแล้วมันก็แค่ฟิต B-spline ลำดับสูงให้กับฟังก์ชันไม่ใช่หรือ
ที่น่าสนใจคือ แนวทางนี้กับรากฐานของ MLP ถูกประดิษฐ์หรือค้นพบขึ้นแทบจะในช่วงเวลาเดียวกันเมื่อราว 66 ปีก่อน
1957: https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Arnold_representation_theorem
1958: https://en.wikipedia.org/wiki/Multilayer_perceptron
ข้อดีอีกอย่างคือ แนวทางนี้มีพารามิเตอร์เพียงชนิดเดียวคือค่าสัมประสิทธิ์ของฟังก์ชัน activation เฉพาะที่ ขณะที่ MLP มีพารามิเตอร์อยู่สามชนิดคือ weight, bias และฟังก์ชัน activation แบบเดียวกันทั้งระบบ
ทุกคนเอาแต่พูดถึง Transformer แต่ฉันอยากเห็น โมเดล diffusion ที่ใช้แนวทางนี้
ระหว่างน้ำหนักของผลรวมเชิงเส้นกับค่าสัมประสิทธิ์ของ spline ก็ดูเหมือนไม่มีความต่างมากนัก
มีทั้ง U-Net ที่ใส่ self-attention และ cross-attention, Vision Transformer, Diffusion Transformer เป็นต้น
อาจพออ้างได้ในแง่ความเรียบง่าย หรือ มีดโกนของอ็อกคัม แต่ก็สงสัยว่านี่คือเหตุผลนั้นหรือมีเหตุผลอื่นอีก
ให้ความรู้สึกเหมือนมีคนเอา spline ไปยัดใส่ decision tree
ในหน้า 2 ของ PDF เขียนไว้ว่า “โหนดของ KAN จะเพียงรวมสัญญาณขาเข้าตามตรงโดยไม่ใช้ nonlinearity”