В моем предыдущем посте я обсуждал концепцию эволюции различных методов генерации векторов слов, которая является базовой основой современной обработки естественного языка (NLP). Многие продвинутые модели НЛП разработаны на основе этого фундамента вместе с алгоритмом глубокого обучения, таким как нейронная сеть.

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

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

Традиционный подход к машинному обучению

Классификация, категория контролируемого алгоритма машинного обучения, представляет собой процесс прогнозирования класса заданных точек данных. В традиционном подходе машинного обучения классификатор с двумя классами обучается с использованием softmax / логистической регрессии для поиска границы решения (гиперплоскости), которая наилучшим образом разделяет классы.

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

Softmax регрессия

Функция прогнозирования может быть простой функцией softmax логистической регрессии, как показано ниже, и ее цель - максимизировать вероятность правильного класса y для каждого примера обучения (x, y).

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

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

Перекрестная энтропия

Концепция кросс-энтропии пришла из теории информации. Перекрестная энтропия - это мера разницы между двумя распределениями вероятностей для данной случайной величины или набора событий, а формула приведена ниже, где p - истинное распределение вероятностей, а q - вероятность нашей вычисленной модели (может быть функцией регрессии softmax)

Так как P - горячий вектор с 1 для правого класса и 0 для всех остальных, единственный оставшийся член - это отрицательная логарифмическая вероятность истинного класса (формула из softmax). Функция перекрестных потерь энтропии для полного набора данных {xi, yi} Ni = 1 может быть записана как:

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

Это когда в игру вступает нейросетевой классификатор.

Нейрон

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

f = функция активации, w = веса, b = смещение, h = скрытый слой, x = входы

Многослойная нейронная сеть

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

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

Однако в этом примере мы складываем только функции линейной регрессии, а дополнительные уровни можно просто объединить в одно линейное преобразование. Без нелинейностей глубокая нейронная сеть не может делать ничего, кроме линейного преобразования.

Таким образом, функция активации играет важную роль, и мы встраиваем в нее нелинейности для решения сложных проблем. Он укажет, какими должны быть промежуточные скрытые переменные, чтобы хорошо прогнозировать цели для следующего слоя. Некоторыми примерами нелинейных функций активации являются «Tanh» и «ReLu».

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

Прямое распространение

Мы можем представить уравнения нейронной сети в виде графа: исходные узлы - это входы, внутренние узлы - это операции, а ребра проходят вдоль результата операции.

Уравнения для расчета прямого распространения следующие:

Обратное распространение

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

Матрица Якоби и правило цепочки играют решающую роль в алгоритме обратного распространения ошибки.

якобиан

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

Для функции с m выходами и n входами,

его якобиан - это матрица частных производных размера m x n.

Правило цепочки и обратное распространение

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

С помощью якобиана и правила цепи мы вычисляем градиент и корректируем веса с помощью обратного распространения ошибки. Один интуитивный подход мог бы найти градиенты для W и b по отдельности. Однако некоторые вычисления можно использовать повторно.

Таким образом, вместо этого мы вычисляем все градиенты одновременно.

Расчет

Мы можем вычислить (якобианские) градиенты W и b, двигаясь назад по краям. Ниже приведен пример b.

Нейронная сеть: хитрости и подсказки

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

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

Нейронные блоки - нейронная сеть содержит сигмоидальные нейроны для введения нелинейностей. Мы создаем лучшую сеть с различными нелинейными функциями активации в зависимости от потребностей (Sigmoid, Tanh, Hard Tanh, ReLU, Leaky ReLU).

Инициализация параметров. Разумная инициализация параметров - важный шаг для достижения великолепной производительности при построении нейронной сети.

Инициализировать смещения скрытого слоя до 0 и вывести смещения до оптимальных значений, если веса равны 0 (оптимальные значения могут быть вычислены с помощью среднего целевого или обратного сигмоида среднего целевого)

Для весов инициализируйте небольшие случайные значения, чтобы избежать симметрии, мешающей обучению.

Стратегии обучения - скорость / величину обновлений параметров модели во время обучения можно контролировать с помощью скорости обучения.

Мы можем установить постоянную скорость обучения (обычно степень 10) или настроить скорость обучения, позволяя ей уменьшаться по мере обучения модели.

Оптимизаторы - стохастический градиентный спуск (SGD) широко используется в качестве оптимизатора в нейронных сетях. Существуют методы адаптивной оптимизации, такие как AdaGrad и Adam, которые позволяют изменять скорость обучения для каждого параметра. Во многих случаях метод Адама - довольно хорошее и безопасное место для начала.

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

Заявление об ограничении ответственности. Фотографии и уравнения взяты из конспектов лекции Stanford CS 224N.

Ссылки и дополнительная литература