Межі й етика CV

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

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

РозділМодель вчить не те, що ти думаєш

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

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

Дані — ті самі шість фігур 28×28 із теми 16. Ми фарбуємо тло в яскравість, що залежить від класу: шість класів — шість рівнів від 0.10 до 0.60. Тло не є частиною задачі, зате його видно по шести сотнях пікселів, а форму — по кільканадцятьох. Читати тло набагато дешевше.

Ярлик не мусить бути ідеальним. Число, яке ми звемо узгодженістю, — це частка навчальних прикладів, у яких тло відповідає своєму класу; решті дістається чуже. Узгодженість 1.00 означає «жодного винятку», 0.80 — «кожен пʼятий приклад ярлик обманює».

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

РозділЯрлик спрацьовує лише без винятків

Замір: 600 навчальних прикладів, три зерна, два бюджети навчання — 12 і 32 епохи. Рівень вгадування на шести класах — 0.1667.

узгодженістьтой самий світзвʼязок розірванопадіння
0.500.94440.9311+0.0133
0.800.91670.6378+0.2789
0.950.96440.3478+0.6167
1.000.99780.1822+0.8156

Головне тут — не те, що падіння велике, а як воно росте. Половина узгоджених прикладів не коштує нічого (0.0133 при розкиді по зернах 0.0110 — це нуль). Девʼяносто пʼять відсотків коштують уже 0.6167. А сто — 0.8156, тобто 0.1822 при рівні вгадування 0.1667: модель, яка на своїх даних дає 0.9978, поза ними не відрізняє коло від хреста взагалі.

Купи не перетинаються. За критерієм, який курс уживає з теми 26, різниця середніх при трьох зернах слабка, а непересічні купи — сильні. Тут вони не перетинаються двічі: узгодженість 0.80 дає [0.567, 0.757, 0.590], 0.95 — [0.253, 0.457, 0.333], 1.00 — [0.170, 0.207, 0.170]. Найгірше зерно кожного рівня краще за найкраще зерно наступного.

Чи це лікується довшим навчанням

Може, річ у тому, що ми мало вчили? Прогнали той самий замір на двох бюджетах — 12 і 32 епохи:

узгодженість12 епох32 епохищо дали 20 епох
0.500.55780.9311+0.3733
0.800.30000.6378+0.3378
0.950.23560.3478+0.1122
1.000.18220.1822+0.0000

Нуль в останньому рядку — не округлення: три зерна дали ті самі числа [0.170, 0.207, 0.170] і на 12-й, і на 32-й епосі.

Причина проста. Мережа рухається туди, куди її штовхає похибка на навчальних прикладах. При узгодженості 1.00 модель, яка читає саме тло, помиляється на своїх даних майже ніколи (0.9978) — отже, штовхати її більше нічому. При 0.95 пʼять відсотків прикладів лишаються помилковими назавжди, поки мережа не почне дивитись на форму, і саме вони роблять роботу.

Що саме тут заміряно, а що виведено. Заміряно дві точки — 12 і 32 епохи; більших бюджетів ми не проганяли, тож «+0.0000» — це властивість цього заміру, а не доведене «ніколи». Але поруч стоїть механізм, і він пояснює, чому третьої точки не варто чекати: градієнт береться з похибки на навчальних прикладах, а при 0.9978 її фактично немає. Правильне формулювання — «поки модель не помиляється на своїх даних, довше навчання не дає чого підправляти»; воно тримається на похідній, а не на двох рядках таблиці.

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

Ярлик, якого в задачі немає

Ліворуч — навчальні приклади: тло пофарбоване за класом, частина дістає чуже. Праворуч — дві точності: там, де тло підказує, і там, де звʼязок розірвано.

