Научно-технический вебинар “Необычные свойства функции потерь в глубинном обучении”

13 апреля 2021, 14:00 MCK

О вебинаре

  • Спикер

    Дмитрий Ветров, НИУ ВШЭ, Москва, Россия

  • Тема

    Научно-технический вебинар “Необычные свойства функции потерь в глубинном обучении”

  • Подробнее про вебинар

    Спикер о вебинаре:

    За последние несколько лет в нейронных сетях обнаружен ряд необычных эффектов. Среди них можно упомянуть связность глобальных минимумов, двойной спуск, разрыв между теоретическими предсказаниями и практическими результатами, т.н. «минные поля» в пространстве весов. В докладе мы подробнее рассмотрим эти эффекты и представим гипотезу, которая может, по крайней мере, частично объяснить, что происходит в процессе обучения нейронной сети и какими свойствами обладает оптимизируемая в ходе него функция потерь. Основываясь на этой гипотезе мы предложим ряд экспериментов, которые могут дать ее косвенные подтверждения и расскажем о предварительных результатах. Лучшее понимание динамики обучения нейросети может привести к созданию более эффективных методов обучения. В докладе будут указаны возможные пути для их улучшения.

    Видео: https://youtu.be/SKYXBPCJHCg

    Презентация: https://drive.google.com/file/d/1rORrGxW_ZgYuhtHuaQ65LW160aNuMbp5/view?usp=share_link

    Вторая часть: 18 мая 2021, 14:00 МСК Научно-технический вебинар “Перспективы ансамблирования нейросетей”

    (00:00:00) (Начало записи) 

    Николай Михайловский: Хорошо, давайте начинать. Я Николай Михайловский, генеральный директор компании «НТР», и рад приветствовать вас на вебинаре Дмитрия Ветрова, профессор Высшей школы экономики и руководителя лаборатории байесовских методов. Правильно я анонсирую?

    Дмитрий Ветров: Руководитель исследовательской группы байесовских методов.

    Николай Михайловский: Руководитель исследовательской группы байесовских методов. Дмитрий нам будет рассказывать про удивительное свойство ландшафтов функций потерь.

    Дмитрий Ветров: Благодарю вас. Спасибо за представление. Здравствуйте, уважаемые коллеги. Мы действительно сегодня поговорим о некоторых удивительных свойствах ландшафтов функций потерь, которые возникают в глубинных нейросетях. Но сначала небольшая преамбула, с которой я люблю начинать. Заключается она в том, что, как мне кажется, современное машинное обучение, глубинное обучение в нейронных сетях, в технологии искусственного интеллекта, все меньше напоминает ветвь прикладной математики и все больше начинает напоминать положение естественных наук в веке так 18-м, когда ученые бились над загадками природы и пытались применять научный метод, дизайн эксперимента, для того чтобы выдвигать какие-то гипотезы, которые могли бы эти загадки природы разгадать. Как это ни смешно, сейчас нам приходится иметь дело с нейросетями, в которых миллиарды, десятки миллиардов параметров, и оказывается, мы довольно плохо понимаем то, что происходит при их обучении, и в определенном смысле мы сталкиваемся тоже с загадками природы, где в данном случае в роли природы выступает огромная математическая модель с миллиардами параметров.

    Поэтому, как мне кажется, последнее время для ученых, для специалистов в области искусственного интеллекта важнее становится даже не математический бэкграунд, хотя, безусловно, он важен, мне даже в каком-то смысле неловко это говорить, как математику по образованию, но, тем не менее, на первый план начинают выходить как раз те качества, которые требовались от ученых, от естествоиспытателей в 18-19 веках, когда была научная революция. Это владение научным методом и это дизайн эксперимента.

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

    Еще одно обстоятельство, которое меня сильно заботит, заключается в том, что в последние годы сообществе специалистов по машинному обучению начинает распространяться довольно нехорошее настроение, примерно соответствующее тому, которое распространяется среди специалистов по квантовой механике: «Заткнись и считай». Нейросети есть, нейросети работают, решают практические важные задачи, а что там происходит, неважно. Главное, что мы достигаем практически целей.

    Мне кажется, это довольно опасная тенденция, и как ученый, я не могу с ней согласиться. С позиции инженеров понятно, нужно решать конкретные задачи, но это не означает, что нужно пренебрегать попытками понять, что же происходит. В противном случае мы закончим так же, как квантовая механика. Уравнение Шредингера есть, предсказания какие-то проверяемые она позволяет делать, но при этом что там происходит и причины тех или иных эффектов традиционно сообщество специалистов по квантовой механике развлекаются подковерно, и там удивительные вещи вроде того, что будущее начинает влиять на прошлое, причинно-следственный принцип нарушается. На попытки у специалистов спросить: «А вас это не смущает?» отвечают: «Неважно, уравнение Шредингера есть, решаю, все в порядке».

    Эта тенденция нехорошая, но я надеюсь, что все-таки она широкого распространения не получит.

    Какие же сейчас у нас есть открытые вопросы в глубинном обучении? Здесь перечислен далеко не исчерпывающий список, но здесь перечислены те вопросы, которые интересуют меня, и о которых частично пойдет речь в сегодняшнем докладе.

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

    (00:05:02)

    Кроме того, мы знаем, что современные нейросети подвержены чудовищному переобучению. Эксперимент, который три года назад был поставлен, честно говоря, удивительно, почему он так поздно был поставлен, и который показал, что если мы возьмем современный ___ (00:05:16) нейросети, возьмем стандартные бенчмарки и, допустим, для задач классификации, и просто случайно переставим методы и классы в обучающей выборке, то нейросеть прекрасно достигает нулевой ошибки на обучении, и ничто не показывает, что что-то пошло не так, то есть она отрабатывает в штатном режиме, выбивая стопроцентную точность на обучающей выборке, хотя мы понимаем, что никаких закономерностей не было между объектами, методами, (00:05:39) классами. Это означает, что что-то у нас не в порядке, потому что вообще-то мы бы предпочли, чтобы наши модели машинного обучения не обучались бы, если закономерностей в данных нет, то есть если метки расставлены случайно, то модель машинного обучения должна выдавать точность на уровне случайного угадывания, а не стопроцентную.

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

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

    Итак, начнем мы с двух необычных объектов, которые были недавно обнаружены в нейросетях. Первый эффект заключается в следующем. Давайте рассмотрим такой эксперимент. Берем обучающую выборку для задачи классификации, берем какую-нибудь стандартную архитектуру нейросети, и запускаем ее дважды, из одного и того же начального приближениями, но с разными расписаниями величин шагов. В первом случае мы сразу запускаем с маленькой величиной шага, а во втором случае запускаем сначала с большой величиной шага, а потом через некоторое время делаем ___ (00:08:27) и уменьшаем величину шага до той же, с которой мы в первом случае запускались. Давайте посмотрим, как будет себя вести при этом точность на обучении и точность на тесте или на валидации.

    Слева показана точность на обучении. Мы видим, что если мы запустились сразу с маленькой величиной шага, то мы быстро выбиваем сто процентов, и дальше на этом уровне остаемся. Если мы сначала начали с большой величиной шага обучаться, мы некоторой точности достигаем, не стопроцентной, и когда мы делаем ___ (00:09:09) величины шага, то у нас еще подскакивает точность на обучении, достигает тех же ста процентов. Вроде мы в обоих случаях пришли к стопроцентной точности на обучении, вроде все хорошо. Но как только мы посмотрим на точность на валидации, то мы увидим, что тут поведение немножко разное, а именно, во втором случае, то есть когда мы сначала с большой величиной шага запустились, а потом сделали ___, (00:09:30) мы достигаем значительно более высокого качества, чем в первом случае. Это означает, что мы сошлись к двум принципиально разным глобальным минимумам. В обоих случаях с точки зрения оптимизируемого функционала у нас все хорошо, нулевая ошибка на обучении, соответственно, функция потерь близка к нулю, близка к глобальному минимуму, но при этом эти два минимума обладают разными свойствами. обладают разной обобщающей способностью.

    (00:09:56)

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

    Второй интересный эффект, так называемые минные поля в ландшафте функции потерь. Что здесь происходит? Рассмотрим стандартную процедуру обучения. Стартовали из инициализации, с нормальным расписанием величин шагов, и спокойно дошли до нулевой ошибки на обучении и близкой к 0 ошибке на тесте, то есть попали в хороший глобальными минимум, в котором у нас все хорошо обобщается.

    Дальше давайте рассмотрим траекторию пространства весов, которое мы описали в ходе процедуры оптимизации. Здесь для простоты она визуализирована с помощью TSNE в двухмерное пространство, она себя вот такую как будто зашумленную линию представляет, чем краснее, тем ближе мы к концу обучения. Вот мы прошли, и здесь у нас ошибка на валидации очень низкая.

    А теперь давайте рассмотрим следующий интересный эксперимент. Возьмем произвольную точку на этой траектории и попробуем в окрестности этой точки найти такие значения весов, на которых ошибка на обучении 0, а ошибка на тесте будет как можно выше. Так видоизменим, оптимизировав функционал, и начнем оптимизировать новый функционал, ошибка на обучении минус лямбда на ошибку на тесте на валидационной выборке. С удивлением мы обнаруживаем, что в окрестности любой точки на вашей траектории обучения существует прорва целая точек, они здесь синим показаны, на которых на них на всех ошибка на обучение нулевая, а ошибка на тесте, она здесь показана интенсивностью синего цвета, то есть она зашкаливает. Это точки, в которых с точки зрения исходного оптимизированного функционала все хорошо, нулевая ошибка на обучении, нулевое или близкое к нулю значение функции потерь, но при этом на тесте все сколь угодно плохо. В принципе, формально говоря, все эти точки нам подходят с точки зрения оптимизатора, потому что оптимизатор видит только ошибку на обучении. Но по каким-то причинам мы этих всех паразитных глобальных минимумов не видим, и наш оптимизатор спокойно проходит сквозь них, не видя их, и завершает свою работу в точке, где у нас обобщающая способность высокая, то есть ошибка на тесте низкая. Авторы тут провели аналогию с минными полями, то есть как будто бы наш оптимизатор в ходе процедуры обучения проходит сквозь минное поле, но нигде не подрывается, и доходит до конца. Почему как минное поле? Потому что если бы мы оказались в любой из этих точек, то, казалось бы, мы должны были процедуру обучения закончить, но при этом с фантастически плохими результатами, с очень плохой обобщающей способностью.

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

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

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

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

    (00:15:07)

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

    Продолжая эту аналогию, можно такую картинку нарисовать, это уже, я сразу прошу прощения, плод моих скромных художественных способностей, не судите слишком строго. Кажется, что такая гипотеза, которую мы назвали фрактальной гипотезой, сейчас я объясню, почему, позволяет действительно оба эффекта, с которых я начал, объяснить. А именно, гипотеза заключается в том, что в нашей функции потерь существует огромное количество узких минимумов, перемежающихся с минимумами средними, с минимумами широкими, и имеет место что-то типа масштабной инвариантности. Если мы возьмем какой-то узкий минимум и рассмотрим его при другом разрешении, то мы увидим, что он сам ведет себя похожим образом, то есть состоит из еще более узких минимумов. Такая масштабная инвариантность имеет место в некоем широком диапазоне масштабов, понятно, что масштаб конечный, потому что у нас конечное число параметров в нейросети, но, тем не менее, в некотором диапазоне масштабов у нас вот такая масштабная инвариантность присутствует.

    Это могло бы объяснить те эффекты, которые наблюдаем. Рассмотрим первый эксперимент. Стартовали два раза, с одной и той же начальной точки, но в одном случае сразу с маленький величиной шага, в другом случае сначала с большой, потом с маленькой. Стартуем с маленькой величиной шага, что означает маленькая величина шага? Маленькая величина шага означает маленькую дисперсию в наших случайных шагах нашего стохастического оптимизатора. Легко показать, что дисперсия шагов зависит от двух вещей, во-первых, от размера минибатча, чем больше минибатча, тем меньше будет дисперсия стохастического градиента. Во вторую очередь зависит от величины шага: чем больше у нас величина шага, тем опять же больше будет индуцироваться дисперсии. Поэтому, варьируя величину шага, мы можем варьировать дисперсию наших случайных шагов при стохастической оптимизации. Если у нас величина шага маленькая, дисперсия, соответственно, маленькая, и тогда наш оптимизатор видит больше деталей, он оптимизировал функцию потерь, и поехал из этой точки, сразу видит – ага, какой ближайший у нас минимум, а вот какой. Вот мы сюда сходимся, достигаем нулевой ошибки на обучении, но поскольку минимум этот узкий, то у нас тут хуже обобщающая способность, то есть ошибка на тесте оказывается выше, чем могла бы быть.

    Во втором эксперименте мы сначала запускаемся с большой величиной шага. Большая величина шага означает бо́льшую дисперсию, бо́льшая дисперсия – значит, меньше разрешающая способность. Тогда наш алгоритм стохастической оптимизации черную функцию воспринимает как пунктирную зеленю, он просто этих мелких «сосисок» не видит. Даже если он в нее случайно попадет на какой-то итерации, на следующей итерации его оттуда выбьет, потому что слишком высокая дисперсия наших случайных шагов. Поэтому он воспринимает черную функцию как зеленую, он сходится, начинает болтаться где-то вот здесь, и если мы после этого сделаем ___, (00:18:23) уменьшим величину шага, то мы внутри этой зеленой чаши дальше скатимся в ближайшую «сосиску», в ближайший узкий минимум, но этот узкий минимум находится внутри минимума широкого, и поэтому у нас обобщающая способность оказывается выше.

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

    Хорошо, в принципе, гипотеза что-то объяснить может, но звучит, конечно, пока сильно за уши притянутой. Вопрос, а можем мы как-то все-таки какие-то дополнительные эксперименты поставить, которые хотя бы косвенно эту гипотезу могли бы проверить? Ответ: в общем, да, можем. А именно, давайте вспомним, что если мы говорим про масштабную инвариантность в некотором диапазоне масштабов, то это характерное свойство фрактала, о котором что известно? Что если мы возьмем фрактал, возьмем какой-то его маленький кусочек и изменим масштаб, то есть посмотрим на него при другом увеличении, то картинка станет неотличима от исходного фрактала.

    (00:20:00)

    Вопрос: можно ли что-то похожее проверить для ландшафта функции потерь в глубинном обучении? Ответ: можно некоторые косвенные эксперименты провести. Давайте следующий эксперимент рассмотрим.

    Опять же, стартуем из одного и того же начального приближения, одна и та же нейросеть, одна и та же обучающая выборка, и единственное, что отличается, мы будем обучаться методом стохастического градиентного спуска с четырьмя разными константами, величинами шага. Величина шага, 1/scale2, scale – это наш параметр, который мы в четырех случаев меняем, то есть чем меньше у нас scale, тем выше у нас величина шага, с которой мы обучаемся.

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

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

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

    Мы это сделали, получили четыре гистограммы, в принципе, в первом приближении вроде все соответствует действительности в том смысле, что чем выше у нас величина шага, тем меньше кривизна у глобального минимума, куда мы сошлись. Синяя показывает спектр при большой величине шага, мы видим, что собственные значения все маленькие, и если мы величину шага увеличиваем, у нас увеличиваться начинает… спектр начинает расширяться, появляются большие собственные значения, которые означают, что у нас кривизна высокая.

    Но где же масштабная инвариантность? Пока ее не видно, но если гипотеза верна про масштабную инвариантность, это означает, что у нас эти все четыре гистограммы вообще-то должны различаться на константный множитель. Как бы это проверить? А на самом деле несложно, мы не зря взяли матрицу Фишера, потому что про матрицу Фишера известно, что у нее спектр строго положительный, то есть отрицательных собственных значений нету, а коли так, то я могу эти четыре гистограммы попробовать перестроить в логарифмической шкале, в логарифмической ___, (00:23:21) и тогда константный множитель будет соответствовать аддитивному сдвигу в логарифмической шкале. Если мы это перестроим, то не без удивления мы обнаруживаем, что у нас вообще-то четыре гистограммы, которые различаются единственное чем, это константным сдвигом. Я напоминаю, константный сдвиг в логарифмической шкале соответствуют масштабному преобразованию в исходной шкале. Их очень легко можно совместить, и кажется, что это является хоть и косвенным, но весьма интересным подтверждением того, что, по-видимому, какая-то масштабная инвариантность есть. Если мы рассмотрим какой-то узкий минимум и увеличим масштаб, то он будет геометрический выглядеть так же, как выглядел минимум широкий.

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

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

    (00:24:55)

    На самом деле, тут тоже не так все просто, и вот здесь иллюстрация из видеоролика, который сейчас я вам покажу, который посвящен эффекту связанности мод, но здесь показан срез рельефа функций потерь, опять же, пространство гигантской размерности, срез по некоему случайному двухмерному направлению, по двухмерной плоскости. Мы видим, что вообще-то функция потерь не так проста, как может показаться на первый взгляд, то есть у нее действительно огромное количество есть разных ___, (00:25:23) мне это напоминает ролики из квантовой механики про квантовую ___, которая нас в микромире окружает, где полный хаос наблюдается. Здесь что-то похожее, то есть поведение довольно хаотичное, и вполне может быть, что такие вот шероховатости в этой случайной двухмерной плоскости, если рассмотреть другие размерности, то там легко могли быть те же самые паразитные глобальные минимумы. Опять же, тут нам приходится спекулировать, потому что соответствующих средств у нас пока нету для детального анализа рельефа функций потерь.

    Тем не менее, что мы сказать можем? Мы можем сказать, например, что все наши глобальные минимумы вообще-то являются не изолированными, а образуют некоторое нелинейное многообразие и практически связаны между собой. На основании чего такой вывод мы делаем? Сейчас я вам покажу видеоролик про один эксперимент, который мы провели совместно с нашими коллегами из университета ___, (00:26:23) который заключается в следующем. Давайте обучим два раза одну и ту же нейросетку из двух разных начальных приближений, сойдемся к двум глобальным минимумам разным, а потом попробуем эти два глобальных минимума соединить, то есть найти поверхность невысокой размерности, в данном случае мы строили ___ (00:26:41) третьей степени, такую, чтобы вдоль всей этой поверхности ошибка на обучении была близка к нулю. Если мы такую поверхность найдем, это будет означать, что у нас в пространстве весов существует путь между двумя разными модулями.

    Здесь я попробую переключиться вот сюда и покажу небольшой ролик.

    (Просмотр видеоролика.)

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

    Давайте вернемся к нашим слайдам. Мы увидели, что действительно глобальные оптимумы между собой соединены, а не являются изолированными, как это представлялось до этого сообществу, почему-то это казалось настолько очевидным, что никто ___ (00:28:53) не воспринимал. Оказывается, как только мы начали искать пути между любыми двумя глобальными модами, мы тут же малой кровью эти пути находим. Этот эффект наблюдается во всевозможных архитектурах – и в рекуррентной нейросети, и ResNet, и обычне сверточные нейросети, полносвязные, везде он есть, если сети перепараметризованы, то есть параметры в них сильно больше, чем объем обучающей выборки. Тот факт, что мы находим эти пути путем простейших кривых типа ___ (00:29:19) или типа такой «коленки», то есть ломаной из двух сегментов, означает, что путей этих много, как дырок в сыре, и, скорее всего, отсюда следует, что все глобальные минимумы соединены и образуют единое многообразие, причем неизвестно, какой размерности. Это интересный вопрос, но, к сожалению, не очень понятно, как на него ответить. Последние эксперименты конца прошлого года наших коллег показывают, что размерность существенно больше единицы, но попытка ее оценить приводит к тому, что начинает сложность вычислительная расти экспоненциально, поэтому они до 10 размерностей дошли, дальше сказали: «Все», дальше вычислительных ресурсов не хватает.

    (00:29:59)

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

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

    Николай Михайловский: Вопросы есть. Но давайте дождемся, когда у вас будет логическая…

    Дмитрий Ветров: Сейчас как раз логическая пауза.

    Николай Михайловский: Хорошо. Давайте попробуем посмотреть. Александра Переверзева спрашивает, что означают оси на десятом слайде.

    Дмитрий Ветров: Здесь показан спектр матрицы. Спектр матрицы – это собственные значения этой матрицы. Мы знаем, что они не отрицательные, потому что это матрица Фишера, а про нее известно, что у нее спектр неотрицательный. Повторюсь, это матрица Фишера является некоей хорошей аппроксимацией для гессиана функции потерь, гессиан функции потерь показывает нам локальную кривизну, в точке минимума, соответственно, кривизна должна быть положительной. Мы здесь накладываем просто гистограмму того, какие собственные значения, какие пропорции у нас включались. Если мы говорим, скажем, сеть, у которой миллиард параметров, значит, у нас матрица миллиард на миллиард, у нас миллиард собственных значений, мы можем все их посчитать и гистограмму построить. Конечно, мы тут делаем опять же приближенно, с помощью так называемой квадратуры ___, (00:32:03) но наши эксперименты на меньших матрицах показывают, что она действительно с хорошей точностью позволяет такую гистограмму спектра оценить.

    Николай Михайловский: Александра просит еще раз объяснить эксперимент.

    Дмитрий Ветров: Видимо, речь идет об этом эксперименте.

    Николай Михайловский: Давайте мы попробуем Александре дать слово, и она нам уточнит, о каком эксперименте идет речь. Александра. Вы можете включить микрофон и задать. А, Александра уже говорит: «Все объяснили, спасибо, можете микрофон не включать».

    Дмитрий Ветров: Илья Казаков.

    Николай Михайловский: Да, Илья Казаков говорит: «Наличие многих глобальных оптимумов и возможность их соединения, как показано, не свидетельствует ли о том, что модель, решающая поставленную задачу, избыточно параметризована для этой задачи?»

    Дмитрий Ветров: Ответ: да, свидетельствует. Проблема заключается в том, что мы не можем от этой перепараметризации, избыточной параметризации мало кровью избавиться. Впечатление такое, что она нам сильно помогает решать нашу задачу. Как раз дальше я про это буду говорить.

    Николай Михайловский: Александра Мурзина говорит: «Как будто космос покоряем». Ну да. It’s new rocket science.

    Дмитрий Ветров: Надеюсь, что это можно как комплимент рассматривать.

    Дмитрий Ветров: Вадим Великотный: «Как раз не так давно была статья о том, что вместо изменения Learning rate следует менять размер минибатча, что хорошо вписывается в эту концепцию».

    Дмитрий Ветров: Все правильно, потому что увеличение минибатча тоже приводит к снижению дисперсии наших ___ (00:33:57) шагов. Собственно в статье утверждается, это тоже, что мы на всякий случай экспериментально проверили, что увеличение минибатча ___ начинает приводить к тому, что обобщающая способность падает, то есть мы переобучаемся, то есть фактически мы сходимся в более узкий глобальный минимум, потому что у нас выше стала разрешающая способность, то есть наш метод стохастической оптимизации больше начинает походить на метод просто оптимизации, то есть чем большими минибатч, тем меньше дисперсия. Так что да, действительно, это все хорошо вписывается.

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

    Николай Михайловский: Юрий Кузнецов говорит: «А вот картинка с фракталами просто для иллюстрации самоподобности?»

    Дмитрий Ветров: Да.

    (00:34:54)

    Николай Михайловский: Максим Глазков: «Подойдет ли в качестве инструмента исследования поведения пути между минимумами теория Морса?»

    Дмитрий Ветров: Не знаю, потому что с такой теорией незнаком, буду очень признателен, если скинете какие-то ссылки.

    Николай Михайловский: Да, и для меня тоже новое слово. Роман Гутченко: «Искались ли целенаправленно изолированные глобальные минимумы? Ведь наличие неизолированных не отрицают существования изолированных».

    Дмитрий Ветров: Не отрицает существование. Искались. Наши попытки их найти успеха не имели. Все те минимумы, которые мы находим в нашей стохастической оптимизации, оказываются между собой соединены. Я подозреваю, что есть, безусловно, изолированные минимумы, совсем-совсем эти узкие «сосисочки», которые, может быть, ни с чем не соединены, просто мы их не можем найти.

    Николай Михайловский: Из Q&A. Геннадий Лаптев спрашивает: «А в конце доклада будут ссылки на эти публикации?» Какие-то ссылки уже были.

    Дмитрий Ветров: Ссылки в слайдах только, по ходу.

    Николай Михайловский: Да. Слайд, Дмитрий, вы же нам передадите, а мы их разошлем и опубликуем, правильно?

    Дмитрий Ветров: Да.

    Николай Михайловский: Nick Linker спрашивает: «Верно ли, что локальных минимумов экспоненциально много?»

    Дмитрий Ветров: Верно, но это известный результат и без нас, то есть это известно еще с мохнатых годов.

    Николай Михайловский: Сергей Кастрюлин говорит: «Все вышесказанное, очевидно, относится к задачам классификации, и результат с переходом между минимумами относится к ситуации нулевой ошибки решения классификационной задачи. Обобщается ли результат на задаче регрессии, и если да, то как?»

    Дмитрий Ветров: Хороший вопрос. Не пробовали, не знаю. Просто сейчас традиционно задача классификации – это основное, что исследуется в нейросетях, потому что для задачи регрессии нейросети… Там есть вопросы, там не все так гладенько, как в задаче классификации. Поэтому мы изучали целенаправленно задачу классификации.

    Николай Михайловский: Даниил Удимов спрашивает: «Спасибо. А можно ли выравнивать эти поверхности, которые мы рассматривали, за счет каких-то методов, например добавления шума к данным и т.п?»

    Дмитрий Ветров: Я не очень понял, что значит «выравнивать поверхности».

    Николай Михайловский: Поверхности утыканы маленькими локальными минимумами, я имею в виду вот это. Вопрос – нельзя ли что-то такое сделать, чтобы локальные минимумы, которыми все утыкано, магическим образом исчезли?

    Дмитрий Ветров: Я подозреваю, то есть если неформально отвечать, то, скорее всего, можно. Проблема в том, что если мы начинаем функцию зашумлять, то не очень понятно, вообще о каком рельефе можно говорить. У нас не одна функция, а у нее все время какие-то зашумленные реплики этой функции. А тут мы целенаправленно исследуем вот именно функцию потерь на обучении, то есть зашумленную, без аугментации, просто ее свойства. Потому что, если зашумлять, (00:38:10) то, повторюсь, у нас сама функция пропадает, получается, у нас есть какие-то только зашумленные версии.

    Но если отвечать неформально, скорее всего, да, эта зашумленная версия будет приводить к тому, что узкие-узкие минимумы, скажем, на каком-то диапазоне масштабов исчезнут, но на каком-то они будут продолжать существовать.

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

    Андрей Жигунов: «Насколько выводы приходится адаптировать для более умных версий SGD, начиная с SGD with momentum и заканчивая и Adam like. Правда ли, что SGD with momentum по построению метода склонны проскакивать узкие оптимумы, и для них практически может быть достаточно просто попробовать несколько запусков в надежде, что хотя бы один из них избегнет сваливания в локальность?»

    Дмитрий Ветров: Да, правда. Собственно потому SGD with momentum и Adam были придуманы, что они благодаря появлению ___ (00:39:52) члена обеспечивают…

    (00:39:55)

    Действительно проскакивают по инерции, то есть они усиливают тот эффект, который есть у обычного SGD, который как раз заключается в том, что он узких минимумов не видит. Если угодно, между типа Adam и SGD with momentum, они не видят и чуть более широкие, но по-прежнему недостаточно широкие минимумы, поэтому в среднем работают лучше, чем SGD.

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

    Дмитрий Ветров: Вот про этот? Скажем так, частично ссылки на те явления, которые вот здесь описаны, они присутствуют опять же в слайдах.

    Николай Михайловский: Видимо, уже впору набор проблем Гильберта собирать про нейронные сети.

    Дмитрий Ветров: Я и говорил, загадки природы, и много интересных, необычных эффектов.

    Николай Михайловский: Да. Максим Глазков нам про теорию Морса присылает ссылку в Wiki, эту ссылку видно всем панелистам, но мы сейчас ее перекопируем, если кому-то будет еще интересно, вот оно. И говорит: «Вопрос тогда в том, исследовали ли гладкость многообразия?»

    Дмитрий Ветров: Нет, потому что непонятно, как это сделать, от слова «совсем».

    Николай Михайловский: Хорошо. Отмечу в скобках, что у нас здесь присутствует 99 человек, что является пределом по вместительности данного вебинара.

    Дмитрий Ветров: Достигли предела, да, как будто ___, (00:41:40) ну ладно, запись будет.

    Коллеги, я бы с вашего позволения продолжил, потому что у нас еще довольно много материала. Мне очень не хочется его комкать, и хочется по возможности вам рассказать побольше, потому что, кажется, аудитория очень благодарная.

    Николай Михайловский: Да.

    Дмитрий Ветров: Тогда я, с вашего позволения, продолжу.

    Итак, следующий эффект, который я бы хотел рассмотреть, и который тоже косвенно имеет отношение к тому, о чем была речь выше, это эффект так называемого двойного спуска. Исходно был обнаружен пару лет назад, хотя злые языки утверждают, что в той или иной ипостаси он возникал и раньше, и заключается он в следующем. Как мы обычно склонны представлять, как должны вести себя модели машинного обучения по мере увеличения их сложности? Вот так, как показано на левой картинке, собственно, так, как нам диктует высокая теория. А именно, по мере увеличения сложности у нас ошибка на обучении у обученного алгоритма будет снижаться, то есть чем сложнее ___, (00:42:50) тем более низкой ошибки мы можем достичь на обучении, а ошибка на тесте сначала при увеличении сложности снижается, а потом начинает увеличиваться. Это собственно называется «эффект переобучения», тот самый священный Грааль, с которым все теоретики в область машинного обучения пытаются как-то справиться.

    При этом, что мы видим на практике в современных нейросетевых моделях? Эффект не такой, а эффект, в смысле, поведение такое, как показано на правой картинке. Мы увеличиваем сложность модели, допустим, увеличиваем ширину либо глубину нейросети, либо и то, и другое. Пока у нас модель слишком простая, мы не можем выучить обучающую выборку стопроцентно, то есть у нас какая-то ошибка на обучении остается. С какого-то момента модель становится достаточно сложной, чтобы выучить обучающую выборку, и дальше, если модель мы продолжаем увеличивать, то у нас ошибка на обучении по-прежнему 0. Но ошибка на тесте ведет себя довольно интересным образом, а именно, вот такой вот двойной спуск испытывает. С она ведет себя так, как предсказывает теория, достигает пика примерно на том уровне сложности модели, на котором у нас впервые нам удалось научиться выучивать всю обучающую выборку, а потом, по мере увеличения дальнейшего сложности модели, удивительным образом происходит опять же падение тестовой ошибки. Соответственно, вот эту точку пика на тесте, то есть некую критическую сложность, назвали Interpolation Threshold, модели, которые находятся… более простые, называются недопараметризованными, модели, которые более сложные, называются перепараметризованными.

    Что значит «недопараметризованная»? Это означает, что у нас степеней свободы в нашей модели машинного обучения недостаточно для того чтобы выучить обучающую выборку. Перепараметризованная – соответственно, обратная ситуация, когда у нас параметров сильно больше, чем нам нужно было бы для того чтобы безошибочно научиться классифицировать обучающую выборку.

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

    (00:45:08)

    По-видимому, это приводит к тому, что мы здесь не столько обобщаемся, то есть не столько находим полезные закономерности, свойства генеральной совокупности, сколько просто запоминаем объекты обучающей выборки. Поэтому, видимо, такое запоминание приводит к тому, что ошибка на тесте больше.

    Объяснение не слишком убедительное пока, но это те гипотезы, которые в сообществе есть.

    В прошлом году появилась очень интересная работа, называется Deep Double Descent, в которой, во-первых попытались вот на этот же эффект посмотреть с другой стороны. А именно, давайте мы такую двойственную постановку рассмотрим, скажем, здесь у нас была фиксированная обучающая выборка, и мы меняли сложность модели, а давайте сделаем иначе: зафиксируем сложность модели, и будем менять размер обучающей выборки, то есть будем потихонечку ее увеличивать. Что должно происходить, если мы верим в эффект двойного спуска? Пока обучающая выборка у нас маленькая, мы находимся в перепараметризованном режиме. Постепенно мы увеличиваем обучающую выборку, она становится все больше, больше, больше, больше, и когда она станет слишком большой, мы уже будем не в состоянии ее в рамках заданной сложности модели безошибочно классифицировать. Это означает, что мы перейдем в недопараметризованный режим. А коли так, то где-то в этом процессе у нас должен быть пик тестовой ошибки, то есть мы должны пройти через точку двойного спуска.

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

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

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

    Но самое смешное, они открыли эффект двойного спуска не только по сложности модели, но и по итерациям обучения. Вот это очень интересно. Давайте сначала посмотрим на левый график. Тут у нас отложены по оси игрек итерации обучения, эпохи, по оси икс – сложность модели. Цветом показана тестовая ошибка. Чем сильнее, тем меньше тестовая ошибка. Смотрите, как интересно. Понятно, то есть то, что у нас снижение в этой области происходит, это понятно, то есть нейросеть здесь чем больше, чем дольше мы обучаем, тем меньше должна быть тестовая ошибка, но тут у нас дополнительный «хребет» возникает, который как раз соответствует двойному спуску. Если мы на этот хребет посмотрим по одной из размерностей, например, зафиксировали число итераций обучения, и смотрим, как ведет себя тестовая ошибка на моделях разной сложности. Мы видим, она сначала падает, потом подскакивает, и потом снова снижается. Эффект двойного спуска по моделям.

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

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

    А вот двойной спуск по эпохам, по-видимому, это некое объективное явление. Здесь оно опять же схематично показано. Давайте рассмотрим три разных модели: простую, среднюю и сложную.

    (00:49:58)

    Учим одинаковое количество итераций обучения, и смотрим, какая у нас тестовая ошибка. Простая модель не в состоянии выучить обучающую выборку, поэтому никаких она двойных спусков не испытывает, она слишком простая, слишком маленькая, то есть это где-то этой линии соответствует.

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

    Наконец, модель большая. Вот мы ее по итерациям смотрим, и тут видим, вот тут ярко выраженный уже действительно двойной спуск наблюдается.

    Это интересное наблюдение. Вопрос: откуда же все-таки этот двойной спуск берется? Вот здесь можно выдвинуть такую гипотезу, опять же, это гипотеза, она не доказана, но есть некоторые косвенные эксперименты, которые подтверждают, о которых я сейчас дальше поговорю, которая заключается в следующем. Процесс обучения выглядят таким образом, что у нас если достаточно богатая нейросеть, перепараметризованная, она пытается выучить обучающую выборку, но делает это, если угодно, в две фазы. На первой фазе любой ценой пытается запомнить обучающую выборку, а мы знаем, помните, с чего я начал свое выступление, что один из эффектов – то, что нейросети способны переобучаться даже на данные со случайной разметкой, то есть у нейросети возможность есть запомнить обучающую выборку, даже если никаких закономерностей нет. Кажется, что нейросеть вначале выборку запоминает обучающую, а потом на второй фазе что-то типа консолидации памяти, как биологи любят говорить, то есть пытается выученные закономерности максимально упростить. Тогда на первом этапе мы скатываемся в минимум, который сравнительно узкий. Да, я забыл сказать, что примерно где достигается пик тестовой ошибки, примерно здесь же мы достигаем нулевой ошибки на обучении. Нулевая ошибка на обучении означает, что мы достигли глобального минимума, по-видимому, этот минимум достаточно узкий, но если мы дальше продолжаем обучение, то в силу того, что у нас все глобальные минимумы связаны, как мы уже знаем, то, по-видимому, происходит что-то типа дрейфа и перетекания… дрейфа из узкого минимума в более широкий, то есть мы дрейфуем в многообразие нулевой ошибки на обучении, нулевого значения функции потерь. Но хотя там у нас градиент нулевой, но у нас же стохастическая оптимизация, у нас всегда есть стохастический градиент, всегда есть стохастические шаги. Поэтому мы даже в многообразии, где честный градиент равен 0, имеем возможность куда-то дрейфовать. По-видимому, мы потихонечку дрейфуем в сторону более широкого минимума.

    Так, секундочку, скажите вы мне, как же так, я вам ___ (00:53:06) говорил о том, что методы стохастической оптимизации в узкие минимумы скатываться не могут, а теперь сказал, что, наверное, мы сначала скатываемся в узкий минимум, а потом дрейфуем в широкий. Нет ли здесь противоречия? Оказывается, что нет противоречия, если вспомнить, что все современные, практически все современные нейросети обучаются с использованием батч-нормализации.

    Батч-нормализация – это довольно интересная штука, одновременно наше благословление и проклятие. Когда я несколько лет делал доклад в DeepMind, я специально спросил: «Коллеги, все используют батч-нормализацию?» «Да, да, да, все используют». «Поднимите руки, кто считает, что это уродливая процедура». Весь зал поднял руки. Процедура действительно очень специфическая, которая нуждается вообще-то в отдельной лекции, где нужно разбирать по косточкам. Скорее всего, она сочетает в себе несколько разных компонент, которые в совокупности приводят к такому эффект, что с помощью батч-нормализации удается существенно улучшить и стабилизировать процедуру обучения.

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

    Во-вторых, показано, есть работы, где показано, что благодаря батч-нормалихзации у нас улучшается свойство рельефа функции потерь, он становится более гладеньким, не так сильно флуктуирует.

    Наконец, в-третьих, то свойство, которое нас сейчас будет интересовать, и которое мы пытаемся по косточкам разложить, масштабная инвариантность модели. Если у нас после каждого слоя нейросети стоит блок батч-нормализации, то у нас выполнено вот такое свойство.

    (00:54:55)

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

    К чему же оно приводит? Во-первых, сразу сделаю оговорку, что, конечно, в нормальных нейросетях просто в части слоев (00:55:24) батч-нормализации нет, но эксперименты показывают, что ведут они себя очень похожим образом. Поэтому для простоты, чтобы проще было воспринимать материал, будем сейчас считать, что у нас для всех весов всех слоев нашей нейросети верно такое свойство масштабной инвариантности.

    Это означает, что мы можем в любой точке в нашем пространстве весов взаимно однозначно поставить точку до единичной гиперсферы, (00:55:47) которая будет реализовывать ту же самую нейросеть.

    Если мы тут рассмотрим это же схематичное пространство весов, я тут двухмерное нарисовал, то вдоль каждого луча у нас реализуется какая-то одна и та же функция. Здесь, какая-то другая функция здесь, то есть вот она, масштабная инвариантность к чему приводит.

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

    Тогда гипотеза заключается в чем? Мы стартуем из какого-то начального приближения, дальше начинаем обучаться, и сначала мы скатываемся в минимум широкий, но который на самом-то деле узкий, он широкий только из-за того, что у нас норма весов подскочила, а потом мы потихонечку, если у нас есть ___, (00:56:51) обычно он есть, L2-регуляризация, то мы потихонечку начинаем уже дрейфовать в минимум, который широкий на единичной гиперсфере.

    Если так, то кажется, что разумно нам ввести некоторые дополнительные понятия, которые бы учитывали масштабную инвариантность нейросетей, а именно, давайте в качестве кривизны нашего локального минимума мы будем использовать уже не весь спектр матрицы Фишера, чтобы целиком считать, это все-таки по квадратурам ___, (00:57:22) это вычислительно довольно трудозатратное дело, а вот trace, то есть след матрицы Фишера можно оценить очень быстро и очень легко. Это почти мгновенно можно сделать, да, стохастически, но с невысокой дисперсией. Мы это проверяли. Поэтому давайте будем оценивать след матрицы Фишера.

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

    Повторяю, если у нас масштабная инвариантность, то оптимизацией во всем нашем пространстве весов можно взаимно однозначно поставить процесс оптимизации нейросети на единичной гиперсфере. Тогда мы можем для любой ширины минимума поставить соответствие, ту ширину, которая была бы эквивалентна минимуму на единичной гиперсфере. Аналогично давайте с величиной шага поступим. Мы гуляем как-то по всему пространству весов, но по мере того, как у нас увеличивается норма весов, у нас эффективная величина шага падает. Что такое эффективная величина шага? Это то, какой была бы величина шага, если бы мы жили только на единичной гиперсфере.

    Оказывается, что благодаря свойству батч-нормализации у нас, даже если мы запускаем нашу нейросеть с постоянной величиной шага, с постоянной η, это эффективно (00:58:55) может меняться на несколько порядков. Почему такое вообще происходит? Смотрите, как у нас выглядит поведение теперь весов для масштабной инвариантности нейросети. Вот у нас есть некоторая точка θt, и у нас какие силы действуют на эту точку? Первое, у нас есть регуляризатор ___, который нас тянет к 0, к началу координат.

    Второе, у нас есть собственно градиент зашумленный от данных. Обратите внимание, что если у нас сетка масштаба инвариантная, то есть у нас вдоль всего этого луча одна и та же функция реализуется, это означает, что градиент вдоль луча будет нулевой, то есть градиент всегда ортогонален лучу, который соединяет нашу текущую точку с началом координат. Но это означает, что если бы не было ___, (00:59:51) не было бы регуляризатора, у нас норма весов бы только увеличивалась.

    (00:59:55)

    Мы каждый раз идем ортогонально, значит, у нас норма весов увеличивается. Из-за того, что у нас дополнительно есть регуляризатор, мы идем куда-то по зеленой стрелке, и вот тут, внимание, в зависимости от значения градиента от данных, у нас норма весов может как увеличиваться, так и уменьшаться. Если градиент от данных большой, он превалирует, тогда у нас зеленая стрелка смещается куда-то, где норма будет больше, чем в точке θt. Если градиент маленький, у нас превалирует ___, (01:00:22) зеленая стрелка указывает куда-то сюда, и норма весов падает.

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

    Смотрите, как интересно происходит, какие мы наблюдения тут можем сделать. Первое, с какой бы исходной величиной шага мы бы нашу батч-нормализованную нейросеть ни запускали, они все сходятся примерно к одному и тому же диапазону эффективных величин шагов. Это означает, что батч-нормализация нам обеспечивает устойчивость к выбору гиперпараметра, к выбору собственно величины шага. Если выбрали слишком маленький, она автоматически эффективную величину шага увеличит. Выбрали слишком большой – она автоматически величину шага уменьшит. Это одно из преимуществ как раз батч-нормализации, известно, что благодаря ей у нас не так важен конкретный выбор каких-то параметров, (01:01:36) какие бы ни выбрали, вы все равно примерно одинаково будем работать. Вот у нас та самая стабилизация процедуры обучения.

    Но обратите внимание еще на следующий эффект, очень интересный. У нас фиолетовая линия соответствует очень маленьким величине, то есть мы просто еще как бы не разогнались, но все остальные линии у нас описывают такое пилообразное поведение. Что это такое? Что происходит с нейросетью, почему такие пилы-то возникают? Давайте посмотрим, как ведет себя тестовая ошибка.

    Дальше для простоты возьмем красную только нейросеть. В принципе, на остальных поведение похожее. Берем красную нейронную сеть, смотрим на тестовую ошибку, и вот у нее такое интересное поведение: сначала она снижается, потом она как-то подскакивает, потом снова снижается, снова подскакивает. В общем, такие вот смены снижений и подскоков тестовой ошибки. Обратите внимание, что после каждого подскока тестовая ошибка снижается, и первые несколько подскоков она уменьшается, потом она дальше стабилизируется где-то. Это очень интересное и необычное поведение.

    Я на всякий случай скажу, что здесь что происходило, для того чтобы этот эффект пронаблюдать ,нужно нейросеть использовать, во-первых, без дата-аугментации, если дата-аугментацию использовать, там эти эффекты наблюдаются но не так ярко выражены, и с постоянной величиной шага. Эффективная величина шага меняется, исходная величина шага постоянна. Здесь мы использовали обычный стохастический градиентный спуск, опять же, чтобы устранить эффекты, связанные с Momentum и с Adam.

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

    Итак, вот отсюда мы стартуем. Первое, у нас подскакивает эффективный след матрицы Фишера, и именно в этот момент мы наблюдаем на нашей тестовой ошибке двойной спуск. В момент, когда у нас максимальный след матрицы Фишера, эффективный след матрицы Фишера, у нас тестовая ошибка подскакивает, а обучающая ошибка здесь примерно еще не нулевая, то есть в этот момент нейросеть обучается на самые сложные объекты обучающей выборки. Она 99% уже выбила, остался 1%, и нейросеть пытается выучить этот 1%, и, по-видимому, она выучивает его путем просто запоминания, поэтому подскакивает тестовая ошибка и подскакивает кривизна. В этот момент нейросеть предельно неустойчива относительно собственных предсказаний.

    Но затем кривизна начинает уменьшаться, то есть сеть становится все более и более устойчивой, и потихонечку начинает увеличиваться эффективная величина шага. Это происходит из-за того, что у нас норма весов начинает падать. Мы сейчас находимся каком-то глобальном минимуме вот здесь, и постепенно увеличивается величина шага

    (01:04:59)

    Но что означает, что величина шага увеличивается? Значит, увеличивается дисперсия наших шагов. А мы знаем, что чем больше дисперсия, тем меньше деталей мы видим, и в какой-то момент тот минимум, в котором мы оказались, мы в нем становимся неустойчивы, то есть дисперсия стала такая большая, что нас из него выбивает. Собственно, вот здесь что происходит. Нас выбивает, и мы возвращаемся назад. Снова здесь подскакивает ошибка обучающая, здесь подскакивают тестовая, обучающая уже снижается, здесь обучающая снижается до 0, начинает падать тестовая ошибка, и опять возникает такая фаза консолидации, когда у нас увеличивается эффективная величина шага, мы бьемся о стенки нашего минимума, и с какого-то момента опять же величина шага становится слишком большой, наше положение в этом минимуме становится неустойчивым, нас снова выбивает. В какие-то моменты у нас минимум становятся нестабильным, нас выбивает. Обратите внимание, что мы делаем несколько витков, и с какого-то момента наше поведение стабилизируется, и дальше мы уже начинаем в этом фазовом пространстве описывать орбиты примерно одни и те же. Это примерно та область, в которой у нас стабилизировалась тестовая ошибка. Здесь на первых витках у нас тестовая ошибка, видите, от витка к витку уменьшалась, в конце она стабилизировалась, она уже практически не меняется.

    Вот такое интересное поведение, и мы его опять же наблюдаем на различных нейросетевых архитектурах, кажется, что оно достаточно общее. Это означает, что с какого бы начального приближения мы бы ни стартовали, мы рано или поздно сойдемся к стабильным орбитам. Хороший выбор гиперпараметров – это ситуация, когда мы сразу оказались на стабильной орбите. Если мы гиперпараметры выбрали, скажем, точку инициализации неудачно, то нам предстоит выполнить несколько этих витков, и потом мы опять же на эту орбиту выйдем.

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

    У меня на этом закончилась вторая часть, поэтому тут можно задать вопросы. Если будет желание, то мы можем дальше еще минут 15-20 поговорить, либо на этом закончить.

    Николай Михайловский: Вопросов у нас действительно опять много. Давайте опять начнем с чата, что ли, а потом… Не бойтесь, мы вернемся к вопросам, которые заданы в Q&A.

    Юрий Кузнецов говорит: «Не очень понятен тезис, что левее точки двойного переобучения модели недопараметризованные. Тогда как ошибка на обучение оказывается равной 9?»

    Дмитрий Ветров: Сейчас, погодите, она… Сейчас вернемся. Тут, видимо, речь идет про эту картинку. Если мы слева от двойного спуска, у нас здесь ошибка на обучении не нулевая, видите, она 0 достигает примерно в точке, в которой у нас как раз пик тестовой ошибки. Именно поэтому модели, которые левее, и называются недопараметризованными, то есть их степеней свободы… У них, может быть, параметров и больше, чем объем обучающей выборки, но степеней свободы недостаточно для того чтобы безошибочно научиться классифицировать обучающие выборки.

    Николай Михайловский: Александр Переверзева замечает: «Интересно, что у второго спуска начинаются сильные колебания».

    Роман Казьмин спрашивает: «Исходя из вышесказанного, можно ли резюмировать общую рекомендацию к процедуре обучения по выбору шага обучения и величины батча? Или такого общего правила в принципе не может быть?»

    Дмитрий Ветров: Хороший вопрос задаете. Я бы так сказал, открытый вопрос, мне самому интересно. Мы работаем над этим. Отдельные у нас результаты есть, но пока сказать о том, что есть какие-то общие рекомендации, мы не можем.

    (01:10:01)

    Николай Михайловский: Станислав Капулкин спрашивает: «А правда ли будет для каждой точки минимума исследовать ее окрестность, чтобы понять, является ли минимум «миной» или нет?»

    Дмитрий Ветров: Для того чтобы понять является ли минимум «миной» или нет, достаточно посмотреть, как нейроисеть с весами, соответствующими этому минимуму, работает на тесте, на валидационной выборке. Это уже нам позволит ответить на вопрос. Но, в принципе, если мы в каком-то глобальном минимуме находимся мы можем попытаться оценить его кривизну, да, например, теми методами, о которых я рассказывал, через матрицу Фишера либо через кривизну по случайному направлению, там сейчас есть несколько разных вариантов, можно оценить приведенную кривизну, если мы верим в масштабную… если у нас сеть батч-нормализованная. Это оценить можно, и тем самым можно сказать, минимум у нас более узкий или более широкий.

    Вопрос, можно ли сказать просто по абсолютному значению кривизны, что этот минимум узкий, а этот минимум широкий – не знаю. Думаю, что скорее нет, чем да, потому что одно и то же значение кривизны минимума для разных нейросетей может соответствовать разным, то есть в одной нейросети минимум ширины 10 – это узкий, а в другой нейросети минимум ширины 10 – это минимум широкий.

    Николай Михайловский: Данил Удимов задает много вопросов. «Во-первых, а насколько все эти результаты изменения размера Learning Rate, особенностей поведения ошибки распространяются на несетевые методы Machine Learning, например на градиентный бустинг над деревьями?»

    Дмитрий Ветров: Хороший вопрос. Не проверяли, не знаю. Но не уверен, что распространяется, потому что… Кажется, что это может распространяться в ситуации, когда мы имеем дело, во-первых, с сильно перепараметризованными моделями, и во-вторых, с сильно многомодальными моделями, то есть в которых большое количество разных глобальных, может быть, не очень глобальных минимумов. Поэтому на классические модели, я не уверен, что это будет переноситься.

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

    Дмитрий Ветров: Да, интересно. Условно говоря, вы предлагаете на последнем слое поставить какую-то другую модель, тот же, допустим, градиентный бустинг.

    Николай Михайловский: KNN, чтобы немного думать, KNN или SVM. У вас есть пространство, вы в нем можете классифицировать любым классификатором, в том числе и не нейронным.

    Дмитрий Ветров: Проблема – как мы будем выучивать тогда всю предыдущую часть-то?

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

    (01:14:58)

    Дмитрий Ветров: Вообще, интересно, интересная мысль. Надо будет подумать, какие-то эксперименты поставить.

    Николай Михайловский: Можно подумать, да.

    Дальше вернемся к вопросам Даниила. «А почему мы, кстати, учим модели фиксированное число эпох, а не early_stopping по валидации? Кажется, это примерно той же сложности дизайн обучения».

    Дмитрий Ветров: Да, это той же сложности дизайн обучения, но если мы делаем early_stopping, то мы там эффект двойного спуска не наблюдаем по сложности модели. По итерациям обучения – тут бессмысленно говорить, потому что по итерациям обучения мы предполагаем, что никакого early_stopping нет, потому что мы обучаемся до конца. Есть соответствующие статьи, где показано, early_stopping, да, предотвращает эффект двойного спуска. Но, коллеги, тут важно-то что? Понятно, что можно его предотвратить, вопрос – что его вызывает. Тут интерес, скорее, научный, а не практический.

    Николай Михайловский: Да. Еще один вопрос от Даниила: «Насколько, кстати, наблюдаемые эффекты повторяются в разных типах сетей? Глубина свертки, рекуррентность, многоголовость, многохвостость».

    Дмитрий Ветров: Если мы говорим про эти орбиты в фазовом пространстве, то мы пока тестировали только на сверточных нейросетях и на ResNet. ResNet – это тоже частный случай сверточной сети. На остальных не тестировали, потому что тут важно понимать, что, коллеги, много очень уходит времени, в том числе вычислительного, на постановку таких экспериментов. Тут все сразу объять не удается, я вам рассказываю в каком-то смысле vacuum progress. (01:16:46)

    Николай Михайловский: Алексей Гольдин спрашивает. Леша, доброе утро или доброй ночи тебе, кстати. «Вы упоминали, что регрессия сильно отличается от классификации. Но не знаете ли вы, существует ли эффект Double Descent для регрессии, или нет?»

    Дмитрий Ветров: Мне не встречались работы, которые бы про него говорили, но, исходя из здравого смысла, я предположу, что там он тоже есть, потому что мы его наблюдаем даже в линейной регрессии в определенных постановках. Кажется, что в нейросетях в этом смысле ничто не мешает его пронаблюдать там тоже.

    Николай Михайловский: Павел ___ (01:17:31) спрашивает: «Запись будет ли в Telegram-чатике?» Будет.

    Павел Богомолов спрашивает: «Получается, что нужно делать ___, (01:17:41) брать огромные модели и ставить их учиться как можно дольше, не обращая внимания, когда валидационный лосс пошел вверх».

    Дмитрий Ветров: В зависимости от того, как он пошел вверх. Смотрите, здесь у нас конкретная установка, мы даже понимаем, с чем это связано, что мы свалились в минимум, потом, когда мы в минимуме, у нас градиент от данных почти отсутствует, то есть у нас синяя стрелочка ___, (01:18:13) нас начинает тянуть к началу координат. Если нас тянет к началу координат, у нас такое сужающееся ущелье. Мы в минимуме находимся, но у нас такое ущелье, которое смотрит на начало координат. Чем ближе мы к началу координат, тем у́же у нас это ущелье становится. Либо в эквиалентных терминах можно сказать, что у нас растет эффективная величина шага, можно сказать, что мы живем на единичной гиперсфере, но у нас начинает увеличиваться величина шага, и с какой-то нас просто выбрасывает, она становится такая большая, что нас выкидывает из этого минимума. Но тут что хорошо, что когда нас выкидывает, мы это видим, у нас подскакивает и тестовая ошибка, и обучающаяся ошибка тоже подскакивает, просто немножко в разные моменты времени.

    Соответственно, дальше что мы видим? Что если нас выкинуло из некоего глобального минимума, то мы дальше сойдемся к другому глобальному минимуму, который будет не хуже, чем предыдущий, а на первых витках даже лучше. Вот такие витки, они способствуют тому, что мы через некоторое время начинаем сходиться уже в минимумы с большей эффективной шириной, и выше мы уже не прыгнем, то есть дальнейшие витки бессмысленно делать. Поэтому кажется, что практическая рекомендация – сделать первые несколько витков, и дальше остановиться. Опять же, важно повторить, что мы это проводим в целях, скорее, разведочно-исследовательских, то есть мы обучаемся сильно больше эпох, чем обычно это делают на практике. Обычно на практике никто не дожидается даже первого витка, то есть обычно на практике все останавливаются уже где-то вот здесь, либо делают уменьшение величины шага, которое приводит к тому, что вот уже такого витка не наблюдается.

    (01:19:58)

    Здесь, скорее, опять же, эти призваны понять, что происходит у нас при процедуре обучения, а не дать какой-то практически ценный метод по тому, как нейросеть надо обучать. Во всяком случае, мое видение сейчас такое.

    Николай Михайловский: Петр Иванов спрашивает: «Возможно ли, что это касается только ResNet-архитектуры? Какие вы другие архитектуры пробовали?»

    Дмитрий Ветров: Сверточные сети пробовали без Skip Connection. То же самое наблюдается.

    Николай Михайловский: Роман Самусевич пишет, много пишет: «Дмитрий, спасибо за замечательный доклад». Присоединяюсь. «Мне теперь кажется, что Double Descent и узкий versus широкий минимум стоит за советами, например, от Андрея Карпатова тренировать модели дольше». (Говорит по-английски.)

    Дмитрий Ветров: Я, в принципе, склонен согласиться. Да, практики early_stopping, они хороши с точки зрения вычислительной эффективности, но если нейросеть обучать достаточно долго, то… в батч-нормализованных мы такие витки начинаем наблюдать, и, повторюсь, мы сходимся к лучшему качеству, чем мы были вот здесь. А даже не в батч-нормализованных сетях, даже где этого нет, у нас наблюдается такой эффект двойного спуска, и опять же, если бы мы сделали early_stopping, мы бы остановились вот тут. Может быть, имеет смысл Double Descent преодолеть и пойти дальше, и возможно, эта бордовая кривая опустится ниже, чем была вот здесь. Тут я склонен, скорее, согласиться, тем более что Андрею Карпатову, конечно, виднее, он такой практик, пользующийся признанием и уважением.

    Николай Михайловский: Да, тут есть еще продолжение у этого вопроса. Андрей пишет, что «понять сколько данной сетке на данной задаче необходимо будет тренироваться для наилучшей генерализации – это не интуитивно. Дмитрий, может, у вас есть советы, как понять на практике, что в данной задаче есть надежда выжать чего-то из Double Descent, например, быстрыми экспериментами на подвыборке с меньшей сеткой? Спасибо заранее».

    Дмитрий Ветров: Быстрыми экспериментами на подвыборке с меньшей сеткой… В принципе, да, такие результаты тоже есть. Есть наблюдения, что по поведению нейросети, как на подвыборках, так и по поведению на первых нескольких итерациях, по тому, как быстро обучающая ошибка начала снижаться, можно спрогнозировать, примерно до какого уровня удастся… Сейчас, а может, и не обучающая, тут я боюсь сейчас соврать. В общем, по поведению нейросети на первых нескольких итерациях можно примерно прикинуть, какого качества в итоге удастся достичь, и подобный метод используется, например, для решения задач Neural Architect Research. Мне это, честно говоря, кажется неким шаманством, такими плясками с бубном, но, возможно, я тут неправ, знающие люди говорят, что это может, иногда и помогает. С другой стороны, такие фазовые диаграммы, это тоже в каком-то смысле уже начинается шаманство. Но повторюсь, это не от хорошей жизни, а потому что просто слишком мало инструментов в нашем распоряжении есть.

    Поэтому я бы, скорее, на поставленный вопрос ответил бы, что если бы меня спросили, сколько нужно учить, я бы сказал: «Смотрите на фазовую диаграмму, они строятся элементарно, и вот смотрите момент, когда мы начали крутиться уже на одной и той же орбите. Дальше обучаться бессмысленно».

    Николай Михайловский: Сергей Кастрюлин спрашивает: «График на слайде The Evolution of the Effective Rate напоминает аналогичный при использовании Cyclical Learning Rate без Batch Norm. Как вы думаете, есть ли здесь какая-то связь?»

    Дмитрий Ветров: Да, мне, в принципе, тоже чем-то это напоминает, но не совсем циклический, тут немножко более хитро, но принцип, да, тот же самый. Я бы, опять же, на уровне гипотезы сказал, что мы и эффекта похожего достигаем. Зачем нам Cyclical Learning Rate? Для того чтобы скатиться в точку не очень хорошую, попробовать из нее выбиться, и быть может, скатиться в точку более хорошую.

    (01:25:03)

    Для этого Cyclical Learning Rate и используют. Здесь в каком-то смысле происходит похожий процесс. Нас выбивает из минимума, мы скатываемся в другой, возможно, более хороший, нас снова выбивает, мы снова скатываемся. С какого-то момента нас начинает выбивать и мы начинаем скатываться в минимум примерно одного и того же качества. Как только это произошло, дальше, по-видимому, обучаться бессмысленно. Но опять же, я могу быть неправ, возможно, я в ваших вопросах что-то не понимаю, может быть, если так произойдет сто раз, нас будет выбивать, то на 101-й раз нас может выбить, и мы скатимся в минимум еще более широкий. Но тут, к сожалению, это уже на уровне спекуляций находится. Но я согласен, что да, чем-то Cyclical Learning Rate это напоминает.

    Николай Михайловский: Дмитрий Козлов спрашивает: «Понятно ли, как уменьшить количество и длительность орбит и точек двойного спуска?»

    Дмитрий Ветров: Смотрите, вопрос, с какой целью вам их надо уменьшать. В принципе, понятно, даже на этом графике видно, что если мы взяли исходный Learning Rate очень большой, у нас этих орбит стало меньше, то есть нас реже выбивает. Если наоборот, мы берем очень маленький, нас тут выбивает часто-часто по чуть-чуть, потихонечку магнитуды растут и потом они где-то стабилизируются. На таком уровне примерно понятно, но не очень понятно, надо ли нам уменьшать количество выбиваний, потому что кажется, что именно благодаря этим выбиваниям нам удается скатиться в минимум с более высокой обобщающей способностью.

    Николай Михайловский: «Распространяется ли теория на архитектуры нейросетей без использования Batch Norm?»

    Дмитрий Ветров: По-видимому, распространяется на все архитектуры, в которых есть свойство масштабной инвариантности. Масштабную инвариантность можно обеспечить не только батч-нормализацией, например, ___ (01:27:06) нормализация, инстанс-нормализация, здесь есть несколько разных способов, они все так или иначе обеспечивают масштабную инвариантность. На них, по идее, распространяется. Мы, правда, не пробовали, но вроде здравый смысл и математика диктуют, что должны быть похожие эффекты.

    На те сети, где нету масштабной инвариантности –вряд ли.

    Николай Михайловский: Виктор Вялов спрашивает: «Иисследовались ли сети, основанные на внимании, то бишь трансформеры, например, BERT?»

    Дмитрий Ветров: Ответ: нет, не исследовались. Пока не исследовались.

    Николай Михайловский: Юрий Кузнецов: «Можно ли еще раз подробнее про инвариантность ___ (01:27:47) плотности от линейного преобразования параметров, которая приводит к возможности проецирования на единичную сферу? Для каких моделей это свойство выполняется?»

    Дмитрий Ветров: Для всех моделей, в которых после каждого слоя стоит блок, например, батч-нормализации. Сейчас это довольно типично. Современные модели, в них все-таки не после всех слоев, в частности, после последнего слоя нету батч-нормализации, поэтому про них можно говорить, что на 90% масштабно-инвариантные. Я поэтому сделал галку, что тут мы для простоты рассматриваем ситуацию, когда у нас все масштабно-инвариантные, эксперименты показывают, что результаты переносятся на модели, в которых большинство весов масштабно-инвариантны.

    Сама масштабная инвариантность этой формулой показана, то есть p(y I x, θ), это вероятностный прогноз нашей нейросети на объекте x при… если у него ___ (01:28:45) значение θ. Если мы возьмем и все веса умножить на 0,001 или на 100, то у нас вот эта функция останется абсолютно такой же для любых весов, для любых y. Она называется масштабной инвариантностью. Это свойство, в частности, индуцируется батч-нормализацией, а также некоторыми другими видами нормализаций, и известно, что батч-нормализация, почему ее все проклинают и все используют, потому что она реально упрощает и улучшает процесс обучения. Благодаря ей мы существенно меньше начинаем зависеть от выбора гиперпараметров и в среднем сходимся в более хорошие минимумы, то есть с более высокой обобщающей способностью.

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

    (01:30:04)

    Дмитрий Ветров: Что-то я не распарсил.

    Николай Михайловский: Ест цикл? Цикл есть?

    Дмитрий Ветров: Есть.

    Николай Михайловский: Вот. Спрашивают, из другого места мы могли в этот цикл попасть? Если я правильно паршу.

    Дмитрий Ветров: Скажем так, если мы запустимся, допустим, из другого начального приближения, у нас будут похожие кривые, которые сходятся тоже к такой же орбите, если мы запустим немножко с другими параметрами, допустим с другим процентом ___, (01:30:38) что там еще может быть, либо с другой величиной шага, не эффективной, а обычной, с другой, это же гиперпараметр, то мы опять же окажемся на старте в какой-то другой точке этого фазового пространства, но, сделав несколько витков, отсюда можем делать витки, отсюда, мы все равно сходимся примерно к одним и тем же орбитам. Они немножко различаются при разных значениях гиперпараметров, то есть они не идентичные, но если у нас гиперпараметры одни и те же, и отличаются только точкой инициализации, тогда мы сходимся к одной и той же орбите. Я надеюсь, что я ответил.

    Николай Михайловский: Олег Демиденко: «Прокрутите чат повыше, там Telegram-чатик, есть ссылочка на него».

    Вадим Великотный говорит: «Кстати, blending моделей на разных стадиях обучения часто показывают хорошие результаты. Возможно, это еще одно косвенное свидетельство в пользу связанности минимумов».

    Дмитрий Ветров: А что вы под блендингом моделей понимаете?

    Николай Михайловский: Я бы думал, что Вадим имеет в виду ансамблирование.

    Дмитрий Ветров: Знаете, ассамблирование, оно в принципе помогает, и очень сильно помогает. Я не уверен, насколько имеет смысл ансамблировать сети с разных моментов обучения, кажется, надо просто все их дообучить до конца и потом проассамблировать.

    Он тут уточнил: «Можно просто усреднить веса». Это на самом деле тоже отдельная интересная открытая проблема, это тоже эффект который был не без нашего скромного участия обнаружен, так называемый Stochastic weight averaging, который показывает, что да, можно веса… в определенных дизайнах эксперимента берем веса с промежуточных стадий, их усредняем, и получаем точку, которая каким-то магическим образом работает лучше. Почему это происходит, никто не понимает, но это происходит, вплоть до того, что этот метод уже включают в базовые библиотеки. Это тоже вопрос, который меня очень интересует. Есть отдельные гипотезы, до конца никто не понимает происходящего, во всяком случае, я не видел ни одной статьи, где бы этот эффект как-то вразумительно был бы объяснен, кроме того, что фенотипически это соответствует более широким минимумам, но опять же непонятно, почему. Но это очень специфический дизайн эксперимента, это не абы какие веса берутся. Если угодно, это веса усредняются, которые все в окрестности одного минимума, и поэтому их можно усреднить. Если мы скатились в минимумы разные, и там пытались веса усреднить, разные минимумы, конечно, это тоже условность, точки, далеко друг от друга лежащие, если мы веса будем усреднять, мы черте что получим. Тут все-таки точки лежат недалеко друг от дружки, и поэтому их линейная комбинация или усреднение по прежнему находится примерно… Тут сложно говорить, что в том же минимуме, потому если мы говорим, что минимумы все связаны, то тут одно многообразие. Короче, давайте так скажем далеко не всегда веса можно усреднять. Вот предсказания можно усреднять всегда, обычно ансамблированием. Веса можно усреднять только в специфических постановках, и известно, специально проводились эксперименты, что если от этих постановок отказаться, то усреднение весов приводит к деградации качества.

    Николай Михайловский: Илья Казаков уточняет свой вопрос: «Что гарантирует единственность решения при наблюдении цикла?»

    Дмитрий Ветров: Во-первых, давайте мы уточним. Тут ни о какой единственности решения речи не идет. Каждый раз, когда мы даже на стабильной орбите находимся, мы все равно тут скатываемся в разные глобальные минимумы, мы специально проверяли, мы не в один и тот же скатываемся.

    (01:34:51)

    Они разные, просто они обладают одинаковыми свойствами геометрическими в смысле кривизны и примерно одинаковой обобщающей способностью. Интересно, тот Илья Казаков, о котором я думаю, мой старый знакомый, с которым я уже несколько лет не виделся, или однофамилец?

    Николай Михайловский: Пишет, что тот.

    Дмитрий Ветров: Понятно. Тогда может мне отписать отдельно в Telegram в личку, и мы с ним можем уже более подробно этот вопрос обсудить.

    Николай Михайловский: Так, вроде бы пока все. Что, оставшееся продолжение в следующий раз?

    Дмитрий Ветров: Я думаю, да.

    Николай Михайловский: Спасибо большое, Дмитрий. Несомненно, очень интересно, работа очень интересная и вебинар замечательный, и вот у нас до сих пор 75 человек с нами, это такая полная довольно большая аудитория.

    Дмитрий Ветров: Спасибо. Мне очень приятно было у вас выступить. Как-нибудь можем повторить.

    Николай Михайловский: Да хоть на следующей неделе.

    Дмитрий Ветров: Нет, давайте не частить, не так часто, мне все-таки тоже приходится очень сильно заранее планировать. Но там, скажем, через месячишко-другой можем попробовать, мне еще есть, что рассказать.

    Николай Михайловский: Давайте, давайте. Все, спасибо.

    Дмитрий Ветров: Вам спасибо. Всего доброго.

    Николай Михайловский: До свидания.

    (01:36:36) (Конец записи)