Навчання без міток

Усі мережі трьох попередніх тем училися на розмічених даних. Ця тема про те, звідки взяти передтреноване тіло, коли розмічати нема кому — і чому найважливіша робота тут робиться до першого рядка коду.

Три теми поспіль ми розбирали архітектури — AlexNet і VGG, ResNet, Inception і MobileNet. У них різні ідеї, різна вартість і різні роки, але одна спільна умова, яку ми жодного разу не назвали вголос: кожна з них училася на розмічених даних. Хтось узяв мільйон двісті тисяч фотографій і поставив біля кожної слово. Ця тема — про те, що робити, коли такого «когось» немає.

ЦінаСкільки коштує одна мітка

Тема 02 вже рахувала цю ціну в секундах. Нагадаємо числа, бо саме з них росте вся тема: 3 секунди на одну мітку класу, 15 секунд на рамку навколо предмета, 3 хвилини на маску предмета, годину на повну маску сцени. Сто фотографій із простою класифікацією — пʼять хвилин роботи: 100 × 3 с = 300 секунд. Ті самі сто фотографій із масками предметів, а предметів у кадрі зазвичай не один — при двох це вже 100 × 2 × 180 с = 36 000 секунд, тобто десять годин.

Помножимо це на реальний масштаб. Мільйон зображень із однією міткою кожне — це 833 години, або чотири місяці роботи однієї людини по сім годин щодня без вихідних. І це найдешевший тип розмітки з усіх.

Тепер погляньмо з іншого боку. Непозначених зображень у світі на порядки більше. Камера спостереження знімає цілодобово. Мікроскоп у лабораторії дає знімки щодня. Супутник фотографує ту саму ділянку раз на кілька днів. Виробнича лінія знімає кожну деталь. У всіх цих випадках зображень мільйони, а міток нема жодної — і не буде, бо ставити їх мусить людина, яка вміє читати такі знімки.

Асиметрія, з якої все починається. Зображення коштує майже нуль. Мітка коштує хвилини роботи фахівця. Тому питання «чи можна вчитися на самих зображеннях» — не академічне. Для медичних знімків або супутникових даних це питання «чи можна взагалі щось зробити».

Тема 12 дала один вихід: взяти чуже передтреноване тіло й донавчити голову. Механіку ти вже знаєш — тіло і голова, заморожування, лінійна проба, донавчання. Але вона мовчазно припускала, що десь є ImageNet із його міткою на кожному зображенні. Питання цієї теми інше: звідки взяти передтреноване тіло, якщо міток немає взагалі й ніде.

ІдеяВигадати задачу з самих даних

Ідея на диво проста, і сформулювати її можна одним реченням: якщо мітку не може дати людина, хай її дасть саме зображення.

Ось як це виглядає. Візьми фотографію. Поверни її на 90 градусів. Тепер у тебе є пара «зображення → відповідь», і відповідь ти знаєш точно, бо сам щойно її і зробив: 90 градусів. Жодна людина в цьому не брала участі. Повтори мільйон разів — і в тебе мільйон навчальних пар.

Задача, яку ми в такий спосіб вигадали, зветься привід (англійською pretext task — «задача-привід», «задача для приводу»). Слово влучне: відповідь на неї нікому не потрібна. Нікому в світі не цікаво, на скільки градусів повернуто фотографію, — та й обертали її ми самі. Потрібне інше: щоб дорогою до відповіді мережа мусила навчитися дивитися.

Уся конструкція зветься самонаглядовим навчанням (self-supervised learning). Назва підкреслює, чим воно не є. Це не навчання без учителя — учитель тут є, і він суворий. Просто його роль виконує не людина, а сама операція над даними.

мітка = те, що ми зробили із зображенням

Далі схема така сама, як у темі 12. Навчили тіло на приводі — викинули голову приводу — поставили нову голову під справжню задачу — навчили її на тих небагатьох мітках, які все-таки є. Різниця лише в тому, звідки взялося тіло: не з чужого ImageNet, а з наших власних непозначених даних.

ПриводиЩо пробували вигадувати

За десять років приводів вигадали десятки. Ось пʼять, які варто знати, — кожен по одному абзацу.

Поворот. Повернути зображення на 0°, 90°, 180° або 270° і вгадати кут. Задача з чотирма відповідями. Розрахунок такий: щоб зрозуміти, де в кота верх, треба знати, як виглядає кіт. Привід простий у реалізації й став найпопулярнішим навчальним прикладом.