бюджет навчання
той самий світ—
звʼязок розірвано—
падіння—
винятків / 600—
Постав узгодженість на 0.50 — і ярлика ніби немає: 0.9444 проти 0.9311. Далі кожен крок повзунка забирає більше за попередній, а на 1.00 правий стовпчик падає до 0.1822 при вгадуванні 0.1667. Перемкни бюджет: усюди, крім 1.00, довше навчання відвойовує форму — на 1.00 воно не дає нічого.

РозділОдне число ховає нуль

Другий спосіб не побачити проблему — усереднити її. Прибираємо ярлики й робимо один клас із шести рідкісним: від 16.7 % (порівну з іншими) до 1.5 %. Перевірка завжди збалансована, по сто прикладів кожного класу. Задача навмисне важка: шум 0.45 замість звичних 0.06, лише 500 навчальних прикладів — навіщо саме така, стане видно в наступному розділі.

Який клас робити рідкісним? Якщо взяти найважчий, ми не відрізнимо «рідкісний» від «важкий». Збалансоване навчання впорядковує класи так: кільце 0.9200, трикутник 0.7567, хрест 0.5967, квадрат 0.4833, коло 0.4167, ромб 0.3700 при загальній 0.5906. Беремо квадрат — третій із шести, тобто не край.

частка квадраташтук у навчанніна всьомуна квадратірозрив
16.7 %830.59060.4833 ±0.1156+0.1073
10.0 %500.63170.3500 ±0.2061+0.2817
3.0 %150.58610.0467 ±0.0205+0.5394
1.5 %80.57670.0467 ±0.0591+0.5300

Прочитай останній рядок двічі. Загальна точність 0.5767 — це «так собі, але працює»: утричі краще за вгадування, звичайне число у звіті про важку задачу. Точність на квадраті — 0.0467, а по зернах це [0.0000, 0.1300, 0.0100]: на одному зерні з трьох модель не назвала квадрат жодного разу за всю перевірку.

Перший рядок теж важливий. При рівномірній частці розрив уже +0.1073, але це не несправедливість, а власна складність квадрата. Ціна рідкісності — падіння з 0.4833 до 0.0467, і починається воно там, де частка опускається нижче за рівномірну 16.7 %.

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

Середнє і рідкісний клас

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

частка рідкісного класу
задача
на всьому—
на квадраті—
розрив—
квадратів у навчанні—
Тримай частку на 1.5 % і перемкни задачу. Прикладів рідкісного класу вісім і там, і там; змінюється лише рівень шуму, а точність на квадраті стрибає з 0.0467 на 0.4767. Легка задача ховає несправедливість не гірше за усереднену метрику.

РозділЛегка задача ховає несправедливість

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

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

частка квадраташтуклегка: на всьомулегка: на квадратіважка: на квадраті
16.7 %830.99280.99000.4833
10.0 %500.98110.97000.3500
3.0 %150.93780.68330.0467
1.5 %80.89720.47670.0467

Розрив на легкій задачі є — просто він зʼявляється пізніше й лишається мʼяким. При 3 % легка задача дає 0.6833, важка — 0.0467, різниця в чотирнадцять разів при абсолютно однакових пʼятнадцятьох прикладах. При 1.5 % — 0.4767 проти 0.0467.

Тобто однакова вибірка дає різну несправедливість залежно від складності задачі. Це властивість не даних і не моделі, а пари «дані + задача», і жодну з половин не можна назвати винною окремо.

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

РозділЛіки: зважування і його доза

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

втрата = − Σc w[c] · [c — правильний клас] · log p[c]

Розберімо запис по знаках. Σ — це «сума по всіх шести класах». p[c] — імовірність, яку модель дала класу c. Квадратні дужки дорівнюють одиниці для справжнього класу й нулю для решти, тож із усієї суми лишається один доданок. log — логарифм: він великий за модулем, коли ймовірність правильної відповіді мала, і майже нульовий, коли вона близька до одиниці. Нове тут одне — w[c], вага класу; при всіх одиничних вагах це звичайна крос-ентропія.

