Векторизованное доказательство без суммирования и индексов.
TL; DR
Обратное распространение - это основа глубокого обучения. Несмотря на то, что существует множество литературы по этому вопросу, мало кто подробно объясняет, откуда берутся формулы градиентов (∂ loss / ∂ W), необходимых для обратного распространения. Даже когда они объясняют, математика имеет тенденцию становиться длинной и заполненной индексами повсюду из-за большой размерности проблемы: у вас есть индекс для количества выборок, индекс для количества слоев и один для количества нейронов. в каждом слое.
Поэтому каждый раз, когда я готовился к собеседованию или просто хотел освежить знания о машинном обучении, которые я изучил в прошлом, мне всегда было трудно писать математические вычисления за обратным распространением, не заглядывая в учебник. Хотя я понимал, как это работает, я обнаружил, что формулы очень не интуитивно понятны и иногда сбивают с толку ...
Итак, идея этой статьи состоит в том, чтобы элегантно продемонстрировать формулы обратного распространения с использованием только векторизованного исчисления: Итак, никаких индексов i, j, k,… и никакого суммирования ∑ вообще! (Единственный индекс, который мы будем использовать, - это обозначить слой.)
Вступление
Предположим, у нас есть следующая архитектура нейронной сети (NN)
Наша NN имеет два скрытых слоя и один выходной слой из трех классов. Мы будем использовать активацию softmax для всех слоев.
Обучение этой модели означает минимизацию нашей функции потерь, которая представляет собой кросс-энтропию (логарифм потерь). Поскольку у нас есть 3 класса, потеря журнала составляет: 𝜉 (Y, X, W₁, W₂, W₃) = сумма [Y ○ журнал (X₃)]
Где: сумма представляет собой сумму всех элементов в матрице, а ○ представляет собой поэлементное произведение двух матриц одинаковой формы. ○ также называют произведением Адамара.
X₀ - это матрица размером n × 3, где n - размер мини-пакета.
W₀ - это матрица 3 × 5. У него есть веса для перехода от слоя 0 к 1.
X₁ - это матрица размера n × 5. Он представляет преобразование данных первого слоя.
W₁ представляет собой матрицу 5 × 4. У него есть веса для перехода со слоя 1 на 2.
X₂ - это матрица размера n × 4. Он представляет преобразование данных второго уровня.
W₂ представляет собой матрицу 4 × 3. Он имеет веса для перехода от уровня 2 к уровню 3.
X₃ - это матрица размера n × 3. Он представляет преобразование данных третьего уровня.
Y - это матрица размером n × 3, где 3 - количество классов.
В основном цель этой статьи - продемонстрировать следующее дифференциальное выражение: (★)
где 𝜹₂ = Y - X₃
и 𝜹₁ = (𝜹₂ .W₂ ᐪ ) ○ X₂ ○ (1 - X₂)
и 𝜹₀ = (𝜹₁ .W₁ ᐪ ) ○ X₁ ○ (1 - X₁ ).
и ○ продукт Адамара.
и : продукт Фробениуса
Этот дифференциал особенно интересен, потому что он показывает все градиенты, необходимые для обновления весов во время обратного распространения.
Таким образом, на каждом шаге Wᵢ обновляется следующим образом: [Wᵢ = Wᵢ + 𝛼 * Xᵢ ᐪ 𝜹ᵢ] где 𝛼 - скорость обучения.
Если вам интересно, как найти (★), то эта статья для вас!
Ключевые результаты требовали доказательства
1. Ссылка на полиномиальную регрессию.
На самом деле, если вы возьмете два последних уровня нашей сети, это будет в основном полиномиальная логистическая регрессия с X₂ в качестве входных данных и X₃ в качестве выходных прогнозов:
Если 𝜎 - функция softmax, мы можем написать X₃ = 𝜎 (X₂W₂).
Если Z₂ = X₂W₂, мы можно написать X₃ = 𝜎 (Z₂).
Таким образом, убыток можно записать следующим образом: 𝜉 = сумма [Y ○ log (𝜎 ( Z₂))]
Итак, если мы согласимся с тем, что это действительно проблема полиномиальной логистической регрессии, то мы получим следующие результаты:
Чтобы статья оставалась краткой, мы не будем вдаваться в подробности того, как рассчитать эти градиенты. Но если вас интересует доказательство, дайте мне знать, и я постараюсь написать об этом статью.
Еще одна интересная вещь, на которую следует обратить внимание, заключается в том, что, поскольку мы используем активацию softmax для всех слоев, мы можем сделать вывод:
2. Дифференцирующие функции матриц.
Эта часть очень важна, потому что она предоставит нам элегантный способ показать окончательное выражение (★).
f: Матрица - ›Скалярная
Давайте рассмотрим f как функцию, которая принимает матрицу и выводит скаляр. Если f дифференцируема, то:
Таким образом, дифференциал f записывается следующим образом:
где : означает произведение Фробениуса [A: B = след (A ᐪ B)] .
f: Скаляр - ›Скаляр, применяется поэлементно к матрице
Давайте рассмотрим f как простую функцию, которая принимает скаляр и выводит скаляр. Теперь обозначим F как функцию, которая применяет f к каждому элементу матрицы независимо. Если f дифференцируема, то:
Таким образом, дифференциал f записывается следующим образом:
где ○ - это продукт хадамара, который мы видели ранее.
3. Свойства произведений Адамара и Фробениуса.
Пусть A, B и C - три матрицы одинаковой формы.
- Свойства продукта Адамара:
Он имеет в основном те же свойства, что и простое скалярное умножение, но для матриц.
Коммутативный A ○ B = B ○ A
Ассоциативный A ○ (B ○ C) = (A ○ B) ○ C = A ○ B ○ C
Распространение по сравнению с добавлением A ○ (B + C) = A ○ B + A ○ C
- Свойства продукта Frobenius:
Распределение по сложению A: (B + C) = A: B + A: C
Следующее свойство особенно интересно, и его можно просто доказать, заменив оператор «:» формулой следа.
Совместные свойства двух продуктов:
Порядок операций:
«○» имеет более высокий приоритет, чем «:», и оба они имеют более низкий приоритет, чем матричное умножение «.» то есть: "." ›« ○ »› «:»
Таким образом, A: B ○ CD = A: (B ○ (CD))
Наиболее важным свойством между двумя операторами является следующее:
и это можно просто продемонстрировать, заменив оператор «:» формулой трассировки.
Доказательство формул обратного распространения
1. Определение убытков
Если мы объединим 1.a и 2.a, мы получим
Поскольку Z ₂ - это матричное умножение, оно отличается следующим образом:
Таким образом
Теперь у нас есть дифференциал 𝜉 на W₂ и X₂ с 4 строками доказательства.
2. Различение скрытых слоев
Теперь давайте обратимся к последнему скрытому слою.
Если мы объединим 1.b и 2.b, мы получим:
Таким образом, 𝜹₂W₂ ᐪ : d X₂ становится
Теперь у нас есть дифференциал 𝜹₂W₂ ᐪ : d X₂, с 6 строками доказательства.
Помещение этого обратно в до дает нам
Вот и все. Остальные просто повторяют этот шаг для оставшихся слоев.
Сделав для 𝜹₁W₁ ᐪ : d X₁ то же, что и для 𝜹₂W₂ ᐪ : d X₂ получаем:
3. Собираем все вместе
Наконец, поместив все обратно в d𝜉, мы получим окончательное уравнение (★)
где 𝜹₂ = Y - X₃
и 𝜹₁ = (𝜹₂ .W₂ ᐪ ) ○ G₁ = (𝜹₂ .W₂ ᐪ ) ○ X₂ ○ (1 - X₂)
и 𝜹₀ = (𝜹₁ .W₁ ᐪ ) ○ G ₀ = (𝜹₁ .W₁ ᐪ ) ○ X₁ ○ (1 - X₁)
Тада! 🎉
Заключение
Лично я считаю, что это доказательство более элегантно и его легче воспроизвести по памяти, не заглядывая в учебник. Я надеюсь, что это относится и к вам, и я надеюсь, что вам понравилась эта статья.