Резюме

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

Мотивация

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

Так как же нам теперь построить модель, способную разделять данные?

Нейронные сети как нелинейные классификаторы

Введите многослойные персептроны или «ванильную» нейронную сеть. Идея состоит в том, чтобы объединить несколько линейных моделей вместе, чтобы создать нелинейную.

Чтобы увидеть, как мы можем это сделать, рассмотрим следующие линейные модели:

Как вы думаете, что произойдет, если мы сложим эти две модели вместе? Помните, что на самом деле мы добавляем два вероятностных пространства. Модель слева представляет собой вероятностное пространство, которое идет от значения 0 в крайнем левом углу и стремится к значению 1 при движении вправо. Модель справа представляет собой другое вероятностное пространство, в котором вы стремитесь к 1 по мере продвижения вверх. Какую форму примет набор точек, дающих y_hat =0,5? В исходных моделях этот набор точек принимает форму простых вертикальных и горизонтальных линий.

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

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

Представление суммирования линейных моделей в виде нейронной сети

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

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

Давайте разберем приведенную выше схему. Во-первых, мы принимаем набор входных объектов x_i на нашем «входном слое». Затем мы передаем эти входные данные персептронам в наших «скрытых слоях». Это просто определяется как все слои персептронов между нашими входными и выходными слоями. Первый слой персептронов в нашем скрытом слое будет просто принимать входные признаки и строить линейные модели. Затем эти линейные модели передаются в качестве входных данных персептронам следующего слоя нашего скрытого слоя. Эти перцептроны суммируют входные линейные модели, и каждый выводит нелинейную модель. Чем больше слоев у нас есть в нашем скрытом слое, тем более сложные нелинейные модели мы можем найти. Эти модели объединяются на выходном уровне, чтобы получить окончательную модель, которая должна быть способна классифицировать точки входных данных.

Обучение и оптимизация

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

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

Рассчитайте потери для каждой точки данных, используя функцию потерь, такую ​​как бинарная перекрестная энтропия, обсуждавшаяся ранее.

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

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

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

Выше — одна эпоха, один проход набора данных через сеть для обучения. Мы повторяем это в течение нескольких эпох, пока потери не станут приемлемо низкими, и мы получим точные классификации.

Для потрясающего визуального объяснения описанного выше тренировочного процесса посмотрите видео 3B1BS: https://www.youtube.com/watch?v=Ilg3gGewQ5U. Если все предыдущие сообщения имеют смысл, у вас должны быть необходимые знания, чтобы посмотреть видео выше :).

Резюме

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

Вопросы

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

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

Оставляйте свои ответы в комментариях :)