Вы находитесь на странице: 1из 26

Оглавление

1. Генетические алгоритмы ......................................................................................................................... 1


2.Сверточные нейронные сети. ....................................................................................................................... 7
3.Моделирование последовательностей для обработки текстов на естественных языках (Часть 1) .... 13
4.Моделирование с помощью рекуррентных нейронных сетей для обработки текстов на
естественных языках (Часть 2) ..................................................................................................................... 19

1. Генетические алгоритмы
Методы эволюционных вычислений - направление в искусственном интеллекте, которое
использует и моделирует процессы естественного отбора.
Среди методов эволюционных вычислений можно выделить:
• генетические алгоритмы — эвристический алгоритм поиска, используемый для решения задач
оптимизации и моделирования путём случайного подбора, комбинирования и вариации искомых
параметров.
• генетическое программирование — автоматическое создание или изменение программ с помощью
генетических алгоритмов;
• эволюционное программирование — аналогично генетическому программированию, но структура
программы постоянна, изменяются только числовые значения;
• эволюционные стратегии — похожи на генетические алгоритмы, но в следующее поколение
передаются только положительные мутации;
• нейроэволюция — аналогично генетическому программированию, но геномы представляют собой
искусственные нейронные сети, в которых происходит эволюция весов при заданной топологии сети,
или помимо эволюции весов также производится эволюцию топологии;
Метод эволюционных вычислений (ЭВ) можно описать следующим образом. На каждой
итерации содержится популяция индивидуумов 𝑃(𝑡) = {𝑥1𝑡 , 𝑥2𝑡 … . 𝑥𝑛𝑡 }. Каждый индивидуум есть
потенциальное решение рассматриваемой проблемы. Каждое решение оценивается с точки зрения
величины пригодности. Затем создается новая популяция на следующей итерации 𝑡 + 1 путем отбора
наиболее пригодных индивидуумов (этап селекции). Некоторые члены новой популяции
подвергаются преобразованиям (этап рекомбинации) посредством генетических операторов для
формирования новых решений. Среди операторов можно выделить оператор скрещивания,
формирующий новые индивидуумы посредством комбинирования частей нескольких исходных и
оператор мутации, который создает новый индивидуум путем малых изменений исходного. После
ряда таких генераций находится лучший индивидуум, который представляет сбой оптимальное
решение.
Рассмотрим генетические алгоритмы (ГА), которые позволяют решать оптимизационные
задачи с помощью метода эволюционных вычислений, то есть путем отбора из множества решений
наиболее подходящего.
Генетические алгоритмы имеют следующие особенности: применяются бинарные строки
фиксированной длины (хромосомы) и два оператора (бинарные мутация и скрещивание).
Генетические алгоритмы используют следующие понятия:
Хромосома, особь, индивидуум (битовая строка 0101….101) – определяет точку пространства поиска
и представляет потенциальное решение задачи.
Гены (биты) – элементы, из которых состоит хромосома.
Популяция – набор хромосом.
Локус (местоположение) – позиция гена в хромосоме.
Аллель – значение гена.
Фенотип – раскодированное решение задачи.
1
Генотип – закодированное решение.
Поколение (генерация) – новое поколение после каждого шага работы ГА.
«Родители» - хромосомы, из которых путем скрещивания и отбора формируются хромосомы –
«потомки».
Фитнесс функция (функция пригодности) – функция, оценивающая пригодность (качество)
хромосомы.
Генетические операторы (отбор, скрещивание, мутация) – преобразования, которым подвергаются
хромосомы в процессе эволюции и борьбы за выживание.
Отбор осуществляется в соответствии со значениями фитнесс функции. Скрещивание
комбинирует признаки двух родительских хромосом для образования двух потомков обменом
соответствующих сегментов родителей. Например, если родители отображаются пяти размерными
векторами (𝑎1 , 𝑏1 , 𝑐1 , 𝑑1 , 𝑒1 ) и (𝑎2 , 𝑏2 , 𝑐2 , 𝑑2 , 𝑒2 ), то выбрав точку скрещивания после второго гена,
получим такие потомки: (𝑎1 , 𝑏1 , 𝑐2 , 𝑑2 , 𝑒2 ) и (𝑎2 , 𝑏2 , 𝑐1 , 𝑑1 , 𝑒1 ). Очевидно, что оператор скрещивания
представляет собой обмен информацией между различными потенциальными решениями. Мутация
произвольно изменяет один или больше генов выбранной хромосомы случайной заменой значения,
равного единице, на ноль, или наоборот.
Генетический алгоритм для решения задачи оптимизации должен содержать следующие
компоненты:
1. Генетическое представление потенциальных решений задачи.
2. Способ создания начальной популяции потенциальных решений.
3. Оценочную фитнес-функцию (функцию пригодности), которая ранжирует решения по степени их
пригодности.
4. Генетические операторы, изменяющие генетический состав потомства.
5. Значения параметров ГА (вероятности скрещивания и мутации, размер популяции, количество
поколений)
В качестве критериев остановки выполнения алгоритма могут использоваться такие:
1. Сформировано заданное число поколений.
2. Популяция достигла заданного качества, что оценивается с помощью фитнес-функции.
3. Достигнут определенный уровень сходимости, что оценивается по сходству строк в популяции.
Схема работы ГА представлена на следующем рисунке.

Пример решения задачи оптимизации с помощью генетического алгоритма


Рассмотрим задачу оптимизации (приведена в работе [2]):
Требуется найти max 𝑓(𝑥1 , 𝑥2 ) при ограничениях 0,5 ≤ 𝑥1 ≤ 1,1, 1,0 ≤ 𝑥2 ≤ 4,6, где 𝑓(𝑥1 , 𝑥2 ) =
𝑥1 ,𝑥2
(−2𝑥23+ 6𝑥22
+ 6𝑥2 + 10) ∗ sin(ln(𝑥1 ) ∗ 𝑒 𝑥2 )
Кодирование
Для реализации генетического алгоритма необходимо закодировать оптимизируемые
параметры в двоичные строчки. Длина строчки зависит от требуемой точности. Например, пусть
переменная𝑥𝑗 имеет интервал изменения [𝑎𝑗 , 𝑏𝑗 ], и требуемая точность - пять знаков после запятой.
Каждую переменную можно закодировать с помощью целого числа: 𝑥𝑗 ∗ 105 . В этом случае интервал
изменения переменной 𝑥𝑗 ∗ 105 равен (𝑏𝑗 − 𝑎𝑗 ) ∗ 105 . Требуемое число битов 𝑚𝑗 для двоичного

2
кодирования этого числа находится с помощью следующего выражения: 2𝑚𝑗−1 < (𝑏𝑗 − 𝑎𝑗 ) ∗ 105 <
2𝑚𝑗 − 1,
или log 2 ((𝑏𝑗 − 𝑎𝑗 ) ∗ 105 + 1) < 𝑚𝑗 < log 2 ((𝑏𝑗 − 𝑎𝑗 ) ∗ 105 ) + 1
Обратное преобразование строки битов в действительное значение переменной 𝑥𝑗 выполняется
(𝑏 −𝑎 )
по следующей формуле: 𝑥𝑗 = 𝑎𝑗 + 𝑑𝑒𝑐𝑖𝑚𝑎𝑙(строка битов) 𝑚𝑗 𝑗 𝑗 , где 𝑑𝑒𝑐𝑖𝑚𝑎𝑙(строка битов)
2 −1
представляет собой десятичное значение, закодированное в бинарной строке.
Поскольку требуемая точность составляет 5 знаков после запятой, то найдем число битов,
необходимых для кодирования переменных 𝑥1 , 𝑥2 следующим образом:
1. (1,1 − 0,5) ∗ 100 000 = 60 000, тогда
log 2 (60 000 + 1) < 𝑚1 < log 2 (60 000) + 1 или 15,87 < 𝑚1 < 16,87.
Следовательно, 𝑚1 = 16.
2. (4,6 − 1,0) ∗ 100 000 = 360 000, тогда log 2 (360 000 + 1) < 𝑚2 < log 2 (360 000) + 1 или 18,45 <
𝑚2 < 19,45.
Следовательно, 𝑚2 = 19.
Таким образом: 𝑚 = 𝑚1 + 𝑚2 = 16 + 19 = 35.
Таким образом, суммарная длина хромосомы составляет 35 битов, 16 первых битов
используется как код переменной 𝑥1 , а 19 следующих – код переменной 𝑥2 . Например, рассмотрим
хромосому 01000001010100101001101111011111110. Тогда
𝑑𝑒𝑐𝑖𝑚𝑎𝑙(0100000101010010) = 16722, 𝑑𝑒𝑐𝑖𝑚𝑎𝑙(1001101111011111110) = 319230.
А сама хромосома соответствует значениям переменных 𝑥1 , 𝑥2 :
1,1−0,6
𝑥1 = 0,5 + 16722 216 −1 = 0,65310.
4,6−1,0
𝑥2 = 1,0 + 319230 = 3,19198.
219 −1

