Если вы помните из модуля Feature Crosses , следующая задача классификации является нелинейной:
Рис. 1. Нелинейная задача классификации.
«Нелинейный» означает, что вы не можете точно предсказать метку с моделью формы \(b + w_1x_1 + w_2x_2\) . Другими словами, «поверхность решения» не является линией. Ранее мы рассматривали пересечения признаков как один из возможных подходов к моделированию нелинейных задач.
Теперь рассмотрим следующий набор данных:
Рисунок 2. Более сложная задача нелинейной классификации.
Набор данных, показанный на рисунке 2, не может быть решен с помощью линейной модели.
Чтобы увидеть, как нейронные сети могут помочь в решении нелинейных задач, давайте начнем с представления линейной модели в виде графика:
Рисунок 3. Линейная модель в виде графика.
Каждый синий кружок представляет входную функцию, а зеленый кружок представляет взвешенную сумму входных данных.
Как мы можем изменить эту модель, чтобы улучшить ее способность справляться с нелинейными задачами?
Скрытые слои
В модели, представленной на следующем графике, мы добавили «скрытый слой» промежуточных значений. Каждый желтый узел в скрытом слое представляет собой взвешенную сумму значений синих входных узлов. Выход представляет собой взвешенную сумму желтых узлов.
Рис. 4. График двухслойной модели.
Является ли эта модель линейной? Да, его выход по-прежнему является линейной комбинацией его входов.
В модели, представленной на следующем графике, мы добавили второй скрытый слой взвешенных сумм.
Рис. 5. График трехслойной модели.
Является ли эта модель все еще линейной? Да, это так. Когда вы выражаете выходные данные как функцию входных данных и упрощаете, вы получаете просто еще одну взвешенную сумму входных данных. Эта сумма не будет эффективно моделировать нелинейную задачу на рисунке 2.
Функции активации
Чтобы смоделировать нелинейную задачу, мы можем напрямую ввести нелинейность. Мы можем передать каждый скрытый узел слоя через нелинейную функцию.
В модели, представленной на следующем графике, значение каждого узла в скрытом слое 1 преобразуется нелинейной функцией перед передачей во взвешенные суммы следующего слоя. Эта нелинейная функция называется функцией активации.
Рис. 6. График трехслойной модели с функцией активации.
Теперь, когда мы добавили функцию активации, добавление слоев оказывает большее влияние. Наложение нелинейностей на нелинейности позволяет нам моделировать очень сложные отношения между входными данными и прогнозируемыми выходными данными. Короче говоря, каждый уровень эффективно изучает более сложную функцию более высокого уровня на необработанных входных данных. Если вы хотите получить больше интуиции о том, как это работает, см . отличный пост в блоге Криса Олаха .
Общие функции активации
Следующая сигмовидная функция активации преобразует взвешенную сумму в значение от 0 до 1.
Вот сюжет:
Рисунок 7. Сигмовидная функция активации.
Следующая выпрямленная функция активации линейной единицы (или для краткости ReLU ) часто работает немного лучше, чем гладкая функция, такая как сигмоид, а также ее значительно легче вычислить.
Превосходство ReLU основано на эмпирических данных, вероятно, обусловленных тем, что ReLU имеет более полезный диапазон чувствительности. Отзывчивость сигмовидной кишки падает относительно быстро с обеих сторон.
Рисунок 8. Функция активации ReLU.
Фактически любая математическая функция может служить функцией активации. Предположим, что \(\sigma\) представляет нашу функцию активации (Relu, Sigmoid или что-то еще). Следовательно, стоимость узла в сети определяется следующей формулой:
TensorFlow обеспечивает готовую поддержку многих функций активации. Вы можете найти эти функции активации в списке оболочек TensorFlow для операций примитивной нейронной сети . Тем не менее, мы по-прежнему рекомендуем начинать с ReLU.
Резюме
Теперь в нашей модели есть все стандартные компоненты того, что обычно имеют в виду, когда говорят «нейронная сеть»:
- Набор узлов, аналогичных нейронам, организованных слоями.
- Набор весов, представляющих связи между каждым слоем нейронной сети и слоем под ним. Слой ниже может быть другим слоем нейронной сети или каким-либо другим слоем.
- Набор смещений, по одному на каждый узел.
- Функция активации, которая преобразует выходные данные каждого узла в слое. Разные слои могут иметь разные функции активации.
Предостережение: нейронные сети не обязательно всегда лучше, чем кроссы функций, но нейронные сети предлагают гибкую альтернативу, которая хорошо работает во многих случаях.