Как-то раз моя пятилетняя дочка, вернувшись домой из детского садика, сообщила мне и моей жене, что математика — тупая штука (!). С тех пор мы не покладая рук работаем (пока что успешно), стараясь увлечь её всевозможными математическими интересностями, а теперь ещё и гордимся её успехами в математике. Одна из наших наиболее удачных находок привела к тому, что теперь дочь очень интересуется фракталами вообще. Особенно ей нравится смотреть видеоролики, где с увеличением показаны множества и оболочки Мандельброта, а вдобавок есть капусту романеско. Благодаря этому увлечению дочери, я стал больше задумываться о фракталах, а также о том, как они соотносятся с особенно волнующей меня темой — искусственными нейронными сетями.

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

Решив разобраться в природе этого сходства, я стал искать фрактальную структуру в ландшафтах гиперпараметров при обучении нейронной сети. И нашёл! Граница между теми множествами гиперпараметров, при которых обучение нейронной сети приводит к успеху или, наоборот, к неудаче, обладает (роскошной и естественной) фрактальной структурой. Подробности и красивые картинки – ниже.

В более техническом изложении эта тема исследована в короткой статье The boundary of neural network trainability is fractal (Граница обучаемости нейронной сети — это фрактал).

Обучение нейронной сети и гиперпараметры

Чтобы обучить искусственную нейронную сеть, мы итерация за итерацией обновляем её параметры, добиваясь, чтобы она работала всё лучше. Зачастую это делается путём пошагового градиентного спуска по функции потерь. По функции потерь можно судить о производительности нейронной сети. Двигаясь по функции потерь методом градиентного спуска, мы подбираем для параметров такие значения, при которых нейронная сеть работает хорошо.

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

Если обучение пойдёт в слишком быстром темпе, то и шаги по обновлению модели будут чрезмерно размашистыми. Из-за этого параметры в процессе обучения будут расходиться (отдаляться друг от друга, стремясь к бесконечности), и в результате потери при обучении будут слишком тяжёлыми. Если же темп обучения будет слишком медленным, то и учебные шаги получатся слишком маленькими. Соответственно, чтобы натренировать нейронную сеть, таких шагов понадобится очень много. Когда обучение состоит из огромного количества шагов, этот процесс получается медленным и дорогостоящим. На практике темп обучения обычно требуется увеличить настолько, насколько это возможно, но так, чтобы не допускать расхождения параметров.

Визуализация ландшафта гиперпараметров

Можно наглядно показать, как корректировка гиперпараметров (в частности, темпа обучения) влияет на скорость обучения или расхождения нейронной сети. На следующей картинке каждый пиксель соответствует обучению одной и той же нейронной сети, причём, она инициализируется на материале одних и тех же данных — но с разными гиперпараметрами. Сине-зелёная гамма означает, что процесс обучения для этих гиперпараметров демонстрирует сходимость, и, значит, сеть учится успешно. Красно-жёлтая гамма означает, что обучение с данными гиперпараметрами приводит к расхождению. Чем бледнее цвет — тем быстрее протекает, соответственно, схождение или расхождение. 

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

Скрытый текст

Подробнее опишу отправную архитектуру этой нейронной сети, расскажу, как спроектирована сеть, и как я сконфигурировал её для обучения:

  • Нейронная сеть состоит из двух полносвязных слоёв, причём, как во входном, так и в скрытом слое содержится по 16 единиц, без параметров погрешности (bias parameters). Параметров всего два: матрица весов входного слоя и матрица весов выходного слоя.

  • Функция нелинейности tanh находится в единственном скрытом слое

  • Среднеквадратичная ошибка

  • Случайный учебный датасет фиксированного размера, где количество точек данных равно количеству свободных параметров сети

  • Полное (full batch) обучение с максимально крутым спуском и постоянным темпом

  • Темп обучения для каждого слоя свой. То есть, вместо того, чтобы обучать матрицы весов входного и выходного слоя в одном и том же темпе, мы задаём для каждой матрицы весов собственный гиперпараметр, задающий темп обучения.

В каждом из экспериментов (не считая исходного) меняется один аспект этой конфигурации. В исходном эксперименте следуем этой конфигурации без изменений. Если хотите разобраться ещё подробнее — вот вам заметка на arXiv или ноутбук colab, которым я пользовался во всех экспериментах.

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

