Прореженный CTC для обучения распознаванию речи с большим словарём и меньшим расходом памяти
Прореженный CTC решает практическую проблему очень больших словарей: полная матрица логитов для каждого кадра быстро исчерпывает память ускорителя. Авторы оставляют небольшой набор вероятных токенов, но сохраняют точный нормировочный множитель полного словаря и заново вычисляют только выбранные логиты.
Метод. Сначала дешёвая проекция определяет кандидатов, затем конечный луч выравниваний CTC отбрасывает маловероятные состояния. Полная нормировка не даёт функции потерь превратиться в приближение по усечённому словарю, а повторное вычисление освобождает память ценой дополнительной работы.
Результаты. При 16 тысячах кадров и словаре из 180 тысяч токенов память головки и функции потерь уменьшается с 43,0 до 1,29 ГиБ, в 33,3 раза. Полный шаг обучения занимает 10,1 вместо 51,7 ГиБ, при этом время растёт на 17%. WER на LibriSpeech test-clean остаётся 2,52%, на test-other 6,02%; на GigaSpeech результат даже меняется с 11,27 до 11,24%.
Ограничения. Экономия зависит от устройства и реализации ядра. Обучение становится на 14-17% медленнее, а конечная ширина луча оправдана экспериментально, а не строгой гарантией для любого распределения.
Фишка из статьи. Главный эффект виден не только внутри функции потерь: при росте словаря метод меняет предел допустимого размера пакета. Однако выигрыш полного шага существенно меньше 33-кратной экономии самой головки, потому что кодировщик продолжает занимать память.
| Кадры / словарь | Обычный шаг | Прореженный шаг | Экономия | Время |
|---|---|---|---|---|
| 16 тыс. / 180 тыс. | 51,7 ГиБ | 10,1 ГиБ | 5,1× | +17% |
| 32 тыс. / 130 тыс. | 77,3 ГиБ | 17,9 ГиБ | 4,3× | +17% |
| 64 тыс. / 50 тыс. | 76,2 ГиБ | 33,8 ГиБ | 2,3× | +14% |
Как это читать: польза максимальна при большом словаре и сравнительно короткой последовательности. Когда доминирует память кодировщика, дальнейшее прореживание CTC уже не даёт пропорционального выигрыша.