Кратко о KAN для самых неподготовленных

7330e9b8e3f078d738233342fa6f2940.png

В апреле практиками-исследователями и математики анонсировали новую архитектуру нейросетей. Крупного резонанса открытие не принесло, хотя с нашей точки зрения, KAN может претендовать на интересную технологию Важнее, что это не просто новая вариация трансформера или исправленная рекуррентная нейронная сеть — это новый подход к нейросетям в принципе, новая архитектура вместо MLP.

Мы написали большую статью по KAN со всеми подробностями, здесь мы совсем кратко пробежимся по основным положениям архитектуры и ее проблемах для самых неподготовленных читателей. 

Но надеемся, что некоторое понимание базовой линейной алгебры и математического анализа присутствует. 

MLP — обычная полносвязная нейросеть, где благодаря послойной активации нейронов мы получаем какой-то конечный результат (данные) на последнем слое. Похоже на имитацию действия мозговых нейронов: благодаря передаче импульса от нейрона к нейрону — мы получаем результат в виде ассоциации, воспоминаний…

Так вот суть KAN сводится к переносу акцента с «активации нейронов» к активации «связей» между ними. 

Конечно, сами связи никуда не деваются, но. Теперь вместо обычных весовых отношений между нейронами — мы получаем обучаемые функции активации — связываем нейроны B-spline«ами. Веса — это такие числовые коэффициенты, которые определяют уровень активации нейронов. Больше вес — сильней сигнал.

Нейросети с большим числом слоев превращаются в черный ящик. Мы не можем понять, как конкретно числовые значения отвечают за те или иные признаки — и как именно признаки в них преобразуются. Поэтому внутренняя часть нейросети нам недоступна.

Напомним, как выглядит классическая формула MLP:  

Функцию активации и сложения можно представить себе в виде фильтра, который подсказывает нейрону

Функцию активации и сложения можно представить себе в виде фильтра, который подсказывает нейрону «активизироваться или нет»…

MLP — базовый уровень устройства нейросетей, на подобной архитектуре работают и другие модели: от генеративных до рекуррентных. Поэтому KAN немного переворачивает подход.

9c1e6ba10a7b3a0618d3301807f809d2.gif

Kolmogorov-Arnold Network (KAN) использует B-сплайны для аппроксимации функций из-за их вычислительной эффективности, локальной поддержки, которая снижает сложность обработки, и способности обеспечивать гладкость и гибкость представления функций. 

Аппроксимация здесь / восстановление функции — практически восстановление закономерностей из данных.

Ключевое слово — локальность. Именно локальность позволяет нам гибко перестраивать функции — этим обеспечивается «обучаемость» кривых. B-сплайны позволяют точно моделировать нелинейные зависимости, легко реализуются и предлагают контроль над параметрами аппроксимации… 

Гибкость позволяет нейросети обучать функции активации так, чтобы получить наилучший результат. Функции активации в нейронных сетях помогают решить, активируется ли нейрон (будет ли он передавать сигнал дальше) или нет.

Для начала стоит вернуться к ключевой задаче нейросети — нахождении закономерностей и скрытых зависимостей. Выбирается датасет (упорядоченный набор данных), который становится источником входных данных. На выходе благодаря активациям и обработке мы получаем конечный результат. Основная вычислительная задача — аппроксимация многомерной функции. 

44b9a5dc275ad20d2c2c3875230b2974.png

Но «Проклятие размерности» — это проблема, с которой сталкиваются нейросети, когда работают с данными высокой размерности, то есть с большим числом признаков или переменных. Тут мы расписали о ней подробнее.

f(x,y,z,e,d...)— мы можем положить в аргументы разыскиваемой функции много признаков. А наши аргументы, точнее их число — это размерность функции. 

В простых терминах, чем больше измерений (или признаков) у данных, тем труднее становится анализировать их и строить модели, которые бы хорошо работали.

Хотим классифицировать в нашей нейронке по тысячам признаков — тогда предлагайте данных N^d, где N — количество точек данных на одно измерение. 