Формирование исходной популяции


Исходная популяция генерируется случайно:
𝜗1 = [01000001010100101001101111011111110]
𝜗2 = [10001110101110011000000010101001000]
𝜗3 = [11111000111000001000010101001000110]
𝜗4 = [01100110110100101101000000010111001]
𝜗5 = [00000010111101100010001110001101000]
𝜗6 = [10111110101011011000000010110011001]
𝜗7 = [00110100010011111000100110011101101]
𝜗8 = [11001011010100001100010110011001100]
𝜗9 = [01111110001011101100011101000111101]
𝜗10 = [01111101001110101010000010101101010]
Переменные 𝑥1 , 𝑥2 имеют соответствующие значения:
𝜗1 = (𝑥1 , 𝑥2 ) = (0.65310, 3.19198)
𝜗2 = (𝑥1 , 𝑥2 ) = (0.83451,2.80929)
𝜗3 = (𝑥1 , 𝑥2 ) = (1.08331,2.87431)
𝜗4 = (𝑥1 , 𝑥2 ) = (0.74099,3.92628)
𝜗5 = (𝑥1 , 𝑥2 ) = (0.50694,1.49993)
𝜗6 = (𝑥1 , 𝑥2 ) = (0.94690,2.80984)
𝜗7 = (𝑥1 , 𝑥2 ) = (0.62260,2.93523)
𝜗8 = (𝑥1 , 𝑥2 ) = (0.97652,3.77875)
𝜗9 = (𝑥1 , 𝑥2 ) = (0.79574,3.80238)
𝜗10 = (𝑥1 , 𝑥2 ) = (0.79350,3.25952)
Вычисление значения функции пригодности хромосом.
Выполняется в три шага:
1. Преобразовать генотип хромосомы в фенотип.
3
В данной задаче это означает преобразование двоичной строчки в соответствующее
действительное значение
𝑥 𝑘 = (𝑥1𝑘 , 𝑥2𝑘 ), 𝑘 = 1,2, … . 𝑚, где m - число вариантов в исходной популяции.
2. Вычислить целевую функцию𝑓(𝑥 𝑘 ).
3. Преобразовать целевую функцию в значение функции пригодности.
Для решаемой задачи оптимизации функция пригодности эквивалентна целевой
функции:𝑃(𝜗𝑘 ) = 𝑓(𝑥 𝑘 ), 𝑘 = 1,2, … 𝑚. Функция пригодности оценивает хромосомы по степени их
пригодности к выполнению критерия оптимизации.
Значения функций пригодности вышеприведенных хромосом, следующие:
𝑃(𝜗1 ) = 𝑓(0.65310,3.19198) = 20,43240
𝑃(𝜗2 ) = 𝑓(0.83451,2.80929) = −4.13363
𝑃(𝜗3 ) = 𝑓(1.08331,2.87431) = 28.97847
𝑃(𝜗4 ) = 𝑓(0.74099,3.92628) = −2.41574
𝑃(𝜗5 ) = 𝑓(0.50694,1.49993) = −2.49634
𝑃(𝜗6 ) = 𝑓(0.94690,2.80984) = −23.50371
𝑃(𝜗7 ) = 𝑓(0.62260,2.93523) = −13.87817
𝑃(𝜗8 ) = 𝑓(0.97652,3.77875) = −8.99606
𝑃(𝜗9 ) = 𝑓(0.79574,3.80238) = 6.98271
𝑃(𝜗10 ) = 𝑓(0.79350,3.25952) = 6.20191
Очевидно, что хромосома 𝜗3 − наиболее сильная, поскольку имеет наибольшее значение функции
пригодности, а хромосома 𝜗6 − наиболее слабая с наименьшим значением функции пригодности.
Выбор родителей (отбор хромосом).
Наибольшее распространение на практике получил подход, называемый колесо рулетки. Согласно
этому подходу отбор осуществляется на основе некоторой функции распределения, которая строится
пропорционально вычисленным функциям пригодности сгенерированных ранее хромосом. Колесо
рулетки может быть сконструировано следующим образом:
1. Вычисляем значение функции пригодности 𝑃(𝜗𝑘 ) для каждой хромосомы 𝜗𝑘 :
𝑃(𝜗𝑘 ) = 𝑓(𝑥 𝑘 ), 𝑘 = 1,2, … 𝑚
2. Вычисляем общую функцию пригодности популяции:
𝑚

𝐹 = ∑(𝑃(𝜗𝑘 ) − min 𝑃(𝜗𝑗 ))


𝑗=1,𝑚
𝑘=1
3. Вычисляем вероятность отбора 𝑝𝑘 для каждой хромосомы 𝜗𝑘 :
𝑃(𝜗𝑘 ) − min 𝑃(𝜗𝑗 )
𝑗=1,𝑚
𝑝𝑘 = , 𝑘 = 1,2, … 𝑚
𝐹
4. Вычисляем совокупную вероятность 𝑞𝑘 для каждой хромосомы 𝜗𝑘 :
𝑘

𝑞𝑘 = ∑ 𝑝𝑗 , 𝑘 = 1,2 … 𝑚
𝑗=1
Процесс отбора начинается с вращения колеса 𝑚 раз; при этом каждый раз выбирается одна
хромосома по следующему алгоритму:
1. Генерируем случайное число 𝑟из интервала [0,1].
2. Если 𝑟 ≤ 𝑞1 , то выбираем хромосому 𝜗1 ; иначе выбираем хромосому 𝜗𝑘 , (2 ≤ 𝑘 ≤ 𝑚) такую, что
𝑞𝑘−1 < 𝑟 ≤ 𝑞𝑘
Для рассматриваемого примера общая функция соответствия 𝐹 всей популяции равна:
10

𝐹 = ∑(𝑃(𝜗𝑘 ) − min 𝑃(𝜗𝑗 )) = 242,20892


𝑗=1,10
𝑘=1
Вероятность отбора 𝑝𝑘 для каждой хромосомы 𝜗𝑘 , 𝑘 = 1,2 … 10 равна:
𝑝1 = 0,18140, 𝑝2 = 0,07998, 𝑝3 = 0,21668,𝑝4 = 0,08707, 𝑝5 = 0,08673, 𝑝6 = 0,00000
𝑝7 = 0,03974, 𝑝8 = 0,05990, 𝑝9 = 0,12587,𝑝10 =0.12265
4
Совокупные вероятности 𝑞𝑘 для каждой хромосомы 𝜗𝑘 , 𝑘 = 1,2 … 10 равны:
𝑞1 = 0.18140, 𝑞2 = 0.26137, 𝑞3 = 0.47805,𝑞4 = 0.56512, 𝑞5 = 0.65185, 𝑞6 = 0.65185,
𝑞7 = 0.69159, 𝑞8 = 0.75149, 𝑞9 =0.87736, 𝑞10 = 1
Вращаем колесо рулетки 10 раз и каждый раз отбираем одну хромосому для новой популяции.
Допустим, что имеется следующая последовательность из десяти случайных чисел, выбранных из
интервала[0,1]:0,30143; 0,32206; 0,73650;0,86189; 0,35087; 0,53339;
0,17762, 0,34324; 0,03269; 0.19758.
Первое число 𝑟1 = 0.30143 больше чем 𝑞2 и меньше чем 𝑞3 .Это означает, что отбирается хромосома
𝜗3 . Второе число 𝑟2 =0.32206 также больше чем 𝑞2 и меньше чем 𝑞3 . Значит, опять отбираем
хромосому 𝜗3 для новой популяции и т.д. Наконец, получим новую популяцию, состоящую из таких
хромосом:
𝜗1′ = (11111000111000001000010101001000110) это хромосома 𝜗3
𝜗2′ = (11111000111000001000010101001000110)это хромосома 𝜗3
𝜗3′ = (11001011010100001100010110011001100)это хромосома 𝜗8
𝜗4′ = (01111110001011101100011101000111101)это хромосома 𝜗9
𝜗5′ = (11111000111000001000010101001000110)это хромосома 𝜗3
𝜗6′ = (01100110110100101101000000010111001)это хромосома 𝜗4
𝜗7′ = (01000001010100101001101111011111110)это хромосома 𝜗1
𝜗8′ = (11111000111000001000010101001000110)это хромосома 𝜗3
𝜗9′ = (01000001010100101001101111011111110)это хромосома 𝜗1

