- pykan은 논문 “KAN: Kolmogorov-Arnold Networks”와 “KAN 2.0: Kolmogorov-Arnold Networks Meet Science”를 위한 GitHub 저장소로, KAN 학습·튜토리얼·문서·예제를 제공함
- KAN은 MLP의 대안으로 제시되며, MLP가 보편 근사 정리에 기반하는 것처럼 KAN은 Kolmogorov-Arnold 표현 정리에 기반함
- 구조적으로 MLP는 노드에 활성화 함수가 있고 KAN은 엣지에 활성화 함수가 있으며, 이 변화가 모델 정확도와 해석 가능성을 개선할 수 있다고 설명함
- 기호 계산 브랜치를 쓰지 않는 머신러닝 사용자는 학습 전에
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은 엣지에 활성화 함수가 있음
- MLP는 노드에 활성화 함수가 있음
- 이 구조 변화가 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에서 하루 이내 실행 가능함
- PDE용 KAN 학습은 가장 비싸며, 단일 CPU에서 몇 시간에서 며칠이 걸릴 수 있음
- 모델 학습에 CPU를 사용한 이유는 MLP와 KAN의 Pareto Frontier를 얻기 위해 수천 개의 작은 모델에 대해 파라미터 스윕을 수행했기 때문임
- 문제 규모가 큰 작업에서는 GPU 사용이 권장됨
KAN 하이퍼파라미터 튜닝
- MLP와 다른 네트워크에서 얻은 직관이 KAN에 그대로 적용되지 않을 수 있음
- 기본 조언은 단순한 설정에서 시작하는 것임
- 작은 KAN shape
- 작은 grid size
- 작은 데이터
- 정규화 없음,
lamb=0
- 예를 들어 입력 5개와 출력 1개인 작업에서는
KAN(width=[5,1,1], grid=3, k=3)처럼 매우 단순한 설정부터 시도할 수 있음 - 동작하지 않으면 먼저 width를 늘리고, 그래도 안 되면 depth를 늘리는 흐름을 권장함
- 성능이 받아들일 만한 수준에 도달하면 더 정확하거나 더 해석 가능한 KAN으로 정제할 수 있음
- 정확도를 중시한다면 grid extension 기법을 시도할 수 있지만, 과적합에 주의해야 함
- 해석 가능성을 중시한다면
model.train(lamb=0.01)같은 방식으로 네트워크를 희소화할 수 있음lamb는 점진적으로 늘려보는 방식이 권장됨- 학습 후 plot에서 명백히 쓸모없는 뉴런이 보이면
pruned_model = model.prune()으로 가지치기한 모델을 얻을 수 있음 - 이후 정확도 또는 희소성을 위해 추가 학습하거나 symbolic regression을 수행할 수 있음
- 정확도, 해석 가능성, 파라미터 효율성은 항상 서로 충돌하는 관계가 아니며, 경우에 따라 양의 상관관계가 있을 수도 있고 tradeoff가 있을 수도 있음
- train/test loss 사이에 큰 차이가 있으면 데이터를 늘리거나 모델을 줄이는 방향을 고려해야 함
grid가width보다 더 중요하므로 먼저grid를 줄이고 그다음width를 줄이는 순서가 제안됨
- 단순한 모델에서 시작해 먼저 underfitting 상태를 확인하고 점진적으로 확장해 적절한 영역으로 이동하는 방식이 권장됨
적용 범위와 한계
- 코드는 수학·물리 예제처럼 소규모 과학 문제를 염두에 두고 설계됨
- 효율성과 재사용성을 크게 고려하지 않았기 때문에, 해당 측면에 대한 비판을 수용한다고 밝힘
- 과학적 발견과 과학 컴퓨팅에 관심 있는 사용자를 원래 대상으로 하며, 저장소도 주로 이 목적을 유지할 예정임
- 효율 개선 구현으로 efficientkan과 FourierKAN이 언급됨
- 머신러닝 중심 사용자의 경우 KAN은 아직 단순한 out-of-the-box 플러그인이 아님
- 하이퍼파라미터 튜닝이 필요함
- 적용별 특수 기법이 추가될 수 있음
- GraphKAN은 KAN을 latent space에서 사용하는 편이 좋다고 제안하며, 입력 뒤와 출력 앞에 embedding/unembedding linear layer가 필요하다고 언급됨
- KANRL은 강화학습에서 학습 안정성을 높이기 위해 일부 학습 가능 파라미터를 고정하는 편이 좋다고 제안함
- KAN이 차세대 LLM이 될지에 대해서는 좋은 직관이 없다고 밝힘
- KAN은 높은 정확도와 해석 가능성을 중시하는 응용을 위해 설계됨
- LLM에서의 해석 가능성과 과학에서의 해석 가능성은 크게 다를 수 있음
- 논문의 결론을 LLM이나 일반 머신러닝 작업으로 직접 옮기기 어렵다고 봄
- KAN과 MLP는 서로를 대체할 수 없으며, 각각 어떤 설정에서는 장점과 한계를 가짐