Найпоширеніший вибір ваг — обернена частота: клас, якого впʼятеро менше, дістає впʼятеро більшу вагу. У нашій вибірці з 15 квадратами проти 97 прикладів кожного іншого класу це дає квадрату вагу приблизно ×6.5. Для порівняння беремо ще й навмисне завелику ×20.

І міряємо не одне число, а чотири: точність на всьому (те, що зазвичай друкують), повноту — яку частку справжніх квадратів модель знайшла, точність влучань — яка частка названих квадратами справді ними є, і IoU рідкісного класу, що карає і за пропуски, і за хибні спрацювання одразу. Частка квадрата — 3 %, зерен пʼять замість трьох, бо розкид тут великий.

лікина всьомуповнотавлучаньIoU
без ваг0.6063 ±0.03840.0940 ±0.08500.64790.0876
1/частота ×6.50.6243 ±0.06570.2920 ±0.08890.61620.2440
вага ×200.5300 ±0.10580.4120 ±0.15320.51690.2873

Три речі, і всі три варто назвати чесно. Перше: зважування працює — повнота рідкісного класу зросла з 0.0940 до 0.2920, утричі. Друге: за це не довелося платити загальною точністю (0.6063 проти 0.6243), але й виграшу доводити не можна: різниця 0.0180 менша за розкид ±0.0384 і ±0.0657. Чесне формулювання — «не постраждала», а не «покращилась». Третє: ×20 — це вже інша угода: повнота росте далі (0.4120) і IoU теж (0.2873), зате загальна точність падає до 0.5300, а точність влучань — із 0.6479 до 0.5169. Модель почала бачити квадрати там, де їх немає.

І тут теж треба дивитись на купи. Повнота по пʼятьох зернах: без ваг [0.07, 0.05, 0.02, 0.26, 0.07], із вагою 1/частота [0.40, 0.31, 0.15, 0.36, 0.24]. Найкраще беззважне зерно дало 0.26, і три зважені зерна з пʼяти (0.40, 0.31, 0.36) кращі за нього — а два (0.24 і 0.15) заходять у чужу купу. Різниця середніх переконлива, а непересічних куп немає — і претендувати на них не можна.

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

РозділСуперечність із темою 29

Тема 29 міряла те саме зважування на семантичній сегментації й дістала протилежний результат: mIoU 0.4181 проти 0.6151 без ваг. Обидва заміри чесні, обидва стоять у цьому курсі, і вони суперечать один одному.

Найгірше, що тут можна зробити, — вигадати пояснення й записати його як висновок. Спробуймо натомість відтворити обидві відповіді на тих самих даних. Робимо з наших фігур задачу сегментації: кожен піксель треба назвати предметом або тлом. Фігури беремо дрібні — предмет займає 6.28 % полотна, отже обернена частота дає вагу ×14.92.

вага предметаmIoUIoU предметаповнотавлучаньхибних пікселів на кадр
без ваг0.7851 ±0.22380.59610.62770.63112
×20.9402 ±0.00300.88850.96150.92144
×50.9240 ±0.00770.85870.97550.87787
1/частота ×14.90.8885 ±0.01060.79410.98700.802612
×200.8787 ±0.00980.77660.98890.783513

Ось воно. У ваги є оптимум, і формула 1/частота стоїть далеко за ним. Найкраще mIoU дає скромна вага ×2 — 0.9402. Обернена частота (×14.9) дає 0.8885, гірше на 0.0517 при розкиді 0.0106. Це та сама поразка, що в темі 29, тільки з видимим сусідом, який показує: причина не в самій ідеї зважувати, а в дозі.

Механізм теж вимірний. Від ×2 до ×14.9 кількість хибно зафарбованих пікселів росте втричі, з 4 до 12 на кадр — і майже всі вони лягають на контур: частка хибних пікселів, що сидять за один піксель від справжнього предмета, дорівнює 0.9327 при вазі ×2, 0.8243 при ×14.9 і 0.8095 при ×20. Зважування не розкидає помилки по кадру — воно роздуває предмет по контуру. Для дрібного предмета контур завтовшки в піксель — відчутна частка площі, і IoU падає швидше, ніж повнота встигає його підняти.