Пазл. Порізати зображення на девʼять патчів, перемішати й вимагати назвати перестановку. Тут мережа мусить розуміти, що ніс буває над ротом, а колесо під кузовом, — тобто вивчити взаємне розташування частин.

Розфарбовування. Перевести кольорове фото в сіре, показати мережі сіре й вимагати повернути колір. Мітка — оригінальні кольори, і вона безкоштовна для будь-якого кольорового знімка. Щоб пофарбувати правильно, треба впізнати предмет: трава зелена, шкіра тілесна, небо синє.

Домальовування закритої ділянки. Вирізати з фото шматок і вимагати відновити те, що там було. Мітка — самий вирізаний шматок. Ця ідея пізніше виросла в маскований автоенкодер, про який мова в розділі 10.

Взаємне розташування. Показати два патчі одного зображення й питати, як другий розташований відносно першого: вище, праворуч, по діагоналі. Той самий сюжет, що в пазлі, тільки дешевший.

Список привабливий, і легко подумати, що вигадування приводу — вправа на винахідливість: чим хитріше, тим краще. Це найпоширеніша й найдорожча помилка теми. У приводу є дві жорсткі вимоги, і обидві перевіряються числом ще до того, як ти напишеш перший рядок коду навчання.

Вимога першаПривід має бути розвʼязний

Вимога звучить банально: у задачі має бути правильна відповідь. Перевіряють її майже ніколи — привід беруть із чужої статті й запускають. Подивимось, що з цього виходить на наших фігурах.

Наскрізний приклад теми той самий, що в усьому блоці: шість фігур 28×28 — коло, квадрат, ромб, кільце, хрест і трикутник. Здавалося б, ідеальний матеріал для приводу «вгадай поворот». Перевіримо.

Візьми коло й поверни його на 90 градусів. Що вийшло? Те саме коло. Тепер квадрат — теж той самий квадрат. Ромб, кільце, хрест — те саме. З шести фігур лише трикутник при повороті стає іншим.

Для пʼяти класів із шести правильної відповіді не існує. Одна й та сама картинка є водночас «повернуто на 0°» і «повернуто на 90°». Мережа, яку ми змусимо вгадувати кут, розвʼязує задачу, у якої в 83 % випадків немає розвʼязку (пʼять фігур із шести — це 5 ÷ 6 = 0.833). Вона не може навчитися — може лише знайти обхідний шлях. Яким саме буде цей шлях і чому на справжніх, а не ідеально намальованих зображеннях частка «розвʼязних» стрибне до 100 %, розберемо в розділі 05: це та сама вада з іншого боку.

Чи існує в цієї задачі відповідь

Обери фігуру й привід. Полотно показує всі варіанти, які привід просить розрізнити; однакові позначено. Праворуч — частка фігур, для яких відповідь однозначна.

фігура
привід
варіантів—
різних—
частка розвʼязних фігур—
Перемкни всі шість фігур під приводом «поворот». Пʼять разів підряд усі чотири варіанти виявляться однаковими, і лише трикутник дасть чотири різні. Привід «дзеркало» не працює взагалі ні для однієї фігури: усі шість симетричні відносно вертикалі. А «квадрант» — вгадай, яку чверть зображення тобі показали — розвʼязний для всіх шести, бо чверть кола з отвором угору-ліворуч не дорівнює чверті з отвором угору-праворуч.

Порахувати цю частку можна формально й наперед: беремо кожну фігуру, породжуємо всі варіанти, яких вимагає привід, і дивимось, чи є серед них однакові. Ось результат для наших шести фігур:

привідрозвʼязний длячастка
поворот 0/90/180/270°1 фігури з 60.167
дзеркало0 фігур з 60.000
квадрант6 фігур з 61.000

Це і є та перевірка, яку треба робити першою, а не останньою. Вона коштує десять рядків коду й нуль секунд навчання. Пропустиш — і зʼясуєш те саме через дві години прогону, але вже у вигляді «щось погано вчиться, спробую інший lr».

Як перевіряти на справжніх даних. Наші фігури намальовані формулами, тому порівняння побітове. На фотографіях так не вийде — але й не треба. Питання те саме: чи можна відрізнити варіанти, які привід просить розрізнити. Для повороту на фотографіях відповідь зазвичай «так», бо в світі є верх і низ: небо вгорі, тінь унизу. А от для знімків із мікроскопа, супутника або рентгена верху немає, і привід «вгадай поворот» там так само порожній, як у нас із колом.

