четверг, 30 августа 2018 г.

Анатомия нейронных сетей

Как уже упоминалось ранее в посте о пересечениях свойств, следующая проблема нелинейна:

Нелинейная проблема классификации

"Нелинейная" означает, что мы не можем точно спрогнозировать метку с моделью вида b + w1x1 + w2x2. Другими словами, "поверхность решений" это не линия в данном случае. Ранее мы рассматривали пересечения свойств как один из возможных подходов к моделированию нелинейных проблем.

Рассмотрим следующий набор данных:

Более сложная нелинейная классификационная проблема

Набор данных, показанный на предыдущем графике, не может быть решена с помощью линейной модели.

Чтобы увидеть как нейронные сети могут помочь с нелинейными проблемами, начнем с представления линейной модели как графа:

Линейная модель как граф

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

Как мы можем изменить эту модель, чтобы улучшить ее способность решать нелинейные проблемы?

Скрытые слои

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

Граф двухслойной модели

Эта модель линейная? Да - ее вывод все еще линейная комбинация входов.

В модель, представленной в следующем графе, добавлен второй скрытый слой взвешенных весов.

Граф трехслойной модели

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

Функции активации

Чтобы смоделировать нелинейную проблему мы можем напрямую ввести нелинейность. Мы можем пропускать каждый узел скрытого слоя через нелинейную функцию.

В модели представленной следующим графом значение каждого узла в скрытом слое 1 трансформировано нелинейной функцией до того как передано в взвешенную сумму следующего слоя. Эта нелинейная функция называется функцией активации.

Граф трехслойной модели с функцией активации

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

Обычные функции активации

Следующая сигмоидная функция активации преобразует взвешенную сумму в значение между 0 и 1.

Вот ее график:

Сигмоидная функция активации

Следующая выпрямленная линейная единица (rectified linear unit) функции активации (или ReLU, кратко) часто работает немного лучше, чем сглаженная функция как сигмоид, при этом также значительно легче для вычисления.

F(x) = max(0,x)

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

ReLU функция активации

Фактически любая математическая функция может служить как функция активации. Предположим что σ представляет нашу функцию активации (ReLU, сигмоид). Следовательно, значение узла в сети дано в следующей формуле:

σ(w⋅x+b)

TensorFlow предоставляет "из коробки" поддержку широкого разнообразия функций активации. Рекомендуется начинать с ReLU.

Резюме

Теперь наша модель имеет все стандартные компоненты того, что люди подразумевают под термином "нейронная сеть":

  • Набор узлов, аналогичный нейронам, организованный в слои.
  • Набор весов, представляющих связи между каждым слоем нейронной сети и слоем под ним. Слой ниже может быть другим слоем нейронной сети или каким-либо другим видом слоя.
  • Набор смещений, по одному для каждого узла.
  • Функция активации, которая преобразует вывод каждого узла в слое. Разные слои могут иметь разные функции активации.

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