𝜗10 = (10001110101110011000000010101001000)это хромосома 𝜗2
Создание потомства (скрещивание).
Для скрещивания хромосом будем использовать метод с одной точкой обмена. В соответствие
с этим методом, случайно выбирается одна точка обмена, относительно которой меняются местами
части хромосом-родителей. Для примера рассмотрим скрещивание двух хромосом, для которых была
случайно выбрана точка обмена после 17-го гена:
𝜗1′ = (11111000111000001000010101001000110)

𝜗10 = (10001110101110011000000010101001000)
В результате обмена частей родительских хромосом получаются следующие хромосомы-отпрыски:
𝜗1 = (11111000111000001000000010101001000)
𝜗2 = (100011101011100111000010101001000110)
Пусть вероятность скрещивания 𝑝𝑐 = 0,25, т.е. в среднем 25% хромосом подвергнутся скрещиванию.
Таким образом, скрещивание осуществляется по следующему алгоритму:
Алгоритм скрещивания.
• Этап определения номеров хромосом-родителей:
1. 𝑘=1
2. Генерация случайного числа 𝑟𝑘 из интервала [0,1]
3. Если 𝑟𝑘 < 0.25, то отбираем 𝜗𝑘 как одного из родителей для скрещивания.
4. 𝑘 =𝑘+1
5. Если 𝑘 ≤ 10, то переходим к п.2
6. Отбор завершен
Например, предположим, что сгенерирована последовательность случайных чисел:
0,62572; 0,26682; 0,28864; 0,29511;0,16327; 0,56746;0,08594; 0,39287; 0,77071; 0,54866
В соответствии с алгоритмом для дальнейшего скрещивания выбираются хромосомы 𝜗5′ , 𝜗7′ .Число
отобранных хромосом может быть и больше. Если их число четное, то для дальнейшего скрещивания
могут быть выбраны любые пары. Если число – нечетное, то можно добавить или убрать любую
хромосому. Каждая пара хромосом-родителей дает новую пару хромосом – потомков.
• Этап определения позиции – точки скрещивания.
Генерируется случайное целое число из интервала [1, общая длина хромосомы -1]. Считаем
позицию соответствующего гена (бита) в хромосоме точкой обмена хромосом своими частями, то есть

5
точкой скрещивания. Выбранные хромосомы обмениваются частями, стоящими после точки
скрещивания.
Для нашего примера длина хромосомы равна 35, тогда интервал равен [1,34]. Допустим было
сгенерировано число, равное 1, то есть хромосомы-родители обмениваются частями после первого
гена:

𝜗5′ = (11111000111000001000010101001000110)
𝜗7′ = (01000001010100101001101111011111110)

При этом появятся следующие хромосомы-потомки:


𝜗5′′ = (11000001010100101001101111011111110)
𝜗7′′ = (01111000111000001000010101001000110)
Мутация новых особей.
Мутация состоит в изменении значения одного или большего числа генов. Число мутируемых
генов определяется на основании вероятности мутации 𝑝𝑚 . Сама мутация заключается в инверсии гена
в зависимости от его значения c 0 на 1 или с 1 на 0.
Зададим вероятность мутации 𝑝𝑚 = 0,01, поэтому число мутируемых битов составит 1% от
общего числа битов в популяции. Каждый бит в популяции имеет равный шанс подвергнуться
мутации, поэтому для каждого бита генерируется случайное число 𝑟 из диапазона [0,1], если 𝑟 < 0,01,
то данный бит мутируется.
Для нашего примера, число битов всей популяции равно 𝑚 ∗ общую длину хромосомы = 10 ∗
35 = 350 битов, следовательно, в среднем общее число мутантов в каждом поколении составит 3,5
бита. В целом необходимо получить 350 случайных чисел, из которых в нашем примере только 4
удовлетворяют требуемому условию 𝑟 < 0,01:
Позиция бита в Номер Позиция бита в Случайное число 𝑟
популяции хромосомы хромосоме

111 4 6 0.009857

172 5 32 0.003113

211 7 1 0.000946

347 10 32 0.001282

Добавив в популяцию новые особи и затем сократив ее за счет исключения особей,


участвовавших в скрещивании и мутации, получим окончательную популяцию:
№ Функции пригодности
хромо (при соответствующих десятичных
сомы Хромосома значениях 𝑥1 , 𝑥2 )

1 11111000111000001000010101001000110 𝑓(1,08331,2,87431) = 28,97847

2 11111000111000001000010101001000110 𝑓(1,08331,2,87431) = 28,97847

3 11001011010100001100010110011001100 𝑓(0,97652,3,77875) = −8,99606

4∗ 01111010001011101100011101000111101 𝑓(0,78636,3,80238) = 9,36672

5∗ 11000001010100101001101111011110110 𝑓(0,95310,3,19193) = −23,22975

6 01100110110100101101000000010111001 𝑓(0,74099,3,92628) = −2,41574

7∗ 11111000111000001000010101001000110 𝑓(1,08331,2,87431) = 28,97847

8 11111000111000001000010101001000110 𝑓(1,08331,2,87431) = 28,97847

9 01000001010100101001101111011111110 𝑓(0,65310,3,19198) = 20,43239

10∗ 10001110101110011000000010101000000 𝑓(0,8345112,80923) = −4,13856

6
Мутируемые строчки отмечены звездочкой, а измененные биты – жирным шрифтом.
Таким образом, завершена одна итерация генетического алгоритма. Проделав 1000 итераций, мы
получим наилучшую хромосому в 419-м поколении:
𝜗 ∗ = [01000011000100110110010011011101001]
𝑃(𝜗 = 𝑓(0,65721,2,41840)= 31,31356. Таким образом: 𝑥1∗ = 0,65721; 𝑥2∗ = 2,41840.
∗)

𝑓(𝑥1∗ ,𝑥2∗ )= 31,31356.

Литература.
1. Кричевский М.Л. Интеллектуальные методы в менеджменте. – Спб:Питер, 2005 – 304.с.
2. Ротштейн А.П. Интеллектуальные технологии идентификации: нечеткая логика, генетические
алгоритмы, нейронные сети. — Винница: УНіВЕРСУМ-Вінниця,1999. — 320 с.

2.Сверточные нейронные сети.


СНС разработаны для решения задачи КЛАССИФИКАЦИ изображений. На вход сети подается
изображение в виде матрицы пикселей, а на выходе необходимо получить КЛАСС, к которому данное
изображение относится (например, «Кошка», «Собака» и т.п.).
С этой задачей может справиться обыкновенный многослойный персептрон, но для его обучения
потребуется много примеров, а с ростом размера (разрешения) входного изображения размерность
сети будет расти многократно, что негативно отразится на точности распознавания. Если бы удалось
предварительно понизить разрешение входного изображения без потери информации об
изображенном объекте, то MLP отлично бы подошла для решения такой задачи классификации.
Сверточные нейронные сети представляют собой соединение специальных слоев,
выполняющих понижение размерности изображения, и персептрона, который в конце это
изображение относит к одному из заданных классов.

СНС MLP
Р(кошка)
Блок Р(собака)
понижения
разрешения Р(лошадь)

Рис.1. Схема строения СНС.