Чому в класифікації те саме не болить

У класифікації межі немає: хибне спрацювання коштує рівно один приклад, а не кільце навколо предмета, і перевірка збалансована, тож рідкісний клас важить стільки ж, скільки будь-який інший. Тому та сама формула ×6.5 опиняється перед оптимумом і виглядає як чистий виграш. Наш ×20 із попереднього розділу — це вже вихід за оптимум, і поводиться він так само, як ×14.9 у сегментації.

Чого ми не довели. Ми не перезапускали модель і дані теми 29, тож не можемо стверджувати, що саме цей механізм дав там 0.4181. Ми показали інше: на одних і тих самих фігурах той самий рецепт у двох задачах поводиться по-різному, і назвали вимірну причину різниці — положення обраної ваги відносно оптимуму. Щоб перевірити гіпотезу до кінця, треба взяти постановку теми 29 й прогнати в ній вагу від ×1 до ×20, як зроблено тут. Це чесна відкрита задача, і вона винесена в домашнє завдання.

Доза ліків

Одна ідея — підняти вагу рідкісного — у двох задачах. Крива праворуч показує, де метрика має максимум і де на ній стоїть формула 1/частота.

задача
на всьому—
IoU рідкісного—
повнота—
влучань—
Перемкни на сегментацію й веди повзунок праворуч. Повнота росте весь час, до 0.9889, точність влучань весь час падає, до 0.7835. А mIoU має максимум усередині — 0.9402 при вазі ×2 — і до формули 1/частота (×14.9) доходить уже 0.8885. У класифікації вершина припадає рівно на 1/частота (0.6243) і завалюється лише на ×20 (0.5300).

РозділМодель памʼятає своїх

Досі ми питали, чи справедлива модель. Тепер — що вона видає про людей, чиї дані пішли на її навчання.

Здається, що навчена мережа — просто набір чисел, з яких вихідних даних не дістати. Це не так, і перевіряє це найпростіша з атак — атака на належність (membership inference). Питання: «чи був цей конкретний знімок серед навчальних?» Нападник не має доступу ні до даних, ні до ваг — лише до відповідей моделі. Ідея в одному реченні: на своїх модель упевненіша, бо бачила їх десятки разів і підганяла ваги саме під них.

Якість атаки міряємо числом AUC. Візьми навмання одну картинку з навчальної вибірки й одну нову; AUC — це частка таких пар, де модель упевненіша саме в навчальній. 0.5 означає «монетка», 1.0 — «відрізняється завжди». Іншої математики за цим числом немає — його можна порахувати вручну, перебравши всі пари «свій, чужий», і воно збігається з тим, що дає roc_auc_score.

прикладів у навчанніепохAUC атакиупевненість на своїхна новихточність моделі
200100.5321 ±0.01340.17040.16860.1867
200300.5968 ±0.04240.43010.35120.4380
200600.7041 ±0.07120.76220.49330.5473
500100.5093 ±0.00610.25420.25020.3240
500300.5838 ±0.01250.54060.46900.5613
500600.6645 ±0.04890.92940.67160.7027

На десятій епосі атака не працює: 0.5321 і 0.5093 — це монетка. Далі памʼять накопичується разом із навчанням: на шістдесятій епосі в семи парах із десяти модель упевненіша саме в тому прикладі, який бачила на навчанні. Це не означає, що сторонній вгадає «був чи не був» для окремого знімка в семи випадках із десяти: AUC міряє пари, а не окремі відповіді. Дивись на дві сусідні колонки останнього рядка: середня впевненість у правильній відповіді — 0.9294 на своїх і 0.6716 на нових.

