Комментарии 33
Больше всего в статье понравилось это:
Сразу предупреждаю - я не являюсь каким то глубоким специалистом в этих сферах.
Ну, в некоторых областях нейронок действительно "революция на каждый день". В особенности хорошо это было видно в 21 году, где то недалеко от нового года, когда друг за другом несколько версий Yolo вышло и SWIN, и все аутперформили остальные конкурентов.
Но я ничего не пытаюсь строить. По описанному тут и так есть статьи =)
Все указанное тут - есть в статьях. Ссылки на них даны. Просто прям в какую то цельную кучку оно обычно не собрано. Обычно это статьи вроде "а сейчас мы опишем нейронки теорией игр", "а сейчас мы найдем в нейронках фазовые переходы", а вот между собой это обычно не связывается. И т.д.
Ну и вообще, наезда не понял =)
Если вы хотите статью про yolo - вы читаете статью про yolo, если вы хотите статью про трансформеры - вы читаете статью про трансформеры =)
А вообще, по "горячим" источникам - лучше читать, собственно, источники.
Но наверное структуру надо будет поправить.
Хорошая статья, жаль, только, на самом интересном месте закончилась:)
К сожалению, прям огромного числа статей про зависимости сходимости от топологии - я не наблюдал :( Недоисследованная область, имхо.
Сходимость зависит не только от архитектуры, но и от процедуры.
Кстати, уверен вам будет интересно ознакомиться с концепцией ограниченной машины Больцмана
Конечно. Но у архитектуры роль, в каком то смысле, больше. Это хорошо видно на примере трансформеров - после их появления сети на такой архитектуре начали аутперформить конкурентов не только в своей области NLP, но и в CV и других областях. И в принципе, вполне реально анализировать вклад именно архитектурной составляющей, фиксируя процедуру.
Да, почитаю, спасибо =)
У архитектуры конечно же роль больше - потому что процедуры by design решают одну и ту же задачу, а архитектуры - разные. У Microsoft даже была архитектура neural architecture search. Перформила вполне до трансформеров.
В принципе трансформеры перформят потому attention - он человекоподобен (размечает кто?..). На физических задачах скажем, есть свои ноу-хау, как и в тех же экономических.
Ваша находка так или иначе впечатлила - кодирование архитектуры с некоторыми свойствами. Нет уверенности, однако, что только архитектура достаточна для перфоманса, я об этом.
В продолжение (топологической) мысли - процедуру было бы идеально переложить в теорию узлов и зацеплений, которая различает только количество путей из одной точки в другую. То есть оптимизатор мог бы разветвляться на разные траектории. Это не то чтобы из разряда фантазий, скорее некоторая намётка.
Вкратце: рельеф лосс-функции - результат архитектуры, но ввиду наших слабых вычислительных возможностей, имело бы смысл иметь топологические инварианты именно рельефа функции потерь, и идеально если бы они содержательно вязались бы с инвариантами архитектур
С вниманием все может объясняться с такой точки зрения: самая простая интерпретация внимания - это оптимальная перестановка значений входной величины (немонотонное преобразование), и поэтому если за вниманием стоит простая модель, типа регрессии (или полносвязного слоя, например), регрессия будет работать эффективнее, чем без внимания. Если за вниманием стоит модель более сложная, чем регрессия - возможно внимание и не даст такого сильного эффекта, как в случае с регрессией, но эффект все-равно по идее должен быть не хуже (предполагаем, что мы можем обучить корректно это внимание, а здесь дополнительные свободные параметры требуют дополнительного объема датасета и более аккуратной тренировки. И конечно помним, что "не хуже" не означает "лучше", и поэтому нет гарантии, что увеличение параметров/добавление внимания даст эффект) - для любой последующей сети должна существовать оптимальная перестановка входных значений, при которой модель работает наилучшим образом, хотя возможно внимание в каких-то слоях работает впустую. Поэтому мне внимание нравится - его использование иногда позволяет мне использовать более простые сети после него, хотя с очень сложными сетями я его не использовал.
И статья интересная, спасибо - сети сейчас действительно бурно растут в смысле не только результатов, но и размера. И уже не всегда понятно - стоит предлагаемое увеличение размеров сети полученных результатов, или нет: может 99% элементов сети работает вхолостую. Мне приходилось сталкиваться со случаями, когда сильное увеличение размера сети не приводило к улучшению результатов, а иногда и ухудшало их.
может 99% элементов сети работает вхолостую
Не может, на самом деле так и есть =) Дистилляция моделей и lottery ticket hypothesis это прекрасно демонстрируют. Подавляющая часть работы решается очень маленькой подсетью огромной сети. Собственно, сейчас вроде почти любые модели стараются дистиллировать, ибо иначе они слишком огромные и требовательные.
Ко вниманию как таковому претензий нет - тут суть в том, что в трансформерах основной профит приходится не с механизма внимания, а с чего то другого.
Не успел написать коммент, но добавлю, что правильно приготовленный прунинг тоже) На практике доводилось срезать до 70 % весов бинарного классификатора без потери точности и даже немного улучшая обобщающую способность.
Если посмотреть на граф трансформера (по крайней мере ViT, работал только с ними), станет очевидно, что трансформер - это буквально разложение функции в ряд: f(x) = x + A(x) + B(x + A(x)) + C(x + A(x) + B(x + A(x))) + ... = x + A'(x) + B'(x) + C'(x) + ...
Механизм внимания просто определяет вид операторов. То же самое делается, например, в MLP миксерах - просто вид оператора другой. Не берусь утверждать на 100%, но, полагаю, любые трюки для оптимизации модели путём изменения механизма внимания - это все пляски вокруг поиска более оптимального вида A, B, C...
Насколько я понимаю, в трансформере профит идет за счет многоголовости внимания. По факту на каждом многоголовом внимании вы тренируете не одну сеть, а их ансамбль, где каждой сети соответствует своя голова внимания. Этот ансамбль дальше разгребается (уточняется, комбинируется) следующим слоем, то есть фактически многоголовое внимание - это стекинг из простых одноголовых сетей, за счет стекинга и профит. Хотя я могу ошибаться.
Суть внимания в нейронках проста как мычание: это всего лишь способ ввести в нейронную сеть операцию умножения.
Если посмотреть, как "работает" классический искусственный нейрон, то можно увидеть, что он полностью построен на сложении: он просто складывает все пришедшие на него взвешенные сигналы со всех входов, и выдаёт эту сумму на выход в преобразованном виде. То есть нейрон — это такой нелинейный сумматор.
Но вот теперь мы хотим выделить в нашем потоке данных какие-то интересные области, отбросив всё ненужное. Как это сделать? Самый простой способ — пресловутая "маска", альфа-канал. Когда каждый элемент (например, пиксель входного изображения) домножается на некоторое число альфа-канала. Важные области так можно усилить, менее важные — ослабить, а лишнее вообще домножить на ноль, чтобы более глубокие слои сети на них не отвлекались.
Но как это сделать, если нейроны не умножают, а только складывают? Нет, конечно глубокая сеть может эмулировать операцию умножения, но для этого она сперва должна "догадаться" это сделать.
Поэтому операцию перемножения входных каналов вводят в явном виде. В структуру вводится такой блок, который не складывает все свои входные значения, а перемножает их и выдаёт дальше произведение.
При этом мы получаем такой настраиваемый фильтр-маску, который и выделяет правильные области. Естественно, что таких масок может быть несколько.
Этот блок и называют блоком внимания. Всё остальное, все эти key-query-value и прочие "механизмы внимания" — это просто способ уменьшить ресурсоёмкость подобных блоков. Дело в том, что умножение, в отличие от сложения, куда более ресурсоёмко. А ведь при обучении этого куска сети ещё и дифференцировать требуется. Взять производную от суммы куда как проще, чем от произведения. Поэтому "внимание" вычислительно затратно. Крайне затратно. И памяти жрёт тоже намного больше, отсюда и все эти пляски с бубном по поиску разных хитрых алгоритмов внимания.
Насчет умножения - это зависит от того, какой тип внимания вы используете, там их много разных вариантов (https://arxiv.org/abs/1508.04025v5). Если вы посмотрите, на (https://arxiv.org/pdf/1706.03762.pdf , eq.1), то там видно, что максимум софтмакса достигается тогда, когда Q является перестановкой K. По-моему, умножения как такового там нет, просто очень хитрый подбор оптимальной перестановки координат вектора V. Хотя я могу ошибаться. Но в той-же location-based attention (https://arxiv.org/abs/1508.04025v5, eq.8) вообще этот перестановочный характер внимания очевиден: никакого умножения там нет, просто подбор матрицы оптимальной перестановки координат.
А главное, по теории (универсальная теорема аппроксимации, теорема Колмогорова-Арнольда и т.д.) умножение входов не может являться базовой бинарной операцией, позволяющей проводить универсальную аппроксимацию, там в УТА допустимо в качестве бинарной операции только сложение, и это доказано. Поэтому нейроны и свертки в нейронных сетях можно, а умножения каналов - нельзя, иначе аппроксимация не сойдется. Я конечно могу ошибаться, но вижу это так.
Но ведь умножение можно заменить суммированием, используя квадратичные функции активации (кажется, мы этого уже где-то касались). Разве в этом случае условия теоремы не будет выполнены?
Возможно вы правы. В принципе даже есть работа Sonoda&Murata,2017, по которой ваше предложение можно обосновать (использование квадратичной активации), но тогда архитектура должна включать не только внимание, но и skip-connection с какими-то полносвязными слоями ( [a+b]^2=2ab(внимание)+a^2+b^2 (skip с полносвязным слоем)), а их вроде нет в архитектурах со вниманием, хотя я конечно могу ошибаться.
Кстати, поиски "фазовых переходов" стали модны не только для искусственных нейронных сетей, но и для настоящих: https://www.youtube.com/watch?v=vwLb3XlPCB4
В этом же видео есть ссылка на бомбезную книгу по этой теме.
Спасибо, очень интересная статья.
Особенно поразило вот это "добавлении блока без входа". Понимаю, что это больше вопрос к авторам той статьи (обязательно посмотрю её подробнее), а не к вам, но "блок без входа" - это ведь константа? Но зачем-то авторы изобразили этот блок в виде нейросети? С таким же успехом, это мог быть биас? Любопытно, что в классификаторах, типа реснета, последний классифицирующий слой содержит биасы. Получается, что если два первых класса набрали одинаковые значения логитсов выигрывает тот, у которого биас больше. Как если бы нейронка сказала: "да вот эти два класса набрали одинаково, но вот класс1 встречается чаще - поэтому пусть это будет класс1". Некое такое априорное знание
Блок без входа = тензор (или нейронная сеть) - которые содержат обучаемые параметры. Т.е. обратное распространение ошибки через них проходит, но нет входа.
Интересная статья, с удовольствием буду ждать новых!
Динамика рекуррентной сети может быть выражена системой уравнений Гамильтона.
Динамическая система, управляемая уравнениями Гамильтона, является абстрактной, а не физической системой нейронов. Это означает, что рекуррентные сети нейронов могут функционировать так же, как аналоговые компьютеры при моделировании любых динамических систем. Появление гамильтоновой динамики, абстрагированной от физических свойств сети нейронов, наделяет эту систему потенциальной способностью динамически моделировать свою среду, тем самым повышая ее способность выживать в этой среде.
Нейронные сети, графы и эмерджентность