Принцип сжатия изображения сверточной сетью основан на особенности зрительной коры
головного мозга: в коре существуют так называемые простые клетки, реагирующие на прямые линии
под разными углами (например, некоторые нейроны активируются, когда воспринимают
вертикальные границы, а некоторые — горизонтальные или диагональные), и сложные клетки,
реакция которых связана с активацией определённого набора простых клеток – то есть одна сложная
клетка активируется набором простых. Идея заменять, или «свертывать» специфические
характеристики объекта в один нейрон (активировать его) — основа работы СНС.
Таким образом, идея свёрточных нейронных сетей заключается в чередовании свёрточных слоев,
которые имитируют работу сложных клеток (англ. convolution layers) и субдискретизирующих слоев,
которые имитируют активацию простых клеток (англ. subsampling layers или англ. pooling layers, слоёв
подвыборки). После чередования этих двух типов слоев выход последнего из них подается на
обработку многослойным персептроном:

7
Рис.2. Последовательность слоев в СНС.

Структура сети— однонаправленная (без обратных связей).


Сначала, как в любой нейронной сети, в СНС идет входной слой. Входной массив данных зависит
от разрешения и размера изображения, а также его цветности. Так, к примеру, цветная картинка
размером 32 на 32 пикселя породит входной массив (32*32*3), где 3 – каналы RGB.
Свёрточный слой.
Первый после входного слой в СНС всегда свёрточный. Каждый нейрон сверточного слоя
заключает в себе информацию о заданном признаке некоторой части исходного изображения:

Рис.3. Схема свертки фрагмента изображения


в единственный нейрон сверточного слоя.

Легче всего понять, что такое нейрон свёрточного слоя, если представить его в виде фонарика,
который светит на верхнюю левую часть изображения. Допустим свет, который излучает этот
фонарик, покрывает площадь (5×5). Таким образом, на рисунке фрагмент исходного изображения
(5×5) сворачивается в один нейрон сверточного слоя. Пусть необходимо свернуть фрагмент исходного
изображения размерности (s×k). Тогда свертка происходит согласно формуле:
s k
С xy =   Wij I x + i −1, y + j −1 (1)
i =1 j =1
Здесь Cxy – число, значение нейрона в позиции (x,y) сверточного слоя, Ix+i-1,y+j-1 – элемент
сжимаемого (сворачиваемого) участка исходного изображения, Wij-матрица синаптических
коэффициентов той же размерности, что и сворачиваемый участок. Она также называется
ФИЛЬТРОМ, или ЯДРОМ свертки.
В случае цветного изображения добавляется суммирование по каналам RGB:
s k 3
Сxy =   Wijl I x + i −1, y + j −1,l (2)
i =1 j =1l =1
Сворачиваемый фрагмент называется рецептивным полем.

8
Элементы ядра кодируют определенный заданный признак изображения. Тогда чем выше
значение Cxy, тем с большей вероятностью на сжимаемом фрагменте присутствует данный признак.
Пусть необходимо распознать на изображении размерности (5х5) кривую линию. Зададим
фильтр как пиксельную структуру, в которой численные значения выше вдоль области, определяющей
форму кривой. Тогда ядро такой свертки может иметь вид:

Рис.4. Задание ядра свертки для примитива «кривая линия» размерности 5х5.

Следующий шаг — перемещение фильтра вправо на S пикселей, здесь S – шаг, чаще всего S=1.
То есть свертке подвергается другой фрагмент изображения, который однако в большей своей части
перекрывает старый, затем еще на S (например на единицу) вправо и так далее. Каждая уникальная
позиция введённого изображения производит число – значение нейрона сверточного слоя.
Например, мы двигаем по изображению размерности (32х32) фрагмент размерности (5х5) с
шагом 1. Тогда после прохождения фильтра по всем позициям получается матрица (28х28), которую
называют картой признака (в данном случае признак – кривая линия). Матрица (28х28) получается
потому, что есть 784 различных позиции, которые могут пройти через фильтр (5х5) изображения
(32х32).
Рассмотрим пример изображения: мышь.

Рис.5. Исходное изображение.


Используем фильтр для распознавания кривой размерности (7х7).

Рис.6. Задание ядра свертки для примитива


«кривая линия» размерности 7х7.
Установим фильтр в верхнем левом углу.

9
Рис.7. Наложение рецептивного окна
на левый верхний угол изображения.

Этот фрагмент свернется в нейрон со значением 6600:

Рис.8. Вычисление значения нейрона сверточного слоя


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

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

Значение намного ниже потому, что в новой области изображения нет ничего, что фильтр
определения кривой мог засечь.
Полученная в результате матрица называется картой свойств или картой признаков. В самом
простом случае, при наличии одного фильтра свертки (и если этот фильтр — детектор кривой), карта
свойств покажет области, в которых больше вероятности наличия кривых. В этом примере в левом
верхнем углу значение нашей (28х28) карты свойств будет 6600. Это высокое значение показывает,
что, возможно, что-то похожее на кривую присутствует на изображении, и такая вероятность
активировала фильтр. В правом верхнем углу значение у карты свойств будет 0, потому что на
картинке не было ничего, что могло активировать фильтр (проще говоря, в этой области не было
кривой).
Заметим, что все вышесказанное справедливо только для одного фильтра. Это фильтр, который
обнаруживает линии с изгибом наружу. Могут быть другие фильтры для линий, изогнутых внутрь или
просто прямых. Каждый фильтр породит собственную матрицу (28х28). Количество таких матриц
называется ГЛУБИНОЙ карты признаков.
Сверточный слой с глубиной карт признаков=3
Карта признака №1
Карта признака №2
Карта признака №3

Рис.10. Представление сверточного слоя, кодирующего 3 признака изображения.


10
Иногда бывает удобно окружать границу входного изображения нулями. Такое заполнение
называется Отступ (Padding). Заметим, что свертка любым ядром размерности более, чем 1х1
уменьшит размер выходного изображения, то есть размерность карты признаков меньше, чем
размерность исходного изображения. Так как в общем случае желательно сохранять размер исходного
изображения, рисунок дополняется нулями по краям.
Размерность карты признаков С можно вычислить как функцию от размерности входного
изображения (W), размерности рецептивного поля нейронов свёрточного слоя (F), шага, с которым
они перемещаются (S), и отступа (P):

(W − F + 2 P)
С= +1 (3)
S
Например, для входного объема 7×7 и фильтра 3×3 с шагом 1 и дополнением 0, на выходе
мы получим объем 5×5 (С=((7-3+0)/1)+1=5). С шагом 2 выходное значение было бы равно 3×3.
Сверточных слоев в сети может быть несколько. Для каждого такого слоя необходимо указать
так называемые ГИПЕРПАРАМЕТРЫ –характеристики, задаваемые до начала обучения:
• Глубина (depth) — сколько признаков будет кодировать сверточный слой, то есть сколько ядер
(фильтров, матриц синаптических весов) и соответственно карт признаков будет в слое;
• Высота (height) и ширина (width) каждого ядра, или, что тоже самое – какова будет размерность
рецептивного поля;
• Шаг (stride) — на сколько смещается ядро на каждом шаге при вычислении следующего пикселя
результирующего изображения. Обычно его принимают равным 1, и чем больше его значение, тем
меньше размерность карт признаков;
• Отступ (padding) – заполнение нулями по краям изображения (если необходимо).

Слой субдискретизации (уплотнения).


Слой субдискретизации (downsampling или pooling layer) располагается сразу за слоем свертки,
и имеет по одной матрице для каждой карты признаков. Max-уплотнение (max pooling) карты
признаков делает процесс распознавания более точным, избавляя от ненужных «ореолов» и сокращая
число параметров сверточной нейронной сети. Он получает на вход маленькие отдельные фрагменты
изображения карты признаков (обычно 2х2) и объединяет каждый фрагмент в одно значение.
Существует несколько возможных способов агрегации, наиболее часто из четырех пикселей
выбирается максимальный. Этот способ схематически изображен ниже.

Рис.11. Результат работы слоя субдискретизации.

Таким образом размерность изображения сокращается в данном примере в два раза.


За слоем уплотнения вновь располагается сверточный слой.

Количество сверточных и уплотняющих слоев также задается до начала обучения. Существуют


сверточные сети вообще без слоев уплотнения, либо между некоторыми сверточными слоями слой
уплотнения может отсутствовать, но присутствовать между другими. Последним слоем перед
передачей данных на многослойный персептрон может быть как сверточный, так и уплотняющий
слой.
11
Иногда к выходам нейронов сверточного слоя применяется дополнительно функция активации,
чаще всего ReLU - rectified linear unit:
f ( x) = max(0, x) (4)