Вимога другаПривід має вимагати потрібних ознак

Друга вимога тонша, і ламається на ній більше приводів, ніж на першій. Задача може мати відповідь — і при цьому розвʼязуватись дешево, обхідним шляхом, який нічого не вчить.

Повернімось до наших фігур і зробимо чесний експеримент. Візьмемо не ідеальну фігуру по центру, а справжнє зображення з датасету: центр зсунуто на кілька пікселів у випадковий бік, зверху накладено шум. Тепер запитаємо ще раз: чи відрізняється таке зображення від свого повороту на 90°?

Відрізняється. У 100 % випадків. Заміряно: на сирих зображеннях поворот «помітний» із часткою 1.000, а на чистій геометрії фігури — лише 0.167.

Різниця між цими двома числами і є дірка, у яку провалюється привід. Мережа справді зможе вгадувати кут — але не за формою фігури, а за тим, у який бік зсунуто центр і як лягли пікселі шуму. Вона розвʼяже задачу й не навчиться нічого, що знадобиться для розпізнавання фігур.

Це не наша особливість, а типова хвороба приводів, у неї навіть є назва: обхідний розвʼязок (shortcut). Три класичні приклади з реальних робіт:

привідобхідний розвʼязок
Пазл із девʼяти патчівпатчі ріжуться з однієї картинки, тож сусідні мають однаковий рівень шуму й однакові артефакти стиснення JPEG. Мережа складає пазл за швами, не дивлячись на вміст
Взаємне розташування патчіву багатьох камерах є хроматична аберація: колірна кайма на краях кадру спрямована від центра. По ній видно, у якому куті знімка був патч, — і задача розвʼязується самим кольором кайми
Розфарбовуванняякщо в наборі переважає один сюжет, вигідно завжди малювати те саме: небо блакитним, низ кадру зеленим. Модель вивчає статистику датасету, а не предмети

Лікування завжди одне: прибрати те, що дозволяє обійти. Для пазла патчі беруть із проміжками й окремо перетискають кожен, щоб шви не збігалися. Для кайми знебарвлюють краї патчів. У нашому випадку зі зсувом лікування теж є — але воно приводить нас до зовсім іншого приводу, у якому зсув перестає бути підказкою й стає частиною завдання.

Контрастне навчанняНе вгадувати, а зближувати

Приводи, які ми перебирали, влаштовані однаково: мережу просять щось назвати — кут, перестановку, колір. Сучасний підхід відмовився від цього зовсім і робить річ, яка спочатку здається дивною.

Візьми одне зображення. Зіпсуй його двічі по-різному: перший раз зсунь і освітли, другий раз зсунь інакше й додай шуму. Вийшло два види одного предмета. Тепер вимагай від мережі одного: щоб ці два види вона вважала схожими, а види інших зображень — несхожими.

Тут немає жодної назви, яку треба вгадати. Є лише «свій — чужий». Тому підхід і зветься контрастним (contrastive): мережа вчиться протиставляти.

Побутова аналогія. Тобі показують дві фотографії однієї людини — у профіль і в анфас, при різному світлі, в різному одязі. Впізнати, що це одна людина, можна лише зрозумівши, що саме в людині не змінюється. Контрастна мережа розвʼязує рівно цю задачу мільйон разів поспіль — і побічним продуктом отримує вміння бачити головне.

Що псувати, а що ні

Псування — це не косметика. Кожна аугментація — це заява: «ось це міняти можна, предмет від цього не стає іншим». Ми вже говорили про це в темі 10, і там ця заява стосувалася класифікатора. Тут вона стає буквально формулюванням задачі: мережа вчиться не звертати увагу рівно на те, що ти оголосив неістотним.

Тому набір аугментацій для наших фігур такий: зсув на кілька пікселів, яскравість і контраст, додатковий шум. І тому в ньому немає повороту — ми ж щойно порахували, що поворот наших фігур майже не міняє, і вимагати «вважай повернуту фігуру тією самою» означало б вимагати очевидного.

Два види одного предмета

Ліворуч — оригінал, праворуч — два його види. Повзунки керують силою кожної аугментації. Вердикт дивиться на форму, яка лишилась під шумом, і перевіряє, чи впізнається в ній та сама фігура.

