1 of 65

Lecture 12.

BackProp, CNN

2 of 65

Вспомним всё

Remind lecture 11

Нейросеть - это параметрическая функция:

θ - все веса и смещения.

На вход подаётся вектор признаков.

На выходе может быть что угодно:

  • вероятности классов
  • регрессионное значение
  • вектор признаков, embedding и т.д.

3 of 65

Архитектура многослойного “перцептрона”.

Remind lecture 11

​

Многослойный перцептрон (MLP, fully-connected network):

Каждый слой состоит из линейного преобразования + нелинейности.

4 of 65

Пример.

Remind lecture 11

​

Функция активации добавляет нелинейность.

5 of 65

Обучение = минимизация функции потерь.

Remind lecture 11

​

Нам дана обучающая выборка, модель и лосс.

Тогда задача формулируется так:

6 of 65

Вычислительный граф

Backpropagation

Любое вычисление в сети можно представить как ориентированный ациклический граф:

​

​

​

​

​

Forward pass: вычисление значений по графу.

Backward pass: вычисление градиентов по графу.

7 of 65

Локальные производные и цепное правило.

Backpropagation

Основная идея backprop: градиент сложной композиции можно получить по цепному правилу, используя локальные производные.

​

Пусть

�Тогда

​

Нам нужен Лосс для всех весов.

8 of 65

Локальные производные и цепное правило.

Backpropagation

Основная идея backprop: градиент сложной композиции можно получить по цепному правилу, используя локальные производные.

​

Для сети:

​

При Backprop:

​

​

выражается через

​

9 of 65

Локальные производные и цепное правило.

Backpropagation

10 of 65

Локальные производные и цепное правило.

Backpropagation

Наивно: вычислять градиент по каждому параметру отдельно - слишком дорого.

​

Backprop переиспользует промежуточные вычисления:

– один forward,

– один backward.

11 of 65

Пример. Вычисление выражения

Backpropagation

Пусть нейросеть:

​

Forward.

​

Backward.

Для умножения:

​

Для сложения:

​

Итого:

12 of 65

Пример. Граф.

Backpropagation

13 of 65

Пример. Граф.

Backpropagation

14 of 65

Полносвязная нейросеть с одним скрытым слоем.

Backpropagation

15 of 65

Полносвязная нейросеть с одним скрытым слоем. Forward.

Backpropagation

16 of 65

Полносвязная нейросеть с одним скрытым слоем. BackProp.

Backpropagation

17 of 65

Полносвязная нейросеть с одним скрытым слоем. BackProp.

Backpropagation

Для веса:

Для смещения:

​

Для активации:

​

Значит: .,, , Обозначим:

18 of 65

Полносвязная нейросеть с одним скрытым слоем. BackProp.

Backpropagation

ReLU:

​

Производная:

​

Поэлементно:

​

Векторно:

​

​

19 of 65

Полносвязная нейросеть с одним скрытым слоем. BackProp.

Backpropagation

20 of 65

Переобучение (overfitting)

Переобучение

Модель отлично объясняет обучающие данные, но:

  • плохо работает на тесте
  • сильно реагирует на шум

​

Какие могут быть причины?

21 of 65

Симптомы на графиках

Переобучение

Underfitting:

  • train loss высок, val loss тоже высок

​

Overfitting:

  • train loss продолжает падать
  • val loss достигает минимума и начинает расти
  • большой gap между train и val

22 of 65

L2-регуляризация (weight decay)

Регуляризация

L2-регуляризация: штраф за большие веса.

​

Добавляем к лоссу штраф:

​

​

Градиент по весам:

​

​

​

в Adam/SGD часто реализуется как отдельный параметр weight_decay.

23 of 65

Dropout.

Регуляризация

Dropout: случайно выключаем нейроны.

​

Во время обучения:

  • для каждого нейрона генерируем маску

​

​

То есть каждый нейрон с вероятностью (1 - p) обнуляется, а остальные масштабируются.

24 of 65

Dropout.

Регуляризация

На инференсе: dropout выключен, используем полные активации.

Модель не может “полагаться” на один нейрон - она учится распределять информацию.

Похоже на “усредненный” ансамбль многий сетей..

25 of 65

Data augmentation.

Регуляризация

Data augmentation: синтетически увеличиваем датасет.

Для изображений:

  • повороты
  • сдвиги
  • флипы
  • изменение яркости/контраста
  • crop
  • небольшие шумы.

26 of 65

Data augmentation.

Регуляризация

Data augmentation: синтетически увеличиваем датасет.

Для изображений:

27 of 65

Data augmentation.

