【Серия OCR глубокого обучения·7】Функция потерь и методы обучения CTC
📅
Время публикации: 2025-08-19
👁️
Чтение:2048
⏱️
Примерно 21 минута (4005 слов)
📁
Категория: Продвинутые руководства
Принцип, реализация и методы обучения функции потерь CTC, а также основная технология для решения проблемы выравнивания последовательностей. Погрузитесь в алгоритмы вперёд-назад, стратегии декодирования и методы оптимизации.
## Введение
Коннекционистская временная классификация (CTC) — это важный прорыв в моделировании последовательностей глубокого обучения, особенно в области OCR. CTC решает фундаментальную проблему несоответствия между длиной входной и выходной последовательности, обеспечивая сквозное обучение последовательностей. В этой статье мы рассмотрим математические принципы, реализацию алгоритмов и методы оптимизации обучения в CTC.
## Основные концепции CTC
### Проблемы с выравниванием последовательностей
В OCR-задачах мы сталкиваемся со следующими вызовами:
**Несоответствие длины**: Длина входной последовательности признаков изображения отличается от длины выходной текстовой последовательности. Например, слово, содержащее 3 символа, может соответствовать последовательности признаков из 100 временных шагов.
**Неопределённая позиция**: Точное положение каждого символа на изображении неизвестно. Традиционные методы требуют точной сегментации символов, что сложно на практике.
**Сложность сегментации символов**: Непрерывно написанный текст, рукописный текст или художественные шрифты испытывают трудности с точным разделением на отдельные символы.
### Решение CTC
CTC решает задачи выравнивания последовательностей следующими инновационными способами:
Знакомимся с пустыми маркерами: используйте специальные пустые маркеры для выравнивания. Пустые теги не соответствуют никаким выходным символам и используются для разделения дублирующихся символов от последовательностей заполнения.
Вероятность пути: Вычисляет вероятность всех возможных путей выравнивания. Каждый путь представляет собой возможное соответствие шагов между символами и временем.
**Динамическое планирование**: Эффективное расчёт вероятностей путей с использованием алгоритмов вперёд-назад, избегая перечисления всех возможных путей.
## Математические принципы CTC
### Основные определения
Имея входную последовательность X = (x₁, x₂, ..., xt) и целевую последовательность Y = (y₁, y₂, ..., yu), где T ≥ U.
Набор тегов: L = {1, 2, ..., K}, содержащий K категорий символов.
**Расширенная коллекция тегов**: L_ext = L ∪ {blank}, содержащая пустые теги.
**Путь выравнивания**: Последовательность длины T π = (π₁, π₂, ..., πt), где πt ∈ L_ext.
### Сопоставление путей с тегами
CTC определяет функцию отображения B, которая преобразует путь выравнивания в последовательность выходных меток:
1. Удалить все пустые маркеры
2. Объединение последовательных дублирующихся символов
**Пример отображения**:
- π = (a, a, пустое, b, b, b) → B(π) = (a, b, b)
- π = (пусто, c, c, a, пусто, t) → B(π) = (c, a, t)
### Функция потерь CTC
Функция потерь CTC определяется как отрицательный логарифм суммы всех вероятностей пути, отображаемых в целевую последовательность Y:
L_CTC = -log P(Y| X) = -log Σ_{π∈B⁻¹(Y)} P(π| X)
где B⁻¹(Y) — множество всех путей, отображённых в Y.
Вероятность пути: Если предположить, что предсказания каждого временного шага независимы, вероятность пути равна:
P(π| X) = ∏t yt^{πt}
где yt^{πt} — вероятность того, что шаг времени t предсказывает метку πt.
## Алгоритм вперёд-назад
### Алгоритм вперёд
Алгоритм прямой вычисляет вероятность пути от начала последовательности до текущей позиции.
**Расширенная последовательность меток**: Для облегчения вычисления расширьте целевой последовательность Y до Y_ext, вставляя пустые теги до и после каждого символа.
**Инициализация**:
- α₁(1) = y₁^{blank} (первая позиция пустая)
- α₁(2) = y₁^{y₁} (первая позиция — первый символ)
- α₁(s) = 0 для других точек
**Рекурсивная формула**:
Для t > 1 и позиции s:
- Если Y_ext[s] пусто или совпадает с предыдущим символом:
α_t(s) = (α_{t-1}(s) + α_{t-1}(s-1)) × y_t^{Y_ext[s]}
- В противном случае:
α_t(s) = (α_{t-1}(s) + α_{t-1}(s-1) + α_{t-1}(s-2)) × y_t^{Y_ext[s]}
### Обратный алгоритм
Обратный алгоритм вычисляет вероятность пути от текущей позиции до конца последовательности.
**Инициализация**:
- β_T(| Y_ext|) = 1
- β_T(| Y_ext|-1) = 1 (если последний тег не пуст)
- β_T(s) = 0 для других мест
**Рекурсивная формула**:
Для t < T и позиций s:
- Если Y_ext [s+1] пусто или совпадает с текущим символом:
β_t(s) = (β_{t+1}(s) + β_{t+1}(s+1)) × y_{t+1}^{Y_ext[s+1]}
- В противном случае:
β_t(s) = (β_{t+1}(s) + β_{t+1}(s+1) + β_{t+1}(s+2)) × y_{t+1}^{Y_ext[s+1]}
### Расчёт градиента
Общая вероятность:P (Y| X) = α_T(| Y_ext|) + α_T(| Y_ext|-1)
**Градиент вероятности метки**:
∂(-в P(Y| X))/∂y_k^t = -1/P(Y| X) × Σ_{s:Y_ext[s]=k} (α_t(s) × β_t(s))/y_k^t
## Стратегия декодирования CTC
### Жадное расшифрование
Greedy расшифровывает метку с наибольшей вероятностью на каждом шаге времени:
π_t = argmax_k y_t^k
Затем примените B-отображение, чтобы получить финальную последовательность.
**Плюсы**: лёгкие вычисления и быстрая скорость
**Недостатки**: Глобальное оптимальное решение может быть не получено
### Декодирование поиска по пакетам
Поиск по лучу поддерживает несколько кандидатных путей, расширяя наиболее перспективные пути на каждом этапе времени.
**Шаги алгоритма**:
1. Инициализация: Коллекция кандидатов содержит пустые пути
2. Для каждого временного шага:
- Расширение всех путей кандидатов
- Сохранять K-путь с наибольшей вероятностью
3. Вернуть полный путь с наибольшей вероятностью
**Настройка параметров**:
- Ширина пучка K: Балансирует вычислительную сложность с качеством декодирования
- Штраф за длину: Избегайте предпочтения коротких последовательностей
### Поиск по префиксным наборам
Поиск по префиксным пучкам рассматривает вероятность префикса пути, чтобы избежать двойного подсчёта путей с тем же префиксом.
**Основная идея**: объединять пути с одним и тем же префиксом и сохранять только наиболее вероятный метод расширения.
## Методы обучения и оптимизация
### Предобработка данных
**Обработка длины последовательности**:
- Динамическое пакетирование: группирование последовательностей схожей длины
- Стратегия заполнения: заполнять короткие последовательности специальными маркерами
- Стратегия усечения: разумно усечать чрезмерно длинные последовательности
**Предварительная обработка этикетки**:
- Стандартизация набора символов: единообразное кодирование и заглавная буква
- Специальная обработка символов: Обрабатывает знаки препинания и пробелы
- Наращивание словарного запаса: Создайте полный глоссарий персонажей
### Стратегия тренировок
**Обучение курсу**:
Начинайте тренироваться с простых образцов и постепенно повышайте сложность:
- Короткие и длинные последовательности
- Прозрачное изображение в размытое изображение
- Обычные шрифты в рукописные шрифты
**Улучшение данных**:
- Геометрические преобразования: вращение, масштабирование, разрез
- Добавление шума: гауссовый шум, солёный и перцевый шум
- Изменения освещения: яркость, регулировка контраста
**Техники регуляризации**:
- Выпадание: предотвращение перенасадки
- Снижение веса: регуляризация L2
- Сглаживание ярлыков: снижает самоуверенность
### Настройка гиперпараметров
**Планирование скорости обучения**:
- Стратегия разминки: первые несколько эпох используют небольшую скорость обучения
- Косинусное отжиг: скорость обучения снижается в зависимости от косинусной функции
- Адаптивная настройка: корректируется на основе производительности валидационного набора
**Выбор размера партии**:
- Ограничения памяти: рассмотрим ёмкость памяти GPU
- Градиентная стабильность: обеспечивает более стабильный градиент для больших партий
- Скорость сходимости: тренировка баланса, скорость и стабильность
## Практические аспекты применения
### Вычислительная оптимизация
**Оптимизация памяти**:
- Градиентные контрольные точки: Уменьшают отпечаток памяти прямого распространения
- Обучение смешанной точности: снижение требований к памяти с помощью FP16
- Динамическая оптимизация графов: Оптимизирует выделение памяти для вычисленных графов
**Оптимизация скорости**:
- Параллельные вычисления: используют возможности параллельной обработки GPU
- Оптимизация алгоритмов: реализована с использованием эффективных алгоритмов прямого переключения назад
- Пакетная оптимизация: Настройка размеров пакетов соответствующим образом
### Численноя стабильность
**Вычисление вероятностей**:
- Вычисление логарифмического пространства: предотвращение переполнения значений, вызванного умножением вероятностей
- Численное обрезывание: ограничивает диапазон вероятностных значений
- Методы нормализации: Обеспечение достоверности вероятностных распределений
**Градиентная стабильность**:
- Градиентное обрезывание: предотвращает градиентные взрывы
- Инициализация по весу: используйте подходящую стратегию инициализации
- Пакетная нормализация: стабилизирует процесс обучения
## Оценка эффективности
### Оценивайте метрики
**Точность на уровне персонажа**:
Accuracy_char = Количество правильно распознанных символов / Общее количество символов
**Точность на уровне серии**:
Accuracy_seq = количество точно правильных последовательностей / общее количество последовательностей
**Расстояние редактирования**:
Измеряет разницу между предсказанной и реальной последовательностью, включая минимальное количество операций вставки, удаления и замены.
### Анализ ошибок
**Распространённые типы ошибок**:
- Путаница персонажей: ошибочная идентификация похожих персонажей
- Дублирующиеся ошибки: CTC обычно производят дублирующиеся символы
- Ошибка длины: неточные прогнозы длины последовательности
**Стратегии улучшения**:
- Сложный сбор выборок: Сосредоточение на обучении образцов с высокой ошибкой
- Оптимизация постобработки: исправляет ошибки с помощью языковых моделей
- Интегрированный подход: объединение предсказаний из нескольких моделей
## Краткое содержание
Функция потерь CTC предоставляет мощный инструмент для моделирования последовательностей, особенно при решении задач выравнивания. Внедряя алгоритмы пустой маркировки и динамического программирования, CTC реализует сквозное обучение последовательностей и избегает сложных этапов предварительной обработки.
**Ключевые выводы**:
- CTC решает проблему несовпадения длин входных и выходных последовательностей
- Алгоритмы вперёд-назад обеспечивают эффективные вычисления вероятностей
- Подходящая стратегия декодирования имеет решающее значение для конечного результата
- Методы обучения и стратегии оптимизации существенно влияют на производительность модели
**Предложения по применению**:
- Выбрать подходящую стратегию декодирования для конкретной задачи
- Акцент на методах предварительной обработки и улучшения данных
- Фокус на численной устойчивости и вычислительной эффективности
- Оптимизация постобработки на основе знаний в области
Успешное применение CTC заложило важную основу для развития глубокого обучения в области моделирования последовательностей, а также оказало ключевую поддержку прогрессу технологии OCR.
Теги:
Функция потерь CTC
Присоединяйтесь к классификации тайминга
Выравнивание последовательностей
Алгоритм вперёд-назад
Динамическое планирование
Обучение OCR
Моделирование последовательностей