Как учится машина. Революция в области нейронных сетей и глубокого обучения - Ян Лекун

dC(zg, y)/dwg = dC(zg, y)/dzg * dg(zf, wg)/dwg
Таким образом, мы получаем градиент по отношению к wg, который позволит нам обновить вектор wg.
Чтобы получить градиент стоимости относительно параметров модуля f, для wf выполняется аналогичный расчет:
dC(zg, y)/dwf = dC(zg, y)/dzf * df(x, wf)/dwf
Последний элемент справа – это матрица Якоби модуля f по отношению к его вектору параметров wf.
Теперь рассмотрим более общий случай сети с несколькими сложными модулями, например, указанный на диаграмме 2 рис. 5.7.
Данная сеть представляет собой каскад из нескольких модулей, пронумерованных индексом k. Номер модуля k – это функция fk(z[k], w[k]), выход которой равен z[k + 1].
Предположим, что нам известен градиент функции стоимости относительно z[k + 1]; обозначим его как g[k + 1]:
g[k + 1] = dC/dz[k + 1].
По правилу дифференцирования сложных векторных функций, указанному выше, можно составить следующее выражение:
g[k] = dC/dz[k] = dC/dz[k + 1]*dz[k + 1]/dz[k].
Последний элемент формулы – это матрица Якоби модуля k:
dz[k + 1]/dz[k] = dfk(z[k], w[k])/dz[k],
то есть матрица, элемент которой i, j (в строке i и столбце j) указывает, насколько изменяется выход j модуля, когда изменяется вход i.
Данная формула рекурсивна: она применяется к любому модулю и вычисляет градиент на его входе с учетом градиента на выходе. Последовательно применяя это правило ко всем модулям, начиная с выхода сети и продвигаясь к входу, можно вычислить все градиенты стоимости по всем z[k].
Точно так же теперь можно рассчитать градиенты по параметрам, используя аналогичную формулу:
g[k] = dC/dw[k] = dC/dz[k + 1] * dz[k + 1]/dw[k].
Последний элемент – это матрица Якоби модуля k:
dz[k + 1]/dw[k] = dfk(z[k], w[k])/dw[k].
Формулы обратного распространения ошибки говорят нам о следующем:
1. Градиент функции стоимости C по отношению к входу слоя k, то есть выходу слоя k – 1, равен градиенту стоимости по отношению к выходу слоя k, то есть входу слоя k + 1, умноженному на матрицу Якоби функции слоя k по отношению к ее входному вектору. Данная процедура, применяемая рекурсивно, начиная с вывода и направления к входу, используется для вычисления градиентов стоимости по отношению к выходам (и входам) всех слоев.
2. Градиент функции стоимости C относительно вектора параметров слоя k равен градиенту стоимости относительно выхода слоя k, умноженному на матрицу Якоби функции слоя k относительно его вектора параметров.
Эти формулы лежат в основе общего принципа обратного распространения градиента в структуре модулей, наложенных друг на друга. Но такая же процедура может применяться и тогда, когда модули соединяются друг с другом более сложным способом. Это работает при условии, что схема соединений между модулями не образует циклов, то есть не имеет соединений, возвращающих сигнал на вход предыдущих слоев. В схеме без циклов существует естественный прямой порядок вычисления выходных сигналов всех модулей и обратный порядок для обратного распространения градиентов.
Несмотря на это небольшое ограничение (которое может быть снято, и мы увидим это позже), возможность использовать самые разнообразные модули в сочетании со свободой организовать их согласно своим пожеланиям, дает инженеру гибкость в адаптации сетевой архитектуры к конкретной проблеме. Например, очень разную сетевую архитектуру имеют сети, предназначенные для распознавания изображений, распознавания речи, перевода, синтеза изображений и создания текста.
Возражения не принимаются
Чтобы обосновать практическую пригодность метода обратного распространения ошибки, нам пришлось выйти за рамки некоторых теоретических возражений. Отдельные эксперты выдвигали предположения, что если построить многослойную нейронную сеть с непрерывными нейронами и попытаться обучить ее по методу градиентного спуска, как было продемонстрировано в Главе 4, то возникает риск «застрять» в локальных минимумах. Используя аналогию с горным пейзажем, вы, вместо того чтобы спуститься в главную долину, можете оказаться в небольшой котловине, откуда нет спуска вниз. Следовательно, на практике системы могут никогда не достичь оптимума[58].
Почему многослойные сети могут иметь несколько минимумов? При обучении многослойной сети выполнению той или иной задачи почти всегда есть несколько конфигураций весов, которые на обучающих примерах дадут одинаковый выход. Представьте себе сеть с двумя линейными слоями, которая уже была обучена (такая сеть не очень полезна для реального применения, но зато хороша в качестве примера). Ее весовая конфигурация является минимумом функции стоимости. Мы могли бы взять все веса нейронов в первичном слое, умножить их на 2 и одновременно умножить на ½ все веса, которые выходят из него, и связать его со следующим слоем. Выход сети останется неизменным. Такая модификация конфигурации веса – еще одно решение задачи. Поскольку значение функции стоимости в первоначальной конфигурация было столь же минимальным, что и в новой.
Вы можете преобразовать сеть другим способом, например, взять два нейрона из первичного слоя и поменять их местами, одновременно вытягивая вместе с ними все «нити» (вместе с их весами), соединяющие их с предыдущим слоем и со следующим слоем. Опять же, несмотря на такое преобразование, функция ввода-вывода сети остается неизменной. Если исходная конфигурация была минимумом функции стоимости, то и вторая тоже. Таким образом, функция может иметь несколько минимумов.
Распознание признаков
В многослойной сети первичные слои выступают в роли экстракторов признаков. Однако, в отличие от традиционных методов, эти экстракторы признаков создаются не «вручную», а автоматически – в процессе обучения. В этом-то и состоит вся прелесть многослойных сетей, основанных на обратном распространении.
Проанализируем примеры различного начертания букв C и D с помощью двухслойной сети, чтобы показать, как единицы первичного слоя могут обнаруживать шаблоны, которые характерны для C и D.
Мы уже сталкивались