Рис. 1: Ландшафт гиперпараметров: здесь показано, как степень успешности обучения нейронной сети зависит от гиперпараметров темпа обучения. Каждый пиксель соответствует одному учебному прогону при заданных темпах обучения для входного и выходного слоя. Те учебные прогоны, которые окрашены в сине-зелёные оттенки, сходятся, а те, что окрашены в красно-жёлтые оттенки — расходятся. Гиперпараметры, обеспечивающие максимальный успех (самые светлые оттенки сине-зелёного) обычно очень близки к тем параметрам, с которых начинается расхождение. Поэтому пограничная область нам особенно интересна.
Рис. 1: Ландшафт гиперпараметров: здесь показано, как степень успешности обучения нейронной сети зависит от гиперпараметров темпа обучения. Каждый пиксель соответствует одному учебному прогону при заданных темпах обучения для входного и выходного слоя. Те учебные прогоны, которые окрашены в сине-зелёные оттенки, сходятся, а те, что окрашены в красно-жёлтые оттенки — расходятся. Гиперпараметры, обеспечивающие максимальный успех (самые светлые оттенки сине-зелёного) обычно очень близки к тем параметрам, с которых начинается расхождение. Поэтому пограничная область нам особенно интересна.

Вдумчивый читатель, вероятно, уже заметил, что обучение приводит к расхождению в тех случаях, когда для выходного слоя задан высокий темп обучения. Но когда высокий темп обучения задан для входного слоя, производительность ухудшается, но ничего не расходится. Всё дело в насыщении нелинейности для tanh. Если темп обучения во входном слое велик, то увеличиваются и веса входного слоя, а вместе с ними и предактивации скрытого слоя. Из-за всего этого насыщаются единицы tanh (получаемые от них на выход значения всё сильнее приближаются к −1 или 1). Выходной слой сохраняет способность учиться даже на (в сущности, застывших) активациях [−1,1] с первого слоя, поэтому в какой-то мере обучение продолжается.

Наиболее результативные из гиперпараметров соответствуют самым светлым оттенкам сине-зелёного. Именно при этих значениях гиперпараметров нейронная сеть учится быстрее всего. И как раз эти значения расположены поблизости от границы, пролегающей между наборами значений, одни из которых приводят к схождению, а другие — к расхождению. Это универсальное свойство. Гиперпараметры, лучше всего подходящие для обучения нейронной сети, обычно очень близки к краю стабильной области. Например, как было указано выше, наилучший темп обучения при поиске по решётке – это наивысший темп, при котором процесс обучения ещё сходится, а не расходится.

Граница обучаемости нейронной сети - это фрактал

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

Увеличивая масштаб границы между теми конфигурациями гиперпараметров, при которых обучение получается успешным (тяготеет к синему) и неуспешным (тяготеет к красному), мы при любом приближении находим затейливые узоры. Оказывается, граница обучаемости нейронной сети — это фрактал! Если досмотреть видео до конца, то вы успеете заметить, как в последних кадрах оно пойдёт квадратиками. При обучении сети я пользовался числовым типом float64, значения в котором хранятся с точностью примерно до 16-го десятичного знака. Оквадрачивание, заметное при увеличении, объясняется тем, что на каком-то этапе нам требуется ещё более высокая точность, чтобы различить отдельные пиксели.

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

Рис. 2: Обучение нейронной сети давало фрактал во всех экспериментальных конфигурациях, которые я испробовал. 

Эта иллюстрация взята из научной статьи на эту темуи демонстрирует ту фрактальную область, которая получается из каждого набора экспериментальных условий. При корректировке этих условий менялись: степень нелинейности сети, размер набора данных, способ обучения: полное или на малой порции данных (minibatch). Также менялись рассматриваемые гиперпараметры.

Ниже с увеличением в динамике показаны фракталы для оставшихся конфигураций, обобщённых на рисунке 2. Код к перечисленным экспериментам выложен в этом коллабе.

Замена функции активации на тождественное отображение: т.e., мы имеем дело с глубокой линейной сетью, без всякой нелинейности.

