Основы глубокого обучения. Нихиль Будума
Чтение книги онлайн.
Читать онлайн книгу Основы глубокого обучения - Нихиль Будума страница 8
Теперь мы готовы приступить к проблеме обучения многослойных нейросетей, а не только одиночных нейронов. Обратимся к подходу обратного распространения ошибок, предложенному Дэвидом Румельхартом, Джеффри Хинтоном и Рональдом Уильямсом в 1986 году[11]. В чем основная идея? Мы не знаем, что делают скрытые нейроны, но можем вычислить, насколько быстро меняется ошибка, если мы вносим корректировки в эти процессы. На основе этого мы способны определить, как быстро трансформируется ошибка, если изменить вес конкретного соединения. По сути, мы пытаемся найти наибольший уклон! Единственная сложность в том, что приходится работать в пространстве с очень большим числом измерений. Начнем с вычисления производных функции потерь по одному обучающему примеру.
Каждый скрытый нейрон может влиять на многие выходные нейроны. Нам нужно учесть несколько эффектов ошибки, чтобы получить нужную информацию. В качестве стратегии выберем динамическое программирование. Получив производные функций потерь для одного слоя скрытых нейронов, мы применим их для вычисления производных функций потерь на выходе более низкого слоя. Когда мы найдем такие производные на выходе из скрытых нейронов, несложно будет получить производные функций потерь для весов входов в скрытый нейрон. Для упрощения введем дополнительные обозначения (рис. 2.5).
Рис. 2.5. Справочная диаграмма для вывода алгоритма обратного распространения ошибок
Нижний индекс будет обозначать слой нейронов; символ y – как обычно, выходное значение нейрона, а z – логит нейрона. Начнем с базового случая проблемы динамического программирования: вычислим производные функции потерь на выходном слое (output).
Теперь сделаем индуктивный шаг. Предположим, у нас есть производные функции потерь для слоя j. Мы собираемся вычислить производные функции потерь для более низкого слоя i. Для этого необходима информация о том, как выходные данные нейрона в слое i воздействуют на логиты всех нейронов в слое j. Вот как это сделать, используя то, что частная производная логита по входящим значениям более низкого слоя – это вес соединения wij:
Далее мы видим следующее:
Сведя эти факты воедино, мы можем выразить производные функций потерь слоя i через производные функций потерь слоя j:
Пройдя все стадии динамического программирования и заполнив таблицу всеми частными производными (функций потерь по выходным значениям скрытых нейронов), мы можем определить, как ошибка меняется по отношению к весам. Это даст нам представление о том, как корректировать веса после каждого обучающего примера:
Наконец, чтобы завершить алгоритм, как и раньше, мы суммируем частные производные по всем примерам в нашем наборе данных (dataset). Это дает нам следующую формулу изменения:
На этом описание алгоритма обратного
11
Rumelhart D. E., Hinton G. E., Williams R. J. Learning representations by backpropagating errors // Cognitive Modeling. 1988. Vol. 5. No. 3. P. 1.