фігура
вид 1 схожий на—
вид 2 схожий на—
Три перші повзунки клас не ламають — і в цьому весь сенс. Зсув, яскравість і шум крути до краю: кільце лишається кільцем, бо форма під ними не змінюється. Саме тому ми маємо право оголосити їх неістотними. Четвертий повзунок поводиться інакше. Постав стирання 8 на кільці — і обидва види вже впізнаються як коло; на колі й трикутнику злам настає на 10. Аугментація, яка міняє клас, вчить мережу неправди: ми кажемо «це той самий предмет» про два різні предмети.

NT-Xent: формула, у якій чисельник — свій, а знаменник — усі

Тепер треба перетворити слова «свій має бути схожішим за чужих» на число, яке можна мінімізувати. Формула зветься NT-Xent (normalized temperature-scaled cross entropy — «нормована перехресна ентропія з температурою»). Розберемо її по частинах, починаючи з того, що означає «схожі».

Крок 1 · схожість

Мережа перетворює кожен вид на вектор — стовпчик із 32 чисел. Поділимо кожен вектор на його довжину, і тоді звичайний скалярний добуток двох векторів (перемножити покоординатно й додати) дасть косинус кута між ними: 1, якщо напрямки збігаються, 0 — якщо перпендикулярні, −1 — якщо протилежні. Позначимо цю схожість s(a, b).

Крок 2 · партія й пари

Беремо партію з N зображень і робимо з кожного два види — разом 2N. У кожного виду є рівно один свій (другий вид того самого зображення) і 2N − 2 чужих.

Крок 3 · експонента

Ділимо кожну схожість на температуру τ (грецька «тау» — просто число, зазвичай від 0.05 до 1) і застосовуємо експоненту ex. Експонента перетворює будь-яке число на додатне й різко підсилює різницю між великим і малим.

Крок 4 · частка свого

Ділимо «експоненту свого» на суму експонент усіх, крім себе самого. Знак Σ (грецька «сигма») означає «додай усе, що йде далі». Вийшло число від 0 до 1 — частка, яку свій відхопив від загального пирога схожості.

Крок 5 · мінус логарифм

Хочемо, щоб частка була близька до одиниці. Логарифм тут натуральний — той самий, що обертає експоненту з кроку 3: log(ex) = x. Логарифм одиниці — нуль, логарифм малого числа — велике відʼємне. Тому −log перетворює «хочу частку 1» на «хочу втрату 0».

втрата(i) = −log ( es(i, свій) / τ ÷ Σj ≠ i es(i, j) / τ )

Словами вся формула читається так: у чисельнику — свій, у знаменнику — усі, крім себе самого. Втрата мала тоді, коли свій забирає майже весь знаменник. Загальна втрата — середнє по всіх 2N видах.

Порахуємо, що це за числа. Якщо мережа нічого не знає й усі схожості однакові, то частка свого дорівнює 1 поділити на (2N − 1), а втрата — log(2N − 1). Для партії з 8 зображень це log 15 ≈ 2.708, і саме стільки дає втрата на випадкових векторах, поки мережа справді нічого не знає. Для партії з 256 — log 511 ≈ 6.236, і саме звідти стартує наше навчання.

Чому партія має бути великою. Знаменник — це і є задача. При партії з 8 мережі треба відрізнити свій вид від 14 чужих; при партії з 256 — від 510. Друга задача складніша, отже й змушує вивчити більше. Це головна причина, чому справжні контрастні методи навчаються партіями в тисячі прикладів і чому їм потрібні кластери відеокарт. Ми беремо 256 — стільки, скільки вміщується в чотири хвилини.

Втрата NT-Xent по кроках

Матриця схожостей для партії з чотирьох зображень: вісім видів, вісім рядків. Обери рядок і покрути температуру — побачиш, як міняється частка свого й сама втрата.

схожість зі своїм—
найсхожіший чужий—
частка свого—
втрата рядка—
середня втрата по партії—
Температура вирішує, кого мережа слухає. На нульовому рядку свій має схожість 0.51, найсхожіший чужий — 0.27, і саме ця різниця в 0.24 — усе, з чим працює формула. Постав τ = 0.05: частка свого підскакує до 0.986, середня втрата падає до 0.086, а в знаменнику лишається практично один доданок — найсхожіший чужий. Постав τ = 1.0: частка свого падає до 0.195 при 1/7 = 0.143 у повного незнання, а середня втрата повзе з 0.086 до 1.639 при стелі log 7 = 1.946. Мала температура робить втрату майже повністю залежною від найважчого негативного прикладу — тому вона вчить швидше, але нестійкіше.