Передача сжатого изображения на многослойный персептрон.


Каждый пиксель последнего из обрабатывающих слоев (сверточного или уплотняющего) будет
являться входным параметром для MLP. То есть количество входных нейронов полносвязной сети
MLP будет равно числу пикселей последней карты. Количество выходных нейронов – числу заданных
классов. . Количество скрытых слоев и нейронов в них задается перед началом обучения. Также
необходимо задать функцию активации для нейронов скрытых слоев.
Однако функцией активации нейронов выходного слоя в обязательном порядке является
функция Softmax:
e zi
fi ( z ) = N
(5)
e
zj

j =1
Здесь z –вектор числовых значений – входов последнего слоя, N-размерность вектора z=числу
определяемых классов, i-номер выходного нейрона (номер класса).
Функция Softmax превращает вектор действительных чисел в вектор вероятностей
(неотрицательные действительные числа, не превышающие 1), сумма которых равна 1. В нашем
контексте выходные значения являются вероятностями попадания изображения в определённый
класс.
Обучение сверточной нейронной сети.
Все матрицы синаптических весов в СНС подбираются в процессе обучения, в том числе и ядра
сверток. Обучение производится по стандартному методу обратного распространения ошибки, где в
качестве обучающих кортежей используются пары «Изображение – вектор вероятности
принадлежности к заданному классу», где в векторе вероятностей вероятность правильного класса
устанавливается в 1, а остальные обнуляются.
Для практического применения метода обратного распространения ошибки к обучению
сверточной сети ее необходимо представить в виде многослойного персептрона, и передавать ошибку
от последнего слоя софтмакс к первому сверточному слою.
Для понимания того, как происходит разворачивание сверточной сети в персептрон, обратимся
к рисунку 12. Обозначим синим цветом входную карту (входное изображение или карта предыдущего
слоя), разноцветным – синаптическое ядро, то есть веса, которые должны быть настроены в процессе
обучения, а оранжевым – получившаяся свертка, то есть карта признаков после применения фильтра.
Входная карта (синяя) и выходная (оранжевая) развернутся в слои персептрона, а фильтр будет
представлять собой связи между этими слоями.

Рис.12. Интерпретация операции свертки в многослойный вид


12
Исходная карта (изображение) в нашем примере состоит из 9 пикселей. Следовательно, эта карта
будет представлена девятью нейронами первого слоя (синие нейроны). Номер нейрона соответствует
номеру пикселя исходного изображения. Выходная свертка состоит из 4 пикселей, следовательно
слой, в который она будет развернута, состоит из 4 нейронов.
Рецептивное поле выбрано размерностью 2х2- такова же размерность фильтра (цветные
квадраты).
При перемещении рецептивного поля по исходному изображению каждый пиксель (нейрон)
умножается на свой элемент фильтра (синаптический вес), результаты складываются и образуют
пиксель свертки (вход нейрона следующего (оранжевого) слоя). Этот процесс интерпретируется как
наличие исходящей из «синего» нейрона дуги в соответствующий «оранжевый» нейрон, вес дуги
соответствует элементу фильтра. (Рис.12).
Основное отличие такой развернутой многослойной сети от обычного многослойного
персептрона в том, что связи между нейронами разделяемы, то есть одна связь с конкретным
значением веса может быть у нескольких пар нейронов, а не только одной.

Алгоритм свёрточных нейронных сетей считается в настоящее время одним из лучших


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

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

Все эти параметры существенно влияют на результат, но выбираются исследователями


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

3.Моделирование последовательностей для обработки текстов на


естественных языках (Часть 1)
Обработка естественного языка (Natural Language Processing, NLP) представляет собой одну из
сфер Data Science и используется для решения обширного класса задач, включающего поддержку
механизмов поиска, аннотирования и классификации текстов на веб-страницах, а также для внедрения
13
методов машинного обучения с целью решения таких нетривиальных задач, как распознавание речи и
анализ запросов. Одной из фундаментальных задач NLP является прогнозирование текста,
обусловленного предыдущей последовательностью слов, которая является ядром языкового
моделирования.
Последовательная информация в естественных языках встречается повсеместно. Например, речь
можно рассматривать как последовательность базовых элементов — фонем. Например, во многих
языках, в том числе и в русском языке, число (единственное или множественное) сказуемого в
предложении должно соответствовать числу подлежащего. Это можно рассмотреть на примере
следующих предложений:
Студентка магистратуры планирует поступать в аспирантуру КНИТУ-КАИ.
Студенты магистратуры планируют поступать в аспирантуру КНИТУ-КАИ.
Иногда длина подобных зависимостей (ограничений) может оказаться произвольно большой,
поэтому для понимания естественного языка необходимо понимать, как устроены предложения.
Языковая модель (language model) моделирует вероятностное распределение
последовательности слов 𝑃(𝑤1, 𝑤2, ..., 𝑤𝑁), т. е. позволяет сказать с какой вероятностью может
встретиться последовательность слов 𝑤1, 𝑤2, ..., 𝑤𝑁. В тоже время в литературе языковым
моделированием (language modeling) называют задачу предсказания следующего слова в
последовательности 𝑃(𝑤𝑁 |𝑤1, 𝑤2, ..., 𝑤𝑁−1) на рис. 1.4. [20].
Оба определения языковой модели связаны друг с другом, так как по определению условной
вероятности можно расписать:

𝑃(𝑤1, 𝑤2, ..., 𝑤𝑁 ) = 𝑃(𝑤1)𝑃(𝑤2| 𝑤1)... 𝑃(𝑤𝑁 | 𝑤1, 𝑤2 ,... ,𝑤𝑁−1). (1.1)

а) б).
Рис. 1.1. Языковые модели: а) Языковая модель, предсказывающая следующее слово; б)
Маскированная языковая модель [20]

Статистические модели представляют собой основанные на правилах или вероятностные


языковые модели, созданные посредством разработки методов языкового моделирования, например
N-граммы.
N-граммы — последовательности фиксированной длины (n) непрерывно следующих друг за
другом токенов, встречающихся в тексте. Биграмма состоит из двух токенов, униграмма — из одного,
как показано на рисунке 1.2.

Рис. 1.2. N-граммы


14
Токены — последовательности символов в лексическом анализе в информатике,
соответствующие лексеме. В свою очередь, лексема — единица языка, являющаяся единицей
словарного состава языка, представляющая собой совокупность всех парадигматических форм
(словоформ) одного слова и их лексических значений. Например, словарь, словарём, словарю — это
формы одной и той же лексемы, по соглашению пишущейся как СЛОВАРЬ. Другими словами,
токенами являются небольшие фрагменты текста, полученные в результате процедуры разделения
большого текста на небольшие фрагменты. Сама процедура разделения теста на токены называется
токенизация.
Простые модели, как и N-граммы, ограничивают производительность при работе с длинными
текстами. В частности, сети прямого распространения могут приспособиться к произвольным
функциям выделения признаков из последовательностей благодаря конкатенации и сложению
векторов (непрерывный мешок слов – CBOW). Так, представления в виде CBOW позволяют
кодировать последовательности произвольной длины векторами фиксированного размера. Однако
CBOW-представление крайне ограничено и вынуждает игнорировать порядок признаков.
Рассмотренные нами в предыдущей лекции Сверточные сети также позволяют кодировать
последовательность вектором фиксированного размера. Хотя представления на основе сверточных
сетей – шаг вперед по сравнению с CBOW, поскольку чувствительны к порядку слов, но эта
чувствительность ограничена по преимуществу локальными паттернами, а порядок паттернов,
расположенных далеко друг от друга, не учитывается.
Нейронные языковые модели помогли преодолеть эти ограничения и превзойти статистические
языковые модели в языковой задаче моделирования.
Так, рекуррентные нейронные сети (recurrent neural network, RNN, РНС) уже способны работать
с последовательностями разной длины. Рекуррентные — означает, что действие регулярно к чему-то
возвращается. Следовательно, РНС возвращается к своей работе с предыдущего шага, что и отражено
в названии нейросети. Данный механизм позволил в ходе обработки текстов избавиться от
фиксированной длины контекста, применяя это для языкового моделирования, что можно увидеть на
рис. 1.3.

Рис. 1.3. Языковая модель на основе рекуррентной нейронной сети. Рисунок взят из [20]