Найважливіше тут — що памʼять росте разом із якістю. Не можна сказати «навчімо гірше, зате приватніше»: модель на 60 епохах і найкраща (0.7027), і найбалакучіша. Це не побічний ефект, який можна вимкнути, а той самий процес, побачений з іншого боку.

А от «більше даних — менше памʼяті» ми не довели. Середні натякають (0.7041 проти 0.6645), але купи по зернах накриваються: 200 прикладів дають [0.6798, 0.8009, 0.6316], 500 — [0.6157, 0.6465, 0.7313]. Найгірше зерно меншої вибірки нижче за найкраще зерно більшої. За критерієм теми 26 це не різниця.

У справжніх моделях це гостріше за нашу лабораторну атаку. Цитоване: з відкритої дифузійної моделі Stable Diffusion витягли близько сотні зображень, що майже точно збігаються з навчальними, — просто підбираючи запити (Carlini та ін., 2023). Модель, яку роздають як файл ваг, несе в собі шматки того, з чого її зробили.

Чи був цей знімок у навчанні

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

прикладів у навчанні
AUC атаки—
точність моделі—
упевненість: свої—
чужі—
Веди повзунок від 10 до 60 епох. Позначки на верхній шкалі розʼїжджаються, і разом із ними росте стовпчик AUC: на десятій епосі це монетка (0.5321), на шістдесятій — 0.7041. Точність моделі росте тим самим рухом: приватність не окремий важіль, а зворотний бік навчання.

РозділСкільки треба, щоб зламати

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

Спосіб зветься FGSM (fast gradient sign method) і виглядає так:

x′ = x + ε · sign(∂L / ∂x)

Словами: беремо картинку x, дивимось, у який бік треба посунути кожен піксель, щоб похибка L зросла (це і є похідна ∂L/∂x — швидкість зміни похибки при зміні пікселя), і робимо крок рівно на ε в цей бік. sign лишає від похідної тільки знак, тож кожен піксель змінюється на однакову величину й різняться лише напрямки.

Ключове — що змінюються всі пікселі, але кожен ледь-ледь. Щоб було видно, наскільки ледь, рахуємо ще одне число: скільки пікселів яскравості додано загалом — суму модулів обурення, поділену на яскравість одного цілком білого пікселя. У картинці їх 784.

εпісля атакивипадковий шум тієї ж силипікселів яскравості з 784частка
0.000.99560.99560.00.0 %
0.010.97780.99565.70.7 %
0.020.94000.993311.21.4 %
0.030.88220.992216.42.1 %
0.050.65780.987826.33.3 %
0.100.35110.925648.26.1 %
0.150.20220.686768.48.7 %

Третя колонка — те, заради чого таблиця й потрібна. При ε = 0.05 випадковий шум тієї самої сили не робить майже нічого (0.9878), а спрямований збиває модель до 0.6578: справа не в кількості доданого, а в напрямку. При ε = 0.15 атака доводить її до 0.2022 — майже рівень вгадування 0.1667 — тоді як випадковий шум лишає 0.6867.

І про масштаб: 26.3 пікселя яскравості з 784 — це 3.3 % загальної «фарби» зображення, розмазаної по всьому кадру так, що жоден окремий піксель не змінився більш ніж на 0.05. Око такої різниці не бачить.

Це не лабораторний курйоз. Цитоване: наклейки, наліплені на справжній дорожній знак «стоп», давали 100 % помилок класифікатора в стаціонарному тесті (Eykholt та ін., 2018). Модель, яка «бачить» дорожні знаки, і модель, яка їх розпізнає надійно, — не те саме.

Розмір обурення

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

після атаки—
випадковий шум—
пікселів / 784—
частка яскравості—
Крайні дві картинки мають виглядати однаково. У цьому й суть: до ε = 0.05 різниці не видно, а точність уже впала з 0.9956 до 0.6578. Обурення посередині намальоване випадковим знаком; справжня атака обирає знак за похідною — саме тому вона валить модель, а випадковий шум тієї ж сили ні.