Що з цим робити далі — уже знайомо. Втрата рахується, градієнт іде назад, крок оптимізатора. Одна деталь: вектор для порівняння дає не саме тіло, а маленька надбудова над ним — проєктор (projection head), два лінійні шари 288 → 64 → 32. Після навчання проєктор викидають, а лишають тіло. Причина практична: втрата тягне свій вихід у дуже специфічний бік, і краще, щоб вона робила це з окремим шматком мережі, який нікому потім не потрібен.

Формулу варто перевірити двічі: порахувати втрату матрицями — і окремо в лоб, двома вкладеними циклами по всіх парах. На нашій партії обидва способи дають 2.351308 до останнього знака. Уся реалізація — дванадцять рядків, і магії всередині немає.

АугментаціїНабір аугментацій — це і є задача

Тепер найважливіше твердження теми, і воно не про формулу, а про те, що ти пишеш у списку аугментацій.

Контрастна мережа вчиться рівно тому, що ти оголосив неістотним. Не «крім того», а «рівно». Якщо ти сказав «зсув не міняє предмет», мережа мусить навчитися впізнавати предмет незалежно від положення — і це змушує її дивитися на форму. Якщо ти зсув не назвав, то два види одного зображення лишаються на тому самому місці, і найдешевший спосіб їх зблизити — запамʼятати положення.

Перевіримо це числом. Приберемо зсув із набору й передтренуємо заново, усе інше без змін. Для контролю приберемо натомість яскравість.

Що станеться, якщо забрати одну аугментацію

Ліворуч — як виглядають два види під обраним набором. Праворуч — заміряна якість тіла, яке цим набором навчили: лінійна проба на 30 і 60 мітках і точність найближчого сусіда.

набір аугментацій
проба, 30 міток—
проба, 60 міток—
найближчий сусід—
Дві аугментації — два різні наслідки. Без зсуву обидва види лежать на полотні однаково, і мережі вигідно зближувати їх за положенням: проба на 30 мітках падає з 0.372 до 0.339, найближчий сусід — з 0.497 до 0.469. Без яскравості не втрачається нічого — 0.391 замість 0.372, тобто навіть трохи краще. Причина проста: у наших фігурах яскравість і так не варіює, тож ця аугментація не закривала жодного обхідного шляху, а лише додавала шуму в задачу.
Наслідок, який легко проґавити. Немає «правильного набору аугментацій» узагалі — є набір, правильний для цих даних і цієї задачі. Наш замір показує обидві помилки одразу: пропустити потрібну аугментацію (зсув) коштує якості, а додати непотрібну (яскравість) якості теж коштує, тільки менше. Тому набір підбирають під дані, а не переписують із чужої статті.

ПеревіркаЧи вивчило воно взагалі щось

Ми маємо тіло, яке ніколи не бачило слова «трикутник». Перш ніж міряти точність класифікації, поставимо пряміше питання: чи розкладає воно фігури по різних кутках свого простору ознак?

Перевірка не вимагає жодного навчання з мітками. Беремо 300 зображень із відомими класами як довідник. Для кожного тестового зображення шукаємо серед довідника найсхожіше — очима мережі, тобто за косинусом кута між векторами ознак — і дивимось, чи збігся клас. Це зветься точність найближчого сусіда (kNN-точність) і є найпрямішою мірою якості представлення.

Обовʼязкова точка відліку — зовсім випадкове тіло, яке взагалі не навчали. Згорткова мережа з випадковими вагами вже щось робить із зображенням, і без цього рядка легко приписати передтренуванню чужу заслугу. Три зерна, ось результат:

тілоkNN-точністьрозкид
випадкове, не навчене0.411±0.007
привід «поворот»0.423±0.017
контрастне0.497±0.008
вгадування0.167—

Читається це так. Контрастне тіло, яке не бачило жодної мітки, дає 0.497 — на 0.086 більше за випадкове. Воно справді щось вивчило.

