Уяви, що тобі треба зробити застосунок, який відрізняє шість типів деталей на конвеєрі. Ти сідаєш шукати, яку мережу взяти, і за пʼять хвилин знаходиш десяток таблиць «архітектура → точність». У кожній свій переможець, кожна датована іншим роком, і жодна не говорить про твої деталі. Ця тема — про те, чому такі таблиці майже нічого не варті і як поставити порівняння, якому можна вірити.
ПитанняПитання, з якого починається проєкт
«Яку мережу брати?» — перше практичне питання будь-якого проєкту компʼютерного зору. Відповідь, яку дають найчастіше, звучить як «бери ResNet50, з ним не помилишся».
Це не відповідь, і ось чому. По-перше, вона не питає нічого про твою задачу: скільки в тебе розмічених зображень, де крутитиметься мережа, скільки в тебе є часу на кадр. По-друге, вона застаріває швидше, ніж її встигають написати: сама назва «ResNet50» зʼявилась у 2015 році, і за десять років те саме імʼя почало означати щонайменше дві різні речі — про це буде розділ 4. По-третє й головне: вона мовчить про те, з чим саме ResNet50 порівнювали і як.
У цій темі ми не будуватимемо рейтинг. Ми навчимося ставити порівняння — і побачимо, чому акуратне порівняння коштує значно дорожче, ніж здається, і чому його майже ніхто не робить.
УмовиЩо взагалі порівнюють
Речення «архітектура A краща за архітектуру B» здається простим. Насправді воно приховує щонайменше чотири умови, і зміна будь-якої з них здатна перевернути результат.
Мережа не буває «точною» взагалі. Вона точна на конкретному наборі зображень. На ImageNet — базі з тисячею класів побутових предметів — перемагає одна мережа; на знімках із мікроскопа, де все сіре й дрібне, може перемогти зовсім інша. Переносити рейтинг з ImageNet на свій конвеєр — це припущення, а не факт.
Скільки було розмічених прикладів. Мережа на 25 мільйонів ваг і мережа на 250 тисяч поводяться зовсім по-різному, коли прикладів тисяча, і майже однаково, коли їх мільйон. Розділ 10 покаже це на вимірі.
Швидкість навчання, кількість епох, аугментація, регуляризація, розклад зменшення кроку. Це — рецепт. Він не входить в архітектуру, його майже ніколи не описують повністю, і саме він зазвичай вирішує результат. Це головна думка теми, і їй присвячено розділ 4.
«Швидша» мережа на відеокарті може виявитися повільнішою на телефоні. Тема 15 показала це числами: порядок девʼяти архітектур за кількістю множень і за фактичним часом не збігається.
До цих чотирьох додається пʼята умова, яку взагалі майже ніколи не називають, — випадковість самого навчання. Дві однакові мережі, навчені однаковим рецептом на однакових даних, дадуть різні числа, якщо змінити тільки початкове випадкове зерно. З неї й почнемо, бо без неї всі інші порівняння не мають масштабу.
РозкидРозкид від зерна
Перед навчанням ваги мережі заповнюються випадковими числами, а приклади перемішуються у випадковому порядку. Обидва процеси керуються зерном (seed) — цілим числом, від якого відштовхується генератор випадкових чисел. Поставив те саме зерно — дістав ту саму послідовність; змінив зерно — дістав іншу.
Зерно ніяк не стосується архітектури. Мережа лишається тією самою, дані тими самими, рецепт тим самим. Змінюється тільки випадковість. Питання: наскільки відрізняється результат?
Ми взяли нашу залишкову мережу на шести фігурах 28×28 (тема 14), навчили її пʼять разів, змінюючи лише зерно, і зробили це двічі — двома різними рецептами.
| рецепт | 5 прогонів, точність на перевірці | найгірший | найкращий | розкид |
|---|---|---|---|---|
| обережний | 0.560 · 0.797 · 0.467 · 0.690 · 0.650 | 0.467 | 0.797 | 0.330 |
| сміливий | 0.970 · 0.977 · 0.977 · 0.973 · 0.990 | 0.970 | 0.990 | 0.020 |
Обережний рецепт — швидкість навчання 0.003 і вісім епох. Сміливий — швидкість 0.03 і двадцять епох. Обидва є в підручниках, обидва виглядають розумно. Різниця між найгіршим і найкращим прогоном обережного рецепта — 0.330. Тобто тридцять три пункти точності виникли з нічого: з того, якими числами випадково заповнили ваги.
Друге, що видно з таблиці, ще важливіше: розкид сам залежить від рецепта. Обережний рецепт дав 0.330, сміливий — 0.020, у 16.5 раза менше. Причина проста: обережний рецепт не встигає довчити мережу, вона зупиняється десь на півдорозі — а де саме зупиниться, вирішує випадковість старту. Сміливий рецепт доводить усі пʼять прогонів до майже однакової точки.
Це вже перший практичний висновок: нестабільний рецепт робить будь-яке порівняння неможливим, і найдешевший спосіб здешевити порівняння — не купувати більше процесорів, а зробити навчання стабільним.
Розкид від зерна
Пʼять точок — пʼять прогонів однієї й тієї самої конфігурації, відрізняється лише зерно. Смуга — увесь розкид. Повзунок додає другу мережу, яка «краща» на задану різницю: подивись, з якого моменту цю різницю взагалі видно.
ГоловнеРецепт проти архітектури
Тепер головний замір теми. Візьмемо дві різні архітектури й два різні рецепти й навчимо всі чотири комбінації. Архітектури — з теми 14: проста згорткова мережа з трьох блоків і така сама зі скіп-зʼєднаннями. Кількість ваг у них однакова до одиниці, різниця тільки в одному додаванні всередині блоку. Рецепти — ті самі обережний і сміливий з попереднього розділу. Кожна клітинка — середнє з трьох зерен.
| точність на перевірці | рецепт обережний | рецепт сміливий | різниця від рецепта |
|---|---|---|---|
| проста мережа | 0.524 | 0.991 | 0.467 |
| залишкова мережа | 0.608 | 0.974 | 0.367 |
| різниця від архітектури | 0.083 | 0.017 |
Прочитай таблицю двічі. По горизонталі — що дала зміна рецепта при незмінній архітектурі: 0.467 і 0.367. По вертикалі — що дала зміна архітектури при незмінному рецепті: 0.083 і 0.017.
Дрібниця, про яку варто сказати одразу, щоб потім не спотикатись: у всіх таблицях теми різниці пораховані до заокруглення клітинок. Тому відняти два надруковані числа й дістати результат, що розходиться з колонкою різниці на одну тисячну, — нормально: 0.974 − 0.608 у клітинках дає 0.366, а з чотирьох знаків виходить 0.367.
Рецепт переважив архітектуру мало не в шість разів у першому випадку і у двадцять два — у другому. І це при тому, що обидві архітектури ми брали навмисно різні: скіп-зʼєднання — одна з найважливіших ідей десятиліття, їй присвячено цілу тему.
Тепер згадай розкид від зерна. Під обережним рецептом він дорівнював 0.330, тобто вчетверо більше за різницю між архітектурами (0.083). Отже, чесне формулювання результату таке: під обережним рецептом ми не змогли виявити різниці між простою й залишковою мережею — вона тоне у випадковості. Під сміливим рецептом розкид становить 0.020, а різниця — 0.017; вона теж усередині розкиду.
Чому опубліковані порівняння часто нечесні
Тепер зрозуміло, звідки береться систематична проблема. Нова архітектура приходить у світ разом із новим рецептом: автори підбирали швидкість навчання, аугментацію й розклад саме під неї, витратили на це місяці й тисячі прогонів. Стару архітектуру, з якою її порівнюють, беруть із чужої статті — разом зі старим рецептом, який ніхто не переналаштовував.
У підсумку в таблиці стоїть різниця, а внесок архітектури й внесок рецепта в неї не розділені. Це не обовʼязково злий намір; переналаштувати рецепт для чужої архітектури чесно — це майже стільки ж роботи, скільки придумати свою.
Найкращий доказ того, наскільки це серйозно, лежить прямо в бібліотеці, якою ми
користуємось. torchvision — це набір готових моделей зору для PyTorch,
і для кількох архітектур у ньому лежать два набори
ваг: старий і новий. Архітектура в них однакова до останнього шару. Різниця
тільки в рецепті навчання — сучасніша аугментація, довше навчання, інша
регуляризація. Ось що це дало на ImageNet (точність top-1, у відсотках):
| архітектура | старий рецепт | новий рецепт | приріст |
|---|---|---|---|
| ResNet50 | 76.13 | 80.86 | +4.73 |
| ResNet101 | 77.37 | 81.89 | +4.51 |
| ResNeXt50 32×4d | 77.62 | 81.20 | +3.58 |
| Wide ResNet50-2 | 78.47 | 81.60 | +3.13 |
| RegNet-Y-400MF | 74.05 | 75.80 | +1.76 |
| MobileNet-v3-large | 74.04 | 75.27 | +1.23 |
| EfficientNet-B1 | 78.64 | 79.84 | +1.20 |
Подивись на перші два рядки разом. Перехід від ResNet50 до ResNet101 — це вдвічі глибша мережа, вдвічі більше обчислень — і +1.24 пункту за старим рецептом (76.13 → 77.37). Зміна рецепта на тій самій ResNet50 дала +4.73.
Архітектура 2015 року, навчена по-сучасному, обходить свою вдвічі глибшу наступницю, навчену по-старому, на три з половиною пункти. Будь-яка таблиця, де ці два числа стоять поруч без згадки про рецепт, бреше — навіть якщо кожне число в ній правильне.
Рецепт проти архітектури
Чотири клітинки — чотири навчання. Перемикач вибирає, що ми міняємо: перехід по горизонталі (рецепт) чи по вертикалі (архітектура). Підсвічена пара й число різниці — під нею.
РесурсиТри ресурси, які не збігаються
Другий бік порівняння — вартість. Тема 15 розібрала його докладно, тому тут лише нагадаємо результат і підемо далі.
Слово «дешевше» означає три різні величини: параметри (скільки чисел зберігати, тобто вага файлу), множення (скільки арифметики на одне зображення) і час (скільки мілісекунд насправді). Вони не збігаються. AlexNet стоїть другим за параметрами серед девʼяти архітектур і сьомим за часом. Роздільна згортка економить у 8.8 раза за параметрами й лише в 4.5 раза за часом.
Для теми порівняння з цього випливає одне: рейтинг залежить від того, яку колонку ти читаєш. «Найлегша» й «найшвидша» мережі — це, взагалі кажучи, різні мережі. А коли додати до цих трьох колонок ще й точність, їх стає чотири — і переможців так само може виявитися чотири.
БюджетОднаковий бюджет чого?
Правильне порівняння вимагає однакових умов. Але «однакові умови» самі потребують уточнення: однакові за чим? Ми взяли три маленькі мережі й порівняли їх тричі, щоразу зрівнюючи інше.
| мережа | будова |
|---|---|
| широка | один блок, багато каналів — мілка й товста |
| глибока | пʼять блоків без скіп-зʼєднань — глибока й тонка |
| залишкова | чотири блоки зі скіп-зʼєднаннями |
Три обмеження. Однакова кількість параметрів: ширину кожної мережі підібрано так, щоб усі мали приблизно 13-15 тисяч ваг; далі всі вчаться по дванадцять епох. Однаковий час навчання: мережі беруться в природному розмірі, і кожній дається рівно три секунди — скільки епох устигне, стільки й устигне. Однакова кількість епох: природний розмір, по дванадцять епох кожній. Кожен рядок — середнє з трьох зерен.
| обмеження | широка | глибока | залишкова | попереду | відрив | мірило |
|---|---|---|---|---|---|---|
| однакові параметри | 0.859 | 0.566 | 0.882 | залишкова | 0.023 | 0.157 |
| однаковий час | 0.968 | 0.297 | 0.591 | широка | 0.377 | 0.083 |
| однакові епохи | 0.873 | 0.561 | 0.866 | широка | 0.008 | 0.197 |
«Мірило» в останній колонці — розкид між зернами в тих двох мережах, що змагаються за перше місце. Читати таблицю треба обома очима: спершу подивись, хто попереду, потім — чи відрив більший за мірило.
Попереду щоразу інша мережа. За однакової кількості ваг попереду залишкова: тими самими чотирнадцятьма тисячами чисел вона розпоряджається краще. За однакового часу й за однакової кількості епох попереду широка.
Тепер прикладемо мірило, і саме тут починається цікаве. За однакової кількості ваг відрив 0.023 менший за розкид 0.157 — переможця не виявлено. За однакової кількості епох відрив 0.008 при розкиді 0.197 — знову не виявлено: широка й залишкова нерозрізнимі.
А от третій рядок — справжній, і його відрив величезний: 0.377 при мірилі 0.083. Але подивись, із чого він зроблений. За ті самі три секунди широка встигла 19 епох, залишкова — 7, глибока — 8. Вони не гірші, вони недовчені: 0.591 і 0.297 — це мережі, зупинені на півдорозі.
Глибока мережа програє скрізь, і це не випадковість, а вже знайоме явище: пʼять блоків без скіп-зʼєднань — це одинадцять згорткових шарів, на яких починається деградація з теми 14. Її прогони й розкидані найсильніше — від 0.183 до 0.853 в одному рядку.
Однаковий бюджет
Три мережі, три способи зрівняти умови. Перемикай обмеження — стовпчики переставляються, а разом із ними й той, хто попереду. Смуга на кожному стовпчику — розкид між трьома зернами.
ЦінаСкільки коштує чесне порівняння
Тепер порахуємо те, чого не рахує майже ніхто: скільки прогонів треба, щоб різницю можна було назвати справжньою. Логіка тут проста, і її можна пройти кроками, не знаючи жодної формули напамʼять.
Пʼять прогонів обережного рецепта дали 0.560, 0.797, 0.467, 0.690, 0.650. Їхнє середнє — 0.633, а типове відхилення від нього — 0.126. Цю величину позначають грецькою літерою σ («сигма») і звуть стандартним відхиленням; вона просто відповідає на питання «наскільки далеко від середнього зазвичай падає один прогін».
Якщо взяти не один прогін, а середнє з n прогонів, воно гуляє менше — у корінь із n разів. Корінь тут тому, що випадкові відхилення частково гасять одне одного: чотири прогони дають удвічі спокійніше середнє, девʼять — утричі.
Гуляють обидва, тож їхня різниця гуляє приблизно в 1.41 раза сильніше за кожне з них окремо (це корінь із двійки: два незалежні гуляння додаються не прямо, а «по діагоналі»).
Щоб різницю можна було впевнено назвати справжньою, вона має бути приблизно в 2.8 раза більшою за це гуляння. Число 2.8 — стандартний запас: він відповідає вимозі «не більше 5 % хибних тривог і не менше 80 % шансів побачити справжню різницю». Можна брати суворіший запас, тоді прогонів треба буде ще більше.
Переставимо. Підносимо обидві частини до квадрата: Δ2 ≥ 15.7 × σ2 ÷ n. Тепер множимо обидві частини на n і ділимо на Δ2 — обидва числа додатні, тож знак нерівності від цього не перевертається.
Головне в цій формулі — Δ стоїть у квадраті внизу. Захотів побачити вдвічі меншу різницю — плати вчетверо більше прогонів.
Підставимо наші числа. Хочемо надійно виявити різницю Δ = 0.02 — типова величина, якою пишаються в статтях.
| рецепт | σ | прогонів на мережу | прогонів разом | час одного, наш прогін | усього, наш прогін |
|---|---|---|---|---|---|
| обережний | 0.1258 | 622 | 1244 | 3-5 с | 1-1.5 год |
| сміливий | 0.0076 | 3 | 6 | 4-7 с | 26-40 с |
Тисяча двісті сорок чотири прогони — на нашій іграшковій задачі з мережею в чотирнадцять тисяч ваг і датасетом із 600 картинок. У нас це вийшло від години до півтори (скільки саме — залежить від того, наскільки зайнята машина; кількість прогонів від цього не залежить). Помнож це на реальну задачу, де одне навчання йде добу, і стане зрозуміло, чому в статтях рідко буває більш ніж один прогін на конфігурацію.
І зверни увагу на другий рядок. Той самий висновок про ту саму різницю коштує шість прогонів, якщо рецепт стабільний — у 207 разів дешевше, і це відношення від машини вже не залежить. Стабілізувати навчання дешевше, ніж купувати обчислення.
Ціна надійності
Повзунок задає різницю, яку ти хочеш надійно виявити. Крива показує, скільки прогонів для цього потрібно за формули з розділу. Перемикач міняє рецепт, тобто σ.
Десять роківЩо справді змінилося за десять років
Тепер, маючи мірило, подивимось на справжні архітектури. Ми зібрали девʼять із
них через torchvision без ваг — сама лише будова, нічого не
завантажуючи, — і порахували все самі. Точність узята з опису ваг у бібліотеці; це
чужий замір на ImageNet, і ми називаємо його чужим.
| архітектура | рік | параметрів | у згортках | у лінійних | згорткових шарів | час, мс | top-1, % |
|---|---|---|---|---|---|---|---|
| AlexNet | 2012 | 61 100 840 | 4.0 % | 96.0 % | 5 | 47.1 | 56.5 |
| VGG16 | 2014 | 138 357 544 | 10.6 % | 89.4 % | 13 | 430.8 | 71.6 |
| GoogLeNet | 2014 | 13 004 888 | 44.0 % | 55.9 % | 59 | 95.3 | 69.8 |
| ResNet18 | 2015 | 11 689 512 | 95.5 % | 4.4 % | 20 | 63.7 | 69.8 |
| ResNet50 | 2015 | 25 557 032 | 91.8 % | 8.0 % | 53 | 234.5 | 80.9 |
| Inception-v3 | 2015 | 27 161 264 | 89.5 % | 10.4 % | 96 | 313.6 | 77.3 |
| MobileNet-v2 | 2018 | 3 504 872 | 62.5 % | 36.5 % | 52 | 26.1 | 72.2 |
| EfficientNet-B0 | 2019 | 5 288 548 | 75.0 % | 24.2 % | 81 | 89.0 | 77.7 |
| MobileNet-v3-small | 2019 | 2 542 856 | 36.0 % | 63.5 % | 52 | 30.6 | 67.7 |
1. 13 004 888 у GoogLeNet включають два допоміжні класифікатори, які працюють лише під час навчання — у робочому режимі мережа має 6 624 904 ваги. Найкумедніше, що сама бібліотека відповідає на це питання по-різному: для GoogLeNet у метаданих записана мережа без допоміжних голів, а для Inception-v3 — із ними. Навіть «кількість параметрів» залежить від того, що саме рахувати.
2. Колонка часу заміряна на завантаженій машині в один потік. Абсолютні мілісекунди в тебе будуть інші, і навіть порядок може подекуди зʼїхати — робити з цієї колонки висновки про архітектури не можна.
3. У ResNet50 стоїть 80.9, а не 76.1, як у більшості таблиць. Це не інша мережа — це той самий ResNet50 із новим рецептом навчання. Бібліотека за замовчуванням віддає новіші ваги, і в одну колонку з рештою потрапляє число, здобуте іншим способом. Ось так непорівнянні числа й опиняються поруч.
Що з цієї таблиці видно, якщо читати її не як рейтинг, а як хроніку?
У AlexNet 96 % ваг сидить у трьох повнозвʼязних шарах наприкінці, у VGG16 — 89.4 %. У ResNet18 — 4.4 %. Це найбільша зміна десятиліття, і зробило її не поглиблення, а глобальне усереднення з теми 08, яке викинуло важку голову. Мережа стала вдванадцятеро легшою за VGG16 і при цьому не гіршою.
MobileNet-v2 і EfficientNet-B0 мають 52 і 81 згортковий шар при 3.5 і 5.3 мільйона ваг — у 12-17 разів менше за AlexNet із його пʼятьма шарами. Це роздільна згортка з теми 15: спершу «де», потім «що», окремими шарами.
Найнесподіваніший рядок таблиці — останній. У MobileNet-v3-small 63.5 % ваг знову сидить у лінійних шарах. Не тому, що хтось повернув голову VGG: голова там зовсім маленька, 1.6 мільйона. Просто тіло стиснули так сильно, що голова знову стала більшою його частиною. Частка — відносна величина, і читати її без абсолютних чисел не можна.
Таблиця з розділу 4: сучасний рецепт на ResNet50 дав +4.73 пункту. Перехід від ResNet50 до ResNet101 за старим рецептом — +1.24. Тобто частина того, що ми звикли приписувати «прогресу архітектур», насправді належить прогресу рецептів — і в жодній таблиці «архітектура → точність» цього не написано.
А чого не сталося? Точність не росла разом із глибиною й не росла разом із параметрами. VGG16 має в 39 разів більше ваг за MobileNet-v2 — і програє їй 0.6 пункту. Inception-v3 має 96 згорткових шарів проти 53 у ResNet50 — і теж програє, на 3.6 пункту. Щоправда, у другому випадку працює зовсім не архітектура: 80.9 — це число нового рецепта, а Inception-v3 у бібліотеці лишилась зі старим. Жодна колонка таблиці не пояснює точність сама по собі — і навіть колонка точності говорить не тільки про архітектуру.
Десять років одним поглядом
Девʼять архітектур на часовій осі. Перемикай мірку — і дивись, що саме змінювалось із роками, а що не змінювалось зовсім.
weights=None. Точність — чужий замір на ImageNet з опису ваг.ВибірЯк обирати на практиці
Настав час відповісти на питання з першого розділу. Відповідь не «ResNet50», але вона й не «залежить». Вона така: вибір визначається обмеженнями, а не рейтингом, і обмеження треба назвати вголос, перш ніж дивитися на будь-яку таблицю.
Три питання, які треба поставити собі в такому порядку:
Сотні — вибір архітектури майже нічого не вирішує, вирішує перенос навчання (тема 12) і аугментація (тема 10). Розділ 10 покаже це на вимірі. Десятки тисяч — архітектура починає важити, але рецепт усе ще важить більше. Мільйони — тоді й тільки тоді має сенс порівнювати архітектури всерйоз, і ти вже маєш обчислення на те, щоб зробити це чесно.
Сервер із відеокартою — бери що завгодно з родини ResNet, розмір мережі там рідко буває проблемою. Телефон або браузер — дивись у бік MobileNet-v3 та EfficientNet-B0; 30 кадрів за секунду означає 33 мілісекунди на кадр, і це жорсткий поріг. Мікроконтролер — жодна зі згаданих не влізе, треба своя маленька мережа, зібрана під конкретний бюджет.
Якщо є — це найдешевший приріст, який ти взагалі можеш дістати, і він майже завжди більший за різницю між архітектурами. Якщо немає (медичні знімки, радар, тепловізор), доведеться вчити з нуля, і тоді бюджет на рецепт треба закладати більший, ніж на вибір архітектури.
І остання порада, яка не залежить від відповідей: візьми дві-три кандидатури, а не десять. Кожна зайва кандидатура множиться на кількість прогонів із розділу 7. Десять архітектур, порівняних по одному прогону, дадуть тобі менше знання, ніж дві, порівняні по пʼять.
Дерево вибору
Три відповіді про твої обмеження — і рекомендація з поясненням, чому саме вона. Спробуй міняти по одній відповіді й дивитись, від якої з них рішення залежить найсильніше.
МежаКоли архітектура не має значення
Є ціла область задач, де все написане вище просто не спрацьовує — не тому, що воно неправильне, а тому, що вибір архітектури там узагалі не є важелем. Це задачі, де розмічених даних мало.
Перевіримо це на вимірі. Беремо ті самі три мережі, вчимо їх з нуля на різній кількості прикладів — і поруч ставимо четвертий варіант: залишкову мережу з чужим тілом. Тіло навчене на трьох інших класах фігур і заморожене, вчиться тільки голова. Це перенос навчання з теми 12.
| прикладів | широка | глибока | залишкова | перенос | розкид між архітектурами | виграш переносу |
|---|---|---|---|---|---|---|
| 36 | 0.172 | 0.167 | 0.175 | 0.702 | 0.008 | +0.527 |
| 180 | 0.308 | 0.370 | 0.550 | 0.725 | 0.242 | +0.175 |
| 600 | 0.890 | 0.655 | 0.965 | 0.743 | 0.310 | -0.222 |
Прочитай перший рядок уважно. При тридцяти шести розмічених прикладах усі три архітектури дали від 0.167 до 0.175 — тобто рівно рівень вгадування навмання (на шести класах це 0.167). Розкид між ними — 0.008. Не «маленька різниця», а порожнє місце: жодна з трьох не встигла вивчити нічого. А та сама залишкова мережа з чужим тілом дала 0.702. Одна дія додала більше половини точності, тоді як вибір між трьома архітектурами не додав нічого.
На 180 прикладах картина повертається: розкид між архітектурами вже 0.242, а перевага переносу впала до 0.175 — вони зрівнялись. А на 600 прикладах перенос уже програє 0.222: чуже заморожене тіло стало обмеженням, і залишкова мережа з нуля обходить його. Це та сама межа переносу, яку тема 12 знайшла на своїх даних.
Практичний висновок жорсткий: якщо в тебе сотні розмічених прикладів, вибір між ResNet і EfficientNet — не твоє питання. Твої питання — де взяти передтреновану модель і як розмножити наявні дані аугментацією (тема 10). Обидва дадуть тобі більше, ніж будь-який рядок будь-якої таблиці архітектур.
І симетрично: коли даних стає багато, перенос перестає допомагати, а різниця між архітектурами нарешті виходить із-під розкиду й стає видимою. Саме тому порівняння архітектур роблять на ImageNet із його мільйоном зображень, а не на твоєму датасеті з двохсот.
Коли архітектура не вирішує
Повзунок задає кількість розмічених прикладів. Три криві — архітектури, навчені з нуля; четверта, пунктирна — та сама залишкова мережа з чужим замороженим тілом.
ПідсумокПідсумок блоку 3
Шість тем блоку пройшли шлях від однієї мережі 2012 року до питання «як узагалі порівнювати мережі». Що з цього варто винести.
Глибина запрацювала, і разом із нею прийшла проблема: 96 % ваг AlexNet і 89.4 % ваг VGG16 сиділи в повнозвʼязній голові. VGG показала, що однорідність важливіша за винахідливість: один розмір ядра, повторений тринадцять разів, побив набір ручних рішень.
Глибше перестало працювати, і причина була не в перенавчанні. Скіп-зʼєднання коштує нуль параметрів і знімає обмеження. Заразом голову викинули: у ResNet18 в лінійному шарі лишилось 4.4 % ваг замість 89.4 %.
Питання змістилося з «краще» на «дешевше», і зʼясувалося, що «дешевше» означає три різні речі. Роздільна згортка розділила просторову й канальну роботу. Архітектуру навчилися не вигадувати, а шукати перебором.
Тема 16 питала, чи можна вчитися без розмітки, тема 17 — що саме мережа бачить усередині. Обидві про те, що архітектура — не єдина ручка, за яку можна тягнути.
І остання тема сказала неприємне: більшість того, що ми звикли приписувати архітектурам, належить рецептам навчання, а різниці менші за розкид від зерна взагалі не існують.
Що з блоку лишиться, коли зʼявиться наступне покоління мереж? Не назви й не рейтинги — вони застаріють. Лишаться три звички.
| звичка | у чому вона |
|---|---|
| рахувати, а не вгадувати | параметри, множення й час рахуються точно, і рахувати їх треба до того, як обирати |
| міряти розкид першим | без нього жодне число порівняння не має масштабу |
| називати умови | дані, рецепт, залізо, кількість прогонів — інакше твоє порівняння повторить чужу помилку |
Ці три звички переживуть будь-яку зміну архітектур, бо вони не про архітектури, а про те, як узагалі дізнаватися щось про моделі.
ДаліМісток до блоку 4
Усі девʼять архітектур із нашої таблиці — і AlexNet 2012 року, і EfficientNet 2019-го — побудовані на одному й тому самому припущенні. Воно зашите так глибоко, що ми перестали його помічати ще в темі 07: сусідні пікселі повʼязані, далекі — ні. Згортка дивиться у вікно 3×3 і не знає нічого про решту зображення; щоб побачити далекі звʼязки, їй потрібно нагромадити десятки шарів.
Це припущення виявилось надзвичайно вдалим — на ньому виросло все, що ми розібрали. Але воно лишається припущенням. Локальність — не властивість зображень, а наша ставка на те, що вони так влаштовані.
Наступний блок питає просте й незручне: а що буде, якщо цю ставку зняти? Якщо дозволити кожній частині зображення дивитися одразу на будь-яку іншу, без жодного вікна й без жодної локальності. Відповідь виявилась несподіваною й перевернула не лише компʼютерний зір.
Про це — блок 4, «Трансформери у зорі», і починається він із теми 19. Від згортки до уваги.