РозділФейк ловлять не за фейковість

Теми 37, 38 і 39 вчили породжувати зображення. Питання, якого вони не ставлять: чи можна потім відрізнити породжене від справжнього.

Здається, що так: досить навчити класифікатор «справжнє чи ні». Перевірмо, чого він насправді навчиться. Робимо два «генератори», кожен зі своїм слідом:

Детектор навчається на справжніх проти фейків генератора A, а перевіряється і на A, і на B — по 400 зображень, три зерна. Рівень вгадування — 0.5000.

сила артефактусвій генератор Aчужий генератор B
0.600.9992 ±0.00120.5017 ±0.0024
0.300.9642 ±0.05070.8558 ±0.1242
0.150.9467 ±0.06840.9458 ±0.0678

Перший рядок і є висновком розділу. Детектор, який на своєму генераторі майже непогрішний — 0.9992, — на чужому дає 0.5017, тобто рівно монетку, і то з мізерним розкидом 0.0024. Він не навчився ловити «фейковість». Він навчився ловити розмитий край. Генератор, який лишає інший слід, проходить повз нього так, ніби детектора немає.

Другий і третій рядки ламають зручну лінійність: при слабших артефактах перенос раптом працює (0.8558 і 0.9458). При силі 0.60 генератор A відрізняється передусім розмиттям, і детектору вигідно дивитись лише на нього; при 0.15 розмиття майже немає, і детектор змушений чіплятися за загальніше «відхилення від правила, за яким малюються справжні фігури», а воно є в обох. Тобто сильний і очевидний артефакт шкідливіший для узагальнення, ніж слабкий: детектор ліниво хапається за найпростішу ознаку — рівно як мережа з розділу 2 хапалася за тло.

У справжніх змаганнях це виглядає так само. Цитоване, зі статті про набір DFDC: переможець змагання 2020 року дав логарифмічну втрату 0.1983 на відео самого DFDC — тобто на розподілі, на якому вчився, — і 0.6605 на справжніх відео, знятих поза набором. Друге число варто порівняти не з першим, а з 0.6931: саме стільки дає модель, яка на кожне відео відповідає «ймовірність 0.5». Тобто на незнайомому матеріалі переможець опинився ближче до монетки, ніж до себе самого. Найкращі моделі змагання на самих лише справжніх відео мали середню точність 0.753 і ROC-AUC 0.734.

Що з цього випливає для практики. Заява «наш детектор дипфейків дає 97 %» не означає нічого, поки не сказано, на яких генераторах це поміряно й чи були серед них небачені. Число має сенс лише разом із постановкою, у якій його здобуто.

Детектор ловить генератор, а не фейк

Три картинки — справжня фігура й два фейки з різними слідами. Перемикач каже, на якому генераторі перевіряють детектор, навчений на A.

перевіряємо на
точність детектора—
розкид по зернах—
над рівнем монетки—
Сила 0.60, перемикач на «чужому». Стовпчик сідає рівно на лінію монетки: 0.5017 проти 0.9992 на своєму генераторі. Послаб артефакт до 0.15 — і перенос зʼявляється (0.9458): коли легкої ознаки немає, детектор мусить учити щось загальніше.

РозділЧого не вміє цей курс

Тепер найнезручніше. Усі числа, які ти прочитав за сорок тем, здобуто на синтетичних даних, згенерованих формулами: фігури 28×28, сцени 64×64, стереопара з відомої глибини, рядок тексту, надрукований шрифтом. Вибір був свідомий: генератор дає точну істину — маска до пікселя, рамка без розмітника, глибина в метрах — і дає тобі рівно ті самі числа, що в лекції.

Але за це заплачено, і рахунок треба назвати.

Ми жодного разу не бачили брудної розмітки. Тема 28 псувала розмітку навмисне й поміряла ціну (0.1749 mAP за зсув рамок на 4 px). Але зіпсована навмисне розмітка рівномірна й випадкова, а справжня — ні: розмітники помиляються систематично й саме на важких прикладах.

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

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

