ИИММ-05 Deep Learning 3, МИЭМ, Москва, 2024, PDF

Summary

Презентация, посвящённая 3 курсу по Deep Learning в МИЭМ. В ней рассматриваются обновления алгоритмов оптимизации (momentum, RMSProp, Adam), а также батч-нормализацию, дропаут, и skip connections. Обсуждаются вопросы повышения эффективности обучения нейронных сетей.

Full Transcript

МИЭМ Департамент Москва компьютерной инженерии 2024 Искусственный интеллект в мультимедиа Департамент компьютерной инженерии Повторение 2 В прошлой серии: Алгоритм обучения нейронных...

МИЭМ Департамент Москва компьютерной инженерии 2024 Искусственный интеллект в мультимедиа Департамент компьютерной инженерии Повторение 2 В прошлой серии: Алгоритм обучения нейронных сетей – обратное распространение ошибки (backwards propagation) Граф вычислений + градиенты + кэширование Департамент компьютерной инженерии Повторение 3 В прошлой серии: Со временем у оптимизации градиентным спуском появились модификации, повышающие стабильность схождения и повышающие вероятность нахождения глобального оптимума Импульс (momentum) RMSProp Adam 4 Департамент компьютерной инженерии Повторение 5 Вопросы по предыдущей лекции? Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Содержание 6 Deep Learning 2 Содержание 1. Нормализация 2. Батч-нормализация (BatchNorm) 3. Ансамбли 4. Дропаут 5. Пропускающие связи (skip connections) 6. PyTorch Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 7 Deep Learning 2 Нормализация Без нормализации: W2 всегда намного важнее, Нормализованные данные позволяют чем W1 быстрее обучаться, поскольку наши поверхности функции потерь выглядят гораздо более «нормальными». Когда наши данные нормализованы, веса первого слоя имеют одинаковый порядок величины, поэтому наши шаги градиента также имеют примерно одинаковый порядок величины во всех направлениях Нормализация: оба признака могут играть Мы не можем контролировать, остаются равную роль ли наши активации нормализованными в сети... как мы можем убедиться, что наши активации нормализуются так же, как и наши входные данные? Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 8 Deep Learning 2 Батч-нормализация (BatchNorm) Для батча активаций нейронов после слоя нормализуйте выход каждого нейрона независимо (от других нейронов) по всему батчу. Затем мы изменяем масштаб этих активаций с помощью некоторых изученных параметров, позволяя сети научиться изменять вес своих собственных a - батч активаций в нашей сети a' - нормализованные активации характеристик, если она сочтет это γ - вектор выученных параметров полезным. β - вектор выученных параметров Вывод: Мы предоставляем сети более ϵ - небольшое значение, чтобы не делить на ноль явную структуру для обучения Примечание: символ * в уравнении нормализованным активациям, вывода означает поэлементное умножение поскольку нормализованные признаки Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 9 Deep Learning 2 Батч-нормализация: примечания Примечание: во время тестирования, когда мы работаем с единичными примерами, вместо вычисления среднего и среднеквадратичного отклонения мы используем средневзвешенное значение наших последних средних и среднеквадратичных отклонений, полученных во время обучения. Напоминание: γ и β - это обучаемые параметры, то есть мы добавляем их в список того, что мы обновляем в градиентном спуске Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 10 Deep Learning 2 Батч-нормализация: самопроверка Делает ли batchnorm нашу модель более «выразительной» (т.е. позволяет ли она обучать или аппроксимировать новые функции, которые мы не смогли бы сделать раньше). Ответ: НЕТ ○ Теоретически мы могли бы регулировать веса и смещения линейного слоя, чтобы получить тот же выход без использования batchnorm, но цель batchnorm не в том, чтобы получить разные выходы (batchnorm не делает нашу модель более выразительной). ○ Смысл в том, чтобы получить более красивые градиенты для наших весов и смещений, что и делается, позволяя сети обучаться нормализованным активациям (или выбирать больший вес определенных активаций, если это выгодно) Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 11 Deep Learning 2 LayerNorm Точно так же, как batchnorm, только вместо нормализации по статистике батча мы нормализуем по признакам каждой отдельной тренировки независимо. Мы по-прежнему можем использовать параметры для изменения масштаба и смещения данных так же, как и в случае с batchnorm. Существует множество способов нормализации активаций, цель которых - обеспечить хорошие градиенты Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 12 Deep Learning 2 Нормализация: самопроверка Мы знаем, что при батчевом градиентном спуске обычно наши градиенты представляют собой среднее арифметическое градиентов обучающих примеров. Верно ли это для layernorm и batchnorm? Ответ: НЕТ Layernorm: каждый обучающий пример обрабатывается независимо, поэтому батчевый градиентный спуск - это то же самое, что усреднение отдельных градиентов. Batchnorm: значение активации после batchnorm зависит от статистики партии, и если разбить партию (батч) на более мелкие подпартии или рассматривать обучающие примеры по отдельности, то значения в прямом проходе изменятся При использовании batchnorm градиенты не будут одинаковыми, если вы накапливаете их, беря среднее значение градиентов отдельных Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 13 Deep Learning 2 Ансамбли (Ensembling) Наша модель делает все, что может... Есть ли способ выжать из нее больше производительности? Сделайте много разных моделей (параметры каждый раз инициализируются случайным образом) и посмотрите, что думает вся группа моделей. Мудрость группы Можно усреднить их предсказания для задач регрессии или принять решение большинством голосов для задач классификации Можно использовать множество различных конфигураций моделей и объединить их в ансамбль. Часто это может дать лучшую производительность, но, очевидно, требует гораздо больше вычислений, так как приходится обучать много моделей вместо одной, а также требует гораздо больше времени для оценки во время тестирования. Чтобы каждая модель не училась одному и тому же: опустите случайную Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 14 Deep Learning 2 Дропаут (Dropout) Переобучение является проблемой Случайно обнуляйте новый набор нейронов в каждой партии. Это означает, что сеть должна научиться использовать различные комбинации нейронов. Придется обучать одну и ту же функцию несколькими способами, поскольку каждый нейрон не может полагаться на то, что предыдущий нейрон не будет обнулен. Это относится к концепции ансамбля. Вывод: поскольку нам приходится учить одну и ту же вещь несколькими способами, мы получаем эффект «мудрости группы», который давал нам ансамбль. Во время тестирования мы ничего не обнуляем. Нам просто нужно убедиться, что все наши активации уменьшены на нужную величину, иначе сумма значений, поступающих в каждый нейрон, Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 15 Deep Learning 2 Skip Connections Мы просто добавляем активации предыдущего слоя к активациям текущего слоя. Обычно выход каждого слоя (до активации) равен F(x), где F - наш линейный слой с функцией активации. Вместо этого теперь мы будем выводить F(x) + x перед активацией. Вы можете пропустить произвольные слои, прежде чем снова добавить активацию, просто убедитесь, что добавили до того, как прошли через функцию активации. Эти участки сети с пропущенными соединениями обычно называют Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 16 Deep Learning 2 Skip Connections Скажем, на полпути в обычной сети активации достаточно информативны, чтобы хорошо классифицировать входы, но в выбранной нами сети после этого остается еще несколько слоев (потенциально добавляющих еще больше шума, если мы не будем тщательно выбирать веса). Оказывается, можно сделать так, чтобы наш блок выплевывал именно то, что он принял (просто установите все веса в ноль), это называется функцией тождества Если Вывод: наши веса равны теоретически нулю, то есть это позволяет нам F(x) = строить сети произвольной 0, то глубины, на выходеблоки поскольку всего блока теперьполучается могут легко0 + выучить функцию x=x тождественности или очень маленькие обновления. Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 Современное глубокое обучение 17 Deep Learning 2 Резюме Все это лишь дополнения к набору инструментов глубокого обучения, которые часто используются в современном глубоком обучении, вот основные выводы для каждого из них Adam: лучшая оптимизация из коробки, чем что-либо еще Берет преимущества momentum и RMSProp и объединяет их. Batchnorm: вы можете добавить его после любого нефинального слоя для лучшего обучения Обеспечивает лучшее поведение градиентов, позволяя сети иметь нормализованные активации Ансамбль: Если у вас есть вычислительные мощности, это может дать вам большую производительность на вашем наборе данных «Мудрость группы» Отсев: Бюджетный ансамбль Усиливает регуляризацию, заставляя каждый слой по-разному изучать одно и то же, используя различные характеристики предыдущего слоя, «мудрость группы» здесь все еще применима Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 PyTorch 18 Deep Learning 2 PyTorch Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 PyTorch 19 Deep Learning 2 Обратное распространение - это тяжело... Backprop трудно реализовать, но он необходим для того, чтобы глубокое обучение стало возможным. Поэтому нам нужно что-то, что будет делать это за нас автоматически. Pytorch автоматически создаст для нас произвольные вычислительные графы и выполнит обратное распространение для них автоматически, так что нам не придется возиться с математикой. Слава ему Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 PyTorch 20 Deep Learning 2 PyTorch: с какой стороны браться Если вы понимаете Numpy, то PyTorch будет прост Для пользователя PyTorch выглядит и ведет себя как numpy. Вместо массивов np в Torch есть так называемые «тензоры», которые действуют точно так же. За исключением того, что они генерируют вычислительный граф в фоновом режиме по ходу работы. На более высоком уровне PyTorch также будет иметь некоторые встроенные функции и классы для таких вещей, как активации, слои и т. д. Чего PyTorch не умеет: Символическое дифференцирование Что может PyTorch: Брать частные производные от одного значения (возможно, loss...) по Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 PyTorch 21 Deep Learning 2 Введение/Демонстрации Torch на самом деле выглядит как Numpy на самом низком уровне. Вы можете видеть, что он выглядит практически так же, только вместо массивов у нас есть вещи, называемые тензорами. Мы можем выполнять все обычные операции с массивами, и они ведут себя точно так же. Мы можем складывать, вычитать, возводить в квадрат. Мы можем изменять форму и т. д. Мы можем узнать размер тензора, проверив Департамент Мультимедиа-технологии компьютерной инженерии Лекция 4 PyTorch 22 Deep Learning 2 Определите новый тензор (в данном Введение/Демонстрации случае считайте его параметром) с текущим значением = 5. Мы убедимся, Вот наша функция и что это float, что необходимо для символическая производная дифференцирования (PyTorch не знает символической производной) Установив requires_grad = True, мы поручаем torch сохранить все, что может понадобиться для включения этой переменной в вычислительный граф Определите просто некоторую обычную функцию Оценим функцию на нашем тензоре Вызов функции.backward() для скалярного тензора позволит Pytorch использовать вычислительный граф для вычисления частных производных этого значения по отношению ко всем параметрам, требующим градиента, которые находятся в нашем вычислительном графе, с оценкой по текущему значению параметра Мы можем просмотреть атрибут.grad тензора, чтобы увидеть частную производную нашего выхода по отношению к нашему входному тензору, оцененному Вот что знает и по текущему значению, которое мы вычисляет PyTorch инициализировали на 5

Use Quizgecko on...
Browser
Browser