Comments 12
UFO just landed and posted this here
Спасибо за ссылку. Согласен, в процессе экспериментов в collab c GPU/TPU тренировка занимала несколько минут. Безусловно, процесс более долгий по сравнению с тренировкой обычных свёрточных сетей, но результат существенно отличается по качеству.
А чем MLP с синусоидальной активацией принципиально отличается от разложения в ряд Фурье?
Можно переформулировать вопрос: получается, что у MLP с синусоидальной активацией и преобразования Фурье много общего? Да, оба подхода строятся на основе синусоидальной функции, помогают перевести сигнал в другой вид, позволяют восстановить сигнал с минимальными потерями (или без потерь в каких-то случаях). Синусоидальные базисные функции являются собственными функциями дифференцирования, что означает, что данное представление превращает линейные дифференциальные уравнения с постоянными коэффициентами в обычные алгебраические. Однако прямое сравнение преобразование Фурье и MLP с синусоидальной активацией не корректно: это разные методы с различными возможностями, различными временными затратами, с различной областью применения. MLP с синусоидальной функцией активации дает больше возможностей, чем MLP c функцией активации типа Relu, и такое сравнение в рамках одного семейства методов делают авторы изначальной исследовательской работы.
представляет собой байесову добавку к векторупочему вдруг смещение (bias) стал байесовой добавкой?
О, ностальгия прямо ). Заменить обычную функцию активации на синус — это я пробовал лет так 15 назад примерно. Результаты на тестовых примерах выглядели интересно, но не сказать чтоб радикально прям лучше чем стандартные варианты. Т.е. сильно зависело от примера/задачи.
Быстро стало понятно, что такой подход по существу является больше косметическим т.е. не решает основные грабли — а именно, во первЫх градиентный спуск по прежнему легко затыкается в локальных минимумах, и во вторых после настройки нейросети — нет ни малейшего понимания того, достаточно ли большой взята сетка (хватает ли в ней нейронов/частот), и единственный способ проверки это взять несколько сеток бОльшего размера и настроить — но это такой себе способ…
После поломал голову над этим, и сформулировал/опробовал совершенно другой алгоритм настройки. Позволяющий вообще не фиксировать никакой структуры заранее, а начинать буквально с одного нейрона, и постепенно добавлять один за другим нейроны — при этом гарантируется сходимость к глобальному минимуму функции ошибки (но не гарантируется оптимальность этого процесса), имеется очень большая устойчивость к наличию шума во входных данных, и в случае добавления новых данных в обучающую выборку — не требуется производить перенастройки сети (а достаточно её один раз скорректировать по определенной процедуре линейного характера). В общем, получился действительно интересный алгоритм с широкими возможностями — но не пригодился, так и лежит «в столе». На «картинку» настройка займёт, в зависимости от требуемой ошибки, что-нибудь в районе нескольких минут (без GPU).
Кстати, дарю идею ), если заменить синус на вейвлет-представление то можно ещё более интересный алгоритм реализовать — у меня тогда, 15 лет назад, до этого руки так и не дошли. А в простой замене стандартной функции активации на синус — нет ни новизны ни особой ценности, насколько я могу судить по моим давнешним экспериментам в этой области. В некоторых задачах будет получше, но не более того.
Быстро стало понятно, что такой подход по существу является больше косметическим т.е. не решает основные грабли — а именно, во первЫх градиентный спуск по прежнему легко затыкается в локальных минимумах, и во вторых после настройки нейросети — нет ни малейшего понимания того, достаточно ли большой взята сетка (хватает ли в ней нейронов/частот), и единственный способ проверки это взять несколько сеток бОльшего размера и настроить — но это такой себе способ…
После поломал голову над этим, и сформулировал/опробовал совершенно другой алгоритм настройки. Позволяющий вообще не фиксировать никакой структуры заранее, а начинать буквально с одного нейрона, и постепенно добавлять один за другим нейроны — при этом гарантируется сходимость к глобальному минимуму функции ошибки (но не гарантируется оптимальность этого процесса), имеется очень большая устойчивость к наличию шума во входных данных, и в случае добавления новых данных в обучающую выборку — не требуется производить перенастройки сети (а достаточно её один раз скорректировать по определенной процедуре линейного характера). В общем, получился действительно интересный алгоритм с широкими возможностями — но не пригодился, так и лежит «в столе». На «картинку» настройка займёт, в зависимости от требуемой ошибки, что-нибудь в районе нескольких минут (без GPU).
Кстати, дарю идею ), если заменить синус на вейвлет-представление то можно ещё более интересный алгоритм реализовать — у меня тогда, 15 лет назад, до этого руки так и не дошли. А в простой замене стандартной функции активации на синус — нет ни новизны ни особой ценности, насколько я могу судить по моим давнешним экспериментам в этой области. В некоторых задачах будет получше, но не более того.
легко так написали, заменить синус на вейвлет. уже знаете как бэкпроп реализовать?..) может даже и можно.
а вообще, вейвлеты образуют базис в пространстве функций, это не новость. тут не то чтобы за это зацепились. не факт что использование синусов в сетке это аналог преобразования Фурье и переход в частотное пространство напрямую.
а идеи которые вы описываете, отчасти изучены, и изложены в книге С. Брантон и Дж. Куц "Анализ данных в науке и технике", сама книга недавно вышла, но все там описано, и с точки зрения низкоразмерных паттернов в данных.
Да, примерно представляю как бэкпроп организовать — но делать его надо не напрямую в частотном пространстве, а с использованием приятных особенностей преобразования фурье (как-то гаусс-свёртке, т.е. размытию, частотного пространства соответствует перемножение на гаусс исходных данных, и игра вокруг этого — вначале бэкпроп в частотном пр-ве на самом крупном масштабе, потом на всё более мелком, последовательно). В варианте с синусом это отлично работает — но конечно простая замена функции активации на синус это даже не пол шага, именно потому что не используется вообще никак тот факт что правильно взятые тригонометрические функции образую базис. Незачем игнорировать полную амплитуду — т.е. и синус и косинус нужны. И незачем использовать частоты, имеющие в рамках исходного гиперкуба входных точек сколь нибудь значимую корреляцию. И настраивать влоб в частотном пр-ве — такая себе идея. И именно потому что не используется нормальный базис, или хотя-бы корреляционный анализ получаемых частот — авторы этой статьи проходят мимо множества очень приятных возможностей сеток с гармоническими функциями.
Спасибо за ссылку, почитаю — посмотрю много ли из моих 15-ти летней давности наработок пришло в голову авторам этой книги. Любопытно, может быть и сам чего почерпну )
Спасибо за ссылку, почитаю — посмотрю много ли из моих 15-ти летней давности наработок пришло в голову авторам этой книги. Любопытно, может быть и сам чего почерпну )
Спасибо за идею. Полностью согласен: использовать синусоидальную функцию активации пробовали и раньше. Есть ряд статей с упоминанием Fourier neural networks, некоторые из них как раз относятся к периоду порядка 15 лет назад. Отличие в том, что Fourier neural networks активно использовали в первую очередь для временных рядов, однако авторы текущей работы сфокусировались на изображениях, звуке и решении физических уравнений.
Изменение функции активации не так сильно влияет на способность сети сойтись к глобальному оптимуму, в большей степени это зависит от архитектуры сети, learning rate и batch size, поэтому не удивительно, что ваша стратегия подбора архитектуры сети привела к желаемому результату. Надеюсь, у Вас дойдут руки до того, чтобы опубликовать Ваш метод, он может пригодиться другим исследователям и энтузиастам.
Тем не менее, сложно спорить с тем, что развитие методов идет по спирали. Возможно, на текущем витке развития синусоидальная функция активации даст больше результатов в практических задачах, чем на прошлом.
Изменение функции активации не так сильно влияет на способность сети сойтись к глобальному оптимуму, в большей степени это зависит от архитектуры сети, learning rate и batch size, поэтому не удивительно, что ваша стратегия подбора архитектуры сети привела к желаемому результату. Надеюсь, у Вас дойдут руки до того, чтобы опубликовать Ваш метод, он может пригодиться другим исследователям и энтузиастам.
Тем не менее, сложно спорить с тем, что развитие методов идет по спирали. Возможно, на текущем витке развития синусоидальная функция активации даст больше результатов в практических задачах, чем на прошлом.
Sign up to leave a comment.
Неявные нейронные представления с периодическими функциями активации