Історія галузі тут коротка й повчальна. Цитовані приклади: 2019 року Microsoft припинила роздавати MS-Celeb-1M — 10 мільйонів зображень 100 тисяч людей, зібраних без їхньої згоди; того самого року творці ImageNet після аудиту прибрали більш ніж половину категорій, що стосувалися людей; 2020 року MIT відкликав 80 Million Tiny Images через образливі підписи. Це були не маргінальні набори, а ті, на яких навчали моделі з підручників.

І ми жодного разу не міряли якість на людях. Цитоване й найвідоміше число в цій розмові: аудит комерційних систем визначення статі за обличчям показав похибку 0.8 % для світлошкірих чоловіків і до 34.7 % для темношкірих жінок (Buolamwini і Gebru, 2018). Це рівно та несправедливість, яку ми моделювали на квадраті. І знайшли її не загальною точністю, а розбивкою по групах — тим самим прийомом, що в розділі 3.

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

РозділЩо вже стало законом

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

Європейський AI Act набув чинності 1 серпня 2024 року; заборони запрацювали з 2 лютого 2025 року, вимоги до моделей загального призначення — з 2 серпня 2025 року, більшість вимог до систем високого ризику — з 2 серпня 2026 року. Прямо заборонено, зокрема: ненацільовий збір зображень облич з інтернету чи камер спостереження для баз розпізнавання; розпізнавання емоцій на робочому місці й у навчальних закладах; біометричне визначення особи в реальному часі в публічних місцях для правоохоронних цілей — із вузькими винятками. Максимальний штраф — 35 мільйонів євро або 7 % світового обороту, залежно від того, що більше.

Кожен із цих пунктів — задача, яку в курсі описано технічно. «Ненацільовий збір» — це рівно те, як зібрано набори з попереднього розділу; «розпізнавання емоцій» — звичайна класифікація зображень із теми 09. Різниця між дозволеним і забороненим — не в архітектурі й не в метриці.

GDPR відносить біометричні дані, що дозволяють однозначно ідентифікувати людину, до особливої категорії: обробляти їх за замовчуванням не можна. Штраф — до 20 мільйонів євро або 4 % обороту. Illinois BIPA 2008 року вимагає письмової згоди на збір біометрії й — на відміну від більшості норм — дозволяє позиватися самій людині, а не лише регулятору; саме тому він дав найбільші суми: Facebook 2021 року погодився виплатити 650 мільйонів доларів за розпізнавання облич на фотографіях без згоди.

Практичний висновок, а не проповідь. Питання «чи законно це» стоїть тепер на тому самому рівні, що й «чи вистачить памʼяті»: на етапі, коли обирають задачу, а не коли модель уже навчена. Дізнатися, що набір не можна було збирати, після навчання дорожче, ніж здається — як показав розділ 7, викинути дані з моделі не так просто, як із теки.

РозділСорок тем: пʼять наскрізних ліній

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

1 · Метрика вирішує, що ти побачиш

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

темадві метрики, що розходяться
29 · сегментаціяточність по пікселях 0.9001 при mIoU 0.0000
32 · panopticmIoU рівно 1.0000 при PQ 0.5292
33 · OCRпосимвольна похибка 0.02 при «рядку цілком» 0.6230
35 · дії у відеосереднє по часу 0.4000 при розгортці 1.0000 на тих самих ознаках
40 · ця тема0.5767 на всьому при 0.0467 на рідкісному класі

Тема 40 доводить лінію до кінця: коли розходяться mIoU і PQ, страждає порівняння моделей; коли «на всьому» і «на рідкісному» — страждають люди, яких у вибірці мало.

2 · Розмітка переважує архітектуру

