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

Один нейрон

Базовой единицей вычислений в нейронной сети является нейрон, часто называемый узлом или единицей. Он получает входные данные от некоторых других узлов или из внешнего источника и вычисляет выходные данные. Каждому входу соответствует вес (w), который присваивается на основе его относительной важности по отношению к другим входам. Узел применяет функцию f(определенную ниже) к взвешенной сумме своих входных данных, как показано на рисунке 1 ниже:

Рисунок 1: один нейрон

Приведенная выше сеть принимает числовые входные данные X1 и X2 и имеет веса w1 и w2, связанные с этими входными данными. Кроме того, есть еще один вход 1 с весом b (называемый Смещение), связанным с ним. Подробнее о роли предвзятости мы узнаем позже.

Выходной сигнал Y нейрона вычисляется, как показано на рисунке 1. Функция f является нелинейной и называется Функция активации. Функция активации предназначена для введения нелинейности в выходные данные нейрона. Это важно, потому что большинство данных реального мира нелинейны, и мы хотим, чтобы нейроны обучилисьэтимнелинейным представлениям.

Каждая функция активации (или нелинейность) принимает одно число и выполняет над ним определенную фиксированную математическую операцию [2]. Есть несколько функций активации, с которыми вы можете столкнуться на практике:

  • Сигмоид: принимает входные данные с действительным значением и сжимает их в диапазоне от 0 до 1.

σ (х) = 1 / (1 + ехр (-х))

  • tanh: принимает ввод с действительным значением и сжимает его до диапазона [-1, 1]

тангенс (х) = 2σ (2х) - 1

  • ReLU: ReLU означает выпрямленную линейную единицу. Он принимает входные данные с действительным знаком и обнуляет их порогом (заменяет отрицательные значения нулем).

е (х) = макс (0, х)

На приведенных ниже рисунках [2] показана каждая из перечисленных выше функций активации.

Рисунок 2: различные функции активации

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

Нейронная сеть с прямой связью

Нейронная сеть с прямой связью была первым и самым простым типом искусственной нейронной сети, разработанной [3]. Он содержит несколько нейронов (узлов), расположенных в слоях. Узлы из соседних слоев имеют между собой соединения или ребра. Все эти соединения имеют связанные с ними веса.

Пример нейронной сети с прямой связью показан на рисунке 3.

Рисунок 3: пример нейронной сети с прямой связью

Нейронная сеть с прямой связью может состоять из трех типов узлов:

  1. Входные узлы — входные узлы предоставляют информацию из внешнего мира в сеть и вместе называются «входным уровнем». Никакие вычисления не выполняются ни в одном из входных узлов — они просто передают информацию скрытым узлам.
  2. Скрытые узлы.Скрытые узлы не имеют прямой связи с внешним миром (отсюда и название «скрытые»). Они выполняют вычисления и передают информацию от входных узлов к выходным узлам. Набор скрытых узлов образует «скрытый слой». Хотя сеть с прямой связью будет иметь только один входной слой и один выходной слой, она может иметь ноль или несколько скрытых слоев.
  3. Выходные узлы.Выходные узлы вместе называются «выходным уровнем» и отвечают за вычисления и передачу информации из сети во внешний мир.

В сети с прямой связью информация движется только в одном направлении — вперед — от входных узлов через скрытые узлы (если они есть) и к выходным узлам. В сети нет циклов или петель [3] (это свойство сетей с прямой связью отличается от рекуррентных нейронных сетей, в которых связи между узлами образуют цикл).

Ниже приведены два примера сетей прямой связи:

  1. Однослойный персептрон — это простейшая нейронная сеть с прямой связью [4], которая не содержит скрытых слоев. Вы можете узнать больше об однослойных персептронах в [4], [5], [6], [7].
  2. Многослойный персептрон. Многослойный персептрон имеет один или несколько скрытых слоев. Ниже мы обсудим только многослойные персептроны, поскольку сегодня они более полезны, чем однослойные персептоны для практических приложений.

Многослойный персептрон

Многослойный персептрон (MLP) содержит один или несколько скрытых слоев (помимо одного входного и одного выходного слоев). В то время как однослойный персептрон может изучать только линейные функции, многослойный персептрон также может изучать нелинейные функции.

На рис. 4 показан многослойный персептрон с одним скрытым слоем. Обратите внимание, что все соединения имеют связанные с ними веса, но на рисунке показаны только три веса (w0, w1, w2).

