Эта статья просто шпаргалка к свежему обзору, кто знает, может просто прочитать, кто не знает, может прочитать позже.

Просто выпейте чашку кофе ☕️, чтобы погрузиться в глубокое обучение с другим ресурсом.

Что такое глубокое обучение?

Краткая теория

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

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

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

Первая сеть представляет собой простой многоуровневый персептрон (MLP), а вторая — сверточная нейронная сеть (далее CNN). Другими словами, при получении входных данных наш алгоритм скажет, с некоторой связанной с этим ошибкой, какой тип цифры представляет этот ввод.

На практике определение «обучения»: в контексте обучения с учителем, распознавание цифр в нашем случае, пример 👆

  • Учебная часть состоит из функции/цели, которая должна быть предсказана с помощью заданного набора наблюдений с уже известным окончательным прогнозом (меткой). В нашем случае 👆 целью будет цифра (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), а наблюдения интенсивность и относительное положение пикселей.
  • После некоторого обучения можно сгенерировать «функцию», которая сопоставляет входные данные (цифровое изображение) с желаемыми выходными данными(тип цифры). Единственная проблема заключается в том, насколько хорошо выполняется эта операция карты.
  • При попытке сгенерировать эту «функцию» процесс обучения продолжается до тех пор, пока модель не достигнет желаемого уровня точности на обучающих данных.

Веса и смещения для ввода

Прямое распространение

В Tensorflow мы можем сделать так:

def forward(x): вернуть tf.matmul(x,W) + b

Обратное распространение

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

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

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

Функция активации

Целью функции активации является обработка нелинейности при линейном проходе в сети.

Регрессия Softmax

Softmax — это функция активации, которая обычно используется в задачах классификации. Он генерирует вероятности для выхода.

Например 👆, наша модель не будет на 100% уверена, что одна цифра — это число девять, вместо этого ответом будет распределение вероятностей, где, если модель верна, число девять будет иметь большую вероятность, чем другое другое цифры.

Для сравнения ниже приведен вектор горячих клавиш для девятизначной метки:
0 → 0
1 → 0
2 → 0
3 → 0
4 → 0
5 → 0
6 → 0
7 → 0
8 → 0
9 → 1

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

0 →0.01
1 →0.02
2 →0.03
3 →0.02
4 →0.12
5 →0.01
6 →0.03
7 →0.06
8 →0.1
9 →0.6

В Tensorflow мы можем сделать так:

def активировать (x): вернуть tf.nn.softmax (вперед (x))

Функция стоимости

Это функция, которая используется для минимизации разницы между правильными ответами (метками) и оценочными результатами нашей сети.

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

В Tensorflow мы можем сделать так:

def cross_entropy(y_label, y_pred): return (-tf.reduce_sum(y_label * tf.math.log(y_pred + 1.e-10))) # добавление 1e-10 для предотвращения ошибок в нулевых вычислениях

Оптимизация: градиентный спуск

Чтобы минимизировать стоимость обучения с максимальной скоростью (максимум вероятности), нам нужно постоянно обновлять веса и смещения, что можно понимать как «ускорение».

Оптимизация помогает использовать обновление весов и смещения с помощью метода градиентного спуска по-разному:

СГД, Адам, …..

Пакеты обучения

Тренируйтесь, используя минипакетный градиентный спуск

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

Мини-партия

Мы можем разделить наш полный набор данных на партии по 50 штук в каждой, используя любой API наборов данных (пакет набора данных Tensorflow, PyTorch, sklearn).

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

Как улучшить нашу модель?

Несколько вариантов, как показано ниже

  • Регуляризация нейронных сетей с использованием DropConnect
  • Многоколоночные глубокие нейронные сети для классификации изображений
  • APAC: расширенная классификация паттернов с помощью нейронных сетей
  • Простая глубокая нейронная сеть с отсевом

Практика

Скелет для глубокого обучения на основе классического MNIST

Похожие темы:

Визуализация сверточных нейронных сетей с помощью GIF-файлов

https://teetracker.medium.com/an-illustration-gif-to-explain-deep-convolutional-networks-dcnn-da4cef557c9d