В глубоком обучении моделирование последовательностей требует хранения скрытой


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

15
Рис. 1.4. Модель рекуррентной нейронной сети (РНС)

Как вы видите на рис. 1.4, отдельный рекуррентный нейрон из скрытого слоя добавляет в сеть
рекуррентный цикл для «повторного использования» выходного сигнала скрытого слоя для момента
t. Выходной сигнал для момента t прибавляется к следующему входному сигналу для момента t + 1. В
результате обработки сетью этого нового входного сигнала на временном шаге t + 1 получается
выходной сигнал скрытого слоя для момента t + 1. Этот выходной сигнал для момента времени t + 1
далее повторно используется сетью и включается во входной сигнал на временном шаге t + 2 и т. д.
Обучение сети представляет собой минимизацию суммарных потерь:

(1.2)

Сеть РНС обучается с помощью специальной вариации алгоритма Bakpropagation для обучения
РНС, который называется Bakpropagation through time, который включает в себя следующие шаги:
• Разбиваем каждый пример данных на токены.
• Передаем токены по одному в нейронную сеть прямого распространения.
• Возвращаем выходной сигнал каждого из временных шагов на вход того же слоя вместе с входным
сигналом для следующего временного шага.
• Сравниваем выходной сигнал последнего временного шага с меткой.
• Производим обратное распространение ошибки через весь граф, аж до первого входного сигнала на
временном шаге 0.
Схематический пример работы данного алгоритма можно увидеть на рис. 1.5., иллюстрирующим
рассматриваемый алгоритм.

Рис. 1.5. Обратное распространение ошибки во времени

Между тем, РНС столкнулись с такими проблемами, как исчезновение или взрыв градиента, что
приводит к невозможности захвата соответствующих зависимостей в последовательностях.
Получается, что рекуррентная сеть — это как будто чрезвычайно многоуровневая обычная сеть,
в которой одни и те же веса заново используются на каждом уровне. Такие общие веса имеют свои
преимущества. Во-первых, для их хранения достаточно одной матрицы, все t «слоев» в данном случае
16
сугубо виртуальные, и веса нужно хранить только один раз. Во-вторых, общие веса позволяют
избегать некоторых проблем глубоких сетей: градиенты по весам не затухают до нуля сразу же.
Однако у рекуррентных сетей есть и свои проблемы. Во-первых, градиенты, конечно, сами по себе не
затухают, но зато они могут взорваться (exploding gradients): если матрица весов такова, что заметно
увеличивает норму вектора градиента при проходе через один «виртуальный слой» обратного
распространения, получится, что при проходе через t слоев эта норма возрастет экспоненциально от t,
веса ведь одни и те же.
Во-вторых, хотя градиенты не затухают совсем, влияние текущего входа или текущего состояния
сети, тем не менее, обычно не может распространяться слишком далеко. Влияние текущего входа
затухает экспоненциально по мере удаления. Это серьезная проблема, которая не позволяет
«обычным» рекуррентным сетям обучаться распознавать далекие зависимости в данных.
Механизм долговременной кратковременной памяти (Long short-term memory, LSTM) решил
проблемы, с которыми сталкивались другие РНС, путем предоставления возможности захвата
долгосрочных зависимостей в последовательностях.
Как видно на рис. 1.6., LSTM по сравнению с РНС имеет более сложную структуру ячеек. Так, в
стандартной РНС эти повторяющие модули будут иметь очень простую структуру, например, всего
один слой гиперболического тангенса (tanhtanh).

Рис. 1.6. Структура ячеек РНС и LSTM

Как выглядит стандартная архитектура типичной LSTM-ячейки можно увидеть на рисунке 1.6.
В частности, структура LSTM включает в себя три вида узлов, которые называются вентилями, а
именно: входной (input gate), забывающий (forget gate) и выходной (output gate), а также собственно
рекуррентная ячейка со скрытым состоянием. Кроме того, в LSTM часто добавляют еще, так
называемые, замочные скважины (peepholes) — дополнительные соединения, которые увеличивают
связность модели.

Рис. 1.7. Структура LSTM-ячейки


LSTM обладает дополнительным скрытым состоянием Ct, а состояние ht одновременно является
выходом.
Вентили в случае LSTM являются способом избирательно пропускать информацию. Они
составлены из сигмоидного слоя нейросети и операции поточечного умножения (pointwise
multiplication), которое можно увидеть на рис. 1.8.
17
Рис. 1.8. Сигмоидный слой
Сигмоидный слой подает на выход числа между нулем и единицей, описывая таким образом,
насколько каждый компонент должен быть пропущен сквозь вентиль. Ноль - “ничего не пропускать”,
один - “пропускать все”. LSTM имеет три таких вентиля, чтобы защищать и контролировать состояние
ячейки.
В частности, Forget gate (забывающий вентиль) с учетом xt определяет, какую информацию из
ct−1 стоит сохранить.
Рассмотрим языковую модель, пытающуюся предсказать следующее слово, основываясь на
всех предыдущих. В такой проблеме клеточное состояние может включать род подлежащего, что
позволит использовать правильные формы местоимений. Когда мы видим новое подлежащее
мы забываем род предыдущего подлежащего.

Следующим шагом необходимо решить, какую новую информацию мы собираемся


сохранить в состоянии ячейки. Во-первых, сигмоидный слой, называемый “входным вентилем”
(“input gate layer”), решает, какие значения мы обновим. Далее, слой гирпеболического тангенса
создает вектор кандидатов на новые значения σt, который может быть добавлен к состоянию. На
следующем шаге мы соединим эти две части, чтобы создать обновление для состояния.
В примере с нашей языковой моделью мы бы хотели добавить род нового подлежащего к
состоянию ячейки, чтобы заменить род предыдущего подлежащего, которое нам необходимо забыть.

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

18
В примере с языковой моделью, если она только что видела подлежащее, она могла бы подать
на выход информацию, относящуюся к глаголу (в случае, если следующее слово именно глагол). К
примеру, она, возможно, подаст на выход число подлежащего (единственное или множественное).
Таким образом, мы будем знать, какая форма глагола должна быть подставлена: планирует или
планируют.

Следующий вариант RNN— это GRU, или Gated Recurrent Units (управляемые рекуррентные
нейроны), названные так потому, что вход и предыдущее скрытое состояние проходят через серию
вентилей (рис. 1.9).

Рис.1.9. Ячейка GRU, или Gated Recurrent Units


Основная разница между GRU и LSTM состоит в том, что GRU пытается сделать двумя
вентилями то же самое, что LSTM делает при помощи трех. Обязанности забывающего вентиля в
LSTM здесь разделены между двумя вентилями – update gate и reset gate. Кроме того, не возникает
второй нелинейности на пути от входа к выходу, как в случае LSTM.
Практика показывает, что GRU практически всегда работает так же или почти так же хорошо,
как LSTM. А параметров у него получается гораздо меньше: шесть матриц весов против восьми в
простейшем варианте или одиннадцати в более часто используемом (с замочными скважинами). Из-за
значительно меньшего числа параметров тренировать GRU проще, чем LSTM, поэтому в некоторых
задачах GRU показывает результаты лучше. Более того, можно позволить себе уместить в той же
памяти и с теми же ресурсами сети из большего числа GRU-ячеек, чем LSTM. Поэтому GRU часто
используются вместо классических LSTM.
Усовершенствование языкового моделирования с помощью методов глубокого обучения
продолжалось до внедрения Transformer, на основе которого строятся новые современные языковые
модели, включая, например, BERT.

4.Моделирование с помощью рекуррентных нейронных сетей для


обработки текстов на естественных языках (Часть 2)
В предыдущей лекции была рассмотрена архитектура в целом рекуррентных нейронных сетей
(РНС), а так же детали конкретных архитектур LSTM и GRU. В данной лекции мы рассмотрим
использование РНС в приложениях NLP на конкретных примерах.
1. Приемщики
Проще всего использовать РНС в качестве приемщика: прочитать входную последовательность
и породить в конце бинарный или многоклассовый ответ. РНС являются очень сильными обучаемыми
моделями и могут улавливать чрезвычайно тонкие паттерны в последовательных данных.

