Подробно рассматриваем обратное распространение ошибки для простой нейронной сети. Численный пример
В данной статье мы рассмотрим прямое распространение сигнала и обратное распространение ошибки в полносвязной нейронной сети прямого распространения. В результате получим весь набор формул, необходимых для программной реализации нейронной сети. В завершении статьи рассмотрим численный пример.
«Полносвязная» (fully connected) — означает, что каждый нейрон предыдущего слоя соединён с каждым нейроном следующего слоя. «Прямого распространения» (feedforward) — означает, что сигнал проходит через нейронную сеть в одном направлении от входного к выходному слою.
Полносвязная нейронная сеть прямого распространения («перцептрон») — это простейший и наиболее типичный пример искусственной нейронной сети.
Содержание
Нейронная сеть как функция
Обратное распространение ошибки и обновление
4.1. Вычисление новых весов матрицы W^3
4.2. Вычисление новых смещений вектора b^3
Нейронная сеть как функция
Искусственная нейронная сеть является математической функцией, а точнее — композицией (суперпозицией) функций.
Было доказано (George Cybenko, 1989), что полносвязная нейронная сеть прямого распространения с хотя бы одним скрытым слоем и достаточным количеством нейронов потенциально может аппроксимировать любую непрерывную функцию, т.е. по своей сути она — универсальный аппроксиматор.
«Свойства универсальной аппроксимации встречаются в математике чаще, чем можно было бы ожидать. Например, теорема Вейерштрасса — Стоуна доказывает, что любая непрерывная функция на замкнутом интервале может быть приближена многочленной функцией. Если ослабить наши критерии далее, можно использовать ряды Тейлора и ряды Фурье, предлагающие некоторые возможности универсальной аппроксимации (в пределах их областей схождения). Тот факт, что универсальная сходимость — довольно обычное явление в математике, дает частичное обоснование эмпирического наблюдения, что существует много малых вариантов полносвязных сетей, которые, судя по всему, дают свойство универсальной аппроксимации».
— Рамсундар Б., Заде Р.Б. TensorFlow для глубокого обучения. Спб., 2019. С. 101.
Запишем нейронную сеть, которую мы будем рассматривать в данной статье, в виде функции:
где
Мы будем использовать принятую в литературе по нейронам сетям запись
Для комфортного чтения статьи необходимо обладать некоторым знанием линейной алгебры (обязательный минимум — операции над матрицами), производной сложной функции и частных производных.
Дизайн нейронной сети
Нейронная сеть имеет три слоя с тремя нейронами в каждом из них. Нелинейное изменение проходящего через сеть сигнала обеспечивает функция активации сигмоид (sigmoid) на скрытом и выходном слоях:
Поскольку на практике большинство реальных данных имеют нелинейный характер, используются нелинейные функции активации, позволяющие извлекать нелинейные зависимости в данных.
Перепишем уравнение рассматриваемой сети для заданных параметров:
Функция активации поэлементно применяется к каждому элементу соответствующего вектора
Прямое распространение сигнала
Запишем уравнения для прямого прохождения сигнала через нейронную сеть:
и функцию стоимости (cost function)
где
Таким образом, функция стоимости для нашей нейронной сети в развёрнутом виде:
Функция стоимости показывает нам насколько сильно отличаются текущие значения нейронной сети от целевых.
Обратное распространение ошибки и обновление
В сущности, для реализации алгоритма обратного распространения ошибки используется довольно простая идея.
Градиент (в общем случае) — вектор, определяющий направление наискорейшего роста функции нескольких переменных. Вычитая из текущих значений весов и смещений соответствующие значения частных производных как элементов градиента функции стоимости
Этот подход называется алгоритмом градиентного спуска. Иногда может возникать путаница или отождествление этих двух алгоритмов, поскольку они тесно взаимосвязаны и один используется для реализации другого.
Несмотря на простоту и эффективность, алгоритм градиентного спуска в общем случае имеет свои ограничения, например, седловая точка, локальный минимум, перетренировка (overtraining) (попадание в глобальный минимум).
Найдём частные производные по всем элементам матрицы
поскольку
Преобразуем функцию активации сигмоид и найдём её производную:
В производной по матрице мы находим производную по каждому из её элементов.
Раскроем сумму для переменной
Найдём частную производную по переменной
Преобразуем сигмоид и получим окончательную форму выражения для
Обратное распространение ошибки является частным случаем автоматического дифференцирования, для реализации которого нам и необходимо привести все вычислительные выражения к определённому виду.
Таким же образом для переменных
Найдём новые значения (обновлённые веса) для переменных
где
Найдём остальные частные производные для матрицы
Найдём частную производную по переменной
Преобразуем сигмоид и получим окончательную форму выражения для
Таким же образом для переменных
Найдём новые значения (обновлённые веса) для переменных
Раскроем сумму для
Найдём частную производную по переменной
Преобразуем сигмоид и получим окончательную форму выражения для
Таким же образом для переменных
Найдём новые значения (обновлённые веса) для переменных
Теперь найдём частные производные по всем элементам вектора
Найдём частную производную по
Преобразуем сигмоид и получим окончательную форму выражения для
Найдём новое значение для смещения
Вычислим частные производные по
Найдём новые значения для
Найдём частные производные по всем элементам матрицы
в свою очередь,
тогда сумма для переменной
Найдём новое значение (обновлённый вес) для переменной
Найдём остальные частные производные и их новые значения для матрицы
Теперь найдём частные производные по всем элементам вектора
Найдём новое значение для
Найдём остальные частные производные для вектора
Найдём новые значения для переменных
Численный пример
Задача обучения нейронной сети состоит в аппроксимации некоторой неизвестной функции, которая отображает
Другими словами, существует некоторая неизвестная нам функция
Выберем случайным образом следующие начальные значения для нашей нейронной сети:
А также входные и целевые значения:
После первого прямого прохождения сигнала значения скрытого и выходного слоёв:
Для скорости обучения установим значение
Вычислим для первой эпохи (epoch) обучения нейронной сети обновлённые значения весов
Новые значения других весов и смещений находятся аналогичным образом, в соответствии с полученными ранее формулами.
После 10 000 эпох обучения матрицы весов и выходной слой имеют следующие значения:
Обобщение для произвольного числа слоёв
Мы рассмотрели частный случай алгоритма обратного распространения ошибки для нейронной сети с одним скрытым слоем. Запишем формулы для реализации нейронной сети с произвольным числом скрытых слоёв.
где
Надеемся, что статья будет интересной и полезной для всех, кто приступает к изучению глубинного обучения и нейронных сетей!