【Серія OCR для глибокого навчання·7】Функція втрат CTC та методи навчання
📅
Час публікації: 2025-08-19
👁️
Читання:2041
⏱️
Приблизно 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, blank, b, blank, 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₁^{порожня} (перша позиція порожня)
- α₁(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
### Жадібне розшифрування
Гріді розшифровує мітку з найвищою ймовірністю на кожному кроці часу:
π_t = argmax_k y_t^k
Потім застосуйте B-відображення для отримання фінальної послідовності.
**Плюси**: Легкі розрахунки та швидкість
**Недоліки**: Глобальний оптимальний розв'язок може не бути отриманий
### Декодування пошуку за допомогою bundle
Пошук пучка підтримує кілька кандидатських шляхів, розширюючи найперспективніші шляхи на кожному етапі часу.
**Кроки алгоритму**:
1. Ініціалізація: Кандидатна колекція містить порожні шляхи
2. Для кожного кроку часу:
- Розширення всіх кандидатських шляхів
- Зберігати K-шлях з найвищою ймовірністю
3. Повернути повний шлях з найвищою ймовірністю
**Налаштування параметрів**:
- Ширина пучка K: Балансує обчислювальну складність із якістю декодування
- Штраф за довжину: Уникайте переваги коротких послідовностей
### Пошук за префіксними наборами
Пошук у префіксних пучках враховує ймовірність префіксного шляху, щоб уникнути подвійного підрахунку шляхів з тим самим префіксом.
**Основна ідея**: Об'єднувати шляхи з одним префіксом і зберігати лише найбільш ймовірний метод розширення.
## Техніки навчання та оптимізація
### Попередня обробка даних
**Обробка довжини послідовності**:
- Динамічне пакетування: групування послідовностей подібної довжини
- Стратегія заповнення: заповнювати короткі послідовності спеціальними маркерами
- Стратегія урізання: Розумно обрізати надто довгі послідовності
**Попередня обробка етикетки**:
- Стандартизація набору символів: Уніфіксане кодування символів і капіталізація
- Спеціальна обробка символів: Обробляє знаки розділу та пробіли
- Нарощування словникового запасу: створіть повний глосарій персонажів
### Стратегія тренувань
**Навчання курсу**:
Починайте тренування з простих зразків і поступово підвищуйте складність:
- Короткі та довгі послідовності
- Чітке зображення на розмите зображення
- Від звичайних шрифтів до рукописних шрифтів
**Покращення даних**:
- Трансформації геометрії: обертання, масштабування, розрізання
- Додавання шуму: гаусівський шум, сіль і перець шуму
- Зміни освітлення: яскравість, регулювання контрасту
**Техніки регуляризації**:
- Випадіння: запобігання надмірному підгону
- Деградація ваги: регуляризація L2
- Згладжування етикеток: знижує надмірну впевненість
### Налаштування гіперпараметрів
**Планування швидкості навчання**:
- Стратегія розігріву: Перші кілька епох використовують невелику швидкість навчання
- Косинусне відпал: швидкість навчання зменшується відповідно до косинусної функції
- Адаптивне налаштування: коригує на основі продуктивності валідаційного набору
**Вибір розміру партії**:
- Обмеження пам'яті: Розгляньте об'єм пам'яті GPU
- Градієнтова стабільність: забезпечує більш стабільний градієнт для більших партій
- Швидкість збіжності: Швидкість і стабільність тренування балансу
## Практичні аспекти застосування
### Обчислювальна оптимізація
**Оптимізація пам'яті**:
- Градієнтні контрольні точки: Зменшує слід пам'яті прямого поширення
- Тренування змішаної точності: зменшення потреб у пам'яті з FP16
- Динамічна оптимізація графів: Оптимізує виділення пам'яті для обчислених графів
**Оптимізація швидкості**:
- Паралельні обчислення: використовує можливості паралельної обробки GPU
- Оптимізація алгоритмів: реалізована за допомогою ефективних алгоритмів прямого руху назад
- Пакетна оптимізація: Правильно встановлюйте розміри пакетів
### Чисельна стабільність
**Обчислення ймовірностей**:
- Обчислення логарифмічного простору: Уникнути переповнення значень, спричиненого множенням ймовірностей
- Чисельне обрізання: обмежує діапазон значень ймовірностей
- Методи нормалізації: Забезпечення валідності розподілів ймовірностей
**Градієнтна стабільність**:
- Градієнтне обрізання: запобігає градієнтним вибухам
- Ініціалізація ваги: Використовуйте відповідну стратегію ініціалізації
- Пакетна нормалізація: стабілізує процес навчання
## Оцінка ефективності
### Оцінити метрики
**Точність на рівні персонажа**:
Accuracy_char = Кількість правильно розпізнаних символів / Загальна кількість символів
**Точність на рівні серії**:
Accuracy_seq = кількість точно правильних послідовностей / загальна кількість послідовностей
**Відстань редагування**:
Вимірює різницю між передбачуваною послідовністю та дійсною послідовністю, включаючи мінімальну кількість операцій вставки, видалення та заміни.
### Аналіз помилок
**Поширені типи помилок**:
- Плутанина персонажів: Неправильне визначення схожих персонажів
- Помилки дублювання: CTC мають тенденцію до дублювання символів
- Помилка довжини: неточні прогнози довжини послідовності
**Стратегії вдосконалення**:
- Складний добування вибірки: Зосередження уваги на тренуванні зразків із високим рівнем похибок
- Оптимізація постобробки: Виправляє помилки за допомогою мовних моделей
- Інтегрований підхід: поєднання прогнозів з кількох моделей
## Резюме
Функція втрат CTC є потужним інструментом для моделювання послідовностей, особливо при вирішенні задач вирівнювання. Впроваджуючи алгоритми порожнього маркування та динамічного програмування, CTC реалізує наскрізне навчання послідовностей і уникає складних етапів попередньої обробки.
**Основні висновки**:
- CTC вирішує проблему невідповідності довжин вхідних і вихідних послідовностей
- Алгоритми вперед-назад забезпечують ефективні обчислення ймовірностей
- Відповідна стратегія декодування є ключовою для фінального виконання
- Методи навчання та стратегії оптимізації суттєво впливають на продуктивність моделі
**Поради щодо застосування**:
- Вибрати відповідну стратегію декодування для конкретного завдання
- Акцент на методах попередньої обробки та вдосконалення даних
- Фокус на чисельній стабільності та обчислювальній ефективності
- Оптимізація постобробки на основі знань домену
Успішне застосування CTC заклало важливу основу для розвитку глибокого навчання у сфері моделювання послідовностей, а також забезпечило ключову підтримку розвитку технології OCR.
Теги:
Функція втрат CTC
Приєднуйся до класифікації таймінгу
Вирівнювання послідовностей
Алгоритм вперед-назад
Динамічне планування
Навчання OCR
Моделювання послідовностей