Входной слой. Входной слой состоит из трех узлов. Узел смещения имеет значение 1. Два других узла принимают X1 и X2 в качестве внешних входных данных (которые являются числовыми значениями, зависящими от входного набора данных). Как обсуждалось выше, на входном слое не выполняются никакие вычисления, поэтому выходные данные узлов входного слоя равны 1, X1 и X2 соответственно, которые передаются на скрытый слой.

Скрытый слой:Скрытый слой также имеет три узла, при этом узел смещения имеет выход 1. Выход двух других узлов в скрытом слое зависит от выходов входного слоя (1, X1 , X2), а также веса, связанные со связями (ребрами). На рис. 4 показан выходной расчет для одного из скрытых узлов (выделен). Точно так же можно рассчитать выход из другого скрытого узла. Помните, что f относится к функции активации. Затем эти выходные данные передаются узлам выходного слоя.

Рисунок 4: многослойный персептрон с одним скрытым слоем

Выходной слой.Выходной слой имеет два узла, которые получают входные данные от скрытого слоя и выполняют аналогичные вычисления, как показано для выделенного скрытого узла. Значения, рассчитанные (Y1 и Y2) в результате этих вычислений, действуют как выходные данные многослойного персептрона.

Имея набор функций X = (x1, x2, …) и цель y, многослойный персептрон может изучить взаимосвязь между функциями и целью либо для классификации или регрессии.

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

В двух столбцах ввода указано количество часов, отработанных учащимся, и оценки, полученные учащимся в середине семестра. Столбец «Окончательный результат» может иметь два значения: 1 или 0, указывающие, сдал ли учащийся последний семестр. Например, мы можем видеть, что если студент проучился 35 часов и получил 67 баллов в середине семестра, он/она в конечном итоге сдал последний семестр.

Теперь предположим, что мы хотим предсказать, сдаст ли студент, изучающий 25 часов и получивший 70 оценок в середине семестра, последний семестр.

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

Обучение нашего MLP: алгоритм обратного распространения

Процесс обучения многослойного персептрона называется алгоритмом обратного распространения. Я бы порекомендовал прочитать этот ответ Quora от Хеманта Кумара (цитируется ниже), в котором ясно объясняется обратное распространение.

Обратное распространение ошибок, часто обозначаемое как BackProp, является одним из нескольких способов обучения искусственной нейронной сети (ИНС). Это схема обучения с учителем, что означает, что она учится на помеченных данных обучения (есть супервайзер, который направляет обучение).

Проще говоря, BackProp похож на "обучение на ошибках". СупервизорисправляетИНС всякий раз, когда она допускает ошибки.

ИНС состоит из узлов на разных уровнях; входной слой, промежуточный скрытый слой (слои) и выходной слой. Соединения между узлами соседних слоев имеют связанные с ними «веса». Цель обучения состоит в том, чтобы присвоить этим ребрам правильные веса. При заданном входном векторе эти веса определяют выходной вектор.

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

Алгоритм BackProp.
Изначально все веса ребер назначаются случайным образом. Для каждого ввода в обучающем наборе данных активируется ИНС и наблюдается ее вывод. Этот вывод сравнивается с желаемым выводом, который нам уже известен, и ошибка «распространяется» обратно на предыдущий уровень. Эта ошибка фиксируется, и веса корректируются соответствующим образом. Этот процесс повторяется до тех пор, пока выходная ошибка не станет ниже заданного порога.

После завершения вышеописанного алгоритма у нас есть «обученная» ИНС, которая, как мы считаем, готова работать с «новыми» входными данными. Говорят, что эта ИНС научилась на нескольких примерах (помеченные данные) и на своих ошибках (распространение ошибок).

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

Многослойный персептрон, показанный на рисунке 5, имеет два узла на входном слое (помимо узла смещения), которые принимают входные данные «Часы обучения» и «Промежуточные оценки». Он также имеет скрытый слой с двумя узлами (кроме узла Bias). Выходной слой также имеет два узла: верхний узел выводит вероятность «пройдено», а нижний узел выводит вероятность «неудачного прохождения».

В задачах классификации мы обычно используем функцию Softmax в качестве функции активации в выходном слое многослойного персептрона, чтобы гарантировать, что выходные данные являются вероятностями, и их сумма равна 1. Функция Softmax принимает вектор произвольных вещественных значений. оценивает и сжимает его в вектор значений от нуля до единицы, сумма которых равна единице. Итак, в этом случае