Замена функции активации на ReLU: получается красивый фрактал, поскольку кусочная линейная структура ReLU наглядно проявляется в виде прямых линий, делящих фрактал на области.

Обучение на наборе данных единичного размера: т.e., всего на одной точке данных. В других экспериментах количество точек данных, взятых для обучения, равно количеству свободных параметров модели.

Обучение на малой порции данных размером 16: в других экспериментах обучение ведётся на полной выборке

Рассмотрение иных гиперпараметров: я добавил гиперпараметр, устанавливающий в момент инициализации среднее значение весов нейронной сети. Степень успешности обучения я визуализирую в контексте этого гиперпараметра инициализации весов (по оси x) и единый темп обучения для данного гиперпараметра (по оси y). В других экспериментах успешность обучения визуализируется в терминеах гиперпараметров темпа обучения для каждого слоя. Этот фрактал крайне красив — мне нравится его цикличность на тех участках, где при обычной детализации наблюдается лишь шум, а при более высоком разрешении начинает просматриваться структура.

В конце концов, здесь ничего странного!

Теперь, когда я показал вам достаточно удивительные и красивые картинки, давайте расскажу, почему примерно такого результата следовало ожидать с самого начала. Академическую статью я бы начал именно с этого раздела и рассказал бы историю так, как будто изначально знал, что получу здесь фракталы — но, конечно же, я этого не знал до тех пор, пока не провёл эксперимент!

Фракталы возникают в результате многократных итераций функции

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

Например, множество Мандельброта можно сгенерировать на основе многократных итераций функции f(z;c)=z2+c. Фрактал Мандельброта строится по границе бифуркации между значениями c в сложной плоскости, причём, с одной стороны границы эта повторяющаяся функция расходится, а с другой — остаётся компактной. Здесь c — это (гипер)параметр функции f(z;c), подобно тому, как темпы обучения являются гиперпараметрами для обучения нейронной сети.

Рис. 3: Фрактал Мандельброта генерируется в результате итераций простой функции, подобно тому, как мы раз за разом обновляем значения нейронной сети при обучении последней.
Рис. 3: Фрактал Мандельброта генерируется в результате итераций простой функции, подобно тому, как мы раз за разом обновляем значения нейронной сети при обучении последней.

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

Фракталы могут возникать в результате оптимизации

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

Рис. 4: Фракталы Ньютона, подобные показанному на этом рисунке, образуются в результате многократного повторения метода Ньютона, применяемого при поиске корней многочлена. При этом цвета кодируют исходные условия для конкретного корня, приводящего к схождению итераций. Фракталы Ньютона доказывают принцип, согласно которому в результате оптимизации может получаться фрактал, поскольку сам метод Ньютона является процедурой оптимизации. Они наводят на мысль, что фрактальный рисунок может возникать в результате обучения (то есть, оптимизации) нейронной сети.
Рис. 4: Фракталы Ньютона, подобные показанному на этом рисунке, образуются в результате многократного повторения метода Ньютона, применяемого при поиске корней многочлена. При этом цвета кодируют исходные условия для конкретного корня, приводящего к схождению итераций. Фракталы Ньютона доказывают принцип, согласно которому в результате оптимизации может получаться фрактал, поскольку сам метод Ньютона является процедурой оптимизации. Они наводят на мысль, что фрактальный рисунок может возникать в результате обучения (то есть, оптимизации) нейронной сети.

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

Когда мы обучаем нейронную сеть, повторяя шаги градиентного спуска, мы выполняем итерации фиксированной функции. Это справедливо как для множества Мандельброта, так и для фракталов Ньютона, и для других фракталов. Как и в случае с фракталом Ньютона, эта фиксированная функция соответствует алгоритму оптимизации. В частности, обучая нейронную сеть с применением максимально крутого градиентного спуска с сохранением постоянного темпа обучения, мы выполняем итерации фиксированной функции f(θ;η)=θ(η)−ηg(θ). Здесь η — это гиперпараметр темпа обучения, θ — параметры нейронной сети, а g(θ) — градиент функции потерь.

