Lecture 12.
BackProp, CNN
Вспомним всё
Remind lecture 11
Нейросеть - это параметрическая функция:
θ - все веса и смещения.
На вход подаётся вектор признаков.
На выходе может быть что угодно:
Архитектура многослойного “перцептрона”.
Remind lecture 11
Многослойный перцептрон (MLP, fully-connected network):
Каждый слой состоит из линейного преобразования + нелинейности.
Пример.
Remind lecture 11
Функция активации добавляет нелинейность.
Обучение = минимизация функции потерь.
Remind lecture 11
Нам дана обучающая выборка, модель и лосс.
Тогда задача формулируется так:
Вычислительный граф
Backpropagation
Любое вычисление в сети можно представить как ориентированный ациклический граф:
Forward pass: вычисление значений по графу.
Backward pass: вычисление градиентов по графу.
Локальные производные и цепное правило.
Backpropagation
Основная идея backprop: градиент сложной композиции можно получить по цепному правилу, используя локальные производные.
Пусть
�Тогда
Нам нужен Лосс для всех весов.
Локальные производные и цепное правило.
Backpropagation
Основная идея backprop: градиент сложной композиции можно получить по цепному правилу, используя локальные производные.
Для сети:
При Backprop:
выражается через
Локальные производные и цепное правило.
Backpropagation
Локальные производные и цепное правило.
Backpropagation
Наивно: вычислять градиент по каждому параметру отдельно - слишком дорого.
Backprop переиспользует промежуточные вычисления:
– один forward,
– один backward.
Пример. Вычисление выражения
Backpropagation
Пусть нейросеть:
Forward.
Backward.
Для умножения:
Для сложения:
Итого:
Пример. Граф.
Backpropagation
Пример. Граф.
Backpropagation
Полносвязная нейросеть с одним скрытым слоем.
Backpropagation
Полносвязная нейросеть с одним скрытым слоем. Forward.
Backpropagation
Полносвязная нейросеть с одним скрытым слоем. BackProp.
Backpropagation
Полносвязная нейросеть с одним скрытым слоем. BackProp.
Backpropagation
Для веса:
Для смещения:
Для активации:
Значит: .,, , Обозначим:
Полносвязная нейросеть с одним скрытым слоем. BackProp.
Backpropagation
ReLU:
Производная:
Поэлементно:
Векторно:
Полносвязная нейросеть с одним скрытым слоем. BackProp.
Backpropagation
Переобучение (overfitting)
Переобучение
Модель отлично объясняет обучающие данные, но:
Какие могут быть причины?
Симптомы на графиках
Переобучение
Underfitting:
Overfitting:
L2-регуляризация (weight decay)
Регуляризация
L2-регуляризация: штраф за большие веса.
Добавляем к лоссу штраф:
Градиент по весам:
в Adam/SGD часто реализуется как отдельный параметр weight_decay.
Dropout.
Регуляризация
Dropout: случайно выключаем нейроны.
Во время обучения:
То есть каждый нейрон с вероятностью (1 - p) обнуляется, а остальные масштабируются.
Dropout.
Регуляризация
На инференсе: dropout выключен, используем полные активации.
Модель не может “полагаться” на один нейрон - она учится распределять информацию.
Похоже на “усредненный” ансамбль многий сетей..
Data augmentation.
Регуляризация
Data augmentation: синтетически увеличиваем датасет.
Для изображений:
Data augmentation.
Регуляризация
Data augmentation: синтетически увеличиваем датасет.
Для изображений:
Data augmentation.
Регуляризация
Data augmentation: синтетически увеличиваем датасет.
Для текста:
Data augmentation.
Регуляризация
Data augmentation: синтетически увеличиваем датасет.
Для текста:
Data augmentation.
Регуляризация
Data augmentation: синтетически увеличиваем датасет.
Зачем?
Checkpointing.
Регуляризация
Checkpointing: сохраняем лучшую модель
Во время обучения при каждом улучшении val loss / val metric сохраняем веса как “лучший чекпоинт”;
Долгие тренировки, риск падения
Модель может переобучиться после точки с лучшим val-result;
Удобно для сравнения разных версий.
Early stopping.
Регуляризация
Early stopping: остановка по росту val-loss.
Алгоритм.
Мы не даём модели «дотюнить» шум train-данных.
Работает особенно хорошо, если модель сильно переобучается.
Зачем нормализация?
Нормализация
Без нормализации:
Идея:
Привести значения к «хорошему» масштабу (примерно ноль-среднее, единичная дисперсия).
Дать сети научиться оптимальному масштабу/сдвигу поверх нормализации.
Batch Normalization (BN).
Нормализация
Для одного канала/нейрона берём значения по батчу
γ,β - обучаемые параметры.
Batch Normalization (BN).
Нормализация
Эффекты:
Layer Normalization (LN).
Нормализация
Отличие от BN:
Пусть вектор активаций слоя:
Взрыв / затухание активаций и градиентов.
Инициализация весов
Если инициализировать веса слишком большими активации и градиенты могут взрываться по слоям.
Если слишком маленькими всё падает почти в ноль.
Хотим: при прохождении через слой сохранять дисперсию сигналов и градиентов.
Xavier (Glorot) инициализация
Инициализация весов
Пусть слой:
где
Идея: выбрать так, чтобы дисперсия на входе и выходе совпадала.
Один из вариантов (Xavier uniform):
Для нормального распределения:
Подходит для активаций, которые примерно сохраняют масштаб (tanh, sigmoid в центре).
He (Kaiming) инициализация для ReLU.
Инициализация весов
ReLU обрезает отрицательную половину, эффективная дисперсия меняется.
Для компенсации выбирают большую дисперсию.
�He Normal:
Используется во всех сетях с ReLU/LeakyReLU/GELU по умолчанию (PyTorch, TF).
Learning rate: слишком большой / слишком маленький.
Практическая отладка обучения
Слишком большой LR:
Слишком маленький LR:
Learning rate: слишком большой / слишком маленький.
Практическая отладка обучения
LR range test (Cyclical LR идея):
прогнать модель по нескольким эпохам, увеличивая LR, и посмотреть, где loss начинает ухудшаться
Взрывающиеся градиенты и gradient clipping.
Практическая отладка обучения
Признаки:
Решение - Gradient clipping по норме:
tau - максимум нормы.
Проверка данных и preprocessing.
Практическая отладка обучения
Чеклист:
Правильный масштаб признаков:
Согласованность train/val/test:
Перемешивание (shuffle) батчей:
Sanity check.
Практическая отладка обучения
Идея:
Берём небольшой кусочек данных (10-100 объектов).
Обучаем сеть довольно долго.
Если модель не может довести train loss почти до 0:
Зачем нужен эксперимент-трекинг.
CI/CD в ML
Проектов и экспериментов много - разные модели, гиперпараметры, версии данных.
Нужно:
TensorBoard.
CI/CD в ML
TensorBoard: стандартная визуализация для TensorFlow / PyTorch.
Возможности:
Графики loss / accuracy по эпохам и шагам.
Визуализация графа модели.
Гистограммы распределений весов и градиентов.
Embeddings - проекции векторов в 2D и 3D.
Отображение картинок, текстов, аудио.
TensorBoard.
CI/CD в ML
Weights & Biases (W&B).
CI/CD в ML
Логирование:
Live dashboards:
Sweeps:
Weights & Biases (W&B).
CI/CD в ML
Weights & Biases (W&B).
CI/CD в ML
Weights & Biases (W&B).
CI/CD в ML
MLflow.
CI/CD в ML
Tracking:
MLflow.
CI/CD в ML
Models:
Model Registry:
Pipelines:
MLflow.
CI/CD в ML
Проблема полносвязных сетей для картинок
Введение в CNN
Изображение
При flatten - вектор размерности
Полносвязный слой требует параметров.
Не учитывается структура:
Нужны слои, которые будут учитывать локальные связи.
Идея.
Введение в CNN
2D свёртка.
Введение в CNN
Kernel - фильтр маленького размера.
Один и тот же набор весов применяется ко всем позициям.
Результат - карта признаков (feature map).
Классическая схема: маленькое окно, разъезжающее по картинке, и получающаяся карта признаков.
Feature maps и каналы.
Введение в CNN
На входе: изображение с C каналами.
Фильтр имеет размерность:
Несколько фильтров - на выходе 3D-тензор:
Каждый канал на выходе - разный тип признака (детектор: краёв, текстур, углов и т.д.).
Идея свёртки с каналами.
Введение в CNN
Pooling.
Введение в CNN
Max-pooling (пример):
Берём окно k×k и stride s.
Для каждой области берём максимум:
Зачем?
Pooling.
Введение в CNN
Иерархия признаков.
Введение в CNN
Первые слои:�- детекторы простых паттернов: края, градиенты, простые текстуры.
Средние слои:�- комбинации этих паттернов: углы, формы, части объектов.
Глубокие слои:
Иерархия признаков.
Введение в CNN
Иерархия признаков.
Введение в CNN
Deer learning
presentation end
Далее:
CNN и картинки
Теоретический минимум