Глава 9. Глубокое обучение для последовательностей и текста
365
Как видите, длина последовательности (500) сохраняется, а последний элемент
формы отражает измерение вложений (128).
z
z
За слоем вложений следует слой conv1d — главная часть модели. Размер его
ядра выбран равным 5, шаг свертки по умолчанию — 1 и дополнение —
'valid'
.
В результате есть 500 – 5 + 1 = 496 возможных позиций скользящего окна изме
рения последовательностей. Так что второй элемент формы выходного сигнала
(
[null,
496,
250]
) равен 496. Последний элемент его формы отражает количество
фильтров в слое conv1d.
z
z
Слой globalMaxPool1d, следующий за слоем conv1d, чемто напоминает слой
maxPooling2d, встречавшийся в сверточных сетях для изображений. Впрочем,
он производит более радикальную субдискретизацию, при которой все элементы
измерения последовательностей схлопываются в одно максимальное значение.
В результате получаем форму выходного сигнала
[null,
250]
.
z
z
Добившись одномерной формы тензора (не считая измерения батчей), мы можем
добавить поверх него два плотных слоя и таким образом сформировать MLP по
верх всей модели.
Запустите обучение одномерной сверточной сети с помощью команды
yarn
train
--maxLen
500
cnn
. После двухтрех эпох обучения вы увидите, что модель достигла
максимальной безошибочности около 0,903 на проверочном наборе данных, — это
небольшой, но весомый прирост по сравнению со степенью безошибочности MLP,
основанного на федеративной векторизации (0,890). Он отражает усвоенную одно
мерной сверточной сетью информацию о последовательной упорядоченности, ко
торую никак не мог усвоить федеративный MLP.
Как же одномерная сверточная сеть захватывает информацию о последователь
ной упорядоченности? С помощью сверточного ядра. Скалярное произведение
этого ядра чувствительно к упорядоченности элементов. Например, если входной
пример данных состоит из пяти слов,
I like it so much
, одномерная свертка выдаст
одно конкретное значение, однако, если поменять порядок слов на
much so I like it
,
результат одномерной свертки изменится, хотя набор элементов останется тем же
самым.
Однако следует отметить, что слой conv1d сам по себе не способен усваивать по
следовательные паттерны, выходящие за размеры его ядра. Например, представьте
себе, что на смысл предложения влияет порядок двух расположенных далеко друг от
друга слов: слой conv1d с ядром, размер которого меньше расстояния между ними,
не сможет усвоить такое «далекое» взаимодействие. В этом отношении RNN, такие
как GRU и LSTM, превосходят одномерную свертку.
Один из способов устранения этого недостатка для одномерных сверточных
сетей — углубление, а именно наращивание числа последовательных слоев conv1d,
чтобы «рецептивное поле» высокоуровневых слоев conv1d было достаточно боль
шим для захвата подобных «далеких» зависимостей. Впрочем, во многих задачах ма
шинного обучения, связанных с обработкой текста, «далекие» зависимости не играют
важной роли, так что достаточно одномерной сверточной сети с небольшим числом
слоев conv1d. Можете попробовать в примере анализа тональностей IMDb обучить
Do'stlaringiz bilan baham: |