Между обучением нейронной сети и традиционной генерацией фракталов есть много отличий. Фракталы, рассмотренные выше, предполагают многократное выполнение функции с одним (комплексным) числом в качестве аргумента. Итерируемая функция определяется короткой и простой функцией, вполне укладывающейся в одну строку. С другой стороны, при обучении нейронной сети итерациям подвергается функция, охватывающая все её параметры. У некоторых нейронных сетей триллионы параметров, и это означает, что входные и выходные значения повторяемой функции будут описываться триллионами чисел, по одному на каждый параметр. Аналогично, уравнение для обновления нейронной сети в процессе обучения гораздо сложнее, чем функция, описывающая прослеживание традиционных фракталов. Она записывалась бы во много строк, если не сказать — на несколько страниц. Только так можно учесть обновление всех параметров для крупной нейронной сети.

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

Многие фракталы генерируются в результате итераций простых функций. Таковы, например, многочлены низшего порядка. Итерации этих функций зачастую дают простые симметрии, которые сразу угадываются визуально. Фракталы, получающиеся в результате обучения нейронных сетей, более органичны, в них не так сильно заметны симметричные узоры. Вероятно, это связано с более высокой сложностью самой функции, подвергаемой итерациям, а также с наличием множества случайных параметров в определениях функций. Всё это проистекает как из случайной инициализации самой нейронной сети, так и от случайно подобранных учебных данных.

Заключительные мысли

Метаобучение — это сложно

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

Рассмотренные выше фрактальные ландшафты гиперпараметров помогают лучше понять некоторые из вызовов, с которыми мы сталкиваемся при метаобучении. В процессе метаобучения обычно оптимизируют гиперпараметры (или метапараметры) методом градиентного спуска. Функция потерь, к которой применяется метаградиентный спуск, называется функцией метапотерь. Фрактальные ландшафты, визуализацией которых мы здесь занимались — также ландшафты метапотерь. Мы визуализируем степень успешности (или неуспешности) обучения по мере изменения гиперпараметров. В области гиперпараметров часто наблюдается хаос, из-за чего спуск сильно усложняется. Мы с коллегами подробно исследовали, как оптимизировать хаотические метапотери. Особенно интересными получились статьи Unbiased Gradient Estimation in Unrolled Computation Graphs with Persistent Evolution Strategies и Variance-Reduced Gradient Estimation via Noise-Reuse in Online Evolution Strategies. Наши результаты открывают более универсальную перспективу со своими нюансами: ландшафты метапотерь хаотичны потому, что фрактальны. При любом масштабе даже небольшие изменения, вносимые в гиперпараметры, могут приводить к сильным изменениям в динамике обучения.

Рис. 5: Из-за хаотичности ландшафтов метапотерь метаобучение получается таким сложным. Здесь показан пример ландшафта метапотерь для обученного оптимизатора. Чем темнее оттенки, тем лучше ситуация с метапотерями. По двум осям откладываются два метапараметра обученного оптимизатора (подобно визуализации, показанной на рис. 1, где по осям откладываются два гиперпараметра). Подробнее см. в этой статье. Метаобучение на таком ландшафте метапотерь проходит сложно, поскольку самый крутой градиентный спуск застревает в «долинах» и в локальных минимумах, а также потому, что градиенты стремительно меняющейся функции метапотерь отличаются исключительно высокой дисперсией.
Рис. 5: Из-за хаотичности ландшафтов метапотерь метаобучение получается таким сложным. Здесь показан пример ландшафта метапотерь для обученного оптимизатора. Чем темнее оттенки, тем лучше ситуация с метапотерями. По двум осям откладываются два метапараметра обученного оптимизатора (подобно визуализации, показанной на рис. 1, где по осям откладываются два гиперпараметра). Подробнее см. в этой статье. Метаобучение на таком ландшафте метапотерь проходит сложно, поскольку самый крутой градиентный спуск застревает в «долинах» и в локальных минимумах, а также потому, что градиенты стремительно меняющейся функции метапотерь отличаются исключительно высокой дисперсией.

Благодарности

Спасибо тебе, Майка Марс Миякава Соль-Дикстейн за то, что подсказала исходную идею для этого поста, а также за подробную обратную связь по сгенерированным фракталам. Также благодарю Асако Миякаву за то, что прокомментировала черновик данной статьи.

Комментарии (1)


  1. Badsanta83
    08.11.2025 15:53

    Фракталы завораживающая тема во всех областях!