Регуляризация

Data augmentation: синтетически увеличиваем датасет.

Для текста:

  • переформулировки.
  • dropout слов
  • back-translation.

28 of 65

Data augmentation.

Регуляризация

Data augmentation: синтетически увеличиваем датасет.

Для текста:

  • "Кошка сидела на мягком ковре и громко мяукала."
  • "Кошка находилась на мягком ковре и громко мяукала."
  • "Кошка сидела на мягком паласе и громко кричала."
  • "Кошка сидела на мягком ковре покрытие и громко мяукала."
  • "Кошка сидела на ковре мягком и громко мяукала."
  • "The cat was sitting on a soft carpet and meowing loudly."
  • "Мягкий ковер служил местом, где кошка издавала громкие звуки."

29 of 65

Data augmentation.

Регуляризация

Data augmentation: синтетически увеличиваем датасет.

Зачем?

  • Модель видит больше разнообразия;
  • Труднее переобучиться на конкретные шумовые детали.

30 of 65

Checkpointing.

Регуляризация

Checkpointing: сохраняем лучшую модель

​

Во время обучения при каждом улучшении val loss / val metric сохраняем веса как “лучший чекпоинт”;

​

Долгие тренировки, риск падения

Модель может переобучиться после точки с лучшим val-result;

Удобно для сравнения разных версий.

31 of 65

Early stopping.

Регуляризация

Early stopping: остановка по росту val-loss.

​

Алгоритм.

  1. Ведём лог train loss и val loss по эпохам.
  2. Если val loss не улучшается K эпох подряд:
  3. останавливаем обучение.
  4. откатываем к модели с лучшим val.

​

Мы не даём модели «дотюнить» шум train-данных.

Работает особенно хорошо, если модель сильно переобучается.

32 of 65

Зачем нормализация?

Нормализация

Без нормализации:

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

​

Идея:

Привести значения к «хорошему» масштабу (примерно ноль-среднее, единичная дисперсия).

Дать сети научиться оптимальному масштабу/сдвигу поверх нормализации.

33 of 65

Batch Normalization (BN).

Нормализация

Для одного канала/нейрона берём значения по батчу

​

  1. Считаем статистики:

​

  • Нормализуем:

​

  • Линейное трансформируем:

​

γ,β - обучаемые параметры.

34 of 65

Batch Normalization (BN).

Нормализация

Эффекты:

  • Стабилизирует распределения активаций;
  • Позволяет использовать более высокий learning rate;
  • Даёт легкий регуляризационный эффект.

35 of 65

Layer Normalization (LN).

Нормализация

Отличие от BN:

  • BN нормализует по батчу (разные примеры, один нейрон).
  • LN нормализует по признакам внутри одного примера.

Пусть вектор активаций слоя:

​

  1. Считаем статистики:

​

  • Нормализуем:

36 of 65

Взрыв / затухание активаций и градиентов.

Инициализация весов

Если инициализировать веса слишком большими активации и градиенты могут взрываться по слоям.

​

Если слишком маленькими всё падает почти в ноль.

​

​

Хотим: при прохождении через слой сохранять дисперсию сигналов и градиентов.

37 of 65

Xavier (Glorot) инициализация

Инициализация весов

Пусть слой:

где

​

Идея: выбрать так, чтобы дисперсия на входе и выходе совпадала.

Один из вариантов (Xavier uniform):

​

Для нормального распределения:

Подходит для активаций, которые примерно сохраняют масштаб (tanh, sigmoid в центре).

38 of 65

He (Kaiming) инициализация для ReLU.

Инициализация весов

ReLU обрезает отрицательную половину, эффективная дисперсия меняется.

Для компенсации выбирают большую дисперсию.

�He Normal:

​

Используется во всех сетях с ReLU/LeakyReLU/GELU по умолчанию (PyTorch, TF).

39 of 65

Learning rate: слишком большой / слишком маленький.

Практическая отладка обучения

Слишком большой LR:

  • loss колеблется или растёт
  • метрики скачут
  • иногда nan/inf в лоссе
  • ​

Слишком маленький LR:

  • loss падает очень медленно
  • модель может застрять в плохом локальном минимуме/седле

​

40 of 65

Learning rate: слишком большой / слишком маленький.

Практическая отладка обучения

LR range test (Cyclical LR идея):

прогнать модель по нескольким эпохам, увеличивая LR, и посмотреть, где loss начинает ухудшаться

41 of 65

Взрывающиеся градиенты и gradient clipping.

Практическая отладка обучения

