Многослойный персептрон (Multilayer Perceptron) – это Нейронная сеть (Neural Network), область науки, в которой исследуется, как простые модели биологического мозга могут использоваться для решения сложных вычислительных задач, таких как прогнозирование в Машинном обучении (ML).
Персептрон – это модель отдельного нейрона, которая была предшественницей более крупных нейронных сетей.
Цель состоит не в создании реалистичных моделей мозга, а в разработке надежных Алгоритмов (Algorithm), которые используются для моделирования сложных проблем.
Сила нейронных сетей заключается в их способности изучать паттерны в Тренировочных данных (Train Data) и как наилучшим образом связать его с Целевой переменной (Target Variable), которую мы хотим предсказать. Математически они способны создавать любую функцию и зарекомендовали себя как универсальный алгоритм аппроксимации, то есть замене одних объектов на другие, более упрощенные.
Прогностическая способность нейронных сетей обусловлена иерархической или многоуровневой структурой сетей. Структура данных может выделять Признаки (Feature) в различных масштабах и объединять их в признаки более высокого порядка.
Строительными блоками нейронных сетей являются искусственные нейроны, простые вычислительные блоки, которые имеют взвешенные входные сигналы и вырабатывают выходной сигнал с помощью функции активации:
Возможно, вы знакомы с Линейной регрессией (Linear Regression), и в этом случае веса входных данных очень похожи на коэффициенты, используемые в уравнении регрессии.
Подобно линейной регрессии, каждый нейрон также имеет Cмещение (Bias), которое можно рассматривать как входной вес, по умолчанию равный единице. Например, нейрон может иметь два источника входных данных, и в этом случае требуется три веса: один для каждого входного источника и один для весов, как на изображении выше.
Веса часто инициализируются небольшими случайными значениями, например значениями в диапазоне от 0 до 0,3, хотя могут использоваться более сложные схемы инициализации.
Как и в линейной регрессии, бо́льшие веса указывают на повышенную сложность Модели (Model). Желательно, чтобы веса в сети были небольшими, тогда применимы методы Регуляризации (Regularization).
Взвешенные входные данные суммируются и передаются через Функцию активации (Activation Function), иногда называемую передаточной функцией. Это простое отображение суммированного взвешенного входа и выхода нейрона. Функция определяет порог, при котором нейрон активируется, и силу выходного сигнала.
Использовались исторически простые пошаговые функции активации: если суммарный вход был выше порога, например 0,5, то нейрон выводил бы значение 1,0, в противном случае - 0,0.
Традиционно используются нелинейные функции активации. Это позволяет сети более сложным образом комбинировать входные данные и, в свою очередь, расширять возможности функций, которые они могут моделировать. Обширно используются нелинейные функции, такие как Сигмоида (Sigmoid), которая выводит значение от 0 до 1 с s-образным распределением:
Еще один пример – нелинейная функция гиперболического тангенса (tanh), которая выводит такое же распределение в диапазоне от -1 до +1.
Нейроны организоваются в сети. Ряд нейронов называется слоем, а одна сеть может состоять из нескольких слоев. Архитектуру нейронов в сети часто называют топологией сети.
Нижний входной Слой (Layer), который принимает входные данные из нашего Датасета (Dataset), называется видимым, потому что это открытая часть сети. Часто нейросеть рисуется с одним нейроном на входе: тогда это простое передаточное звено.
Слои после входного называются скрытыми, поскольку не подвергаются прямому воздействию. Простейшая сетевая структура заключается в том, чтобы иметь единственный нейрон в скрытом слое, который напрямую выводит значение.
При наличии вычислительной мощности и эффективных библиотек можно построить нейронные сети Глубокого обучения (Deep Learning), которое означает множество скрытых слоев. Сети глубокие, потому что ранее были бы невообразимо медленными, но с использованием современных методов и оборудования им требуются считаные секунды.
Последний скрытый слой называется выходным, и он отвечает за вывод значений или их вектора в соответствующем формате.
Выбор функции активации в выходном слое сильно ограничен типом моделируемой проблемы. Например,
После настройки нейронную сеть необходимо обучить на вашем наборе данных.
Сначала необходимо подготовить данные для обучения в нейронной сети. Они должны быть числами, например, Действительными (Float Number). Если у вас есть категориальные данные, такие как "Пол" со значениями «мужской» и «женский», мы можем произвести Горячее кодирование (One-Hot Encoding). Здесь для каждого значения класса добавляется один новый столбец (два столбца в случае пола мужчины и женщины), и в соответствующий столбец попадает единица или ноль в зависимости от пола.
Нейронные сети требуют согласованного масштабирования входных данных. Вы можете изменить масштаб до диапазона от 0 до 1, то есть произвести Нормализацию (Normalization). Другой популярный метод - выполнить Стандартизацию (Standartization) так, чтобы распределение каждого столбца имело нулевое среднее значение и стандартное отклонение, равное единице.
Масштабирование также применяется к пиксельным данным изображения. Слова мы тоже можем преобразовать в числа, например, создав рейтинг его популярности в наборе данных.
Классический и все еще предпочитаемый алгоритм обучения нейронных сетей называется Стохастическим градиентным спуском (SGD).
Здесь одна строка данных предоставляется сети в качестве входных данных. Сеть обрабатывает входные нейроны, активируя их по мере поступления, чтобы, наконец, сгенерировать выходные значения. Это называется Прямым проходом (Forward Pass) по сети, тип прохода, который также используется после обучения сети для прогнозирования новых данных.
Выходные данные сети сравниваются с ожидаемыми тестовыми значениями, и таким образом вычисляется Ошибка (Error). Она затем распространяется обратно по сети, по одному слою за раз, и веса обновляются. Этот математический элемент называется Методом обратного распространения ошибки (Backpropagation).
Этот процесс повторяется для всех Наблюдений (Observation) в тренировочных данных. Один раунд обновления сети для всего набора обучающих данных называется Эпохой (Epoch). Сеть может быть обучена на протяжении десятков, сотен или миллионов эпох.
Веса в сети могут быть обновлены на основе ошибок, рассчитанных для каждого обучающего примера, и это называется онлайн-обучением. Это может привести к быстрым, но также и хаотичным изменениям в сети.
В качестве альтернативы, ошибки могут быть сохранены во всех обучающих примерах, а сеть может быть обновлена в конце. Это называется Пакетным (Batch) обучением и часто бывает более стабильным.
Из-за величины набора данных и вычислительной эффективности, размер пакета, показываемого перед обновлением, часто сокращается до десятков или сотен примеров.
Количество обновляемых весов контролируется параметрами конфигурации, называемыми Скоростью обучения (Learning Rate). Он также называется размером шага и изменением веса сети для данной ошибки. Часто используются небольшие размеры веса, такие как 0,1 или 0,01. Уравнение обновления может быть дополнено дополнительными параметрами конфигурации:
После обучения нейронной сети ее можно использовать для прогнозирования. Мы можем делать прогнозы на основе Тестовых данных (Test Data), чтобы оценить навыки модели на незнакомых ей данных. Вы также можете развернуть такую программу и использовать для непрерывного прогнозирования.
Топология сети и конечный набор весов – это все, что вам нужно сохранить для модели. Прогнозы выполняются путем предоставления входных данных в модель и выполнения прямого прохода, позволяющего генерировать выходные прогнозные данные.
Фото: @manuelventurini
Автор оригинальной статьи: Jason Brownlee
© Лена Капаца. Все права защищены.