Чтобы узнать больше, посетите Библию программистов - мое новое личное пространство, где я могу помочь вам стать лучшим разработчиком!

В этой статье представлен интуитивно понятный подход к нейронным сетям и процессу их обучения (обратное распространение) с использованием некоторых простых математических формул и терминов для студентов. Я искренне верю в ценность обмена знаниями, и я надеюсь, что это прольет свет на тех, кто начинает путь ИИ / МО, или кое-что прояснит для тех, кто бездумно использует высокоуровневые инструменты, такие как Керас (был там, сделал это). Без дальнейших церемоний…

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

Рисунок 1 содержит популярное представление простой нейронной сети с тремя основными строительными блоками: единицей (одиночный круг со значением in, входом x, выходом y или смещением 1), слоем (единицы объединены в одну вертикальную группу) и весом (связь между единицами измерения). со значением w, представляющим его силу). Уравнения 1, 2, 3, 4 и 5 переводят это графическое представление в математическую формулу.

«Персептрон» - это общее название нейронной сети, в которой входы сразу же связаны с выходами (без скрытых слоев, в отличие от рисунка 1). Наличие скрытого (среднего) слоя единиц, препятствующего прямым связям между входами и выходами, позволяет нейронной сети моделировать высоконелинейные математические функции. Норвиг и Рассел обосновывают это на примере логического элемента XOR следующим образом: «[…] линейные классификаторы […] могут представлять границы линейных решений во входном пространстве. Это отлично работает для функции переноса, которая представляет собой логическое И […]. Однако функция суммы - это исключающее ИЛИ (исключающее ИЛИ) двух входов. […] Эта функция не является линейно разделимой, поэтому перцептрон не может ее изучить. Линейно разделимые функции составляют лишь небольшую часть всех булевых функций ». (П. Норвиг и С. Дж. Рассел, Искусственный интеллект: современный подход, Prentice Hall,
2010).

Прежде чем углубляться в процесс обучения НС, важно сделать два дополнения к предыдущей модели:
1) функция ошибок (также называемая функцией стоимости),
2) функция активации.

Объявление 1. Самый надежный способ представления прогнозов алгоритмом - использование вектора вероятностей. Рассмотрим пример предсказания названия пива на основе изображения этикетки. На рисунке 2 показан вероятностный выход классификатора (обратите внимание, что все значения в сумме равны 1) по сравнению с выходом, к которому он должен стремиться. Функция стоимости, представленная в этом разделе, называемая категориальной кросс-энтропией (уравнение 6), просто измеряет корреляцию между этими двумя распределениями вероятностей (прогнозируемым и идеальным). Обратите внимание, что умножение на примеры с горячим кодированием заставляет функцию сравнивать только ненулевые элементы идеального распределения, при этом соответствующие значения выходных данных классификатора дальше от 1 штрафуются больше, чем значения, близкие к 1 (благодаря природе логарифма).

Объявление 2. Значение единицы in редко напрямую передается на следующие уровни. Вместо этого используется так называемая функция активации. Один, представленный в этом разделе, называется сигмовидной (уравнение 7). Обновленная модель простой нейронной сети с рисунка 1 показана на рисунке 3. Стоит обратить внимание на разницу между сигмоидной функцией и функцией softmax (уравнение 8), которые используются в искусственных нейронных сетях. В то время как сигмоид вводит одно значение и выводит нормализованный скаляр, softmax вводит список значений и выводит вектор действительных чисел в диапазоне [0, 1], которые в сумме дают 1, таким образом, его можно интерпретировать как распределение вероятностей. Сигмоид используется в скрытых единицах, в то время как softmax обычно применяется в последнем выходном слое. Обе функции можно отнести к категории логистических.

Цель процесса обучения нейронной сети - найти правильные веса, т.е. е. весов, что приведет к созданию математической модели, в которой разница входных данных четко представлена ​​в разности выходных векторов, которые подлежат анализу и прогнозированию. Например, в классификаторе пород обученных собак выходной вектор для изображения немецкой овчарки явно отличается от выходного вектора для изображения йоркской овчарки. Это можно легко интерпретировать и привести к правильному предсказанию породы, удобочитаемому для человека. В настоящее время наиболее известным способом обучения сети является алгоритм, называемый обратным распространением. Основная идея этого метода состоит в вычислении градиентов функции стоимости E (например, категориальной перекрестной энтропии) относительно каждого из весов, которые позже обновляются некоторой частью этих градиентов, как показано в уравнении 9.

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

Как упоминалось ранее, алгоритм обучения NN основан на вычислении частных производных по каждому из весов. Глубокая вложенность функций, представляющих более сложные сети, побуждает использовать правило цепочки. На рисунке 5 показан один шаг обратного распространения ошибки с использованием категориальной функции кросс-энтропийных ошибок E. Уравнение 11 и уравнение 12 представляют собой символьные вычисления градиента, необходимые для процесса обучения. Здесь стоит вспомнить красивую простую производную сигмовидной функции:

После символьных вычислений рассмотрим следующие входные данные для нейронной сети с рисунка 5:

Первым шагом процесса обучения является выполнение логического вывода с учетом случайно инициализированных весов и вводимых данных. Полученный результат:

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

После применения правила обновления из уравнения 9 со скоростью обучения альфа = 0,5 новые веса будут следующими:

и произвести результат:

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