А тіло, навчене на нерозвʼязному приводі, дає 0.423 при 0.411 у випадкового. Різниця в межах розкиду. Ціле передтренування на тих самих 4800 зображеннях дало рівно стільки, скільки дає ніщо, — і це найпряміший доказ першої вимоги з розділу 04.

Як подивитись на 288 чисел очима. Тіло віддає на кожне зображення 288 чисел, і намалювати таку точку неможливо. Тому їх стискають до двох: метод головних компонент шукає в хмарі точок ті два напрямки, уздовж яких точки розкидані найсильніше, і показує хмару в них. Скільки саме розкиду вміщується в ці дві осі — окреме число: 100 % означало б, що всі 288 чисел насправді лежали в площині, а мало — що хмара справді багатовимірна й на плоскому знімку ми бачимо лише її тінь. Ця частка нічого не каже про якість ознак; далі побачимо, що вона буває найбільшою саме в найгіршого тіла.

Простір ознак до появи міток

180 зображень, показаних як точки. Кожна точка — 288 чисел, які видало тіло, стиснуті до двох вимірів методом головних компонент. Колір — справжній клас, якого тіло не бачило.

чим навчали тіло
найближчий сусід—
розкиду в двох осях—
перевага над випадковим—
Дивись не на красу, а на колір. У випадкового тіла точки одного кольору розкидані по всьому полю. Після контрастного навчання зʼявляються згустки: хрести тягнуться в один бік, кільця в інший. Розділення далеко не ідеальне — 0.497 означає, що кожне друге зображення все ще має чужого найближчого сусіда, — але воно зʼявилося без жодної мітки. А тепер перемкни на «поворот» і подивись на друге табло: у цього тіла дві осі вміщують 67.6 % розкиду — більше, ніж у контрастного (55.5 %) і вдвічі більше, ніж у випадкового (31.7 %). І при цьому класи в ньому не розділяються зовсім. Висновок, який варто забрати: стиснути розкид у дві осі й розділити класи — різні речі, і перше без другого нічого не варте.

РозворотСкільки це коштує й скільки дає

Тепер головний замір. У нас є тіло, навчене без міток. Скористаємось ним трьома способами, знайомими з теми 12:

спосібтілощо вчитьсявільних чисел
З нулявипадковеусе7 622
Лінійна пробапередтреноване, замороженелише шар 288 → 61 734
Донавчанняпередтреноване, вільнеусе7 622

Міряємо на чотирьох кількостях міток, по три зерна на кожну клітинку. Рівень вгадування на шести класах — 0.167.

мітокз нуляпробадонавчанняпроба після «повороту»
300.339 ±0.0140.372 ±0.0300.369 ±0.0130.237 ±0.014
600.427 ±0.0030.407 ±0.0250.454 ±0.0200.248 ±0.024
1200.524 ±0.0200.418 ±0.0100.504 ±0.0200.298 ±0.023
3000.702 ±0.0240.451 ±0.0260.737 ±0.0340.416 ±0.024

Читаємо таблицю по колонках, бо кожна відповідає на своє питання.

Лінійна проба виграє лише поки міток зовсім мало. На 30 мітках 0.372 проти 0.339 — передтреноване тіло дає фору. Але сказати це треба обережно: розкид проби ±0.030 майже зʼїдає різницю 0.033, і купи ледь торкаються краями (0.342…0.402 у проби проти 0.325…0.353 у навчання з нуля). Тобто перевага є, але вона на межі того, що ці три зерна взагалі здатні розрізнити. На 60 вона зникає зовсім: 0.407 проти 0.427, тобто різниця в 0.020 при розкиді проби ±0.025 — це нічия. А на 300 проба програє з розгромом: 0.451 проти 0.702. Це той самий розворот, що в темі 12, і причина та сама: заморожене тіло — це стеля. Воно дивиться так, як навчилося дивитися, і жодні додаткові мітки цього не змінять, бо змінюватись у пробі нема чому — вільних чисел лише 1 734 із 7 622.

Донавчання поводиться інакше й у нас виявилось найкращим способом. На 60 мітках воно дає 0.454 — більше і за пробу, і за навчання з нуля. На 300 — 0.737 проти 0.702. Стелі в нього немає, бо тіло вільне; передтренування працює як вдалий початковий стан, а не як обмеження.