19
Это бывает излишним для многих задач классификации естественного языка: порядок слов
и структура предложения зачастую оказываются не слишком важны, так что классификатор на основе
мешка слов или мешка n-грамм дает результаты не хуже, чем РНС-приемщики, а то и лучше.
В этом разделе приведено два примера использования приемщиков в лингвистических
проблемах. Первый пример канонический: классификация по эмоциональной окраске. Решение на
основе РНС работает хорошо, но менее мощные подходы тоже вполне конкурентоспособны. Второй
пример несколько искусственный: в нем не решается никакой «полезной» задачи, но демонстрируется
мощь РНС и характер распознаваемых ими паттернов.
1.1. Классификация по эмоциональной окраске
Классификация по эмоциональной окраске на уровне предложения
В задаче классификации по эмоциональной окраске на уровне предложения дано предложение,
нередко в виде части отзыва, и требуется сопоставить ему одно из двух значений: положительное или
отрицательное (В более сложном варианте классификация трехзначная: положительное,
отрицательное и нейтральное).
Это несколько упрощенный подход к задаче определения эмоциональной окраски, но тем не
менее он часто используется на практике.
Вот два примера на английском языке положительного и отрицательного предложений,
естественно возникающих в отзывах на кинофильмы.
Положительное: It’s not life-affirming – it’s vulgar and mean, but I liked it (Он не
жизнеутверждающий – вульгарный и гнусный, но мне он нравится).
Отрицательное: It’s a disappointing that it only manages to be decent instead of dead brilliant (Меня
разочаровало, что ему всего лишь удалось стать достойным, а не самым лучшим).
Обратите внимание, что положительный пример содержит отрицательные фразы (not life
affirming, vulgar and mean), тогда как отрицательный содержит положительные фразы (dead brilliant).
Для правильного предсказания эмоциональной окраски нужно понимать не только отдельные фразы,
но и окружающий их контекст, лингвистические конструкции, в частности отрицание, и общую
структуру предложения. Классификация по эмоциональной окраске – трудная и амбициозная задача,
правильное решение которой включает учет таких вещей, как сарказм и метафоричность. Само
определение эмоциональной окраски далеко не очевидно. Но мы не будем обращать внимания на
тонкости определения, а будем рассматривать проблему как задачу бинарной классификации,
управляемую данными.
Эту задачу легко смоделировать с помощью РНС-приемщика: после лексемизации РНС читает
слова предложения по одному. Затем последнее состояние РНС подается на вход многослойны
перцептрон- МСП, за которым следует слой softmax с двумя выходами.
В качестве функции потери при обучении используется перекрестная энтропия, основанная на
золотых метках эмоциональной окраски. Для более точной классификации по шкале 1–5 или 1–10
(«оценка по числу звездочек») достаточно изменить МСП так, чтобы он выдавал 5 выходов вместо 2.
Таким образом, получаем следующую архитектуру:

(1)
Матрица погружений слов (word embedding matrix) E инициализируется с помощью погружений,
предварительно обученных на большом внешнем корпусе с применением алгоритма типа Word2Vec
или GloVe с относительно широким окном. Рассмотрим более подробно один из них - Word2vec.
Word2vec — метод, который принимает большой массив текста в качестве входных данных и
создает векторное пространство, обычно состоящее из нескольких сотен измерений, при этом каждому
уникальному слову в корпусе присваивается соответствующий вектор в пространстве. Векторы слов
расположены в векторном пространстве таким образом, что слова, имеющие общие контексты в

20
корпусе, расположены в непосредственной близости друг от друга в пространстве Его можно получить
двумя способами: Continuous Bag Of Words и Skip Gram.
Continuous Bag Of Words (далее – CBOW) принимает контекст каждого слова в качестве
входных данных и пытается предсказать слово, соответствующее контексту. Модель преобразует
входное предложение в форму (content_word, target_word). Архитектура моделей представляет собой
входной слой, скрытый слой и выходной слой. Все слои полностью соединены, что можно увидеть на
рис. 1.

Рис.1 Архитектура Word2Vec CBOW

Второй случай представляет собой контекст из нескольких слов. Здесь поток от скрытого слоя
к выходу такой же, как и в контексте с одним словом, изменение потока от ввода к скрытому слою.
Мы берем контекст как "машинное обучение", чтобы предсказать целевое слово "проект’. Вместо 1
однонаправленного вектора у нас есть несколько векторов, и модель принимает среднее значение этих
векторов.
CBOW имеет свои преимущества и недостатки, которые отображены в таблице 1.1.

Таблица 1.1 — Преимущества и недостатки CBOW


№ п. Преимущества Недостатки
1 Быстрый метод и имеет лучшие CBOW принимает среднее значение
представления для более частых слов. контекста слова.
2 Использует мало оперативной памяти.

Skip-gram — это один из методов обучения без учителя, используемый для поиска наиболее
родственных слов для данного слова. Skip-gram используется для прогнозирования контекстного
слова для данного целевого слова. Это обратная сторона алгоритма CBOW. Здесь вводится целевое
слово, а выводятся контекстные слова. Поскольку необходимо предсказать более одного контекстного
слова, что усложняет эту проблему.
Как мы можем видеть на рис. 2 w(t) — это целевое слово или заданный ввод. Существует один
скрытый слой, который выполняет декартово произведение между весовой матрицей и входным
вектором w(t). В скрытом слое функция активации не используется. Результат декартово произведения
на скрытом слое передается на выходной слой. Выходной слой вычисляет декартово произведение
между выходным вектором скрытого слоя и весовой матрицей выходного слоя. Затем мы применяем
функцию активации softmax для вычисления вероятности появления слов в контексте w(t) в заданном
местоположении контекста.

21
Рис. 2. Архитектура Word2Vec Skip-gram

Поскольку мы хотим максимизировать вероятность прогнозирования w(c, j) в c-й позиции


контекста, мы можем представить функцию потерь L.

Таблица 1.2 — Преимущества и недостатки Skip-gram


№ п. Преимущества Недостатки
1 Это неконтролируемое обучение, поэтому Функция Softmax требует больших
оно может работать с любым заданным вычислительных затрат.
необработанным текстом.
2 Это требует меньше памяти по сравнению Найти наилучшее значение для N и c
с другими словами для векторных довольно сложно.
представлений.
3 Для этого требуется две весовые матрицы Время, необходимое для обучения этого
размерности [N, |v|] каждая вместо [|v|, |v|]. алгоритма, велико.
И обычно N составляет около 300, в то
время как |v| измеряется миллионами. Итак,
мы видим преимущество использования
этого алгоритма.

Вернемся к рассмотрению моделей РНС. Часто бывает полезно обобщить модель (1), рассмотрев
две РНС, одна из которых читает предложение в его естественном порядке, а вторая – в обратном.
Конечные состояния обеих РНС конкатенируются и подаются на вход МСП для классификации:

(2)
Такие двунаправленные модели дают отличные результаты для рассматриваемой задачи. Для
более длинных предложений в работе признано полезным использовать иерархическую архитектуру,
в которой предложение разбивается на меньшие отрезки, исходя из знаков препинания. Затем каждый
отрезок подается на вход двунаправленной РНС (2). Последовательность получившихся векторов (по
одному для каждого отрезка) подается на вход РНС-приемщику типа (1). Формально пусть дано

22
предложение w1:n, разбитое на m отрезков, w1 1:𝓁1, …, wm1:𝓁m. Тогда архитектура описывается
уравнениями:

(3)
Каждый из m отрезков может быть эмоционально окрашен по-своему. Приемщик верхнего
уровня читает сводку z1:m, порожденную кодировщиками нижнего уровня, и принимает решение об
окраске всего предложения. Классификация по эмоциональной окраске используется также в роли
испытательного стенда для иерархических древовидных рекурсивных нейронных сетей.
Классификация по эмоциональной окраске на уровне документа Классификация документа
по эмоциональной окраске похожа на классификацию предложения, но входной текст гораздо
длиннее – он состоит из нескольких предложений, – а сигнал от учителя (метка эмоциональной
окраски) дается только в конце, а не для каждого предложения в отдельности. Эта задача труднее, чем
классификация на уровне предложения, поскольку отдельные предложения могут быть окрашены
иначе, чем документ в целом.
Учеными установлено, что для этой задачи имеет смысл использовать иерархическую
архитектуру, аналогичную описанной в уравнении (3): каждое предложение кодируется с помощью
вентильной РНС, порождающей вектор zi, после чего векторы z1:n подаются на вход второй вентильной
РНС, порождающей вектор h = RNN(z1:n), который и используется для предсказания: yˆ =
softmax(MLP(h)).
Существует также вариант, в котором все промежуточные векторы РНС уровня документа
сохраняются, и их среднее подается на вход

