Спикер о работе: Во второй части доклада мы поговорим о том, что может являться причиной разрыва между предсказаниями теории и эмпирически наблюдаемыми результатами. Затем мы обсудим различные подходы к ансамблированию нейронных сетей и сравним их с точки зрения качества оценки неопределенности собственного прогноза. В заключении мы обсудим интересные закономерности, возникающие в попытке ответить на вопрос что лучше — обучить одну большую или много маленьких нейросетей.
Первая часть: Научно-технический вебинар “Необычные свойства функции потерь в глубинном обучении”
Видео: https://youtu.be/7bvvLzm-Tb0
Презентация (с 31 слайда): https://drive.google.com/file/d/1A3MJaPKP0gEAjm1E11LSvua3zdJAFv7W/view?usp=sharing
Статья, которая дополнительно обсуждалась на вебинаре: https://arxiv.org/pdf/2010.08127.pdf
(00:00:00) (Начало записи.)
Дмитрий Ветров: Добрый день, уважаемые коллеги! Сегодня мы попробуем добить ту презентацию, которую я подготовил к прошлому разу. Надеюсь, вторую половинку мы успеем за сегодня пройти. Может, тут будет тема немножко попроще.
О чем мы поговорим? Сначала я чуть-чуть поделюсь одной гипотезой, которая, возможно, как раз в состоянии объяснить тот разрыв между теорией и практикой, который мы наблюдаем в глубинном обучении. Я об этом в прошлый раз говорил. Кратко напомню. Проблема в том, что статистическая теория обучения и ее различные модификации предсказывают, что чем более гибкая у нас модель машинного обучения, тем хуже будет обобщающая способность, то есть она будет страдать от переобучения. В то же время на практике мы наблюдаем прямо противоположное, что чем глубже и шире наши нейронные сети, тем лучше у них обобщающая способность. При этом, как уже было показано в первой части моего выступления, современные нейросети также могут страдать и от переобучения, в том числе от катастрофического переобучения. Но проблема в том, что для этого их нужно специальным образом обучать. То есть если прицельно не искать плохие точки, то стандартные алгоритмы обучения глубинных нейросетей такие точки пространства весов никогда не находят. Вот вопрос: с чем это может быть связано?
А дальше мы поговорим об ассамблировании нейронных сетей, поговорим о том, какая техника ансамблирования лучше всего подходит для оценки неопределенности. Я поделюсь некоторым нашим прошлогодним результатом. И в заключение поговорим о степенных законах, которые удается обнаружить в глубинных ансамблях, да и в принципе в отдельных глубинных нейросетях, и какие интересные практические выводы оттуда следуют.
Начнем мы с разрыва между теорией и практикой. Я его уже анонсировал. Вопрос: с чем же он может быть связан? И, по-видимому, это каким-то образом связано не со свойствами самих нейронных сетей, а со свойствами тех алгоритмов обучения, которые мы используем, потому что, как я уже сказал, при желании, если специально прицельно искать плохие точки в пространстве весов, то есть такие значения весов, на которых у нас всё очень хорошо на обучении и сколь угодно плохо на валидации, то мы такие точки, такие веса, в принципе, можем найти в современных глубинных нейросетях. Тем самым, по-видимому, проблема не с моделью как таковой, а с методом обучения.
И тут мы вспоминаем, что все современные обучаются с помощью алгоритмов стохастической оптимизации. И оказывается, что для алгоритмов стохастической оптимизации можно пробросить такую интересную аналогию с динамикой Ланжевена. Наверняка те люди, которые специализируются по статистической физике, знают, что это такое. Для остальных я кратко напомню. Динамика Ланжевена или семплирование Ланжевена – это один из популярных методов для того, чтобы генерировать выборку из сложного многомерного распределения. То есть вообще, я думаю, многие из вас понимают, что если у нас задана плотность в очень многомерном пространстве, и задача сгенерировать выборку из этой плотности – задача очень нетривиальная. То есть эффективно может быть решена только в очень ограниченном числе частных случаев.
Что же делать в общем случае? Тут существует несколько подходов. Все они базируются, так или иначе, на методах Монте-Карло с марковскими цепями. Один из них сравнительно эффективный как по вычислениям, так и по времени прогрева марковской цепи – это динамика Ланжевена, которая заключается в численном решении такого стохастического дифференцированного уравнения.
Что мы делаем? Предположим, что у нас задана плотность. Быть может, плотность задана с точностью до нормировочной константы. Это как раз неважно, потому что дальше мы используем производную логарифма плотности, и поэтому, если плотность не нормирована, то после логарифмирования нормировка появляется как аддитивная константа, которая после дифференцирования уходит. Поэтому плотность может быть даже не нормирована, что очень хорошо, потому что во многих прикладных ситуациях мы можем только с точностью до нормировочной константы эту плотность посчитать.
Итак, берем логарифм плотности, берем производную логарифма плотности по аргументу (по иксу), и это наш шаг эволюции нашей динамики, то есть dx эволюционирует как бы по градиентному подъему логарифму плотности, но мы дополнительно добавляем броуновский шум. Если мы это дискретизируем, то будет просто нормальное распределение. То есть можно считать, что гауссовский шум мы добавляем. То есть мы идем в направлении градиента нашей плотности, то есть мы пытаемся нащупать области высоких значений плотности, но при этом эта добавка шумовая не позволяет нам схлопнуться в точку максимума нашей плотности. И такой процесс, можно показать, что если мы такое стохастическое дифференцированное уравнение будем решать, то те иксы, которые мы получаем, если мы с траектории их насемплируем, то они будут распределены согласно распределению p(x). Это некий ликбез.
Теперь вопрос. А что же мы делаем, когда мы обучаем нейронную сеть? По сути, мы делаем что-то очень-очень похожее. Всякий раз, когда мы используем стохастический градиентный подъем, или стохастический градиентный спуск в терминах функции потерь, что мы делаем? Мы наши веса изменяем каким образом? Мы делаем шаг в направлении градиента логарифма правдоподобия обучающей выборки. Обычно минус логарифм – это как раз наша функция потерь. Если мы говорим не о минимизации функции потерь, а о максимизации алгоритма правдоподобия, то мы шагаем по градиенту правдоподобия, и добавляем некоторый шум. Шум берется откуда? Потому что мы, на самом деле, на каждую итерацию считаем нечестно градиент логарифма правдоподобия, а считаем стохастический градиент логарифма правдоподобия, то есть некую несмещенную оценку. Соответственно, в первом приближении можно считать, что наши стохастические градиенты, они не смещенные, то есть матожидания, они дают честный градиент алгоритма правдоподобия, плюс шум, который в первом приближении можно считать нормальным, с некоторой матрицей ковариационной. И скалярные множества, которые зависят от величины шага. То есть это та динамика, которую мы описываем при использовании стохастического градиентного подъема для обучения нейронных сетей. Таким образом видно, что, в общем-то, эта динамика очень-очень похожа на динамику Ланжевена, она ей и является, и по сути можно сказать, что в процессе обучения нейронной сети – та точка, в которой мы сошлись, – это точка не модов (00:06:44) логарифма правдоподобия обучающей выборки, а вообще-то это просто sample из некоторого распределения, который индуцируется правдоподобием обучающей выборки. Когда я говорю «индуцируется», что имеется в виду? Распределение неявное, то есть мы в явном виде его записать не можем, потому что мы не знаем этих характеристик шума нашего стохастического градиента. Но что можем сказать? Чем больше у нас правдоподобие обучающей выборки, тем больше будет то неявное распределение, из которого мы фактически семплируем при обучении нейросетей с помощью стохастического градиентного подъема. И это очень интересно. То есть тем самым мы вообще-то как бы пытались решать задачу максимума правдоподобия, а на самом деле закончили тем, что мы не точку глобального максимума правдоподобия нашли, а нашли характерный sample из распределения, индуцированного этим правдоподобием.
И тут оказывается, что максимум плотности распределения и наиболее какая-то репрезентативная точка из плотности распределения – это далеко не всегда одно и то же.
И здесь мы сделаем лирическое отступление и вспомним такую хорошо известную в статистической механике, в статфизике модель, как модель Изинга. Что это такое? Это модель, которая описывает совместное поведение большого количества бинарных переменных, каждая из которых принимает значение +1, –1. На этих бинарных переменных задан граф, обычно граф соседства. Если мы рассматриваем, скажем, двумерную модель лизинга, то можно представлять, что у нас есть такая решетка, и в узлах ее находятся бинарные переменные, каждая из которых принимает значение либо +1, либо –1. И на множестве этих переменных определена так называемая энергия. В простейшем виде она записывается вот так. То есть мы суммируем по всем соседним парам точек вот такие произведения xi на xj, и всё это еще с минусом берем.
Что это означает? Если у нас соседи одни и те же значения приняли, то есть оба плюс единички либо оба минус единички, то у нас слагаемое будет положительное, но с этим минусом значит итоговый вклад будет отрицательный.
Чем больше у нас соседей, у которых одинаковые значения переменных, тем ниже у нас будет энергия. Энергия вот так задана. В принципе, там есть какие-то аналогии с физикой, не будем сейчас в них вдаваться. Для нас важно, что эта энергия индуцирует закон распределения, который выглядит вот так с точностью до нормировочной константы это просто экспонента от минус энергии разделить на скалярный коэффициент, который имеет физический смысл – температуру.
Что это означает? У нас наши переменные могут принимать возможные конфигурации, их всего 2n, где n – количество переменных. Но при этом та или иная конфигурация принимаете с различной вероятностью. И вероятность той или иной конфигурации тем выше, чем ниже значение энергии. Иными словами, такая модель поощряет, чтобы у нас соседние переменные принимали одинаковые значения. Это так называемая модель ферромагнетика – частный случай модели Изинга. И в зависимости от величины температуры у нас это поощрение будет сильнее либо слабее. Легко видеть, что если мы температуру загоним в ноль, тогда у нас это распределение коллапсирует в смесь из двух дельта-функций, что либо у нас все переменные приняли значение +1, либо все переменные приняли значения –1. Схематически на этой картинке изобразил: +1 – это белые квадратики, –1 – черные квадратики. То есть при разных значениях температуры у нас распределение будет разное, хотя энергия определена однозначно, она от температуры не зависит, но распределение вероятности температурой определяется.
И давайте посмотрим, что же будет происходить, если мы начнем семплировать из этого распределения различные конфигурации иксов при разных температурах. Как у нас себя будут вести самблы? И тут нас ждет интересный сюрприз. Оказывается, что поведение модели сильно зависит от температуры. Если температуры низкие, то есть недалеко ушли от нуля, то когда мы начинаем сэмплировать, различные конфигурации из такого распределения p(X), мы получаем, что у нас почти всегда все переменные либо +1, либо все переменные –1. То есть наши типичные семплы из распределения совпадают с модулями этого распределения. У нас модуля как раз две, когда все +1, все –1, и типичные семплы такие же.
(00:11:20)
Теперь мы начинаем температуру увеличивать. Если мы температуру возьмем очень большую, то, о чудо, у нас характерные семплы из распределения будут такие пестренькие, то есть примерно 50% +1, 50% –1. У нас по-прежнему наиболее вероятная конфигурация – это когда все +1, либо все –1. Но типичные семплы из распределения ведут себя абсолютно иначе. И мы можем хоть тут обсемплироваться, вероятность того, что мы получим тут всю черную картинку либо всю белую картинку, ничтожно мала.
И оказывается, что на этой температурной шкале есть некоторая так называемая критическая температура, в которой поведение модели Изинга скачкообразно меняется. То есть если температура ниже критической, у нас все семплы выглядят как одноцветные: либо всё черное, либо всё белое. Если температура выше критической, у нас все семплы выглядят 50% черное, 50% белое. И при критической температуре у нас семплы выглядят таким специфическим образом. То есть у нас есть большие области черных и белых, то есть большие области, где соседние переменные принимают значение +1, либо соседние переменные принимают значение –1. Это довольно любопытные флуктуации наблюдаются. И в этот момент модель лизинга ведет себя довольно… ее поведение довольно сильно отличается от поведения при низких и при высоких температурах. Это известно как фазовый переход второго рода, и статистические механики любят такие вещи активно изучать. Я в принципе даже рекомендую желающим на досуге проверить, убедиться, что действительно такой момент есть. Это на самом деле очень интересное явление. Но для нас важно, что, оказывается, в сложных моделях, когда у нас много переменных, которые взаимозависимы, часто бывают ситуации, когда типичные семплы и наиболее вероятные семплы кардинальным образом друг от друга различаются. Тут в частности видим график так называемой монетизации. То есть я здесь отметил долю, точнее преобладания плюс единичек над минус единичками, либо минус единичек над плюс единичками, и оно выглядит вот так. При температуре ниже критической у нас почти всегда либо всё +1, либо всё –1, а потом, хоп, всё схлопывается очень быстро до нуля, и дальше у нас уже 50 на 50%: 50% +1, 50% –1. Это и называется фазовый переход, то есть модель скачкообразно меняет свое поведение.
Давайте посмотрим, что же у нас происходит в нейросетях. Повторюсь, это гипотеза, но она выглядит довольно правдоподобно. Пусть у нас это правдоподобие обучающей выборки. Вот у нас есть глобальный максимум – наиболее вероятная точка, – максимум узенький, и вот есть моды (00:13:53) еще более широкие, ну, может чуть-чуть до глобального максимума не добивают.
Формально говоря, статистическая теория обучения, как она построена была исторически, она анализирует обобщающую способность наилучшего алгоритма из заданной модели. То есть мы зафиксировали модель, скажем, нейронную сеть, мы нашли в ней глобальный максимум правдоподобия либо глобальный минимум ошибки, и анализируем, какой обобщающей способностью будет соответствующий найденный алгоритм обладать. И статистическая теория обучения предсказывает, что если у нас модель очень-очень богато параметризована, то у нас обобщающая способность будет падать. Но, повторяю, статистическая теория обучения анализирует поведение наиболее вероятной точки. В то же время мы при обучении нейронных сетей вообще-то не находим глобальную моду правдоподобия или некоего неявного распределения индуцированного правдоподобия, а мы семплируем из этого распределения. И если мы будем даже из такого синенького распределения семплировать – представим себе, что это не одномерное пространство, а всё это в миллионмерном пространстве, то есть там этот эффект сильно усиливается, – то у нас все семплы будут лежать в этой области. А сюда семплы практически попадать не будут. Аналогично тому, как в модели Изинга: типичные семплы, наиболее вероятные семплы радикально различаются после фазового перехода. По-видимому, в нейросетях происходит что-то похожее, и поэтому нам необходима другая теория обобщающей способности, которая будет анализировать поведение не наиболее вероятной точки, а типичной точки из распределения, которое индуцировано правдоподобием обучающей выборки.
И моя гипотеза, что такая теория будет в ближайшие годы построена. В принципе, уже разговоры идут о том, что нужно в эту область сдвигаться. Есть такая отрасль как статистическая механика, которая как раз в точности изучает это, то есть сложные вероятностные модели, и изучает в них не наиболее вероятные конфигурации, как они себя ведут, какими свойствами обладают. По-видимому, на основе статистической механики такая теория будет построена, и я полагаю, что в рамках нее удастся показать, что если мы начнем увеличивать нейросеть как по ширине, так по глубине, то у нас обобщающая способность как раз улучшается, а не ухудшается, как нам гласит статистическая теория обучения.
(00:16:09)
И понятно, что для этого нам необходимо будет каким-то образом описать свойства того распределения, из которого мы семплируем при обучении стохастической оптимизации наших нейронных сетей. И ясно, что распределение будет зависеть от величины шага, от размера мини-батча, от конфигурации самой нейронной сети. Я надеюсь, что в ближайшие годы мы что-то в этом направлении интересное получим.
Теперь мы переходим к задаче оценки неопределённости. Известно, что у современных нейросетей есть ряд открытых проблем, одна из которых – излишняя самоуверенность. То есть мы знаем, что современные нейросети дают очень контрастные предсказания. То есть они плохо оценивают степень собственной неуверенности в прогнозе. Когда мы кошечек, собачек различаем – это не очень страшно. Но когда мы, допустим, управляем автопилотируемым автомобилем, то, конечно, нам бы хотелось понимать, в каких случаях нейронная сеть уверена в собственном предсказании, в каких случаях она менее уверена.
Какие тут возможны подходы к улучшению оценки неопределенности? Если взять отдельно взять обученную нейросеть, она очень самоуверенна, то есть собственную неопределенность она оценивает очень плохо.
Николай Михайловский: Дмитрий, извиняюсь, что перебиваю. Может быть, нам по концу предыдущей части на вопросы попробовать поотвечать? У нас уже есть вопрос от Романа Козьмина: «Никак не могу понять, что такое наиболее вероятная конфигурация и типичная конфигурация».
Дмитрий Ветров: Наиболее вероятная конфигурация – это конфигурация, на которой у нас максимальное значение плотности – мода нашего распределения.
А типичная конфигурация – это семпл из этого распределения, то есть объект, сгенерированный из этого распределения.
Давайте приведу простой пример, может быть, более интуитивный. Если мы возьмем нормальное распределение в очень-очень многомерном пространстве с нулевым матожиданием и с зафиксированной дисперсией, то есть зафиксированной трейсом (00:18:21) компенсационной матрицы, и будем генерировать семплы из этого нормального распределения. У нас все семплы будут лежать на фиксированном расстоянии от нуля, от матожидания. То есть они будут равномерно ложиться в некую гиперсферу, в то время как наиболее вероятный семпл находится в точке моды, она же матожидание. То есть вначале координат у нас все семплы с вероятностью единица при большой размерности будут лежать на гиперсфере фиксированного радиуса, так как это связано с дисперсией этого многомерного распределения. Вот в этом разница. То есть у нас наиболее вероятный семпл обладает одними свойствами, а типичный семпл обладает совершенно другими свойствами.
(00:19:37)
Какие же у нас есть простейшие средства, как можно было бы справиться с оценкой неопределенности? Один из них – а давайте будем использовать ансамбль нейросетей. То есть если каждая отдельно взятая нейросеть самоуверенна, может быть, если их прогнозы усредним, может, мы получим что-то более адекватное. Согласуется со здравым смыслом. В принципе, да, действительно, мы получаем значительно лучше оценки неопределённости. Тогда возникает вопрос: а как же нам такой ансамбль брать? Здесь формула, одна из немногих формул в моей презентации. Прогноз ансамбля нейросетей, если мы подали объект x*, и хотим получить распределение, допустим, на методах классов (00:20:16) (на t*), то что мы делаем? Мы берем различные нейросети нашего ансамбля и усредняем прогнозы. То есть математически это может быть записано так. Это первое множество – это прогноз отдельно взятой нейросети с весами w. И у нас есть какое-то распределение на веса, которое называем ансамбль, и мы по нему проводим усреднение нашего прогноза.
Вопрос: как же нам это распределение q(w) найти, откуда его брать?
И две основные стратегии, которые я условно назвал «байесовская» и «не байесовская»… На самом деле, это не совсем правильно, потому что та, которая «не байесовская», она тоже байесовская, просто более приближенно исторически она появилась из других соображений.
(00:20:58)
Вообще-то самый корректный способ, чтобы можно было сделать – это применить теорему Байеса. То есть внести априорное распределение на веса нашей нейронной сети, дальше поставить сюда функцию правдоподобия обучающей выборки, и, применив теорему Байеса, получить апостериорное распределение на веса нейронной сети. И по этому апостериорному распределению и усреднять прогнозы наших нейронных сетей. Это теоретически самый правильный способ. Проблема в том, что честное апостериорное распределение обычно жутко сложное. То есть у него там экспоненциально много мод, а мы знаем, что моды еще соединены и многообразие образуют. То есть пока человечество не научилось сколько-нибудь хорошо честное апостериорное распределение приближать, хотя некоторые эксперименты на более простых нейросетях, где все-таки удается построить семплер из честного апостериорного распределения, показывают, что действительно усреднение прогнозов по нему приводит к существенному росту качества и к улучшению оценки неопределенности.
Пока практически эффективных средств для семплирования сейчас апостериорного распределения нет. Поэтому что делает человечество? Оно приближает честное апостериорное распределение какими-то более простыми аппроксимациями, например, полностью факторизованного гауссиан. И тогда q(w) – это приближение честного апостериорного с помощью, допустим, полностью факторизованного гауссиана либо _____ (00:22:19). Там есть несколько разных способов. Но всегда это какое-то значительно более простое распределение, и вообще-то честное апостериорное приближает не очень хорошо, зато такие методы эффективны, то есть это реально можно обучать современные нейросети и какую-то аппроксимацию делать.
И второй способ, который условно не байесовский – это так называемый глубинный ансамбль, deep ensemble. Техника простая как пять копеек. Мы просто взяли K начальных приближений, из них запустили метод оптимизации, получили K независимо обученных нейросетей. И потом просто усредняем прогнозы по этим K нейросетям. То есть тогда наше распределение q(w) – это просто смесь из K дельта-функций. То есть мы просто вместо этого интеграла здесь сумму берем, точнее вычисляем среднее арифметическое прогнозов по разным независимым обычным нейросетям.
Подход, с одной стороны, хороший. С другой стороны, вычислительно не очень эффективный, потому что нам нужно в K раз больше времени на этапе обучения, и в K раз больше памяти, чтобы все эти нейросети хранить. И можно показать, что такое q(w) тоже является грубой аппроксимацией честного апостериорного распределения. Поэтому, хотя исторически техника появилась, вообще к Байесу отношения не имела, на самом деле, можно привести тоже некий суррогат на тему байесовского вывода.
Теперь вопрос. Мы знаем, что у нас огромное количество разных мод, да еще эти моды между собой многие связаны. Вопрос: нам стоит проводить усреднение прогнозов по разным модам, понимая прекрасно, что мы всё равно все-все-все моды не покроем за сколько-нибудь разумное время, или, может быть, нам лучше другую стратегию использовать и сконцентрироваться в окрестности какой-то одной моды, и попробовать ее хорошо описать? И по нейросетям в окрестности этой моды, по ним проансамблировать. Почему вторая техника привлекает? Потому что она вычислительно эффективна. То есть это можно легко такие методы ансамблирования построить. Поэтому вопрос: нужны ли нам какие-то другие из оды, то есть значения весов в совершенно других областях пространства весов, или стоит просто окрестность одной моды хорошо описать и по ней усреднить? То есть в надежде, что остальные моды, они реально эквивалентны какой-то одной произвольной выбранной.
Давайте это попробуем проверить. Для этого мы рассмотрели несколько разных метрик, которые позволяют субстанцирование по неопределенности получать. И в процессе анализа поняли, что если мы хотим сравнивать разные техники ансамблирования, и понять, какая же из них работает лучше, то лучше всего использовать валидацию log-likelihood (00:24:58). Единственное, что для этого не даже еще дополнительно провести калибровку температуры, а это не очень сложно. Если наш прогноз является softmax от logit… Что такое калибровка температуры? Мы просто добавляем скалярные коэффициенты, и перед softmax все logit’ы на этот коэффициент делим. А коэффициент можно найти, просто дополнительно максимизируя правдоподобие на валидацию. Очень простая задача. Там функции получаются не модально, то есть очень легко оптимальное значение коэффициента тау найти. Мы сейчас делали с помощью кросс-валидации.
Такая калибровка дополнительно помогает оценку неопределенности улучшить. И даже если у нас все сети были изначально откалиброваны, эксперименты показали, что после ансамблирования необходимо дополнительно перекалибровку выполнять. Процедура несложная, но если вам нужна хорошая оценка неопределенности, то это то, что вам следует знать – что в любом случае необходимо калибровку температуры провести.
Дальше. Вопрос, какие же техники ансамблирования можно взять. Мы исследовали практически всё, что в современной литературе известно, от сложного к простому.
Глубинные ансамбли. Дальше снэпшот ансамбли и ансамбли, полученные с помощью так называемых циклических динамик Ланжевена (не будем сейчас выдаваться в подробности, что это такое). Очень важно, что первые три техники позволяют исследовать разные моды нашей функции правдоподобия. Последующие техники вычислительно более эффективны, но все они описывают как окрестности одной моды. А мы в частности две последние – это как раз вариационный вывод с помощью полностью факторизованного гауссиана, а гауссиана – это как раз есть окрестность какой-то одной моды. И dropout. Dropout тоже можно себе представить как некий приближенный байесовский вывод, где тоже приближаем окрестности одной моды.
Все эти техники локальные, но две последние, они еще и крайне эффективны по памяти. Две предыдущие (FGE и SWAG) требуют в K раз больше памяти, где K – число элементов в нашем ансамбле. Две последние техники требуют памяти всего лишь в два раза больше, чем память на хранение одной нейросети.
И дальше давайте подумаем, как же можно разные техники ансамблирования между собой сравнивать. Мы долго думали, и, в конце концов, придумали интересную метрику, которую мы назвали deep ensemble equivalent (DEE). Что это такое? Это метрика, которая вводится для каждого ансамбля (какого-нибудь ансамбля m, то есть для разной техники ансамблирования), и зависит она от k, где k – число элементов в ансамбле m. Что техника показывает? Показывает она, сколько нужно взять элементов в deep ensemble – то есть самое вычислительно неэффективная, но, по-видимому, самая практически работающая техника, – сколько нужно взять элементов deep ensemble, чтобы получить оценку неопределенности такую же, как оценка неопределенности, которую мы получили с помощью K сетей при технике ансамблирования m.
Сейчас я на графике покажу, как она себя ведет. Может, станет более понятно, что это такое. И мы, пользуясь тем, что у нас был доступ к большим вычислительным ресурсам в рамках кластера, AI центра компании Samsung, мы провели исследование, обучив несколько тысяч разных глубинных нейросетей на различных архитектурах и различных датасетах, _____ (00:28:41).
И что же мы получили? Вот графики deep ensemble equivalent для различных техник ансамблирования. Первое, на что мы смотрим – это на голубую линию. Голубая линия – это deep ensemble против deep ensemble. Поэтому, естественно, эта линия – это y = x. p здесь просто шкалы разные, чтобы можно было как-то корректно построить. На самом деле, это просто тождественная функция. Сколько нужно элементов deep ensemble, чтобы побить заданное количество элементов deep ensemble. Понятно, что столько же элементов. Надо же такое же качество получить.
А остальные техники, обратите внимание, ведут себя сильно по-разному. Качественно поведение на разных датасетах примерно одно и то же. Но давайте посмотрим, что же тут можем увидеть.
Первое. Техники, которые исследуют разные моды. То есть у нас snapshot ансамбли и циклическая динамика Ланжевена. Видно, что они работают достаточно хорошо. То есть хуже, чем deep ensemble, но они вычислительно более эффективны, и в принципе качество… нужно 20 элементов snapshot ансамбля взять для того, чтобы получить оценку _____ (00:30:01) такую же, как мы бы получили, если бы усредняли прогнозы по пяти независимым обученным нейросетям.
Мы берем 20 нейросетей и смотрим, чему равен DEE. Равен 5, значит, нужно эквивалентно пяти элементам deep ensemble. Техники, которые исследуют окрестности одной моды, они все загибаются, у них у всех эффект насыщения происходит. То есть формально мы тут можем взять какие-нибудь 100 sample в ансамбле, а качество получим такое же, как deep ensemble размера 5.
И наконец те техники, которые были самые эффективные по памяти, то есть которые требовали в два раза больше параметров, которые требуются на хранение одной нейросети, катастрофически неэффективны оказались. И у них DEE равен 2. В этом, подозреваю, что есть какой-то глубокий физический смысл, что если мы памяти затратили всего лишь в два раза больше, то мы и не можем получить лучше оценку неопределенности, чем если бы мы просто брали усреднение прогнозов по двум независимо обученным нейросетям.
Это любопытный вывод. Мы отсюда можем заключить, что разные моды имеют значение. То есть вместо того, чтобы локально описывать поведение одной моды в нашем пространстве весов, лучше описывать это поведение разных мод. То есть за счет этого достигается гораздо большее разнообразие прогнозов, а значит и лучше оценка неопределенности.
И пока вывод такой, что хорошее ансамблирование не удается сделать, если не тратить много памяти. Это, видимо, критически важно. Если мы хотим получить хороший ансамбль, нам нужно морально приготовиться к тому, что придется очень большие затраты по памяти нести.
И, что особенно приятно, что почти независимо от нас аналогичные результаты по оценке неопределенности были получены нашими коллегами из Google, которые тоже пришли к такому же выводу, что действительно лучше, чем deep ensembles на сегодняшний день техники для оценки неопределенности нет.
На этом я закончу следующий блок. Если есть какие-то вопросы, то я готов ответить.
(00:32:43)
Мужчина: Здравствуйте. Скажите, пожалуйста, dropout применялся как именно здесь? Для примера. Вот этих моделей. Как я понимаю, она сильно вправо идет, одна из самых нижних.
Дмитрий Ветров: Да.
Мужчина: Он применялся на уровне предпоследнего слоя? В каждом слое dropout стоял по 0,5? Как оно было?
Дмитрий Ветров: Применялся так называемый гауссовский dropout с автоматическим подбором магнитуды dropout.
Мужчина: Автоматический подбор был по обратной связи от результата, или как? То есть мы же здесь другую задачу решаем.
Дмитрий Ветров: Нет, автоматический подбор был… Ой, это вообще требует, на самом деле, отдельного большого выступления.
Совсем кратко. Гауссовский dropout – можно показать, что это является частным случаем вариационного байесовского вывода в определенном семействе. Если это есть вариационный байесовский вывод, то мы можем построить процедуру, которая позволяет автоматически настраивать магнитуду dropout. То же самое верно и для бинарного dropout, но просто с гауссовским работать удобнее, ар таты принципиально не меняются. То есть есть техники, которые позволяют интенсивность dropout автоматически настроить. И они здесь и применялись. Если кратко, то так.
Мужчина: Спасибо. И это задачи для зрения были, классификации для зрения?
Дмитрий Ветров: Да.
Мужчина: Спасибо.
Николай Михайловский: Петр Иванов спрашивает: «Насколько независимость влияет на результат? Это разные архитектуры или разные запуски одной сети?».
Дмитрий Ветров: Разные запуски одной сети. То есть мы принципиально ограничились этим сценарием, потому что только в нем можно сравнивать deep ансамбли с другими техниками ансамблирования. То есть мы не можем делать dropout, если у нас еще и архитектуры разные. Или snapshot ансамбль строить, если разные архитектуры. Мы это можем делать, только если у нас зафиксирована архитектура в рамках одного цикла обучения. Поэтому и deep ensemble мы тоже делали на фиксированной архитектуре просто из разных начальных _____ (00:34:46).
Николай Михайловский: Егор Панфилов спрашивает: «Можете ли вы прокомментировать, насколько генерализуются выводы по ансамблям на задачи семантической сегментации?».
Дмитрий Ветров: Для этого надо сначала понять, как вы будете ансамблирование проводить задачи сегментации.
То есть с задачей классификации всё просто. Вы просто получаете распределение вероятности на классы. А в задаче сегментации вам же нужно как бы получить на выходе сегментацию. Если вы будете независимо ансамблировать по разным пикселям сегментацию…
Николай Михайловский: Да, задача сегментации – это задача классификации пикселей, если уж…
Дмитрий Ветров: Да. В ней есть один существенный нюанс: это задача классификации пикселей, но не независимой классификации, а мы пиксели в совокупности должны классифицировать. Это дает свою специфику. И поэтому как там ансамблировать такую независимую классификацию, не очень понятно. То есть в первом приближении я бы так навскидку сказал, что качественные выводы должны быть те же самые, потому что мы знаем, что выводы классификации изображений переносятся как минимум на другие задачи классификации. И если рассматривать сегментацию как такой специфический… с помощью задачи классификации, то, по идее, должно всё то же самое переноситься. Но это я говорю из своей интуиции. Мы не проверяли, как работают deep ensembles на задаче сегментации.
Николай Михайловский: Вопросов нет. Давайте продолжать.
Дмитрий Ветров: Хорошо. Нам остался последний кусочек. И тут мы немножечко поговорим времен каком-то смысле, можно сказать, что в продолжение темы. То есть коль скоро мы выяснили, что deep ансамбли – это хорошая штука, тогда возникает такой вопрос. Мы знаем, что если мы используем deep ensembles, то у нас растет, улучшается оценка неопределенности, и растет качество на тесте. Это тоже известно. Но наблюдается некий эффект насыщения. То есть дальнейшее увеличение размера deep ensemble приводит к всё меньшему и меньшему приросту качества.
С другой стороны, мы знаем, что аналогичный эффект имеет место, если мы возьмем одну нейросеть и будем ее наращивать, то есть делать ее глубже, шире. Опять же, чем более глубокие, более широкие нейросети, тем выше у них качество работы, но оценка неопределенности будет плохая. Но если нас интересует просто точность на тесте, точность у них повышается, но тоже наблюдается эффект насыщения. То есть чем больше мы увеличиваем размер нейросетей, тем меньше и меньше у нас становится прирост точности.
И тогда возникает интересный вопрос. Ребята дорогие, а что нужно вообще делать? Если у нас зафиксирован бюджет по памяти – а бюджет по памяти, как правило, реально является ограничением в промышленных системах, особенно если мы на каких-то мобильных устройствах запускаем, – то что лучше нам делать: обучить одну большую нейросеть или много маленьких, и сделать из них deep ensemble? Оказывается, ответ не тривиален, потому что и deep ensemble улучшает качество относительно одной нейросети, и большая нейросеть улучшает качество маленькой нейросети. Поэтому как тратить бюджет, не очень понятно, и мы увидим, что тут ответ нас приятно удивит.
Если мы построим тут такую небольшую картинку, здесь цветом показано отрицательное правдоподобие на валидации. Ну, алгоритм правдоподобия, еще и после калибровки, то есть чем краснее, тем лучше. По оси X у нас отложен размер нейросети, по оси Y отложен размер ансамбля, в логарифмической шкале и то, и другое. То есть синее – как работает маленькая одна нейросеть. А тут – как работает ансамбль из маленьких нейросетей. Тут как работает одна нейросеть с постепенно увеличивающимся размером. А если мы сдвигаемся одновременно по X и Y, то получаем, как работает ансамбль из нейросетей заданного размера.
Тогда, если у нас есть ограничение по бюджету, что это такое? Фактически вот наша линия, вдоль которой можно двигаться. То есть вот наше ограничение по бюджету. Значит, здесь все клетки соответствуют одному и тому же бюджету по памяти. Значит, можем обучить одну большую нейросеть, можем обучить много маленьких, можем обучить несколько средних. И даже на этой картинке – тут реальные данные – уже видно, что ответ где-то посередине. То есть несколько средних дают нам качество лучше, чем одна большая или много маленьких. Вопрос: как бы нам это научиться оценивать?
(00:39:47)
Давайте посмотрим вот на такой график. Здесь у нас отрицательный тестовый лог правдоподобия при увеличении размера deep ensemble сети ResNet50 на ImageNet. Вот что убивает одна нейросеть, вот что убивает ансамбль из многих нейросетей. Вот тут видно, что усреднение по deep ensemble помогает. И видно, что эффект насыщения не наступает. То есть с какого-то момента уже дальнейшее присоединение чуть-чуть прирост дает, но маленький, а памяти мы тратим много.
Вопрос: а можем мы как-то поведение этой кривой описать? Давайте попробуем перейти в log-log шкалу. Вдруг у нас здесь степенной закон. Перешли. То есть у нас теперь здесь логарифм калиброванного лог-подобия на тесте, и здесь алгоритм числа сетей в deep ensemble. Но тоже пока почему-то степенным законом не очень пахнет. А степенные законы чем хороши? Их очень легко устанавливать и прогнозировать. Степенной закон был бы, если бы у нас здесь оказалась прямая линия. Тогда бы это означало, что в исходных шкалах функция ведет себя как игрек равно единице на икс в степени альфа [y=1/xα].
И вот тут _____ (00:41:01) дебютная идея: «А давайте мы попробуем нулевой уровень посдвигать. То есть будем из test_loss вычитать некоторую константу, и смотреть, как будет вести себя график при изменении этой константы.
Что такое нулевой уровень? Это в этой исходной шкале, где у нас асимпта (00:41:17) должна горизонтальной идти.
Ясно, что тут у нас асимпта будет не на нуле идти, а где-то повыше, на 0,75. Но давайте это значение попробуем здесь вычесть, и посмотреть, как тогда у нас будет в log-log шкале (00:41:30) график выглядеть.
(00:41:33)
Вот я здесь gif-анимацию запускаю, и потихонечку мы начинаем коэффициент C вот этот видоизменять. И, вот видите, оп, у нас в одном месте при определенном значении C возникла прямо что четко прямая линия. Вот она нарисована. Это означает, что если мы правильно подберем горизонтальную асимптоту, то вообще-то наше поведение, вот эффект насыщения очень хорошо описывается с помощью степенного закона. То есть эта прямая линия, случайно такие линии не получаются. Это означает, что тут действительно есть степенной закон. В математике и статистической физике хорошо известно, что многие модели, их поведение действительно может быть описано с помощью степенного закона.
Это мы посмотрели, что у нас есть степенной закон, если мы увеличиваем размер deep ensemble при фиксированной архитектуре отдельно взятой нейросети.
А давайте посмотрим, а что будет, если мы будем брать одну нейросеть и увеличивать ее размер, скажем, ширину ResNet. Если мы это сделаем, опять же, тут необходима калибровка температуры, и будем откладывать отрицательно калиброванный лог правдоподобия на валидации, от размера нашей нейронной сети. То график выглядит до калибровки вот так, и вот тут виден эффект двойного спуска, о котором я рассказывал в прошлый раз, что при определенных размерах у нас логик правдоподобия на валидации подскакивает, потом снова начинает уменьшаться. Но после калибровки калибровка этот эффект устраняет, и после калибровки мы получаем аналогичный эффект насыщения. То есть видно, что чем больше нейросеть, тем лучше, тем выше у нас правдоподобие на валидации. И если мы перейдем в log-log шкалу и подберем коэффициент C, то мы увидим, о чудо, тоже здесь практически прямая линия, то есть это поведение хорошо описывается степенным законом.
Хорошо. Теперь идем еще дальше. Попробуем строить deep ансамбль из нейросетей разного размера, и посмотрим, что можно сказать про лучшие качества, которые удается выжать при заданном бюджете по памяти.
Здесь снова смотрим на левый график. Здесь по X отложен наш бюджет по памяти, то есть то, сколько памяти мы тратим на наш deep ensemble. Цветом показано, как ведут себя deep ensembles из нейросетей того или иного размера. Фиолетовый цвет – это deep ensemble из маленьких сетей. Красный цвет – deep ensemble из больших сетей. Понятно, что мы не можем построить, красная линия, видите, начинается отсюда, потому что столько памяти нам требуется на то, чтобы одну сеть хранить большого размера. И если дальше бюджет памяти увеличиваем, то можем делать deep ensemble из нескольких больших сетей. Соответственно, маленькую сеть мы можем, при маленьком бюджете уже у нас одна нейросеть, и если бюджет увеличиваем, то мы формируем всё бо́льший deep ensemble из сетей всё того же маленького размера.
И видно, что у нас при фиксированном бюджете по памяти вообще-то есть некая золотая середина. То есть, допустим, мы зафиксировали на 228 бюджет по памяти .
(00:44:59)
Видно, что deep ensemble из маленьких нейросетей ведет себя довольно плохо. Маленький deep ensemble из больших нейросетей тоже ведет себя плохо. И если мы построим возможные такие графики для deep ensembles сетей разного размера, и потом проведем нижнюю огибающую, то видно, что на 28-й она достигается где-то на салатовой линии, то есть это deep ensemble среднего размера из нейросетей среднего размера.
Так вот если мы теперь эту нижнюю огибающую нарисуем в log-log шкале и вычтем подогнанную константу, то и здесь мы получаем, что удивительно, тоже степенной закон. Степенной закон означает, что мы можем это поведение экстраполировать дальше на дальнейшие бюджеты памяти. То есть с помощью степенного закона можно, по первым нескольким точкам его оценив, дальше его уже экстраполировать и понимать, какое же качество мы получим, не занимаясь тем, что будем огромное количество разных экспериментов ставить, чтобы тут нижнюю огибающую нащупать.
Хорошо. Тогда возникает следующий вопрос. Пока мы установили, что для разных бюджетов по памяти, оказывается, оптимальная стратегия – не весь бюджет тратить на одну нейросеть, а разделить его между несколькими нейросетями и из них сформировать deep ensemble. Но при этом вопрос: насколько частей наш бюджет делить, то есть сколько нейросетей какого размера обучать, не тривиальна. То есть ошибка в выборе может привести к тому, что качество упадет.
Тут мы видим. Здесь уже линии нарисованы: разным цветом показан фиксированный бюджет по памяти, и то, как мы этот бюджет тратим. Единичка означает, что мы весь бюджет потратили на одну нейросеть максимального размера, которую бюджет по памяти позволял. И дальше цифры означают, что мы бюджет делили на столько частей, сколько здесь указано по оси X, обучали столько сетей меньшего размера, и потом по ним усредняли. И видно, что даже для маленького бюджета, оказывается, выгодно обучить deep ensemble размером 2. То есть поделить его пополам, обучить две нейросети половинного размера, и по ним усреднить.
Если мы дальше будем делать deep ensemble большего размера, у нас качество начинает ухудшаться.
И оказывается, что тут минимум, точнее аргминимум (00:47:19) он начинает сдвигаться по мере увеличения бюджета по памяти вправо. То есть если у нас памяти достаточно много, нам выгодно формировать deep ensembles всё большего и большего размера. Тогда мы будем выжимать лучше качество. Причем тут существенное изменение. То есть deep ensemble работает существенно лучше, чем работала одна нейросеть, которая бы весь бюджет сожрала. Но если мы увлечёмся и сформируем слишком большой deep ensemble, то у нас выигрыши от ансамблирования – мы вспоминаем эффект насыщения – станут меньше, чем проигрыши от того, что у нас сами нейросети стали маленькими. То есть тут всё время идет некая золотая середина, идет компромисс, что нам желательно и нейросеть побольше, потому что чем больше нейросеть, тем лучше она работает, и ансамбль побольше. И некий компромисс достигается в таких нетривиальных точках.
Вопрос: можно ли этот аргминимум (00:48:15) спрогнозировать? Ответ «да». Здесь смотрим на левую картинку. Тут мы обучили deep ensemble небольшого размера до 22,5 – порядка 5 элементов. То есть deep ensemble размера 5. И по ним попробовали восстановить степенные законы. То есть мы знаем, что у нас каждая горизонтальная линия подчиняется степенному закону. Попробовали их установить. Тут показана ошибка предсказания. Видно, что ошибка очень маленькая. То есть довольно точно удается степенные законы восстановить. А после того, как мы их восстановили, можем уже попробовать найти здесь оптимальное разделение бюджета, то есть как нам выгодно бюджет тратить.
И если мы это будем предсказывать, то здесь видно, что у нас довольно неплохие предсказания. То есть здесь синими и зелеными линиями отмечены настоящие оптимальные значения deep ensemble при разных бюджетах. То есть тут мы варьировали бюджеты и смотрели, как бюджет выгодно тратить, сколько элементов deep ensemble обучать. А рыжая линия предсказывает значение. Видно, что предсказанное значение, в принципе, неплохо соотносится с оптимальными значениями. И даже там, где мы ошибаемся, на самом деле, тут разница по ошибке на тесте ничтожно мала, эти два деления почти эквивалентны.
Вот такая любопытная работа. Результат довольно интересный. Из него в частности вытекает, что если у вас есть фиксированный бюджет по памяти, то имеет смысл задуматься и, возможно, потратить его не на обучение одной нейросети, а на обучение нескольких нейросетей, и потом из них deep ensemble сформировать. Да, вы потратите больше времени на этапе обучения, но на этапе тестирования наши замеры показывают, что если мы ансамблируем, скажем, две сети _____ (00:50:20) размера, то это работает примерно столько же, сколько работало бы, если бы мы одну сеть вдвое большего размера запустили. То есть на этапе тестирования мы почти вычислительных затрат не несем, но при этом у нас оказывается лучше точность на тесте. И, ко всему прочему, у нас еще и благодаря deep ensembles оценки неопределённости появляются, которых нет при использовании…И при deep ensembles у нас появляется оценка неопределённости, которой у нас нет, если мы обучаем отдельно взятую нейросеть.
На этом я закончу. Спасибо за внимание. Готов ответить на ваши вопросы по этому кусочку либо по всей презентации.
Николай Михайловский: Дмитрий, спасибо большое! Вопросы у нас уже есть.
На самом деле, я к этому вопросу в душе присоединяюсь – вопрос, задаваемый анонимным посетителем: «Что значит размер нейросети? Количество слоев и обучаемых параметров?».
Дмитрий Ветров: Количество обучаемых параметров. То есть размер нейросети – то, сколько памяти нам потребуется для того, чтобы эту нейросеть сохранять. Когда мы варьируем нейросеть, вот я говорю, что мы бюджет увеличиваем и смотрим, мы увеличиваем нейросеть, увеличивая ее ширину. Мы работали в основном с ResNet-подобными архитектурами, и там проще ширину увеличивать.
Николай Михайловский: Я к этому вопросу присоединяюсь по следующей причине. Есть такая группа работ в группе Квокале (00:51:56) в Google про EfficientNet. Они там делали network architecture search тоже для классификации. И они говорили, что есть у нас у тех же ResNet’ов три параметра: это количество каналов, это ширина сети, это глубина сети. И в сочетании этих трех параметров есть тоже некая оптимальная точка, которая и есть этот EfficientNet, который они путём своего архитектурного перебора нашли.
Вопрос с моей стороны. Если вы варьировали только ширину сети, не может ли быть так, что, варьируя количество каналов или варьируя глубину сети одновременно, мы бы получили в этом уже четырехмерном, например, пространстве, совершенно другие минимумы, например? У вас идет оптимизация в двумерном пространстве – ширина, количество сетей в ансамбле. Мы вводим еще две переменных – глубина и количество слоев. И там, скорее всего, степенные законы-то сохранятся (что с ними станет?), а минимумы и максимумы там могут стать совсем другими.
Да, такое возможно. У нас не было возможности исследовать всё, всё, всё. Это была бы как попытка объять необъятное. Поэтому мы были вынуждены как-то дизайн эксперимента ограничивать. Мы выбрали тот параметр, который, с нашей точки зрения, влияет сильнее всего.
То есть у ResNet… при увеличении памяти, доступной на хранение одного ResNet, по нашим экспериментам выходило так, что выгоднее тратить эту память не на увеличение глубины сети, а на увеличение ширины сети. Поэтому мы такой дизайн и запустили.
Дизайн понятный. Но, на самом деле, у коллег из Google, например, этих степенных законов нет. А даже исследуя взаимоотношения между этими тремя параметрами, которые они варьировали в своем NAS (00:54:37), вполне возможно, получились бы какие-то другие зависимости, которые, вероятно, тоже интересны. И хотя без ансамбля мы оценок точности не получим, мы, может быть, получим лучший способ делать NAS (Network Architecture Search).
Дмитрий Ветров: Такого я не исключаю. Более того, это выглядит вполне разумно. Проблема в том, что такое исследование требует очень больших вычислительных мощностей.
Николай Михайловский: Ну, да. А кому легко?
Дмитрий Ветров: «Гуглу».
Николай Михайловский: Да, в каком-то смысле.
(00:55:13)
Сергей Кастрюлин спрашивает: «Обобщаются ли результаты по теме deep ensembles для улучшения качества для регрессионной задачи? Какие-то могут быть подводные камни при попытке перейти от классификации к регрессии?
Дмитрий Ветров: Подводные камни могут быть. Но я думаю, что это лучше обратиться к тем людям, которые решают задачи регрессии с помощью глубинных нейросетей. Мы не сталкиваемся с задачами регрессии, поэтому я мало что могу сказать, кроме того, что в них есть своя специфика.
Николай Михайловский: Петр Васильев спрашивает: «Какие методы позволяют получить достаточно различных нейросетей для ансамблирования? Случайная инициализация? Обучение на разных подмножествах данных, разный dropout?
Дмитрий Ветров: Наши эксперименты показывают, что наибольшее разнообразие достигается благодаря разным инициализациям.
Николай Михайловский: А если брать разные архитектуры?
Дмитрий Ветров: Речь идет, разумеется, о фиксированной архитектуре. Если брать разные архитектуры, это кажется дальнейшим обобщением понятия «разные инициализации». То есть у них тем более будут разные инициализации, поэтому, да, разные архитектуры будут иметь еще большее разнообразие.
Николай Михайловский: То есть если, например, я хочу сделать практический ансамбль нейросетей, то лучше взять разные архитектуры, и тогда мы получим лучшие оценки точности и обобщающую способность ансамбля?
Дмитрий Ветров: Тут такая есть опасность, что если вы берете разные архитектуры, у вас может какая-нибудь архитектура неудачно подобраться, и она будет всё портить. Поэтому я бы в таком случае действовал… Я бы все-таки сначала зафиксировал архитектуру, она хорошо работает. А потом ее просто брал из разных инициализаций.
Николай Михайловский: Если мы говорим о параметризованных семействах архитектур, какими, например, у вас являются ResNet’ы, мы же можем в таком параметризованном семействе в определенном наборе значений параметров думать, что оно будет более-менее нормально работать.
Дмитрий Ветров: В этом смысле да. Если мы из некоего диапазона берем параметры ResNet, на котором он в принципе достигает гарантированно хорошего качества, то там можно брать разные ResNet’ы. Хуже от этого не будет. Вопрос: будет ли лучше? Относительно того, что чтобы брать один ResNet с разными инициализациями… не знаю. Нет у меня уверенности, что выжмем прямо существенно что-то. Но, может быть, и выжмем.
Николай Михайловский: Вадим Великодный спрашивает: «Вы решали каждый раз одну и ту же задачу классификации на одном и том же датасете?».
Дмитрий Ветров: Да. Потом просто повторяли это на разных датасетах и воспроизводили. Условно говоря, степенной закон был обнаружен на разных датасетах.
Николай Михайловский: То есть, если я правильно понимаю, для вас основными было три датасета: ImageNet, CIFAR-10, CIFAR-100?
Дмитрий Ветров: Да.
Николай Михайловский: Алексей Гольдин пишет: «Вот меня тоже регрессия интересует. Сергей Кастрюлин, возможно, стоит пообщаться». Леша, привет. Конечно, вы там с Сергеем как-нибудь уж…
Денис Тимонин спрашивает: «Для каких задач лоссов можно применить ваше исследование по поводу deep ensembles помимо классификационной задачи?
Дмитрий Ветров: Я тут могу предполагать, что для регрессии deep ensembles, по идее, должны работать.
Николай Михайловский: Я со своей стороны могу предположить, например, что в том же распознавании речи, если очень хочется, то можно тоже применять подобные методы ансамблирования, хотя точки оптимума там, скорее всего, будут немножечко по-другому устроены, поскольку там на предпоследнем шаге в случае CTC loss, там тоже у нас есть softmax какой-нибудь.
Дмитрий Ветров: Это же тоже, по-моему, некая модификация задачи классификации.
Николай Михайловский: В некотором смысле да. В некотором смысле.
Дмитрий Ветров: По идее, мы знаем еще из классического машинного обучения, что ансамблирование в принципе помогает и регрессорам, и классификаторам. Здесь мы это подтверждаем для задачи классификации (самый-самый хорошо идущий стандарт). Кажется, нет оснований полагать, что для каких-то модификаций задачи классификации, как то и сегментация, и распознавание речи, такие техники работать не будут. То есть почти наверняка будут.
Несколько меньше у меня уверенность, что будут работать для регрессии, потому что я могу навскидку идентифицировать подводные камни. Но, скорее всего, будет и для задачи регрессии работать.
Мне интересно, можно ли как-то ансамблирование применять в генеративной модели. Вот где интересно. То есть какие-нибудь _____ (01:00:48) автокодировщики ансамблировать, или GaN’ы (01:00:54).
Николай Михайловский: Если уж ансамблировать генеративные модели, то ансамблировать diffusion models.
Дмитрий Ветров: Диффузные модели?
Николай Михайловский: Вроде бы их довели до ума так, что они уже работают лучше GaN.
Дмитрий Ветров: Да.
Николай Михайловский: А поскольку оно структурно попроще будет, то уж если ансамблировать, то их.
Дмитрий Ветров: Возможно. Мы как раз собираемся диффузными моделями начать активно заниматься. Может, попробуем.
Николай Михайловский: Сергей Кастрюлин пишет: «Результаты в эксперименте по поиску оптимального сочетания числа моделей в ансамбле и глубины сетей были получены с температурным скейлингом ответов ансамбля или без него?
Дмитрий Ветров: С температурным скейлингом.
Николай Михайловский: И спрашивает Сергей же. «Дмитрий, вы только что упомянули, что для регрессии можете навскидку идентифицировать подводные камни. Не могли бы вы поделиться своими соображениями на эту тему?».
Дмитрий Ветров: Да, мог бы.
Если мы обучаем нейросеть на задачи регрессии, и хотим дальше усреднять предсказания, ансамблировать, то вообще-то нам хорошо бы иметь не просто предсказание нейросетей, а еще и доверительные интервалы, потому что доверительные интервалы определяют веса, с которыми мы будем взвешенно ансамблировать. Безусловно, если у нас есть две нейросети, одна из которых очень уверена в своем прогнозе, а другая дает прогноз плюс-минус лапоть, то мы эти прогнозы усреднять должны с учетом этой неуверенности. И у меня опасение, что нейросети хорошо эту меру неуверенности улучшить не смогут, условно говоря, по тем же причинам, по которым они в классификации выдают очень контрастные прогнозы.
Николай Михайловский: Еще у нас в чате что-то спрашивают.
Станислав Капулькин пишет: «Меня интересует задача сегментации. Готов пообщаться с человеком, который про нее спрашивал».
У меня следующий вопрос. Наши коллеги из Гарварда и Google в феврале (месяца три назад) выпустили статью “The Deep Bootstrap Framework: Good Online Learners are Good Offline Generalizers”. И они там пишут про то, что… это очень рифмуется с тем, что сегодня говорилось про статистическую теорию машинного обучения. Они говорят о том, что есть реальный мир, в котором мы сэмплим из набора, есть идеальный мир, в котором мы сэмплим из распределения, которое, по большому счету, бесконечно. И, работая с обучающим и тестовым множеством, мы на самом деле работаем с двумя сэмплингами из некоего бесконечного распределения. И они говорят, что, на самом деле, хорошо бы изучать соотношение того, что получается из распределения, с тем, что получается из конечного набора. И они, например, это проверяют, генеративно генерируя это распределение неким образом с помощью внешнего GaN, или «А давайте мы CIFAR-10 нагенерим распределение».
Вопрос: что скажете про подход? И что скажете про постановку эксперимента? Лично мне подход кажется интересным, по меньшей мере содержательным, а постановка эксперимента кажется сомнительной.
Дмитрий Ветров: Я не очень понял, в чем заключался эксперимент.
Николай Михайловский: Они брали и обучали на CIFAR, генерировали некий мега-CIFA, где те же 10 классов, но там 5 млн семплов. И они учили, не итерируя по датасету…
Дмитрий Ветров: Обучили по тому, что генеративная модель назовет (01:06:43).
Николай Михайловский: Да. А учили онлайн на том, что генеративная модель выдаст. В том смысле онлайн, что у них каждый пример в обучающей выборке встречался только один раз.
Дмитрий Ветров: Понятно, что если у нас в обучающей выборке каждая модель встречается один раз, то простейшая ситуация – один проход сделали и остановились. У нас не может быть никакого переобучения. Это большой плюс. То есть та точность, которую мы выбиваем на обучении, она такая же будет и на тесте. То есть у нас _____ (01:07:16) начинают появляться, когда мы начинаем итерировать по одним и тем же объектам. Поэтому в этом смысле идея «А давайте по обучающей выборке обучим некий генератор, который нам будет бесконечно много выдавать разных семплов», она на поверхности, разумная. Вопрос, что дальше всё упирается в то, насколько хорошо удастся генератор обучить. У меня в этом есть некоторые сомнения.
А если генератор обучен плохо, допустим, он будет генеральную совокупность несбалансированно генерировать, то тогда формально мы будем обучаться на всё время уникальных объектах, но при этом качество может оказаться хуже, просто потому что эти объекты будут идти не из генеральной совокупности, а из распределения, которое сильно смещено, и смещено оно из-за генератора, и никак проконтролировать мы это не можем, вообще никак.
Николай Михайловский: Мне примерно в этом же месте кажется, что в эксперименте дырка, потому что никто не доказал, что их совокупность на самом деле является такой, какой они считают.
Дмитрий Ветров: Мы дальше можем проверить это. У нас же есть внешний критерий истины – тестовая ошибка. Если на тестовой выборке удалось качество лучше, то бога ради. Просто я не вижу здесь какого-то универсализма. Это раз на раз не приходится. Если нам так повезло, что генеративная модель обучилась хорошая, то можем качество улучшить. А в другой задаче качество, наоборот, очень сильно просядет. То есть как эвристику использовать можно, но далеко идущих выводов я бы не делал, пока не будет очередной проверки генеративного моделирования. Хотя и там тоже вопросы есть.
Николай Михайловский: На самом деле, пафос-то работы не в этом, а в том, что в принципе к оценке, ну, к статистической теории надо подходить немножко с другим подходом, чем к ней всегда подходили, к статистической теории машинного обучения, не сравнивая то, что получается, тестовую ошибку и ошибку обучения, и получая generalization gap. А надо сравнивать тестовые ошибки между обучением на бесконечном наборе, на распределении с тестовой ошибкой на обучающем наборе.
(01:10:09)
Дмитрий Ветров: Моя интуиция такая, что если у нас бесконечная обучающая выборка, то есть мы каждый объект обучающий смотрим один только раз, у нас разрыв между обучающей ошибкой и тестовой будет либо нулевой, либо очень маленький. В этом смысле качество напрямую переносится. Соответственно, если мы итерируем многократно по фиксированному набору обучающих объектов, то тестовая ошибка должна быть выше, потому что мы начинаем переобучаться.
Николай Михайловский: ОК.
Станислав Капулькин спрашивает тем временем: «Планируете ли вы повторить эксперимент с ансамблированием и разделением памяти для EfficientNet?».
Дмитрий Ветров: В ближайших планах не планируем, потому что начнутся другие темы исследований.
Николай Михайловский: Алексей Мещеряков пишет: «Ссылку на работу дадите?». Не совсем понятно, про какие работы, но, думаю, Дмитрий с удовольствием даст ссылки на работы, которые с удовольствием обсуждались, а я попрошу девушек, которые делают рассылку, дать ссылку на работу, которую я сейчас озвучивал, коллег из Гарварда и Google.
Дмитрий Ветров: Если на наши работы, ссылки на слайдах есть.
Николай Михайловский: Слайды тоже будут всем участникам и даже всем зарегистрировавшимся разосланы, равно же и запись текущая. Ссылку на эту работу мы тоже попросим в рассылку включить.
Коллеги, пожалуйста, еще соображения, предложения.
Кажется, у нас больше их нет. Тогда, Дмитрий, большое спасибо опять за очень интересный рассказ и живое обсуждение.
Нет, у нас посыпались вопросы. Еще не спасибо.
Никита Радеев спрашивает: «Как ансамбли-то строятся?».
Дмитрий Ветров: Простейший способ deep ensemble – это просто обучаем из разных начальных приближений.
Николай Михайловский: А результат как получается?
Дмитрий Ветров: Вот мы взяли три разных начальных приближения, обучили три разных нейросети. Вот у вас ансамбль, три разные нейросети. Каждая выдает распределение, допустим, на метки класса, дальше мы эти распределения усредняем с весом 1/3. Это называется ансамблированием.
Николай Михайловский: Спасибо. И Борис Пякилле (01:13:13) спрашивает: «Дмитрий, как вы думаете, есть ли специфика в использовании ансамблей для графовых нейронных сетей?». Боря, кстати, привет.
Дмитрий Ветров: Боря, хороший вопрос задаете. Надо изучать вопрос. Мы с графовыми нейросетями пока не сталкивались. Поэтому сложно. Я бы сказал, что если все-таки там задачи классификации, то есть если графовые нейросети мы запускаем на задачу классификации, то, по идее, должно быть то же самое, то есть тоже ансамблирование должно помогать и улучшать качество работы. Но руку на отсечение давать не буду. Лучше проверить экспериментально.
«Меняются ли сабсеты (01:13:57), помогает ли это? Бьются ли фолды?». Наши эксперименты показывают, что мало это влияет. То есть основное разнообразие достигается из запусков из разных начальных приближений.
«Почему deep ensemble, а не wide ensemble?». Так повелось, это не мой термин. В первой работе, в которой было предложено брать нейросети из разных инициализаций и усреднять прогнозы, было названо deep ensemble. Так оно и называется.
Николай Михайловский: Хорошо. Тогда все-таки, наверное, на сейчас у нас вопросы все. Дмитрий, еще раз спасибо. Не будем вас больше задерживать. До свидания!
Дмитрий Ветров: Спасибо еще раз за то, что позвали. Всего доброго!
(01:14:49) (Конец записи.)