Комментарии 15
Ну, слушайте, уравнениями из курса линейной алгебры даже школьниц нынче не впечатлишь, а ребята поопытнее знают, что при желании с помощью бэкпропа можно что угодно аппроксимировать чем угодно. Скажите лучше, чем этот вот KAN принципиально лучше на практике? Есть задачи, в которых он переплюнул существующие топологии? Тезис про "сложность" это ерунда, потому что вы прячете сложность из одного места в другое.
Если речь идет о B-spline KAN в репозитории pykan, то я написал в статье, что это, по сути, модификация MLP на случай смещения в виде гладкой непрерывной функции вместо константной. И, судя по некоторым тестам, на практике он не показывает преимущества, хоть теоретически имеет все шансы, так как может сходиться к классическому виду MLP, но при этом предоставляет больше возможностей.
Если речь идет о модели в B-spline KAT, то эта модель вообще плотна только в пространстве непрерывных гладких функций, и это так себе, в сравнении с другими теоремами. И, вполне кстати, можно взять данное исследование и обобщить, к примеру, на пространства Соболева, по сути, заменив сумму на слоях на произведение.
Но хочу заметить, что в статье я не преследовал идеи по типу «Deep Learning 2.0» или «вау, это новая эра, MLP старьё» и тому подобное, а, скорее даже наоборот. Потому что после обширного чтения статей и комментариев на просторах интернета, особенно, кстати, данного треда, я понял, что люди не совсем понимают, что из себя представляет KAN и что показали в оригинальном исследовании, а потом удивляются, почему он в тестах на практике хуже.
Я не получил даже намека ответа на вопрос "В каких случаях мне стоит рассмотреть применение KAN для решения задачи?".
Во-первых, вы не уточнили, о каком именно KAN идет речь в рамках данной статьи.
Теперь по поводу вопросов:
Скажите, чем этот KAN принципиально лучше на практике?
Лучше понятие растяжимое, лучше чего? Вот поэтому я и привёл вам общую информацию о них до этого.
Есть задачи, в которых он переплюнул существующие топологии?
Открываем тест, который я вам в предыдущем комментарии привёл со сравнением с MLP, и видим, что в одной задаче он переплюнул.

В каких случаях мне стоит рассмотреть применение KAN для решения задачи?
Все зависит от определения «задачи». Кому-то на практике нужно аппроксимировать сложную функцию ва кому-то различить кошек и собак. И, как я уже говорил, я предоставил ссылку на тесты, где показаны результаты на некоторых задачах.
Ну, и, ответ очевидно будет опять же общий: нужно смотреть на свойства модели и задачи, результаты на тестах, теоретические результаты и так далее, логично же.
Но рекомендации могу дать:
В контексте B-spline KAN, в сравнении с классическими MLP, если вы готовы мириться с большой сложностью и верите в то, что большая гибкость даст положительный результат.
В контексте модели из B-spline KAT, если вы готовы к её ограничениям в виду плотности в пространстве гладких непрерывных функций.
Для задач символьной регрессии. Это когда надо из данных получить аналитическое выражение их связывающее. Авторы КАНа целенаправленно занимались этой проблемой, начиная с классических нейронных сетей.
Эта задача с точки зрения обывателя бесполезна, этим ученые занимаются. У меня была идея попробовать КАН для какой-нибудь естестественно-научной задачи.
т.е. получить из данных какую нибудь аналитическую формулу?
Да, например, установить, что сопротивление воздуха зависит от скорости квадратично. Но понятно, что это простой и известный пример, а для произвольной зависимости такая задача не решена
Я правильно понял, что использовать KAN имеет смысл когда у меня имеется некая сложная функция, для которой вычисление значений является дорогим, а использование KAN позволит удешевить эту процедуру за счет некоего снижения точности? При условии стационарности, гладкости и непрерывности исходной функции.
Нет. Прикол KAN-ов в том, что они потенциально могут выучить функциональную зависимость, а не просто коэффициенты. В обычных нейронках у нас есть какая-то жесткая архитектура - матричные умножения, свертки и т.д. И куча параметров - весов, биасов. При промежуточные величины пропускаются через фиксированные функции активации - сигмоды, релушки и т.д. Градиентным спуском/подъёмом мы уточняем эти коэффициенты, чтобы подогнать модель под наши данные. Если у модели достаточно степеней свободы, то можно достаточно хорошо аппроксимировать данные. Но эта аппроксимация ничего не говорит о "природе вещей". Если архитектура плохо соответствует реальной зависимости - то будет плохая аппроксимация. Может вы знаете, что иногда в нейронку выгодно подавать не данные как есть, а с каким-либо препроцессингом - например, поделить одну величину на другую. Теоретически, КАНы могут сами выучить произвольные функции активации. Сказать, что вот x1 надо пропустить через экспоненту, а x2 - через синус.
Про "удешивить" и "точность" там речи не идёт
Стало понятнее, т.е. я могу решить вопросы препроцессинга, когда у меня входные данные разномасштабные\нелинейно-зависимые и я об этом не знаю. Эта штука сможет справиться с фрактальными закономерностями?
Если мы конкретно в качестве задачи рассматриваем символьную регрессию, то мы можем использовать и MLP вполне, но просто их реализация KAN, жертвуя сложностью, дает большую точность в данной задаче, что для исследователей крайне важно.
Это вполне видно из свойств самих моделей:
Берем MLP и используем его для аппроксимации целевой функции. Затем представляем этот MLP в виде композиции сумм функций одной переменнойгде каждая функция имеет следующий вид:
После этого каждую можно сравнить с набором интерпретируемых функций (экспонента, логарифм и т.д.), используя, к примеру, коэффициент детерминации. Если какая-то из интерпретируемых функций оказалась близка, мы заменяем исходную
на неё, добавляем вес и смещение, дообучаем модель. И так далее.
Однако здесь есть ограничение: каждая представляет собой линейную комбинацию некоторой фиксированной функции активации, а та (например, relu, tanh) не всегда способна гибко аппроксимировать широкий спектр функций одной переменной. Поэтому и возникает идея заменить константную функцию
в
на B-сплайн, который обеспечивает больше возможностей аппроксимации для функций
Именно эту модификацию и реализовали авторы оригинального исследования на практике.
Ну, и как я уже написал, использование B-сплайнов усложняет вычисления, так как они всегда дороже констант. Но в задачах, где приоритетом является высокая точность аппроксимации для каждой функции какой-либо функции из набора интерпретируемых функций, это не является критической проблемой.
pykan - слишком весёлое название для столь серьезного проекта :-D
Векторное (линейное) пространство – это множество, где можно складывать векторы и умножать их на числа, следуя определённым правилам. Например, множество всех векторов на плоскости, как векторов на графике, является векторным пространством.
Это Ваше определение? Что такое "множество"?
Мне более понятно такое:
Ве́кторное простра́нство (лине́йное пространство) — математическая структура, представляющая собой набор элементов, называемых векторами, для которых определены операции сложения друг с другом и умножения на число — скаляр
Вот тут все объяснено на интуитивном уровне без написания кучи формул:
Как действительно понять нейронные сети и KAN на интуитивном уровне