Rambler's Top100
Статьи
Андрей ПИВОВАРОВ  03 октября 2019

Нейронные сети в глубоком обучении

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

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

Как устроены нейронные сети

Рассмотрим сначала базовые компоненты нейронной сети. Это не сложно, нужно прояснить лишь пять понятий (рис. 1):
  • нейроны;
  • входы;
  • выходы (функции активации);
  • веса;
  • смещения.
Нейроны принимают решения. У каждого нейрона есть один или несколько входов и один выход, называемый также функцией активации. Выход одного нейрона может служить входом для другого нейрона (или нескольких нейронов) или быть выходом для сети в целом. Некоторые входные данные более важны, чем другие, и поэтому имеют соответствующий вес. Нейроны сами «активируют» или изменяют свои выходы в зависимости от входных весов. Как быстро они срабатывают, зависит от их смещения.


Рис. 1. Компоненты нейронной сети

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

Примеры работы нейронных сетей

Теперь, когда есть базовые компоненты, соберем из них простую нейронную сеть. На рис. 2. показана нейронная сеть, которая используется для распознавания рукописных цифр.


Рис. 2. Пример простейшей нейронной сети

Слева – входы, на которые подаются отсканированные изображения рукописных цифр размером 28 x 28 пикселей. На рис. 2 показаны только восемь входов, но в действительности их 784 – по одному на каждый из 784 пикселей в изображениях. Справа – выходы. Чтобы результат был однозначным, при обработке каждого нового изображения должен срабатывать один и только один из нейронов. В середине – скрытый слой. Он назван так потому, что недоступен непосредственно. Такую нейронную сеть можно обучить распознавать отсканированные изображения рукописных цифр (как на рис. 3 для картинки 28 x 28 пикселей) с высокой точностью.

Рис. 3. Изображение рукописной цифры

Но подобная нейронная сеть – еще не сеть глубокого обучения. Она слишком проста: скрытый слой только один. Точка отсчета – как минимум два скрытых слоя (рис. 4).


Рис. 4. Нейронная сеть глубокого обучения

Зачем нужны скрытые слои? Каждому из нейронов во входном слое соответствует определенный пиксель на картинке, в то время как выходные нейроны выдают результат распознавания всего изображения (например, если срабатывает нейрон 7, то на картинке скорее всего семерка). Скрытые слои соответствуют компонентам изображения. Они могут «распознавать» кривую, диагональ или замкнутый контур. Важно, что компоненты в скрытых слоях соответствуют определенной области исходного изображения. Так и должно быть – они жестко привязаны к конкретным пикселям слева.

Однако сеть такого типа, как на рис. 4, не способна дать ответ даже на вопрос, сколько лошадей на картинке (рис. 5).

Рис. 5. Сколько лошадей на картинке?

У человека не возникнет проблем с подсчетом числа лошадей (конечно, если это не табун). Он легко распознает характерные очертания лошади, независимо от того, где на картинке она находится. И это замечательно, потому что мир, в котором мы живем, требует, чтобы мы умели распознавать объекты, которые располагаются перед нами или сбоку от нас, даже если они частично скрыты.

Для решения таких задач потребуется нейронная сеть другого типа, подобная показанной на рис. 6: сверточная нейронная сеть.

Рис. 6. Сверточная нейронная сеть

Представим, что мы снова работаем с изображениями размером 28 x 28 пикселей, но на этот раз мы не можем полагаться на то, что образ только один, и что он находится в центре. Рассмотрим логику первого скрытого слоя. Все нейроны теперь связаны не с одним пикселем, а с конкретными перекрывающимися областями входного изображения (в данном случае это область 5 x 5 пикселей).

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

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

Когда встает задача обработки предложения, нужно учитывать как минимум три момента: первые два – это значение отдельных слов и синтаксис или грамматика предложения (правила порядка слов, структура предложения и т. д.). Рассмотрим предложение: «Я пеку радужный пирог и хочу добавить в тесто разные…».

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

Рекуррентные нейронные сети

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

Рис. 7. Петля обратной связи

Обратите внимание, что выходные данные возвращаются и снова подаются на вход. Если эту схему «развернуть», то получится структура, подобная приведенной на рис. 8.

Рис. 8. Рекуррентная нейронная сеть

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

Конечно, эта структура слишком проста, чтобы ее можно было использовать для обработки естественного языка, но более сложные нейронные сети с петлями обратной связи вполне для этого пригодны. Распространенный тип рекуррентной нейронной сети содержит так называемые блоки долгой краткосрочной памяти (Long Short-Term Memory, LSTM). Они хороши в запоминании слов (например, ключевого слова в предложении), а также способны «забывать» их при необходимости (рис. 9).

Рис. 9. Фрагмент сети LSTM

В этой сети можно найти определенное сходство с простой сетью на рис. 8, но здесь все гораздо интереснее.

Взгляните на основной блок. Закрашенные прямоугольники представляют собой целые слои, символ внутри которых обозначает вид функции активации (выход). Кружки с символами «x» и «+» представляют операции умножения и сложения соответственно. Посмотрите на первую комбинацию (выход слоя с сигмоидой умножается на выход предыдущего члена). Если этот уровень дает нулевое значение, то умножение фактически обнуляет предыдущий член. Другими словами, эта первая комбинация – схема забывания.

Для обработки естественного языка требуется гораздо больше, чем просто знание синтаксиса и значения отдельных слов. Как в предыдущем примере вам удалось узнать, что радуга содержит много разных цветов? Вы уже видели радугу и знаете, как она выглядит. И это общее знание контекста является третьим элементом обработки естественного языка (и самым сложным для компьютера).

* * *
Есть множество других подходов к нейронным сетям, которые имеют различные сильные и слабые стороны или используются для решения иных задач. Но описанные понятия применимы и там. Нейронные сети построены из одних и тех же базовых элементов: нейронов (со смещением), входов (с весами) и выходов (функциях активации с конкретными профилями). Эти элементы используются для создания различных или специализированных слоев и компонентов (как LSTM выше или в Oracle Database). В сочетании с петлями обратной связи и другими соединениями они образуют нейронную сеть.

Андрей Пивоваров, руководитель группы перспективных технологий предпроектного консалтинга, Oracle в России и СНГ
Поделиться:
Заметили неточность или опечатку в тексте? Выделите её мышкой и нажмите: Ctrl + Enter. Спасибо!