Глава 5. Перенос обучения: переиспользование предобученных нейронных сетей
213
в смысле фонематического содержания. Гласные в них также звучат достаточно по
разному (
e
и
ee
), как и завершающие согласные (
d
и
n
). Следовательно, безошибоч
ность на проверочном наборе данных в конце переноса обучения должна оказаться
почти идеальной, конечно, если число примеров данных, собранных для каждого
слова, достаточно велико (скажем,
≥
8), а, кроме того, число эпох не слишком мало
(что приводит к недообучению) и не слишком велико (что приводит к переобуче
нию; см. главу 8).
Чтобы усложнить задачу переноса обучения для модели, возьмите набор, со
стоящий из: 1) хуже различимых слов и 2) большего количества слов. Пример
такого набора приведен на рис. 5.9. В нем используется набор из четырех схожих по
звучанию слов:
feel
,
seal
,
veal
и
zeal
. Гласные и завершающие согласные у этих слов
совпадают, а начальные согласные звучат очень похоже. Их может легко спутать
даже человек — невнимательный или слышащий их по телефонной линии с плохим
качеством связи. Кривая безошибочности справа внизу на рисунке демонстрирует,
что модели непросто достичь безошибочности более 90 %. Для этого начальный
этап переноса обучения должен сопровождаться дополнительным этапом
тонкой
настройки
(finetuning) — одного из остроумных приемов переноса обучения.
Углубляемся в нюансы тонкой настройки
при переносе обучения
Тонкая настройка — методика, с помощью которой можно достичь уровня безоши
бочности, недостижимого за счет простого обучения новой верхушки перенесенной
модели. В этом разделе вы во всех подробностях узнаете, как происходит тонкая
настройка. При этом вам придется «переварить» несколько технических нюансов.
Но более глубокое понимание переноса обучения, а значит, и соответствующей
реализации TensorFlow.js стоит затраченных усилий.
Формирование отдельной модели для переноса обучения
Вопервых, разберемся, как в приложении для распознавания речи создается модель
для переноса обучения. В коде из листинга 5.7 (из файла
speech-commands/src/
browser_fft_recognizer.ts
) создается модель из базовой модели speechcommand (с
которой мы познакомились в подразделе 4.4.1). Сначала мы находим предпоследний
плотный слой модели и получаем его выходной символический тензор (в коде это
truncatedBaseOutput
). Далее создаем новую верхушку модели, состоящую из одно
го плотного слоя. Форма входного сигнала новой верхушки соответствует форме
символического тензора
truncatedBaseOutput
, а его выходная форма — числу слов
в наборе данных для переноса обучения (пять в случае рис. 5.9). В параметрах этого
плотного слоя указана многомерная логистическая функция активации, подходящая
для задачи многоклассовой классификации. (Обратите внимание, что, в отличие
от большинства остальных листингов кода в книге, следующий код написан на
TypeScript. Если вы не знакомы с синтаксисом TypeScript, можете просто игнори
ровать такие нотации типов, как
void
и
tf.SymbolicTensor
.)
Do'stlaringiz bilan baham: |