Тема 28 поставила це найточніше: зсув усіх рамок на чотири пікселі коштує 0.1749 mAP, а focal loss (+0.1061) і anchor-free (+0.0577) разом дають +0.1638 — одна помилка розмітки зʼїдає обидва здобутки блоку про одноетапні детектори. Ця тема додає поверх: справа не лише в точності розмітки, а й у тому, кого в ній скільки.

3 · Рецепт важить більше за архітектуру

Тема 18: ResNet50 із сучасним рецептом дає 80.86 проти 76.13 зі старим і обходить глибшу ResNet101 зі старим рецептом (77.37). Різниця від того, як навчати, більша за різницю від подвоєння глибини. Тут — зворотний бік тієї самої монети: у розділі 2 бюджет навчання вирішував, чи мережа взагалі вивчить форму (+0.3378 при узгодженості 0.80).

4 · Ефекти порогові, а не плавні

Тема 30: скіп на одному рівні дає +0.0191, на чотирьох — +0.2535. Тема 33: те саме розмиття при висоті літери 20 px дає похибку 0.8813, а при 48 px — 0.0670. Ця тема: узгодженість 0.95 лікується довшим навчанням (+0.1122), а 1.00 на обох заміряних бюджетах не лікується зовсім (+0.0000 між 12 і 32 епохами). Наслідок: лінійна інтуїція тут не працює — не можна подивитись на два сусідні значення параметра й дописати третє олівцем.

5 · Різниця, менша за розкид, не є різницею

Лінію задала тема 26: різниця середніх 0.1061 була менша за розкид γ=0 (0.1420), і виграш довели інакше — усі три зерна γ=2 (найгірше 0.8361) виявились кращими за всі три зерна γ=0 (найкраще 0.8067). Ця тема вжила той самий критерій в обидва боки: у розділі 2 він підтвердив пороговість ярлика, а в розділі 7 заборонив висновок про памʼять моделі, хоч середні його й просили.

Шоста лінія, яку варто назвати без таблиці. Майже кожен блок курсу спростував щонайменше одне твердження з підручника: filter2D рахує не згортку, а кореляцію; Canny не згладжує; перший шар навченої мережі гірше збігається з Собелем, ніж випадкові ядра; дропаут у згортках зашкодив; зважена крос-ентропія допомогла в одній задачі й зашкодила в іншій. Жодне з цих спростувань не було здогадом — усі вони вийшли з того, що хтось узяв і поміряв. Це, мабуть, і є головне, чого курс навчає.

Сорок тем і пʼять ліній

Кожна клітинка — тема курсу. Перемикач обирає наскрізну лінію й підсвічує теми, які її тримають, разом із числами, якими вони її довели.

наскрізна лінія
тем у лінії—
блоків—
найрізкіша пара—
Жодна з пʼятьох ліній не тримається на одному блоці. Найширша за темами — перша: розбіжність двох метрик знайшли пʼять тем. Найширша за блоками — пʼята: вона зʼявилась у темі 11 як розкид від зерна, стала критерієм у темі 26 й відтоді працює фільтром для всіх тверджень курсу.

РозділКуди йти далі

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

Що читати

Три книжки, які не замінюють одна одну. Szeliski, Computer Vision: Algorithms and Applications — довідник по геометричній частині, від камери до 3D, у відкритому доступі. Prince, Understanding Deep Learning — акуратне пояснення того, чому навчання взагалі працює. Goodfellow, Bengio, Courville, Deep Learning — класика, з якої зручно добирати математику. Повний перелік джерел курсу — на окремій сторінці.

Далі — першоджерела: читати статті страшно рівно доти, доки не прочитаєш першу. Починай із тих, чиї ідеї тут розібрано: ResNet, U-Net, DETR, ViT, CLIP, SAM.

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

Куди рухається галузь

Одна модель на багато задач. Лінія, що почалася з CLIP і SAM: замість моделі під задачу — модель, яка приймає задачу як підказку. Тема 32 поміряла головне, що з цього випливає: зміна постановки виявилась сильнішою за зміну архітектури.

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

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