Если есть проблема с отображением формулы и изображения,Пожалуйста, просмотрите исходный текст.
Автоматическое дифференцирование (AD)
Автоматическое дифференцирование заключается в разложении составной функции на выходную величину (корневой узел), ряд входных величин (конечные узлы) и основные функции (промежуточные узлы) для формирования вычислительного графа (вычислительного графа) и использования его для вычисления отношения между любыми двумя узлами Градиент:
- Правило сложения: градиент между любыми двумя узлами есть сумма частных разностей всех путей между ними;
- Цепное правило: частный дифференциал пути — это произведение частных дифференциалов между соседними узлами пути.
один пример
даватьЦю Сипэн «Нейронные сети и глубокое обучение»Пример в , функция ?f(x; w, b) = \frac{1}{\exp{(-(wx + b))} + 1}?, когда (x, w, b) = (1, 0 , 0), график расчета выглядит следующим образом:
Каждое ребро помечается результатом прямого вычисления (красные числа) и частным дифференциалом хвостового узла (верхний узел) к головному узлу (нижний узел).
Потому что градиент между любыми двумя узлами представляет собой сумму частных дифференциалов всех путей между ними (не показаны в этом примере), где частный дифференциал каждого пути является произведением частных дифференциалов на ребрах пути. имеют:
Последние две формулы используют результат первой формулы, что также видно из графика расчета: при вычислении градиента корневого узла к другим узлам больше повторно используется градиент ребра верхнего слоя в пути.
Поэтому, если граф вычислений сложный (много путей) или имеется много переменных, по которым необходимо вычислять частные производные, градиенты ребер вычисляются из верхнего слоя и кэшируются, чтобы помочь в вычислении частных производных корневого узла. к нижним узлам, что позволяет сократить объем вычислений. Это алгоритм обратного распространения.
Алгоритм обратного распространения (BP)
В нейронной сети, пока каждый компонент и функция потерь дифференцируемы, функция потерь является дифференцируемой составной функцией каждого входа.
Затем градиент можно рассчитать с помощью автоматического дифференцирования, тем самым уменьшив ошибку с помощью алгоритма градиентного спуска.
Таким образом, алгоритм BP на самом деле является автоматическим дифференцированием, но корневой узел является функцией потерь для измерения ошибки, поэтому частная производная между узлами называется членом ошибки.
Полносвязная нейронная сеть FNN
digraph {
label="全连接网络的计算图";
rankdir=LR;
node [shape=none];
x; w[label="W_i"]; b[label="b_i"]; y1 [label="y'"]; y; e [label="Δ"];
node [shape=circle];
{ rank=same; y -> L; }
subgraph cluster_hidden_Layers {
label="隐藏层 ×N";
h1 [label="x"];
h2 [label="+"];
h3 [label="σ"];
{ rank=same; w -> h1; }
{ rank=same; b -> h2; }
}
x -> h1 -> h2 -> h3 -> y1 -> L -> e;
}
на картинкевсе векторы,- матрица, x - умножение матрицы,— функция активации, y — фактический результат, а L — дифференцируемая функция потерь.
Полносвязность воплощена в умножении матрицсередина.
Сверточная нейронная сеть CNN
Сверточная нейронная сеть — это полностью подключенная сеть, которая добавляет сверточные слои и объединяющие слои.
Сверточный слой
Операция сверткиЭто комбинация умножения и сложения, и легко исследовать частные производные каждого компонента один за другим и получить:
воперация свертки,- перевернутая широкая операция свертки,является скалярной функцией.
должен быть в курсеЭто не матричное исчисление, а поэлементные частные производные.
Поэтому операцию свертки можно рассматривать как базовую функцию и закладывать в расчетный граф для автоматического дифференцирования.
digraph {
label="卷积运算";
rankdir=LR;
conv [label="⊗", shape=circle];
node [shape=none];
"输入 X" -> conv -> "输出 Y";
{ rank=same; "卷积核 W" -> conv; }
}
Кроме того, если операцию свертки рассматривать как умножение, вычислительный граф CNN будет таким же, как и у FNN.
Более общий случайОба являются тензорами (W — группа ядра свертки), и при выполнении матричного умножения × поэлементное умножение использует операцию свертки (элементы — это матрицы).
Объединение слоев
- Максимальное объединение: верхний узел имеет градиент 1 только для самого большого узла в области объединения, а градиент для других узлов равен 0;
- Среднее объединение: если предположить, что область объединения равна n, градиент верхнего узла к каждому элементу равен 1/n.
Производная операции Макса не является непрерывной, поэтому градиент здесь является лишь приближением.
Рекуррентная нейронная сеть RNN
Пусть модель RNN будет: ?h_t = \sigma(U \cdot h_{t-1} + W \cdot x_t + b)? Тогда график расчета выглядит следующим образом:
digraph {
label="循环神经网络的计算图";
node [shape=none];
x1; w1[label="W"]; b1[label="b"]; h1;
x2; w2[label="W"]; b2[label="b"]; u2[label="U"]; h2;
u3[label="U"]; etc[label="..."];
node [shape=circle];
node [label="×"]; op11; op20; op21; op30;
node [label="+"]; op12; op22[style=bold, xlabel="z2"];
node [label="σ"]; op13; op23;
edge [arrowhead=open];
{
rank=same;
x1 -> op11;
op11 -> op12 -> op13 [arrowhead=normal, style=bold, color=red];
op13 -> h1;
}
op11 -> w1 [dir=back, arrowhead=normal, style=bold, color=red];
op12 -> b1 [dir=back];
op13 -> op20 [arrowhead=normal, style=bold, color=red];
{ rank=same; op20 -> u2 [dir=back]; }
op20 -> op22 [arrowhead=normal, style=bold, color=red];
{
rank=same;
x2 -> op21;
op21 -> op22 -> op23 -> h2 [arrowhead=normal, style=bold, color=red];
}
op21 -> w2 [dir=back, arrowhead=normal, style=bold, color=red];
op22 -> b2 [dir=back];
op23 -> op30;
{ rank=same; op30 -> u3 [dir=back]; }
op30 -> etc;
}
Все W представляют собой одну и ту же матрицу, которую можно рассматривать как один и тот же узел, распределенный по каждому узлу W в графе посредством тождественного преобразования. б, У то же самое.
Это лишь промежуточный результат, который можно вывести с помощью других дифференцируемых преобразований.Затем подключите функцию потерь, чтобы получить ошибку, эта часть такая же, как FNN, поэтому она опущена.
Расчет градиента
Например, для расчета, соединяющий W иГрадиент пути (два выделенных красным жирным шрифтом) можно суммировать, что является алгоритмом обратного распространения во времени (BPTT).
На самом деле, если требуемые градиенты кэшируются во время прямого вычисления, ошибочный термин должен быть только передан в кэш, чтобы завершиться, когда позже произойдет обратное распространение ошибочного члена. Например, он рассчитан на рисунке, при расчете, в расчете, нет необходимости возвращаться к каждому предыдущему слою, как BPTT. Это алгоритм рекуррентного обучения в реальном времени (RTRL).