Вероятность (пройдено) + вероятность (непройдено) = 1

Шаг 1. Распространение вперед

Все веса в сети назначаются случайным образом. Давайте рассмотрим узел скрытого слоя, отмеченный V на рисунке 5 ниже. Предположим, что веса соединений от входов к этому узлу равны w1, w2 и w3 (как показано).

Затем сеть берет первый обучающий пример в качестве входных данных (мы знаем, что для входных данных 35 и 67 вероятность прохождения равна 1).

  • Вход в сеть = [35, 67]
  • Желаемый выход из сети (цель) = [1, 0]

Затем выход V из рассматриваемого узла можно рассчитать, как показано ниже (f — это функция активации, такая как сигмоид):

V = f (1*w1 + 35*w2 + 67*w3)

Точно так же рассчитываются выходные данные другого узла скрытого слоя. Выходы двух узлов в скрытом слое действуют как входы для двух узлов в выходном слое. Это позволяет нам рассчитать выходные вероятности из двух узлов в выходном слое.

Предположим, что вероятности выхода из двух узлов в выходном слое равны 0,4 и 0,6 соответственно (поскольку веса назначаются случайным образом, выходы также будут случайными). Мы видим, что рассчитанные вероятности (0,4 и 0,6) очень далеки от желаемых вероятностей (1 и 0 соответственно), поэтому говорят, что сеть на рисунке 5 имеет «неправильный выход».

Рисунок 5: Шаг прямого распространения в многослойном персептроне

Шаг 2. Обратное распространение и обновление веса

Мы вычисляем общую ошибку на выходных узлах и распространяем эти ошибки обратно по сети, используя обратное распространение для расчета градиентов. Затем мы используем метод оптимизации, такой как градиентный спуск, чтобы «настроить» все веса в сети с целью уменьшения ошибки на выходном слое. Это показано на Рисунке 6 ниже (пока игнорируйте математические уравнения на рисунке).

Предположим, что новые веса, связанные с рассматриваемым узлом, равны w4, w5 и w6 (после обратного распространения и корректировки весов).

Рисунок 6: шаг обратного распространения и обновления веса в многослойном персептроне

Если теперь мы снова введем тот же пример в сеть, сеть должна работать лучше, чем раньше, поскольку теперь веса были скорректированы, чтобы минимизировать ошибку в прогнозировании. Как показано на рисунке 7, ошибки на выходных узлах теперь уменьшаются до [0,2, -0,2] по сравнению с [0,6, -0,4] ранее. Это означает, что наша сеть научилась правильно классифицировать наш первый обучающий пример.

Рисунок 7: сеть MLP теперь работает лучше на том же входе

Мы повторяем этот процесс со всеми другими обучающими примерами в нашем наборе данных. Затем говорят, что наша сеть выучила эти примеры.

Если теперь мы хотим предсказать, сдаст ли студент, изучающий 25 часов и получивший 70 оценок в середине семестра, последний семестр, мы проходим этап прямого распространения и находим выходные вероятности для «сдал» и «не сдал».

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

Трехмерная визуализация многослойного персептрона

Адам Харли создал 3D-визуализацию многослойного персептрона, который уже был обучен (с использованием обратного распространения ошибки) на базе данных рукописных цифр MNIST.

Сеть принимает 784 числовых значения пикселей в качестве входных данных из изображения 28 x 28 рукописной цифры (у нее есть 784 узла во входном слое, соответствующие пикселям). Сеть имеет 300 узлов в первом скрытом слое, 100 узлов во втором скрытом слое и 10 узлов в выходном слое (соответствует 10 цифрам) [15].

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

На рис. 8 показана сеть, когда на вход подается цифра «5».

Рисунок 8: визуализация сети для ввода «5»

Узел, который имеет более высокое выходное значение, чем другие, представлен более ярким цветом. На входном слое яркие узлы — это те, которые получают более высокие числовые значения пикселей в качестве входных данных. Обратите внимание, что в выходном слое единственный яркий узел соответствует цифре 5 (у него выходная вероятность 1, что выше, чем у других девяти узлов, у которых выходная вероятность равна 0). Это указывает на то, что MLP правильно классифицировал входную цифру. Я настоятельно рекомендую поиграть с этой визуализацией и понаблюдать за связями между узлами разных слоев.