Зміст
Запустити навчання — половина роботи. Друга половина: зрозуміти, чому компактна згортково-рекурентна мережа (CRNN) на кропах ультразвукового контролю товщини (УЗТ) видає не ту товщину, змінити один важіль і знову виміряти. Інакше ви одночасно крутите швидкість навчання, аугментацію і глибину мережі — і за тиждень не знаєте, що саме спрацювало.
Це третя польова нотатка того самого пілоту ai-vision, не підручник «як навчити нейромережу взагалі». Архітектура голови MeasurementCrnn, абетка і конфлікт порожніх усередині часового вирівнювання (CTC) — у компактній замірній мережі. Види клітинки до розпізнавання — в порожній клітинці, повторі й закресленні. Каталог метрик за задачами — в метриках якості нейромереж. Тут — цикл, яким ми рухаємо якість уже наявної голови.
Проєкт у розробці; репозиторій закритий — контур на сторінці портфоліо. Цифри прогонів — вимірювання пілоту, не норматив приймання. Помилка в десятих як і раніше іде в облікову систему підприємства (ERP).
Ключові висновки
Спочатку причина, потім архітектура. Низьке повне збігання майже ніколи не лікується «ще одним шаром», поки не ясно: мало даних, криві етикетки, недонавчання, перенавчання чи невірна постановка (порожнє поле всередині тієї самої голови).
Не можна покращувати те, що неправильно вимірюємо. Для заміру важливі повне збігання рядка і хибні спрацьовування на порожніх, а не лише функція втрат і посимвольна оцінка. Карта приладів — у сусідній статті про метрики.
Один важіль за прогін. Інакше журнал експериментів перетворюється на фольклор.
Набір сильніший за гіперпараметр. Розмаїття почерку, якість кропа і складні негативні приклади рухають цифру частіше, ніж зміна оптимізатора.
Епохи — чесний перший важіль недонавчання. Модель могла просто не дійти. Більше епох ≠ завжди краще: дивіться розрив навчання і перевірки.
Коли простий важіль уперся — шукайте вузьке місце. У пілоті після змішування порожніх це вже не «ще 20 епох», а окремий класифікатор «порожньо / є значення» і людина на хвості.
Якість системи ≠ якість моделі. Контур з упевненістю і перевіркою оператора часто корисніший за нескінченне полювання на 99% автоматики.
Чому «навчити» — не кінець
На вхід навчання впливає все одразу: набір, архітектура, функція втрат, оптимізатор, швидкість навчання, розмір пакета, число епох, передобробка, аугментація, регуляризація, схема перевірки. Спокуса — крутити це як пульт. Результат — гарний графік втрат і невірна товщина 8,0 на порожній клітинці.
Головне питання не «як запустити навчання», а як системно покращувати якість. Наскрізний приклад той самий: кроп клітинки → ознаки згортки → двонапрямлена пам'ять → CTC → рядок. Базовий компактний прогін: близько тисячі числових значень, близько 19 хвилин, 70,9% повного збігання і 89% за символами. Це вихідна точка циклу, не приймання цеху.
flowchart TB
data[Dataset_and_labels]
data --> train[Train]
train --> measure[Measure_exact_and_empty_FP]
measure --> why[Error_analysis]
why --> hyp[One_hypothesis]
hyp --> change[Change_one_lever]
change --> train
Що тут вважається якістю
Функція втрат CTC падає — мережа краще вирівнює послідовність. Це не те саме, що вірна товщина. Еталон 58321, прогноз 58327: втрати могли знизитися, замір цілком невірний. Оператору й ERP потрібен рядок.
Для оптичного розпізнавання символів (OCR) у замірній клітинці в пілоті дивимося:
- повне збігання рядка;
- точність за символами (діагностика, не приймання);
- хибні спрацьовування на порожніх;
- окремо — вузькі колонки і каверзні кропи.
Карту частки вірних відповідей, повноти, помилок символу і слова та виробничих порогів не дублюємо: вона вже зібрана в метриках якості. Тут важливіша пастка нашого скрипта перевірки: у train_crnn.py порожні еталони на валідації пропускаються. Повне збігання рахується лише за заповненими. Можна «покращити» 70,9% і водночас виростити фантоми на порожніх, якщо не ганяти окремий звіт. Саме тому в першій нотатці таблиця порожніх ішла окремою колонкою.
Спочатку діагностика, не нова мережа
Низька якість гілкується.
мало / однотипні дані
криві або спірні етикетки
недонавчання
перенавчання
швидкість навчання
передобробка кропа
не та постановка задачі
Не треба одразу змінювати архітектуру. У пілоті голова вже вузька: вхід 48 × 160, близько 640 тисяч параметрів, AdamW 1e-3, загасання 1e-4, пакет 16, обрізання градієнта 5, планувальник ReduceLROnPlateau, рання зупинка з терпінням 18 епох при стелі 80. Це достатній контур, щоб спочатку прочитати логи: втрати навчання і перевірки, повне збігання, чи не росте одне при падінні іншого.
Типові картини.
| Симптом | Що це в нас | Що пробувати першим |
|---|---|---|
| Навчання і перевірка обидва низькі | недонавчання | епохи, швидкість, дані |
| Навчання високе, перевірка відстає | перенавчання | аугментація, загасання, рання зупинка, більше розмаїття |
| Втрати скачуть | занадто великий крок | зменшити швидкість |
| Втрати майже стоять | крок дрібний або задача склеїла два режими | швидкість або розвести порожнє і цифру |
| Фантоми на порожніх при зростанні цифр | конфлікт в одній голові | не дотискати CTC, а вентиль виду клітинки |
Розбір помилок після кожного прогону важливіший за новий оптимізатор. Дивимося, які клітинки ламаються: остання цифра, кома, жирна сітка, блідий олівець, повтор, який поїхав у 1. Це черга складних прикладів, а не привід негайно ставити увагу і трансформер.
У логах навчання пишеться епоха, втрати навчання і перевірки, повне збігання. Цього достатньо, щоб відрізнити «ще не дійшли» від «уже запам'ятовуємо аркуш». Недостатньо, щоб побачити фантом на порожній клітинці: його треба міряти окремим звітом. Якщо команда дивиться лише одну колонку журналу, цикл імітує науку і лишається шаманством.
Набір — головний важіль
Тисяча однотипних кропів одного почерку гірша за кілька сотень різних аркушів. Обсяг без розмаїття створює ілюзію навчання. Інженерія набору як продукту — в окремій серії; тут — те, що вже ріже якість замірної голови.
Етикетки. Пара «картинка → 12,6» при реальному 12,5 учить мережу брехати впевнено. Навіть невелика частка таких пар б'є CTC сильніше, ніж «не той» розмір пакета. У пілоті спірні кропи позначаються якістю (clean / hard); у навчання складні можна включати, у чисту перевірку — ні. Це вже дисципліна, не гіперпараметр.
Баланс. Рідкісна «проблема останньої цифри» не лікується середнім за всіма символами. Якщо дев'яток мало, мережа добре читатиме вісімки і плутатиме хвіст. Черга помилок після прогону — чесніша, ніж штучно розмножити клас наосліп.
Складні приклади. Код завантажувача вже вміє include_hard. Сенс не «додати шум», а повернути в навчання ті кропи, на яких поточний знімок ваг бреше. Цикл: навчити → список помилок → розмітити / відфільтрувати → знову навчити. Без журналу це перетворюється на нескінченне донавчання на всьому підряд.
Змішування порожніх у ту саму голову — окремий важіль, який ми вже виміряли: фантоми падають, цифри теж. Це не «ще дані», а зміна постановки. Повторювати таблицю 85,4% / 100% хибних тут не будемо — вона в першій нотатці. Висновок для циклу: якщо вузьке місце — порожні, наступний експеримент не «більше епох на тій самій суміші».
Передобробка і аугментація — лише як реальність входу
Одна й та сама голова на іншому кропі дає іншу якість. У пілоті ланцюжок вузький: сірий, автоконтраст, полотно 48 × 160, інверсія, слабкий поворот і зсув, вузький контраст. Це імітація телефона і сітки, не «творчий шум».
Правило: аугментація має бути схожа на те, що приїде з бланка. Нахил, тінь, слабка різкість — так. Сильна пружна деформація, якої в оператора немає, — спосіб вивчити неіснуючий світ і впустити перевірку.
Поріг якості кропа (legacy / strict) — теж передобробка в широкому сенсі: поганий виріз не повинен спокійно їхати в навчання як «ще один приклад 12,3». Якщо геометрія клітинки пливе, спочатку латають контур зору, а не збільшують число фільтрів.
Епохи: модель могла просто не довчитися
Перший компактний прогін сів близько 70,9% повного збігання. У наступному циклі ми тримали той самий контур і дали голові дійти далі за епохами: повне збігання піднялося до 75,8%. Це не «магія планувальника» і не нова архітектура. Ваги ще не стояли в ямі; градієнтний спуск просто не закінчив роботу.
За замовчуванням у коді стеля 80 епох і рання зупинка, якщо повне збігання на перевірці не росте 18 епох поспіль. Планувальник ріже швидкість удвічі, якщо втрати перевірки не падають 5 кроків, але не нижче 1e-5. Має сенс дивитися, чи зупинилися ми рано за терпінням, або вперлися в стелю даних.
Більше епох не завжди краще.
навчання ████████████ високе
перевірка ████░░░░░░░░ відстає
Якщо розрив росте, ви запам'ятовуєте конкретні аркуші, а не вчитеся читати почерк. Тоді важіль — не «ще 40 епох», а аугментація, загасання, розмаїття, рання зупинка на найкращому знімку, а не на останньому.
Швидкість, пакет, оптимізатор — після причини
Швидкість навчання — довжина кроку поверхнею втрат. Занадто велика — втрати скачуть, мережа перестрибує вузький оптимум короткого рядка. Занадто дрібна — 80 епох не вистачає, ви вирішуєте, що «архітектура слабка». У пілоті старт 1e-3 плюс зниження за плато. Змінювати її одночасно з пакетом і числом епох — заборонений жест журналу.
Пакет 16 — компроміс стабільності градієнта і розміру вибірки, не релігія. Менший пакет не «сам по собі краще узагальнює»; ефект зв'язаний зі швидкістю і шумом. Поки не закриті дані й епохи, порівняння 8 / 32 / 64 — дорога черга.
Оптимізатор AdamW із загасанням ваг уже стоїть. Міняти його на класичний стохастичний спуск «бо так у статті 2014 року» без гіпотези — шум. Регуляризація в нас уже в трьох місцях: загасання, dropout 0,2 у пам'яті, рання зупинка. Додавати ще одну, не бачачи перенавчання, немає сенсу.
Перенесення ваг із великої згортки і ансамбль кількох знімків у пілоті не закриті. Поки вузьке місце — порожні клітинки і розмаїття почерку, це пізні важелі. Чесно пишемо: не робили, не вигадуємо плюс три відсотки.
Журнал: один рядок — одна зміна
Без журналу цикл розсипається. Мінімальна таблиця пілоту (не лабораторний стенд на всі оптимізатори одразу):
| Прогін | Що змінювали | Повне збігання | Порожні, хибні |
|---|---|---|---|
| Базовий компактний | вихідний контур, ~1000 чисел | 70,9% | не виділяли |
| Більше епох | той самий контур | 75,8% | дивитися окремо |
| Суміш порожніх з нуля | негативні в тій самій голові | 78,6% на цифрах | 0,1% |
| Донавчання на порожніх | суміш поверх цифрової голови | 83,2% на цифрах | 0,5% |
| База майже без порожніх | для порівняння конфлікту | 85,4% на цифрах | 100% |
Рядки про порожні вже розібрані як конфлікт постановки, не як перемога навчання. Їх тримають у журналі, щоб не повторити: «давайте ще раз донавчимо на порожніх до перемоги». Аугментацію і планувальник у цій таблиці не дописуємо заднім числом: не було окремого прогону «лише планувальник» із чесною дельтою.
У чернетці плану легко намалювати гарні сходи «епохи → аугментація → планувальник → 80%». Без ізольованого прогону це декорація. Ми свідомо не публікуємо такі сходинки: їх нічим підтвердити. Журнал коротший за енциклопедію — і чесніший.
Правило: не змінювати п'ять ручок одразу. Якщо 70,9% → 75,8% за інших рівних, приріст можна зв'язати з епохами. Якщо одночасно змінити набір, швидкість і глибину — отримаєте історію, яку не можна відтворити.
Коли якість уперлася — і коли модель уже не треба покращувати
Після 70% зростання відносно дешеве. Після 80% помилки стають рідкісними і патологічними: жирна сітка, чужий почерк, поганий кроп. Останні відсотки часто вимагають не нової голови, а іншої системи: вентиль порожніх, щит 80 мм, статус review, людина.
У пілоті простий важіль епох уже не закриває фантоми. Наступне вузьке місце — вид клітинки до розпізнавання і крихітний класифікатор «порожньо / є значення», а не ансамбль трьох CRNN. Поки класифікатора немає, чесно тримаємо хвіст на перевірці. Це вже системна нотатка про бланк: модель не зобов'язана відповідати завжди.
Інколи контур «95% автоматично + сумнівне людині» кращий за виробничу систему, яка женеться за 99% мовчки. Ціна пропуску товщини вища за зайвий погляд оператора — та сама рамка, що в економіці збою.
Що зробити сьогодні
Заведіть журнал із п'яти колонок: гіпотеза, що не чіпали, повне збігання, фантоми порожніх, рішення (зафіксувати / відкотити).
Проженіть поточний знімок ваг за помилками і випишіть десять клітинок, які ламаються однаково. Це і є наступний набір, а не «ще випадкові кропи».
Якщо навчання і перевірка обидва низькі — спочатку додайте епохи або перевірте, чи не зупинилися рано. Якщо перевірка відстає — не додавайте шари.
Не порівнюйте архітектури, поки на одному й тому самому наборі не закриті етикетки, епохи і один гіперпараметр.
Якщо після двох ізольованих прогонів цифра стоїть, не додавайте третій «про всяк випадок». Зафіксуйте знімок ваг, випишіть десять повторюваних помилок і змініть шар системи: набір, вид клітинки або поріг для людини. Повторний запуск навчання без нової гіпотези лише плодить файли ваг.
Часті питання
Чому не почати з підбору швидкості навчання?
Бо швидкість відповідає на питання «як іти», а не «туди чи ми йдемо». Якщо в наборі переплутані етикетки або порожні всередині CTC, будь-який крок буде впевнено спускатися не туди.
Чи можна вважати зростання 70,9% → 75,8% доказом, що епохи — найкращий важіль назавжди?
Ні. Це один прогін за інших рівних. На іншій вибірці той самий важіль упреться раніше. Журнал фіксує факт, не закон фізики.
Навіщо тоді взагалі архітектура?
Коли дані, етикетки і режим навчання виміряні і не вистачає: інший почерк, інша довжина рядка, інша абетка. До цього ускладнення маскує діру в наборі.
Чи потрібні ансамбль і аугментація на виводі?
У пілоті не вимірювали. Поки дешевше не годувати розпізнавач порожньою клітинкою, ніж усереднювати три повороти однієї галюцинації.
Як це стикується з хмарною моделлю зору?
Локальна голова — масовий замір. Хмара — шапка і сумнівні кропи. Цикл покращення локальної голови не скасовує поріг упевненості і звіт оператора.
Типові помилки
Найчастіша — крутити швидкість навчання, пакет і аугментацію в одному прогоні, а потім сперечатися, «що спрацювало». Журнал з одним рядком на зміну дешевший за другий знімок ваг.
Друга — дивитися лише функцію втрат. Втрати CTC можуть падати, поки остання цифра стабільно бреше. Повне збігання і фантоми порожніх треба рахувати поряд, не «потім у звіті для керівництва».
Третя — донавчати ту саму голову на порожніх, бо фантоми образливі. Ми вже вимірювали: цифри теж падають. Якщо вузьке місце — порожнє поле, наступний експеримент про вид клітинки, не про ще двадцять епох.
Четверта — порівнювати архітектури на різних наборах. Новий почерк у навчанні і стара перевірка виглядають як «трансформер кращий», хоча ви просто додали дані.
П'ята — гнатися за автоматичними 99%, коли оператор усе одно дивиться сіру підсвітку. Система з порогом упевненості закриває цех раніше, ніж ідеальна голова.
Що почитати далі
Як улаштована голова і чому порожні ламають CTC — компактна замірна мережа. Що робити з клітинкою до навчання — класифікатор вмісту. Які метрики бувають поза нашою сіткою — якість нейромереж. Як не змішувати навчання й оцінку — інженерія наборів. Людина в петлі на всьому бланку — однієї моделі мало.
Висновок
Якість компактної CRNN на бланку УЗТ росте не від повторного запуску навчання, а від циклу: виміряти → зрозуміти помилку → змінити один важіль → знову виміряти. У пілоті чесний базовий рівень 70,9% повного збігання зсунувся до 75,8% коштом епох; конфлікт порожніх показав, що наступний важіль уже не всередині тієї самої голови.
Практичний крок на цьому тижні — не нова архітектура, а журнал з однієї зміни і список із десяти повторюваних помилок. Якщо список порожній, ви ще не дивилися передбачення, ви дивилися середнє.