Модели могут хорошо работать на тренировочных данных, но плохо обобщаться на новые, невидимые данные, так как в высоких размерностях вероятность переобучения вырастает в разы. 

Но, что нам делать то с этой суперпозицией функции (разными аргументами) и не потерять данные, не втягиваться в костыли? — разбить функцию на простые нелинейные функции… 

ca83b2de79efa219672894868e7dd64a.png

Многомерную функцию, множество значений которой — буквально сотни комбинаций пар (если вы решили исследовать функцию с множеством переменных) можно перевести в простые, человеческие одномерные действительные числа…. 

Мы можем превратить «многомерность» в «одномерность». 

Больше не нужно решать проблемы с десятками и сотнями размерностей данных — теперь мы работаем в одном измерении. 

Так гласит теорема Колгоморова-Арнольда. 

Еще точнее: любую функцию в суперпозиции можно представить в виде суммы нелинейных «одномерных функций». 

Наверное, все помнят еще со школы те самые функции, где нужно найти «область определения»… 

991beac88c07911ccce0c7018fce6a9e.png

Такие функции можно разложить. Общая формула выглядит так:

168fa36843e6b853af98242de4ca1c2a.png

Мы суммируем «одномерные» функции с двумя/одной переменными и получаем исходную функцию с множеством признаков/аргументов. Если вам больше интересна математическая сторона вопроса, переходите по ссылке.

Теперь кодеры могут использовать символьные формулы. 

eaa812233189390f48896e30771beae6.png

B-spline в этой формуле играют роль функций, которые можно задавать кусками (только те области значений, которые нам нужны), а еще гибко управлять ими. 

Лучше показать визуально:  

4fa252a45f66e0ed15db64bb5ea55e39.gif

Касательные — благодаря им строятся изменения в сплайнах. 

Подвинули касательную — изменили поведение графика нелинейной функции, B-spline. Касательные, как мы помним еще со школы, строятся через линейные функцииkx + c. На графиках они показывают скорость убывания или возрастания значений функции. 

Вычисление конкретной скорости в отдельной точке — производная функции. Естественно, чтобы адекватно менять сплайны — нам нужно, чтобы эта «скорость» графика менялась равномерно без скачков. Функции, где производные меняются последовательно, грубо говоря, называют гладкими. 

Но тут возникает ключевая проблема. А кто сказал, что при разложении функции от многих переменных по теореме Колгоморова-Арнольда мы будем получать только сумму нелинейных и гладких функций?  

Одна из проблем KAN — мы можем получать фрактальные функции в сумме многомерной функции. 

Фрактальные функции, область значений которых выходит в комплексные числа. Комплексные числа — расширенная версия действительных/обыденных чисел. Зачастую формулы фракталов сложны и пугающи, считать их даже без учета комплексных чисел сложно. 

7353819387e9196488c965b4b79bd702.png

С другой стороны, такой подход по теореме предлагает нам возможность переписать стандартный MLP и подойти к нейросетям с новой стороны — теперь мы ищем закономерности, обучая функции активации B-spline. 

Они гибкие и легко поддаются изменениям из-за своей локальности, активно обучают другие функции активации. 

894625ce35c63f5a3d9281e1ae05be03.png

Получается, что стандартная формула нейросетей переписана, процесс приближения к изначальной функции (закономерности) становится эффективнее. Бенчмарки на тестах показали растущую эффективность в 10 раз, но мы жертвуем «скоростью» обучения, которая пропорционально уменьшается — в те же 10 раз. 

Конечно, интересно, как подобную архитектуру реализуют на популярных фреймворках Keras и TensorFlow. Мы написали большой материал, где рассматриваем архитектуру подробнее. Там мы оставили вариант реализации архитектуры на PyTorch и пример работы с официального Гитхаба KAN на библиотеке PyKAN, специально заточенной под нейросеть Колмогорова-Арнольда. 

Если вам хочется сразу перейти к делу на основе примеров — заходите в репозиторий KAN на Гитхабе. 

И сразу переходите к блокноту с кодом и объяснениями или читайте документацию. 

Для математиков полный вариант статьи можно почитать на английском — тут. 

© Habrahabr.ru