В некоторых случаях такая архитектура давала чуть лучшие результаты.


1.2. Определение грамматической правильности согласования глагола с субъектом
В грамматически правильно построенных английских предложениях заглавное слово субъекта
глагола в настоящем времени должно быть согласовано с глаголом по числу (знаком * обозначены
грамматически неправильные предложения):
(1) a. The key is on the table. (Ключ находится на столе.)
b. *The key are on the table. (Ключ находятся на столе.)
c. *The keys is on the table. (Ключи находится на столе.)
d. The keys are on the table. (Ключи находятся на столе.)
Вывести эту связь только из одной лишь последовательности – нетривиальная задача, поскольку
два элемента могут быть разделены сколь угодно длинным сентенциональным материалом, который
может содержать существительные другого числа:
(2) a. The keys to the cabinet in the corner of the room are on the table. (Ключи от шкафа в углу
комнаты находятся на столе.)
b. *The keys to the cabinet in the corner of the room is on the table. (Ключи от шкафа в углу
комнаты находится на столе.)
Учитывая сложность выявления субъекта в линейной последовательности предложения, такие
зависимости, как согласование глагола с субъектом, служат аргументом в пользу структурных
синтаксических представлений человеческого языка. Действительно, если имеется правильное дерево
синтаксического разбора предложения, то выделить связь между глаголом и его субъектом становится
тривиально:

23
Модель обучалась как простой приемщик:

с перекрестной энтропией в качестве потери.


2. РНС как экстракторы признаков
Основной сценарий использования РНС – гибкие обучаемые экстракторы признаков, способные
заменить части более традиционных конвейеров выделения признаков при работе
с последовательностями. В частности, РНС – отличная замена оконным экстракторам.
2.1. Частеречная разметка
Рассмотрим проблему частеречной разметки в контексте РНС.
ОСТОВ: ГЛУБОКАЯ BiRNN Частеречная разметка – частный случай задачи о разметке
последовательности, в которой требуется назначить метку каждому из n входных слов. Это делает
biRNN идеальным кандидатом на роль базовой структуры.
Получив предложение, содержащее слова s = w1:n, мы преобразуем их во входные векторы x1:n,
применив функцию выделения признаков xi = ϕ(s, i). Входные векторы подаются на вход глубокой
biRNN, которая порождает выходные векторы y1:n = biRNN*(x1:n). Затем каждый вектор yi подается на
вход МСП, который предсказывает одну из k возможных выходных меток слова. Каждый вектор yi
сфокусирован на i-й позиции последовательности, но содержит также информацию обо всей
последовательности, окружающей эту позицию («бесконечное окно»). В процессе обучения biRNN
обучается фокусироваться на аспектах последовательности, информативных для предсказания метки
wi , и кодировать их в векторе yi.
ОТ СЛОВ К ВХОДНЫМ ДАННЫМ С ПОМОЩЬЮ РНС УРОВНЯ ЛИТЕР Как мы будем
отображать слово wi во входной вектор xi? Одна из возможностей – воспользоваться матрицей
погружений, которую можно инициализировать случайными числами или предварительно обучить,
например с помощью алгоритма Word2Vec с позиционным окном в качестве контекста. Тогда мы
с помощью матрицы E будем отображать слова на векторы погружения ei = E[wi]. Этот метод неплохо
работает, но ему может мешать недостаток покрытия, в случае, когда словарные элементы не
встречались на этапе обучения или предобучения. Слова состоят из литер, и некоторые суффиксы
и префиксы, а также другие орфографические признаки, такие как заглавная буква в начале, наличие
дефисов или цифр, могут дать весомые подсказки относительно разрешения неоднозначности слова.
Мы заменим такие вручную спроектированные экстракторы признаков на РНС. Точнее, мы будем
использовать две РНС уровня литер (букв) алфавита. Для слова w, состоящего из литер c1, …, c𝓁,
отобразим каждую литеру в соответствующий вектор погружения ci. Затем будем кодировать слово,
применяя прямую и обратную РНС по литерам. Эти РНС смогут либо заменить вектор погружения
слова, либо – что еще лучше – произвести конкатенацию с ним:

Отметим, что прямая РНС занимается улавливанием суффиксов, а обратная – префиксов и что
обе РНС можно сделать чувствительными к заглавным буквам, дефисам и даже длине слова.
ОКОНЧАТЕЛЬНАЯ МОДЕЛЬ Таким образом, модель разметки принимает вид:

24
(4)
В качестве функции потерь используется перекрестная энтропия. Прореживание слов для
погружений слов дает положительный эффект. Архитектура показана на рис. 3.
СВЕРТКА И ПУЛИНГ НА УРОВНЕ ЛИТЕР В описанной выше архитектуре слова
отображаются на векторы с помощью прямой и обратной РНС по литерам слов.
Альтернатива – представлять слова с помощью сверточно-пулинговых нейронных сетей на
уровне литер. Следует отметить, что применение одного сверточно-пулингового слоя с размером окна
k = 3 к литерам слова действительно эффективно в задачах частеречной разметки и распознавания
именованных сущностей.
СТРУКТУРНЫЕ МОДЕЛИ В модели выше предсказание метки i-го слова производится
независимо от других меток. Это может хорошо работать, но можно было бы обусловить i-ю метку
предыдущими предсказаниями модели. В качестве условия можно брать либо k предыдущих меток
(в согласии с марковским предположением), и тогда используются погружения меток E[t], что дает:

либо всю последовательность предыдущих предсказаний t1:i–1, и тогда для кодирования


последовательности меток применяется РНС:

Рис. 3 Архитектура разметки с применением РНС.

Каждое слово wi преобразуется в вектор ϕ(wi), являющийся конкатенацией вектора погружения


и конечных состояний прямой и обратной РНС на уровне литер. Затем векторы слов подаются на вход
глубокой biRNN. Выходное состояние каждой biRNN внешнего слоя подается на вход
предсказывающей сети (МСП в сочетании с softmax), которая дает предсказание метки. Отметим, что
предсказание каждой метки может быть обусловлено всей входной последовательностью.

25
2.2. Классификация документов с применением РНС-СНС
В примерах классификации по эмоциональной окраске из раздела 1.1 мы подавали векторы
погружения на входы прямой и обратной РНС, за которыми располагался слой классификации
уравнения (2). В примере разметчика из раздела 2.1 мы видели, что погружения слов можно дополнить
(или заменить) моделями уровня литер, например литерными РНС или СНС, чтобы улучшить
покрытие модели и помочь ей справляться со словами, словоизменениями и опечатками, которых она
не видела на этапе обучения.
Такой же подход может оказаться эффективен для классификации документов, только вместо
подачи погружений слов на входы двух РНС мы подаем векторы, получившиеся применением
литерной РНС или сверточно-пулингового слоя к каждому слову.
Еще одна альтернатива – применить иерархическую сверточно-пулинговую сеть к литерам
с целью получить более короткую последовательность векторов, представляющих блоки, большие,
чем литеры, но необязательно слова (уловленная информация может относиться к образованию как
большему, так и меньшему одного слова), а затем подать эту последовательность двум РНС и слою
классификации.
В случае применения к нескольким задачам классификации документов, иерархическая
архитектура включает ряд сверточных и пулинговых слоев. В каждом слое к последовательности
входных векторов применялась свертка с окном размера k, а затем к каждым двум соседним
результирующим векторам применялся max-пулинг, что сокращало размер последовательности вдвое.
После нескольких таких слоев (с окнами размера от 5 до 3, зависящего от номера слоя, например 5, 5,
3) получившиеся векторы подавались на вход прямой и обратной РНС типа GRU, а их результаты – на
вход компонента классификации (полносвязный слой с функцией активации softmax). Кроме того,
между последним сверточным слоем и РНС, а также между РНС и компонентом классификации
применялось прореживание. Этот подход доказал свою эффективность в нескольких задачах
классификации документов.

26

Вам также может понравиться