Перший замір давав протилежне — і був неправильний. При першій спробі донавчання програвало пробі на всіх чотирьох кількостях міток. Річ виявилась не в методі, а в швидкості навчання: при малому lr тіло просто не встигало зрушити з місця, і «вільне тіло» було вільним лише на папері. Варто було дібрати lr окремо для донавчання — і порядок перевернувся. Та сама пастка вже траплялась у темі 12. Правило, яке з цього варто винести: «метод А гірший за метод Б» — це твердження про налаштування, поки ти не перевірив обидва при їхніх власних найкращих.

Нерозвʼязний привід не просто не допомагає — він заважає. Остання колонка гірша за навчання з нуля на кожному рядку, і різниця росте: −0.102 на 30 мітках, −0.286 на 300. Тіло, навчене вгадувати кут за шумом і зсувом, активно тягне класифікатор не туди.

Де проходить розворот

Повзунок обирає кількість міток. Перемикач міняє привід, яким передтренували тіло. Числа заміряні на трьох зернах, вусики — розкид.

чим передтренували
з нуля—
проба—
донавчання—
Прокрути повзунок від краю до краю. Проба виграє рівно в одному положенні — на 30 мітках. На 60 виходить нічия: різниця 0.020 менша за розкид самої проби (±0.025). Далі криві розходяться назавжди: навчання з нуля росте, заморожене тіло впирається в стелю. Перемкни привід на «поворот» — і виграшного положення не лишиться жодного. Донавчання для повороту ми не міряли: колонка в таблиці порожня, тож інтерактив її і не показує.

Скільки треба непозначених даних

Лишилось питання, заради якого все й затівалось. Головний аргумент самонаглядового навчання — непозначених даних можна взяти скільки завгодно. Перевіримо, чи справді від їхньої кількості щось залежить: передтренуємо на 300, 1200 і 4800 зображеннях і щоразу зміряємо лінійну пробу на тих самих 60 мітках.

Непозначених більше — і що з того

Повзунок обирає, скільки непозначених зображень пішло на передтренування. Пунктир — навчання з нуля на тих самих 60 мітках, без жодного передтренування.

проба, 60 міток—
найближчий сусід—
відстань до навчання з нуля—
Залежність є, і вона монотонна. 300 → 0.317, 1200 → 0.370, 4800 → 0.407. Кожне збільшення вчетверо додає чотири-пʼять сотих: +0.053, потім +0.037. Але подивись на пунктир: навчання з нуля на 60 мітках дає 0.427, і навіть 4800 непозначених зображень до нього не дотягують. Наш масштаб замалий, щоб «безкоштовні дані» перемогли — і це чесна відповідь, а не невдача заміру.

Останній рядок останнього стовпчика варто прочитати повільно. Ми взяли в шістнадцять разів більше непозначених зображень, ніж маємо міток, витратили на них окреме навчання — і лишились позаду простого навчання з нуля. Виграш зʼявляється тільки там, де міток справді мало: на 30 мітках, тобто по пʼять прикладів на клас.

МасштабЯк це виглядає насправді

Наш замір показує механізм, а не результат. Скажемо це прямо, бо різниця в масштабі не в рази, а в порядках. Ось короткий довідник по методах, які варто знати на імена.

методідея в одному реченні
SimCLRрівно те, що ми зробили: два види, проєктор, NT-Xent. Показав, що набір аугментацій важить більше за архітектуру, а партія має бути величезною
MoCoщоб не тримати гігантську партію в памʼяті, чужі приклади складають у чергу з попередніх кроків, а другу копію мережі оновлюють повільно
BYOLчужих прикладів немає взагалі: одна копія мережі вчиться передбачати вихід другої, повільнішої. Знаменника немає, а працює
DINOте саме без міток і без негативних, але на трансформерах; його карти уваги самі показують межі предметів, хоча про предмети ніхто не казав
Маскований автоенкодерзакрити три чверті патчів зображення й вимагати відновити закрите. Прямий нащадок «домальовування» з розділу 03

Тепер порядки величин, які роблять різницю відчутною. Такі методи навчаються партіями в кілька тисяч зображень і сотнями епох на ImageNet — а це мільйон двісті тисяч картинок. Разом виходять сотні мільйонів переглядів зображення за одне навчання, дні роботи кластера відеокарт і рахунок за електрику. Ціна цього — лінійна проба на замороженому тілі, яка наближається до мережі, навченої на всіх мітках ImageNet.

