2 คะแนน โดย GN⁺ 2024-05-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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
  • วิธีติดตั้งสำหรับนักพัฒนา:
  • ติดตั้งจาก GitHub:
  • ติดตั้งจาก 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 ความคิดเห็น

 
GN⁺ 2024-05-02
ความคิดเห็นจาก Hacker News
  • ลองไล่อ่าน paper แบบเร็ว ๆ แล้วอยากทำให้มันง่ายกว่านี้ เลยลองทำเป็น เลเยอร์ PyTorch: https://github.com/GistNoesis/FourierKAN/
    แก่นจริง ๆ มีอยู่แค่ไม่กี่บรรทัด ใน paper ใช้โค้ดที่ดูเหมือนออกแบบมาสำหรับสเกลเล็กกว่า โดยใช้ spline interpolation เพื่อแทนฟังก์ชันหนึ่งมิติแล้วนำผลมารวมกัน
    แต่ผมเลือกใช้อีกรูปแบบหนึ่งที่ใช้ สัมประสิทธิ์ฟูเรียร์ ในการอินเตอร์โพเลตฟังก์ชันของแต่ละพิกัด ซึ่งน่าจะช่วยให้พอจับภาพความสามารถในการแทนค่าของ Kolmogorov-Arnold network ได้ รุ่นนี้อาจคอนเวิร์จง่ายกว่ารุ่น spline แต่ฝั่ง spline ใช้จำนวนการคำนวณน้อยกว่า
    แน่นอนว่าแค่โค้ดของผมไม่ทำงาน ไม่ได้แปลว่าของใน paper จะไม่ทำงาน ถ้าอยากก็ลองเอาไปทดลองต่อแล้วเขียนเป็น paper ได้

    • ตอนลองแก้อิมพลีเมนต์เมื่อคืน ผมพบว่าการใช้ radial basis function แทนสัมประสิทธิ์ฟูเรียร์ มีความเสถียรกว่าในการเทรนเครือข่ายที่ลึกเกิน 2 ชั้น
      สัมประสิทธิ์ฟูเรียร์ก็ขนานงานได้ดีและเขียนง่ายเลยลองใช้ดู แต่พฤติกรรมระหว่างการเทรนฝั่ง radial basis function ดีกว่า
    • ถ้าเอา implementation ของ Noesis ไปรวมกับ efficientKAN ของ Blealtan(https://github.com/Blealtan/efficient-kan) ก็จะได้โครงสร้างที่คล้าย Siren มาก (MLP ที่ใช้ฟังก์ชันกระตุ้นแบบ Sin)
      efficientKAN จะคำนวณ basis function ร่วมกันก่อนสำหรับ activation ของทุก edge แล้วค่อยคำนวณเอาต์พุตเป็น linear combination ของ basis เหล่านั้น
      ถ้า basis function เป็นฟูเรียร์ เลเยอร์ KAN ก็อาจมองได้เป็นเลเยอร์เชิงเส้นน้ำหนักคงที่ + activation แบบ Sin + เลเยอร์เชิงเส้นที่มีน้ำหนักเรียนรู้ได้ ซึ่งเป็นรูปแบบพิเศษของ Siren
      นี่อาจเป็นตัวอย่างที่แสดงความเชื่อมโยงระหว่าง KAN กับ MLP
    • โค้ดมันทำงานจริงไหม? ได้ลองเทรนหรือยัง? มีกราฟไหม?
      ถึงจะบอกว่า “แค่โค้ดของผมไม่ทำงาน ไม่ได้แปลว่าของใน paper จะไม่ทำงาน” แต่ก็ยังอยากรู้ว่ามัน ใช้งานได้จริง ไหม
    • อยากรู้ว่าโมเดลตระกูลนี้ เป็นมิตรกับ GPU แค่ไหน
  • ผมลองเล่นกับ 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 เป็นคอขวด

    • อัปเดต 2: ในโครงสร้างแบบ (2, 2, 2) ไปถึง ความแม่นยำบนชุดฝึก 100%, ความแม่นยำบนชุดทดสอบ 99% ได้แล้ว
      สิ่งที่เปลี่ยนมีสามอย่าง แก้ 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 ได้ไหม ผมจะตามดูต่อไป
    • เห็นด้วยว่าต้องมีตัวอย่างที่ใหญ่กว่านี้ สำหรับเทคนิค machine learning สมัยใหม่ ตัวอย่างของเล่น แทบไม่มีประโยชน์เลย
      ถ้าไอเดียใหญ่ ๆ อย่าง Transformer, LSTM, ADAM ถูกทดสอบแค่กับเส้นโค้ง y=sin(x) และข้อมูลฝึกเพียง 50 ตัวอย่าง ก็มีโอกาสสูงมากที่เราจะตัดทิ้งไอเดียเหล่านั้นไปผิด ๆ
    • รันบน CUDA ได้ และมีตัวอย่างหนึ่งที่แสดงวิธีทำ แต่ตอนที่ผมลอง กลับช้ากว่า CPU
      การรันบน 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 ใหม่นี้ไม่ได้อ้างถึงงานก่อนหน้า งานประยุกต์ก่อนหน้านี้เน้นเรื่องการตีความได้มากกว่า

    • ใช่เลย ผมค้นหา KAN กับ GAM แล้วมาเจอที่นี่ และนี่ก็เป็นสิ่งแรกที่ผมนึกถึงเหมือนกัน
  • ความสำเร็จของโครงข่ายประสาทเชื่อมโยงอย่างใกล้ชิดกับ ความสามารถในการขยายขนาด ไม่ใช่แค่อัลกอริทึมเองต้องขยายไปเป็นเลเยอร์จำนวนมากได้ แต่ยังต้องเข้ากับฮาร์ดแวร์ได้ดีด้วย
    โครงข่ายประสาทส่วนใหญ่ประกอบด้วยการคูณเมทริกซ์ และบน GPU ก็มีตัวเร่งสำหรับการคูณเมทริกซ์โดยเฉพาะ เหตุผลที่ AlexNet มีอิทธิพลมากก็เพราะมันแสดงให้เห็นว่าสามารถนำโครงข่ายประสาทไปรันบน GPU เพื่อขยายขนาดและเร่งความเร็วได้
    แค่อ่านจากตัวบทความยังไม่ชัดเจนว่าอัลกอริทึมนี้จะขยายขนาดได้ดีแค่ไหน ทั้งในแง่ที่เมื่อเพิ่มจำนวนเลเยอร์แล้วจะยังฝึกได้ดีหรือไม่ และจะใช้ประโยชน์จากฮาร์ดแวร์เร่งความเร็วได้ดีหรือไม่ ล้วนยังไม่แน่นอน
    โดยเฉพาะโครงสร้างที่มีฟังก์ชันกระตุ้นติดอยู่กับทุกน้ำหนักนั้น ยังไม่แน่ชัดว่าจะใช้ประโยชน์จากตัวเร่งการคูณเมทริกซ์ความเร็วสูงได้หรือไม่
    มันเป็นไอเดียที่น่าสนใจซึ่งทำงานได้ดีในสเกลเล็กและมีคุณสมบัติที่ดี แต่ยังไม่รู้ว่าเป็นสถาปัตยกรรมที่เหมาะกับงานอย่าง ImageNet หรือ LLM หรือไม่

    • ฟังก์ชันกระตุ้นรายน้ำหนักฟังดูเหมือนว่าน่าจะประมาณได้ด้วย discrete cosine transform และ JPEG compression ก็ใช้สิ่งนี้อยู่ รวมถึงมีฮาร์ดแวร์เร่งความเร็วด้วย
      ตัวเร่งการคูณเมทริกซ์ความเร็วสูงเอง ในช่วงแรกก็ถูกนำไปทำเป็นฮาร์ดแวร์เพราะมีประโยชน์กับปัญหาเฉพาะอย่างงานกราฟิก
      ถ้าฟังก์ชันกระตุ้นรายน้ำหนักได้ผลดีจริง ผู้คนก็น่าจะหาวิธีทำให้มันรันบนฮาร์ดแวร์ได้อย่างรวดเร็ว
  • ได้เห็นงานวิจัย AI ใหม่ที่ไม่ใช่แนว “เอา Transformer ไปดัดแปลงแบบนั้นแบบนี้แล้วดีขึ้นนิดหน่อยบนเบนช์มาร์กนั้นนี้” ก็รู้สึกสดใหม่ดี
    งานปรับปรุงแบบค่อยเป็นค่อยไปเหล่านั้นก็สำคัญ แต่ทุกคนก็เริ่มล้ากันบ้างแล้ว และจากหลักฐานเชิงเกร็ดกับงานวิจัยช่วงหลัง ๆ ดูเหมือนเรากำลังเข้าใกล้ข้อจำกัดพื้นฐานที่มีเฉพาะกับ Transformer จึงอาจต้องมีทางเลือกใหม่(https://news.ycombinator.com/item?id=40179232)
    ข้อดีที่สุดของงานนี้คือมันไม่ใช่การเลือกอย่างใดอย่างหนึ่งทิ้งอีกอย่างหนึ่ง เพราะ ฟังก์ชันกระตุ้นแบบ spline interpolation ที่เรียนรู้ได้ ที่เสนอมา สามารถใส่เข้าไปในโครงข่ายประสาทเชิงลึกแบบเดิมเพื่อเพิ่มพลังในการแทนค่าได้ด้วย
    ตอนนี้ก็แค่ต้องทดสอบว่ามันทำงานได้ดีกว่าจริงหรือไม่

    • จริง ๆ แล้วงานวิจัยแบบนี้มีอยู่ค่อนข้างมาก เพียงแต่มักต้องผ่านการคัดกรองเพิ่มหรือไม่ก็ไม่ผ่านไปเลย และถ้าไม่มีภูมิหลังพิเศษอย่าง MIT หรือ CIT ก็มักไปไม่ถึง HN
      PR กลายเป็นพลังที่แรงเกินไป แม้เมื่อก่อนก็มีอยู่แล้ว แต่ตอนนี้ดูจะยิ่งมีอิทธิพลมากขึ้น
      เราสามารถรับมือกับเรื่องนี้ได้ด้วยการกดโหวตให้โพสต์แบบนี้ และถ้าเป็นผู้ประเมินก็อย่าไปโฟกัสแค่ การทำสถิติใหม่ด้านประสิทธิภาพสูงสุด เกณฑ์นั้นถูกทำให้เป็นเกมไปแล้ว และชัดเจนว่ากำลังพาเราไปผิดทาง
    • ตอนกระแสโครงข่ายประสาทในปี 1989 ผมอ่านหนังสือโครงข่ายประสาทของ Robert Hecht Nielsen น่าจะเป็นช่วงบูมรอบที่สอง ส่วนรอบแรกคงเริ่มจาก hardware perceptron ของ Rosenblatt และแผ่วลงหลังต้นฉบับ “Perceptrons” ของ Minsky กับ Papert
      เมื่อมองจากวันนี้ เนื้อหาในหนังสือพื้นฐานเสียจนแทบจะน่าขำ แต่แรงจูงใจที่ยกมาคือ ทฤษฎีบทการแทนค่าของ Kolmogorov ซึ่งบอกว่าโครงข่ายสามชั้นที่เหมาะสมและมีฟังก์ชันกระตุ้นที่เหมาะสม สามารถแทนฟังก์ชันต่อเนื่องแบบ m-to-n ใด ๆ ก็ได้
      อาจเพราะเหตุนี้ งานวิจัยส่วนใหญ่ในตอนนั้นจึงโฟกัสที่โครงข่ายสามชั้น โดยมี Sigmoid activation เป็นกระแสหลัก และปัญหาการหายไปของกราเดียนต์เป็นประเด็นสำคัญ
      ต้องใช้เวลาอีก 20 ปี กว่า AlexNet จะปลุกงานวิจัยโครงข่ายประสาทให้กลับมามีชีวิตอีกครั้งหลัง AI winter ในทศวรรษ 1990
    • วิทยาศาสตร์ก็เป็นแบบนี้อยู่แล้ว 95% คือการสร้างการปรับปรุงระดับพอใช้ถึงค่อนข้างดีให้กับสิ่งที่มีอยู่ และในกระบวนการนั้นนักวิจัยก็เติบโตขึ้นจนไปทำสิ่งที่น่าสนใจจริง ๆ ได้
  • ดูจาก preprint แล้ว พวกเขามองว่ามิติอินพุต 100 ตัว นั้น “สูง” และปัญหาส่วนใหญ่ที่จัดการก็มีมิติอินพุตไม่เกิน 5
    ในงานแมชชีนเลิร์นนิงที่ได้แรงบันดาลใจจากฟิสิกส์ที่ผมเคยเห็น นี่ถือเป็นภาพที่พบได้ทั่วไป
    ขั้นต่อไปคือต้องแสดงผลบน MNIST และแม้ 784 มิติของ MNIST ก็ยังเล็กมากตามมาตรฐานปัจจุบัน

    • ในกระบวนการทางธุรกิจจริง มีปัญหาแมชชีนเลิร์นนิงจำนวนมากที่มีมิติอินพุตต่ำกว่า 100
      แต่ในปัญหาเหล่านั้นส่วนใหญ่ decision tree ก็ยังแข่งขันกับโครงข่ายประสาทได้ หรือบางครั้งทำได้ดีกว่าด้วยซ้ำ
  • น่าสนใจดี Kolmogorov network สามารถแทน ฟังก์ชันไม่ต่อเนื่อง ได้(https://arxiv.org/abs/2311.00049) แต่ผมก็สงสัยอยู่เหมือนกันว่ามันนำไปใช้ได้จริงแค่ไหน
    อย่างน้อยรีโพซิทอรีนี้ก็ดูเหมือนจะแสดงให้เห็นว่ามันพอมีประโยชน์ใช้งานได้บ้าง

    • สำหรับฟังก์ชันไม่ต่อเนื่อง มันยังไม่ใช่แนวทางที่ใช้ได้จริง อย่างที่บทความที่คุณอ้างเองก็อธิบายไว้ เรารู้ว่ามี g อยู่สำหรับฟังก์ชันมีขอบเขตที่ไม่ต่อเนื่อง แต่เราไม่รู้วิธีหา g นั้น
      ในบทความก็บอกไว้ว่า “สำหรับฟังก์ชันมีขอบเขตและไม่มีขอบเขตที่ไม่ต่อเนื่อง ยังไม่รู้วิธีสร้าง g ที่ใช้ได้จริง”
      ถ้าดูจากลิงก์ arXiv ของ OP(https://arxiv.org/abs/2404.19756) จะเห็นว่าพวกเขาใช้ spline
      มันยังน่าสนใจและอาจมีประโยชน์ได้อยู่ แต่หากไม่มีการค้นพบเพิ่มเติม ก็ยังไม่เป็นประโยชน์กับฟังก์ชันไม่ต่อเนื่อง ถ้าผมเข้าใจผิดก็ขอให้ส่งลิงก์มาได้เลย เพราะเป็นหัวข้อที่ผมสนใจมาก
  • อาจเป็นปฏิกิริยาที่ด่วนเกินไป แต่ผลรวมเชิงเส้นของ B-spline ก็ไม่ใช่แค่ B-spline อีกตัวที่มีลำดับสูงกว่าหรือ?
    เลยสงสัยว่าสุดท้ายแล้วมันก็แค่ฟิต B-spline ลำดับสูงให้กับฟังก์ชันไม่ใช่หรือ

    • ถ้าเป็นโหนดเดียวหรือเลเยอร์เดียวก็ใช่ แต่เมื่อเอาเอาต์พุตของเลเยอร์หนึ่งไปเป็นอินพุตของเลเยอร์ถัดไป มันก็ไม่ใช่แค่ ผลรวมเชิงเส้นของ 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 ที่ใช้แนวทางนี้

    • bias ก็เป็นแค่น้ำหนักของอินพุตที่เปิดอยู่ตลอดเท่านั้น
      ระหว่างน้ำหนักของผลรวมเชิงเส้นกับค่าสัมประสิทธิ์ของ spline ก็ดูเหมือนไม่มีความต่างมากนัก
    • ถ้าพูดถึงข้อที่สาม โมเดล diffusion ส่วนใหญ่ในตอนนี้ก็ใช้อาร์ชิเทคเจอร์ที่อิงกับ Transformer อยู่แล้ว
      มีทั้ง U-Net ที่ใส่ self-attention และ cross-attention, Vision Transformer, Diffusion Transformer เป็นต้น
    • ข้อ 2 เป็นความแตกต่างจริง แต่ฉันสงสัยว่าทำไมมันถึงนับเป็นข้อดี
      อาจพออ้างได้ในแง่ความเรียบง่าย หรือ มีดโกนของอ็อกคัม แต่ก็สงสัยว่านี่คือเหตุผลนั้นหรือมีเหตุผลอื่นอีก
    • ฉันอาจจะเข้าใจผิด แต่เท่าที่รู้ LLM สมัยใหม่แทบไม่ใช้ bias กันแล้ว
  • ให้ความรู้สึกเหมือนมีคนเอา spline ไปยัดใส่ decision tree

    • spline น่ะใช่ แต่ decision tree นี่ไม่แน่ใจว่าหมายถึงอะไร ฉันพลาดอะไรไปหรือเปล่า?
      ในหน้า 2 ของ PDF เขียนไว้ว่า “โหนดของ KAN จะเพียงรวมสัญญาณขาเข้าตามตรงโดยไม่ใช้ nonlinearity”