В апреле практиками-исследователями и математики анонсировали новую архитектуру нейросетей. Крупного резонанса открытие не принесло, хотя с нашей точки зрения, KAN может претендовать на интересную технологию Важнее, что это не просто новая вариация трансформера или исправленная рекуррентная нейронная сеть – это новый подход к нейросетям в принципе, новая архитектура вместо MLP.
Мы написали большую статью по KAN со всеми подробностями, здесь мы совсем кратко пробежимся по основным положениям архитектуры и ее проблемах для самых неподготовленных читателей.
Но надеемся, что некоторое понимание базовой линейной алгебры и математического анализа присутствует.
MLP – обычная полносвязная нейросеть, где благодаря послойной активации нейронов мы получаем какой-то конечный результат (данные) на последнем слое. Похоже на имитацию действия мозговых нейронов: благодаря передаче импульса от нейрона к нейрону – мы получаем результат в виде ассоциации, воспоминаний...
Так вот суть KAN сводится к переносу акцента с “активации нейронов” к активации “связей” между ними.
Конечно, сами связи никуда не деваются, но. Теперь вместо обычных весовых отношений между нейронами – мы получаем обучаемые функции активации – связываем нейроны B-spline’ами. Веса – это такие числовые коэффициенты, которые определяют уровень активации нейронов. Больше вес – сильней сигнал.
Нейросети с большим числом слоев превращаются в черный ящик. Мы не можем понять, как конкретно числовые значения отвечают за те или иные признаки — и как именно признаки в них преобразуются. Поэтому внутренняя часть нейросети нам недоступна.
Напомним, как выглядит классическая формула MLP:
MLP – базовый уровень устройства нейросетей, на подобной архитектуре работают и другие модели: от генеративных до рекуррентных. Поэтому KAN немного переворачивает подход.
Kolmogorov-Arnold Network (KAN) использует B-сплайны для аппроксимации функций из-за их вычислительной эффективности, локальной поддержки, которая снижает сложность обработки, и способности обеспечивать гладкость и гибкость представления функций.
Аппроксимация здесь / восстановление функции – практически восстановление закономерностей из данных.
Ключевое слово – локальность. Именно локальность позволяет нам гибко перестраивать функции – этим обеспечивается “обучаемость” кривых. B-сплайны позволяют точно моделировать нелинейные зависимости, легко реализуются и предлагают контроль над параметрами аппроксимации…
Гибкость позволяет нейросети обучать функции активации так, чтобы получить наилучший результат. Функции активации в нейронных сетях помогают решить, активируется ли нейрон (будет ли он передавать сигнал дальше) или нет.
Для начала стоит вернуться к ключевой задаче нейросети – нахождении закономерностей и скрытых зависимостей. Выбирается датасет (упорядоченный набор данных), который становится источником входных данных. На выходе благодаря активациям и обработке мы получаем конечный результат. Основная вычислительная задача – аппроксимация многомерной функции.
Но "Проклятие размерности" — это проблема, с которой сталкиваются нейросети, когда работают с данными высокой размерности, то есть с большим числом признаков или переменных. Тут мы расписали о ней подробнее.
– мы можем положить в аргументы разыскиваемой функции много признаков. А наши аргументы, точнее их число – это размерность функции.
В простых терминах, чем больше измерений (или признаков) у данных, тем труднее становится анализировать их и строить модели, которые бы хорошо работали.
Хотим классифицировать в нашей нейронке по тысячам признаков – тогда предлагайте данных , где — количество точек данных на одно измерение.
Модели могут хорошо работать на тренировочных данных, но плохо обобщаться на новые, невидимые данные, так как в высоких размерностях вероятность переобучения вырастает в разы.
Но, что нам делать то с этой суперпозицией функции (разными аргументами) и не потерять данные, не втягиваться в костыли? – разбить функцию на простые нелинейные функции…
Многомерную функцию, множество значений которой – буквально сотни комбинаций пар (если вы решили исследовать функцию с множеством переменных) можно перевести в простые, человеческие одномерные действительные числа….
Мы можем превратить “многомерность” в “одномерность”.
Больше не нужно решать проблемы с десятками и сотнями размерностей данных – теперь мы работаем в одном измерении.
Так гласит теорема Колгоморова-Арнольда.
Еще точнее: любую функцию в суперпозиции можно представить в виде суммы нелинейных “одномерных функций”.
Наверное, все помнят еще со школы те самые функции, где нужно найти “область определения”...
Такие функции можно разложить. Общая формула выглядит так:
Мы суммируем “одномерные” функции с двумя/одной переменными и получаем исходную функцию с множеством признаков/аргументов. Если вам больше интересна математическая сторона вопроса, переходите по ссылке.
Теперь кодеры могут использовать символьные формулы.
B-spline в этой формуле играют роль функций, которые можно задавать кусками (только те области значений, которые нам нужны), а еще гибко управлять ими.
Лучше показать визуально:
Касательные – благодаря им строятся изменения в сплайнах.
Подвинули касательную – изменили поведение графика нелинейной функции, B-spline. Касательные, как мы помним еще со школы, строятся через линейные функции На графиках они показывают скорость убывания или возрастания значений функции.
Вычисление конкретной скорости в отдельной точке – производная функции. Естественно, чтобы адекватно менять сплайны – нам нужно, чтобы эта “скорость” графика менялась равномерно без скачков. Функции, где производные меняются последовательно, грубо говоря, называют гладкими.
Но тут возникает ключевая проблема. А кто сказал, что при разложении функции от многих переменных по теореме Колгоморова-Арнольда мы будем получать только сумму нелинейных и гладких функций?
Одна из проблем KAN – мы можем получать фрактальные функции в сумме многомерной функции.
Фрактальные функции, область значений которых выходит в комплексные числа. Комплексные числа — расширенная версия действительных/обыденных чисел. Зачастую формулы фракталов сложны и пугающи, считать их даже без учета комплексных чисел сложно.
С другой стороны, такой подход по теореме предлагает нам возможность переписать стандартный MLP и подойти к нейросетям с новой стороны – теперь мы ищем закономерности, обучая функции активации B-spline.
Они гибкие и легко поддаются изменениям из-за своей локальности, активно обучают другие функции активации.
Получается, что стандартная формула нейросетей переписана, процесс приближения к изначальной функции (закономерности) становится эффективнее. Бенчмарки на тестах показали растущую эффективность в 10 раз, но мы жертвуем “скоростью” обучения, которая пропорционально уменьшается – в те же 10 раз.
Конечно, интересно, как подобную архитектуру реализуют на популярных фреймворках Keras и TensorFlow. Мы написали большой материал, где рассматриваем архитектуру подробнее. Там мы оставили вариант реализации архитектуры на PyTorch и пример работы с официального Гитхаба KAN на библиотеке PyKAN, специально заточенной под нейросеть Колмогорова-Арнольда.
Если вам хочется сразу перейти к делу на основе примеров – заходите в репозиторий KAN на Гитхабе.
И сразу переходите к блокноту с кодом и объяснениями или читайте документацию.
Для математиков полный вариант статьи можно почитать на английском – тут.