Наш режим: партія 256, чотири епохи, 4800 зображень, чотири з половиною хвилини на процесорі. Це в тисячі разів менше обчислень, і саме тому виграш у нас крихітний і зникає вже на 60 мітках. Механізм той самий, режим — інший.

Не переноси наші числа на реальні задачі. Із того, що в нас проба програла навчанню з нуля на 60 мітках, не випливає, що самонаглядове передтренування слабке. Випливає рівно одне: воно слабке в цьому режимі — маленька мережа, тисячі зображень, хвилини рахунку. Правильний висновок із нашої таблиці — не «SSL не працює», а «SSL коштує обчислень, і на маленькому бюджеті розворот настає рано».

Де це працюєЗадачі, у яких вибору немає

Самонаглядове навчання не всюди дає перевагу. Воно дає її там, де виконуються дві умови одразу: непозначених даних дуже багато і розмітка коштує як фахівець.

Медичні знімки. Лікарня накопичує рентгени, КТ і МРТ тисячами на тиждень — вони й так зберігаються. Розмітити знімок може тільки лікар-рентгенолог, і на один складний випадок у нього йдуть хвилини, яких у нього немає. Тут співвідношення «мільйони непозначених до сотень позначених» — норма, і це якраз лівий край нашої таблиці, де проба виграє.

Супутникові й аерознімки. Супутник фотографує ту саму ділянку роками. Позначити, де поле, де вирубка, а де підтоплення, здатен фахівець із дистанційного зондування. Додаткова обставина: у знімка згори немає верху й низу в звичному сенсі — і привід «вгадай поворот» там порожній рівно так само, як у нашого кола. Це не теоретична заувага, а типова причина, чому чужий рецепт не переноситься.

Промислові дефекти. Камера на лінії знімає кожну деталь — мільйони кадрів на місяць. Дефектних серед них частки відсотка, і саме їх треба знаходити інженерові вручну. Тут самонаглядове навчання часто працює навіть без класифікатора: тіло вчать на самих справних деталях, а потім шукають те, що не вкладається в вивчений розподіл.

І де воно не потрібне. Якщо задача звичайна — кіт проти собаки, товар проти не-товару — жодного самонаглядового навчання не треба. Візьми передтреноване на ImageNet тіло, як у темі 12, і донавчи. Хтось уже витратив на це кластер і рік; повторювати роботу безглуздо.

ПідсумокЩо лишається в голові

Мітка коштує хвилини фахівця, зображення — нульзвідси й уся тема: вчитися на тому, чого багато
Привід — задача, мітку до якої дає саме зображеннявідповідь на неї нікому не потрібна; потрібне те, чого мережа навчиться дорогою
Перша вимога: привід має бути розвʼязнийу нас поворот розвʼязний для 0.167 фігур, дзеркало — для 0.000. Перевіряй числом ДО навчання
Друга вимога: розвʼязуватись потрібними ознакамина сирих зображеннях поворот «помітний» у 1.000 випадків — за шумом і зсувом, тобто ні за чим
Контрастне навчання: свій вид у чисельнику, всі чужі — у знаменнику партія — це і є складність задачі; температура вирішує, кого мережа слухає
Набір аугментацій і є постановка задачібез зсуву проба падає з 0.372 до 0.339; без яскравості не падає зовсім
Тіло без міток справді щось вивчаєkNN 0.497 проти 0.411 у випадкового; нерозвʼязний привід дає 0.423, тобто нічого
Розворот такий самий, як у переносі навчанняпроба виграє на 30 мітках і програє з 60; донавчання при правильному lr виграє всюди з 60

І головне, що варто винести з цієї теми, — не формула NT-Xent, а порядок дій. Спершу доведи, що придумана тобою задача має розвʼязок і що розвʼязати її можна лише потрібними ознаками. Потім навчай. Десять рядків перевірки економлять години прогону й, головне, рятують від висновку «самонаглядове навчання не працює» там, де насправді не працював конкретний привід.

Місток до наступної теми. У нас тепер є тіло, навчене без жодної мітки. Ми знаємо, що воно щось вивчило — kNN 0.497 проти 0.411 це доводить. Але що саме воно вивчило, ми не знаємо: подивитись на 288 чисел не можна, а хмара точок у двох вимірах показує лише, що згустки є. Природне наступне питання — чи можна зазирнути всередину мережі й побачити, на що вона реагує. Йому й присвячена тема 17 «Що бачить мережа».