Признаки:

  • Loss внезапно становится nan / inf.
  • Параметры «улетают» (очень большие значения).
  • Нормы градиентов очень большие.

​

Решение - Gradient clipping по норме:

​

​

tau - максимум нормы.

42 of 65

Проверка данных и preprocessing.

Практическая отладка обучения

Чеклист:

Правильный масштаб признаков:

  • изображения: [0,1] или [-1,1]
  • нормализация mean/std

Согласованность train/val/test:

  • одинаковый preprocessing
  • одинаковый формат меток

Перемешивание (shuffle) батчей:

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

43 of 65

Sanity check.

Практическая отладка обучения

Идея:

Берём небольшой кусочек данных (10-100 объектов).

Обучаем сеть довольно долго.

Если модель не может довести train loss почти до 0:

  • проблема в архитектуре
  • проблем в коде backprop
  • проблема в лоссе
  • проблема в препроцессинге

44 of 65

Зачем нужен эксперимент-трекинг.

CI/CD в ML

Проектов и экспериментов много - разные модели, гиперпараметры, версии данных.

​

Нужно:

  • воспроизводимость (какой код дал этот результат?);
  • удобное сравнение экспериментов;
  • мониторинг качества и метрик;
  • возможность откатиться к «хорошей» модели.

​

45 of 65

TensorBoard.

CI/CD в ML

TensorBoard: стандартная визуализация для TensorFlow / PyTorch.

​

Возможности:

Графики loss / accuracy по эпохам и шагам.

Визуализация графа модели.

Гистограммы распределений весов и градиентов.

Embeddings - проекции векторов в 2D и 3D.

Отображение картинок, текстов, аудио.

46 of 65

TensorBoard.

CI/CD в ML

47 of 65

Weights & Biases (W&B).

CI/CD в ML

Логирование:

  • лосс, метрики, LR, градиенты, картинки.

Live dashboards:

  • онлайн мониторинг обучения.

Sweeps:

  • автоматический подбор гиперпараметров (grid / random / Bayesian).

​

48 of 65

Weights & Biases (W&B).

CI/CD в ML

49 of 65

Weights & Biases (W&B).

CI/CD в ML

50 of 65

Weights & Biases (W&B).

CI/CD в ML

51 of 65

MLflow.

CI/CD в ML

Tracking:

  • логирование экспериментов (метрики, параметры, артефакты).

52 of 65

MLflow.

CI/CD в ML

Models:

  • единый формат сохранения моделей

Model Registry:

  • версия модели, стейты (staging, production).

Pipelines:

  • воспроизводимые ML-пайплайны.

53 of 65

MLflow.

CI/CD в ML

54 of 65

Проблема полносвязных сетей для картинок

Введение в CNN

Изображение

При flatten - вектор размерности

Полносвязный слой требует параметров.

​

Не учитывается структура:

  • близкие пиксели и далекие обрабатываются одинаково;
  • нет инвариантности к сдвигам.

​

Нужны слои, которые будут учитывать локальные связи.

55 of 65

Идея.

Введение в CNN

56 of 65

2D свёртка.

Введение в CNN

Kernel - фильтр маленького размера.

Один и тот же набор весов применяется ко всем позициям.

Результат - карта признаков (feature map).

​

Классическая схема: маленькое окно, разъезжающее по картинке, и получающаяся карта признаков.

57 of 65

Feature maps и каналы.

Введение в CNN

На входе: изображение с C каналами.

Фильтр имеет размерность:

​

Несколько фильтров - на выходе 3D-тензор:

​

Каждый канал на выходе - разный тип признака (детектор: краёв, текстур, углов и т.д.).

58 of 65

Идея свёртки с каналами.

Введение в CNN

59 of 65

Pooling.

Введение в CNN

Max-pooling (пример):

Берём окно k×k и stride s.

Для каждой области берём максимум:

​

​

Зачем?

  • уменьшаем размер тензора (экономия параметров и вычислений)
  • получаем некоторую устойчивость к небольшим сдвигам.

60 of 65

Pooling.

Введение в CNN

61 of 65

Иерархия признаков.

Введение в CNN

Первые слои:�- детекторы простых паттернов: края, градиенты, простые текстуры.

​

Средние слои:�- комбинации этих паттернов: углы, формы, части объектов.

​

Глубокие слои:

  • высокоуровневые концепции: «глаз», «колесо», «лицо», «кот».

62 of 65

Иерархия признаков.

Введение в CNN

63 of 65

Иерархия признаков.

Введение в CNN

64 of 65

Deer learning

presentation end

Далее:

CNN и картинки

65 of 65

  • всё, что в презентации было…

Теоретический минимум