Вы подписаны на Машинное обучение доступно
Отлично! завершите оплату для полного доступа к Машинное обучение доступно
Снова приветствуем Вас! Вы успешно авторизовались
Успех! Аккаунт активирован, и Вы имеете полный доступ к контенту.
Многослойный перцептрон (MLP)

Многослойный перцептрон (MLP)

in

Многослойный персептрон (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), которое означает множество скрытых слоев. Сети глубокие, потому что ранее были бы невообразимо медленными, но с использованием современных методов и оборудования им требуются считаные секунды.

Выходной слой

Последний скрытый слой называется выходным, и он отвечает за вывод значений или их вектора в соответствующем формате.

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

  • Проблема регрессии может иметь единственный выходной нейрон, и этот нейрон может не иметь функции активации.
  • Задача Двоичной классификации (Binary Classification) может иметь один выходной нейрон и использовать сигмоиду  для вывода значения от 0 до 1, чтобы представить вероятный класс. С помощью порога, по умолчанию равного 0,5, эти вероятности превращаются в четкий класс.
  • Проблема Мультиклассовой классификации (Multi-Class Classification) может иметь несколько нейронов в выходном слое, по одному для каждого класса (например, три нейрона для трех видов цветов радужной оболочки глаза). В этом случае Функция активации Softmax может использоваться для вывода вероятности предсказания сетью каждого из значений класса. Выбор результата с наибольшей вероятностью может быть использован для получения четкого значения класса.

После настройки нейронную сеть необходимо обучить на вашем наборе данных.

Подготовка данных

Сначала необходимо подготовить данные для обучения в нейронной сети. Они должны быть числами, например, Действительными (Float Number). Если у вас есть категориальные данные, такие как "Пол" со значениями «мужской» и «женский», мы можем произвести Горячее кодирование (One-Hot Encoding). Здесь для каждого значения класса добавляется один новый столбец (два столбца в случае пола мужчины и женщины), и в соответствующий столбец попадает единица или ноль в зависимости от пола.

Нейронные сети требуют согласованного масштабирования входных данных. Вы можете изменить масштаб до диапазона от 0 до 1, то есть произвести Нормализацию (Normalization). Другой популярный метод - выполнить Стандартизацию (Standartization) так, чтобы распределение каждого столбца имело нулевое среднее значение и стандартное отклонение, равное единице.

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

Стохастический градиентный спуск

Классический и все еще предпочитаемый алгоритм обучения нейронных сетей называется Стохастическим градиентным спуском (SGD).

Здесь одна строка данных предоставляется сети в качестве входных данных. Сеть обрабатывает входные нейроны, активируя их по мере поступления, чтобы, наконец, сгенерировать выходные значения. Это называется Прямым проходом (Forward Pass) по сети, тип прохода, который также используется после обучения сети для прогнозирования новых данных.

Выходные данные сети сравниваются с ожидаемыми тестовыми значениями, и таким образом вычисляется Ошибка (Error). Она затем распространяется обратно по сети, по одному слою за раз, и веса обновляются. Этот математический элемент называется Методом обратного распространения ошибки (Backpropagation).

Этот процесс повторяется для всех Наблюдений (Observation) в тренировочных данных. Один раунд обновления сети для всего набора обучающих данных называется Эпохой (Epoch). Сеть может быть обучена на протяжении десятков, сотен или миллионов эпох.

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

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

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

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

Количество обновляемых весов контролируется параметрами конфигурации, называемыми Скоростью обучения (Learning Rate). Он также называется размером шага и изменением веса сети для данной ошибки. Часто используются небольшие размеры веса, такие как 0,1 или 0,01. Уравнение обновления может быть дополнено дополнительными параметрами конфигурации:

  • Импульс (Momentum) – это термин, который включает свойства из предыдущего обновления, чтобы позволить весам изменяться в том же направлении, даже если ошибка уменьшается.
  • Снижение скорости обучения используется, чтобы сеть могла вносить бо́льшие изменения весов в начале и меньшие настройки под конец.

Прогноз

После обучения нейронной сети ее можно использовать для прогнозирования. Мы можем делать прогнозы на основе Тестовых данных (Test Data), чтобы оценить навыки модели на незнакомых ей данных. Вы также можете развернуть такую программу и использовать для непрерывного прогнозирования.

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

Фото: @manuelventurini

Автор оригинальной статьи: Jason Brownlee