Вступление

Понимание математических операндов, лежащих в основе нейронных сетей (NN), очень важно для возможностей специалистов по данным при разработке эффективной глубинной модели. В этой статье будет продемонстрировано высокоуровневое вычисление полносвязной сетевой сети с акцентом на шаге обратного распространения. Статья ориентирована на людей с базовыми знаниями о нейронных сетях, которые стремятся глубже погрузиться в структуру нейронных сетей.

Фон

Цель процесса обучения - найти веса (W) и смещения (b), которые минимизируют ошибку. Это делается с помощью алгоритма градиентного спуска. Для начала веса инициализируются случайным образом, и выполняется итерационный процесс тонкого изменения весов до сходимости.

Каждая итерация начинается с прямого прохода, который выводит текущий прогноз и оценивает ошибку модели с помощью функции стоимости J (уравнение 6). Затем выполняется обратный проход для вычисления градиента весов.

Чтобы найти лучшие параметры, минимизирующие ошибку, мы используем алгоритм градиентного спуска. Цель состоит в том, чтобы найти точку минимума функции стоимости (J), где градиент близок к нулю (рисунок 2). Алгоритм итеративно, шаг за шагом, движется по направлению наискорейшего спуска к точке минимума. Размер шага называется «скоростью обучения», и это скаляр, который определяет, насколько веса изменяются на каждой итерации, и, следовательно, как быстро сходится NN. Скорость обучения - это гиперпараметр, который необходимо настроить. Меньшие скорости обучения требуют больше времени на обучение, тогда как большие скорости обучения приводят к быстрому обучению, но могут страдать от снижения производительности и нестабильности.

Чтобы обновить веса, градиенты умножаются на скорость обучения (альфа), и новые веса вычисляются по следующей формуле:

По мере повторения модели градиент постепенно сходится к нулю, где ошибка, скорее всего, самая низкая (в качестве альтернативы, модель может сходиться к локальному оптимуму и иметь неоптимальные характеристики).

Описание сети

Эта статья будет следовать структуре двухуровневой нейронной сети, где X (также называемый A [0]) - это входной вектор, A [1] - скрытый слой, а Y-шляпа - выходной слой. Базовая архитектура сети проиллюстрирована на рисунке ниже (количество нейронов в каждом слое не имеет отношения к уравнениям, поскольку мы используем векторизованные уравнения):

Вперед

Чтобы понять, как рассчитывается обратное распространение, нам сначала нужно просмотреть прямое распространение. Наша сеть начинается с векторизованного линейного уравнения, где номер слоя указан в квадратных скобках.

Затем добавляется нелинейная функция активации (A). Эта активация позволяет сети нарушить линейность и приспособиться к сложным шаблонам в данных. Можно использовать несколько различных функций активации (например, sigmoid, ReLU, tanh), и здесь мы будем использовать активацию sigmoid для нашей NN.

Пока мы рассчитали первый слой. Второй слой, как и первый, состоит из линейного уравнения (Z [2]), за которым следует сигмовидная активация (A [2]). Поскольку это последний слой в нашей сети, результат активации (A [2]) - это прогноз модели (Y-шляпа).

Наконец, чтобы оценить и минимизировать ошибку, мы определяем функцию стоимости (дополнительные сведения об активациях и функциях стоимости см. В ссылке [1]). Здесь мы используем функцию Среднеквадратичная ошибка (MSE). Для простоты мы будем использовать метод стохастического градиентного спуска (SGD) [2], что означает, что на каждой итерации обрабатывается только одна выборка.

Мы можем резюмировать вычислительный график прямого прохода

Обратный проход

Чтобы обновлять веса и смещения после каждой итерации, нам нужно вычислить градиенты. В нашей двухуровневой сети необходимо обновить 4 параметра: W [2], b [2], W [1] и b [1], и, следовательно, необходимо вычислить 4 градиента:

Но как мы собираемся найти производные этих сложных функций? Согласно «правилу цепочки», мы построим произведение производных по всем путям, соединяющим переменные. Давайте проследим за весами градиента второго слоя (W [2]):

Из диаграммы выше ясно видно, что изменение стоимости J по отношению к W [2] составляет:

Чтобы решить эту проблему, мы начнем с вычисления частной производной стоимости J по отношению к A [2], которая также является прогнозируемой Y-шляпой. Исходная функция стоимости показана слева, а производная справа:

Частная производная сигмовидной активации в A [2] относительно Z [2] представлена ​​следующим образом (математическое развитие сигмовидной производной описано в ссылке [3]):

Частная производная Z [2] по весам W [2]:

Давайте объединим все вместе, чтобы вычислить градиент W [2]:

Большой! Затем мы аналогичным образом вычислим градиент b [1]. Давайте проследим градиент:

Первые две части градиента b [2] уже были рассчитаны выше (частная производная стоимости J по Z [2]), а последняя часть равна 1:

Итак, общий градиент b [2] равен:

Наконец, мы закончили вычислять градиенты для второго слоя. Градиенты для первого слоя немного длиннее, но мы уже вычислили его части. Давайте проследим градиент для обновления W [1]:

Первые две части градиента были ранее рассчитаны для слоя 2. Частная производная Z [2] относительно A [1] равна W [2]:

Последние две части рассчитываются таким же образом, как и в слое 2. Взяв их вместе, мы получаем:

И если мы будем следовать градиенту b [1]:

Мы получим:

На этом мы закончили вычисление всех градиентов весов и смещений для одной итерации нашей NN.

Обновление веса

После вычисления градиентов мы можем обновить новые параметры для модели и повторять все заново, пока модель не сойдется. Обозначьте, что альфа - это скорость обучения, гиперпараметр, который будет определять скорость сходимости.

Последние мысли

Я надеюсь, что эта статья помогла глубже понять математику, лежащую в основе нейронных сетей. В этой статье я объяснил, как работает небольшая сеть. Однако эти базовые концепции можно обобщить и применить к более глубоким нейронным сетям.

Ссылки

[1] Функции активации и стоимости. https://medium.com/@zeeshanmulla/cost-activation-loss-function-neural-network-deep-learning-what-are-these-91167825a4de

[2] Стохастический градиентный спуск. Https://towardsdatascience.com/stochastic-gradient-descent-clearly-explained-53d239905d31

[3] производная сигмовидной кишки. https://becominghuman.ai/what-is-derivative-of-sigmoid-function-56525895f0eb