Порівняння архітектур

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

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

ПитанняПитання, з якого починається проєкт

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

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

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

Що знадобиться з попередніх тем. Числа з теми 13 (AlexNet і VGG), теми 14 (ResNet і скіп-зʼєднання) і теми 15 (Inception, MobileNet, EfficientNet). Ми не переказуватимемо їх, а зведемо докупи й переміряємо на одному стенді.

УмовиЩо взагалі порівнюють

Речення «архітектура A краща за архітектуру B» здається простим. Насправді воно приховує щонайменше чотири умови, і зміна будь-якої з них здатна перевернути результат.

Умова 1 · Точність на чому

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

Умова 2 · За яких даних

Скільки було розмічених прикладів. Мережа на 25 мільйонів ваг і мережа на 250 тисяч поводяться зовсім по-різному, коли прикладів тисяча, і майже однаково, коли їх мільйон. Розділ 10 покаже це на вимірі.

Умова 3 · За якого навчання

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

Умова 4 · На якому залізі

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

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

РозкидРозкид від зерна

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

Зерно ніяк не стосується архітектури. Мережа лишається тією самою, дані тими самими, рецепт тим самим. Змінюється тільки випадковість. Питання: наскільки відрізняється результат?

Ми взяли нашу залишкову мережу на шести фігурах 28×28 (тема 14), навчили її пʼять разів, змінюючи лише зерно, і зробили це двічі — двома різними рецептами.

рецепт5 прогонів, точність на перевірцінайгіршийнайкращийрозкид
обережний0.560 · 0.797 · 0.467 · 0.690 · 0.6500.4670.7970.330
сміливий0.970 · 0.977 · 0.977 · 0.973 · 0.9900.9700.9900.020

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

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

Друге, що видно з таблиці, ще важливіше: розкид сам залежить від рецепта. Обережний рецепт дав 0.330, сміливий — 0.020, у 16.5 раза менше. Причина проста: обережний рецепт не встигає довчити мережу, вона зупиняється десь на півдорозі — а де саме зупиниться, вирішує випадковість старту. Сміливий рецепт доводить усі пʼять прогонів до майже однакової точки.

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

Розкид від зерна

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

рецепт
розкид від зерна—
заявлена різниця—
різниця відносно розкиду—
Точність на 300 перевірочних фігурах, шість класів. Вгадування навмання дає 0.167. Пʼять зерен, один потік CPU.

ГоловнеРецепт проти архітектури

Тепер головний замір теми. Візьмемо дві різні архітектури й два різні рецепти й навчимо всі чотири комбінації. Архітектури — з теми 14: проста згорткова мережа з трьох блоків і така сама зі скіп-зʼєднаннями. Кількість ваг у них однакова до одиниці, різниця тільки в одному додаванні всередині блоку. Рецепти — ті самі обережний і сміливий з попереднього розділу. Кожна клітинка — середнє з трьох зерен.

точність на перевірцірецепт обережнийрецепт сміливийрізниця від рецепта
проста мережа0.5240.9910.467
залишкова мережа0.6080.9740.367
різниця від архітектури0.0830.017

Прочитай таблицю двічі. По горизонталі — що дала зміна рецепта при незмінній архітектурі: 0.467 і 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, у відсотках):

архітектурастарий рецептновий рецептприріст
ResNet5076.1380.86+4.73
ResNet10177.3781.89+4.51
ResNeXt50 32×4d77.6281.20+3.58
Wide ResNet50-278.4781.60+3.13
RegNet-Y-400MF74.0575.80+1.76
MobileNet-v3-large74.0475.27+1.23
EfficientNet-B178.6479.84+1.20

Подивись на перші два рядки разом. Перехід від ResNet50 до ResNet101 — це вдвічі глибша мережа, вдвічі більше обчислень — і +1.24 пункту за старим рецептом (76.13 → 77.37). Зміна рецепта на тій самій ResNet50 дала +4.73.

ResNet50 з новим рецептом = 80.86  >  ResNet101 зі старим = 77.37

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

Рецепт проти архітектури

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

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

РесурсиТри ресурси, які не збігаються

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

Слово «дешевше» означає три різні величини: параметри (скільки чисел зберігати, тобто вага файлу), множення (скільки арифметики на одне зображення) і час (скільки мілісекунд насправді). Вони не збігаються. AlexNet стоїть другим за параметрами серед девʼяти архітектур і сьомим за часом. Роздільна згортка економить у 8.8 раза за параметрами й лише в 4.5 раза за часом.

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

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

БюджетОднаковий бюджет чого?

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

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

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

обмеженняширокаглибоказалишковапопередувідривмірило
однакові параметри0.8590.5660.882залишкова0.0230.157
однаковий час0.9680.2970.591широка0.3770.083
однакові епохи0.8730.5610.866широка0.0080.197

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

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

Тепер прикладемо мірило, і саме тут починається цікаве. За однакової кількості ваг відрив 0.023 менший за розкид 0.157 — переможця не виявлено. За однакової кількості епох відрив 0.008 при розкиді 0.197 — знову не виявлено: широка й залишкова нерозрізнимі.

А от третій рядок — справжній, і його відрив величезний: 0.377 при мірилі 0.083. Але подивись, із чого він зроблений. За ті самі три секунди широка встигла 19 епох, залишкова — 7, глибока — 8. Вони не гірші, вони недовчені: 0.591 і 0.297 — це мережі, зупинені на півдорозі.

Ось і вся суть розділу. Ті самі дві мережі — широка й залишкова — за однакової кількості епох нерозрізнимі (0.873 проти 0.866), а за однакового часу різняться на 0.377. Одна й та сама пара, ті самі дані, той самий рецепт. Змінилося лише слово, яким ми назвали «однакові умови». Тому будь-яке порівняння, де не сказано, чого було порівну, не має відповіді — воно має стільки відповідей, скільки бюджетів можна вигадати.
Застереження до рядка «однаковий час». Скільки епох вміститься в три секунди, залежить від того, наскільки завантажена машина. Числа цього рядка в тебе будуть інші — стійке тут лише те, що дешевша мережа встигає більше, і що це переважує різницю в будові.

Глибока мережа програє скрізь, і це не випадковість, а вже знайоме явище: пʼять блоків без скіп-зʼєднань — це одинадцять згорткових шарів, на яких починається деградація з теми 14. Її прогони й розкидані найсильніше — від 0.183 до 0.853 в одному рядку.

Однаковий бюджет

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

що зрівнюємо
переможець—
відрив від другого—
що дісталося кожній—
Шість класів фігур 28×28, 600 навчальних і 300 перевірочних зображень, три зерна на кожну клітинку, один потік CPU.

ЦінаСкільки коштує чесне порівняння

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

Крок 1 · Один прогін гуляє

Пʼять прогонів обережного рецепта дали 0.560, 0.797, 0.467, 0.690, 0.650. Їхнє середнє — 0.633, а типове відхилення від нього — 0.126. Цю величину позначають грецькою літерою σ («сигма») і звуть стандартним відхиленням; вона просто відповідає на питання «наскільки далеко від середнього зазвичай падає один прогін».

Крок 2 · Середнє гуляє менше

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

гуляння середнього = σ ÷ √n
Крок 3 · Ми порівнюємо два середні

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

гуляння різниці = 1.41 × σ ÷ √n
Крок 4 · Скільки потрібно запасу

Щоб різницю можна було впевнено назвати справжньою, вона має бути приблизно в 2.8 раза більшою за це гуляння. Число 2.8 — стандартний запас: він відповідає вимозі «не більше 5 % хибних тривог і не менше 80 % шансів побачити справжню різницю». Можна брати суворіший запас, тоді прогонів треба буде ще більше.

Δ ≥ 2.8 × √2 × σ ÷ √n   тобто   Δ ≥ 3.96 × σ ÷ √n
Крок 5 · Виражаємо n

Переставимо. Підносимо обидві частини до квадрата: Δ2 ≥ 15.7 × σ2 ÷ n. Тепер множимо обидві частини на n і ділимо на Δ2 — обидва числа додатні, тож знак нерівності від цього не перевертається.

n ≥ 15.7 × σ2 ÷ Δ2

Головне в цій формулі — Δ стоїть у квадраті внизу. Захотів побачити вдвічі меншу різницю — плати вчетверо більше прогонів.

Підставимо наші числа. Хочемо надійно виявити різницю Δ = 0.02 — типова величина, якою пишаються в статтях.

рецептσпрогонів на мережупрогонів разомчас одного, наш прогінусього, наш прогін
обережний0.125862212443-5 с1-1.5 год
сміливий0.0076364-7 с26-40 с

Тисяча двісті сорок чотири прогони — на нашій іграшковій задачі з мережею в чотирнадцять тисяч ваг і датасетом із 600 картинок. У нас це вийшло від години до півтори (скільки саме — залежить від того, наскільки зайнята машина; кількість прогонів від цього не залежить). Помнож це на реальну задачу, де одне навчання йде добу, і стане зрозуміло, чому в статтях рідко буває більш ніж один прогін на конфігурацію.

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

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

Ціна надійності

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

рецепт (звідси σ)
прогонів на мережу—
прогонів разом—
сумарний час на нашій задачі—
Час рахується за нашими замірами: близько 3.1 с на прогін обережним рецептом і 4.4 с сміливим, один потік CPU без відеокарти. Менше двох прогонів формула не радить: за одним прогоном розкид не поміряти.

Десять роківЩо справді змінилося за десять років

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

архітектурарікпараметріву згорткаху лінійнихзгорткових шарівчас, мсtop-1, %
AlexNet201261 100 8404.0 %96.0 %547.156.5
VGG162014138 357 54410.6 %89.4 %13430.871.6
GoogLeNet201413 004 88844.0 %55.9 %5995.369.8
ResNet18201511 689 51295.5 %4.4 %2063.769.8
ResNet50201525 557 03291.8 %8.0 %53234.580.9
Inception-v3201527 161 26489.5 %10.4 %96313.677.3
MobileNet-v220183 504 87262.5 %36.5 %5226.172.2
EfficientNet-B020195 288 54875.0 %24.2 %8189.077.7
MobileNet-v3-small20192 542 85636.0 %63.5 %5230.667.7
Три застороги до таблиці, і кожна повчальна.
1. 13 004 888 у GoogLeNet включають два допоміжні класифікатори, які працюють лише під час навчання — у робочому режимі мережа має 6 624 904 ваги. Найкумедніше, що сама бібліотека відповідає на це питання по-різному: для GoogLeNet у метаданих записана мережа без допоміжних голів, а для Inception-v3 — із ними. Навіть «кількість параметрів» залежить від того, що саме рахувати.
2. Колонка часу заміряна на завантаженій машині в один потік. Абсолютні мілісекунди в тебе будуть інші, і навіть порядок може подекуди зʼїхати — робити з цієї колонки висновки про архітектури не можна.
3. У ResNet50 стоїть 80.9, а не 76.1, як у більшості таблиць. Це не інша мережа — це той самий ResNet50 із новим рецептом навчання. Бібліотека за замовчуванням віддає новіші ваги, і в одну колонку з рештою потрапляє число, здобуте іншим способом. Ось так непорівнянні числа й опиняються поруч.

Що з цієї таблиці видно, якщо читати її не як рейтинг, а як хроніку?

Зміна 1 · Ваги переїхали з голови в тіло

У AlexNet 96 % ваг сидить у трьох повнозвʼязних шарах наприкінці, у VGG16 — 89.4 %. У ResNet18 — 4.4 %. Це найбільша зміна десятиліття, і зробило її не поглиблення, а глобальне усереднення з теми 08, яке викинуло важку голову. Мережа стала вдванадцятеро легшою за VGG16 і при цьому не гіршою.

Зміна 2 · Просторова й канальна згортки розʼїхались

MobileNet-v2 і EfficientNet-B0 мають 52 і 81 згортковий шар при 3.5 і 5.3 мільйона ваг — у 12-17 разів менше за AlexNet із його пʼятьма шарами. Це роздільна згортка з теми 15: спершу «де», потім «що», окремими шарами.

Зміна 3 · Голова повернулась — у найменших

Найнесподіваніший рядок таблиці — останній. У MobileNet-v3-small 63.5 % ваг знову сидить у лінійних шарах. Не тому, що хтось повернув голову VGG: голова там зовсім маленька, 1.6 мільйона. Просто тіло стиснули так сильно, що голова знову стала більшою його частиною. Частка — відносна величина, і читати її без абсолютних чисел не можна.

Зміна 4 · Рецепти додали більше, ніж деякі архітектурні ідеї

Таблиця з розділу 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 у бібліотеці лишилась зі старим. Жодна колонка таблиці не пояснює точність сама по собі — і навіть колонка точності говорить не тільки про архітектуру.

Десять років одним поглядом

Девʼять архітектур на часовій осі. Перемикай мірку — і дивись, що саме змінювалось із роками, а що не змінювалось зовсім.

мірка
перше значення (2012)—
останнє (2019)—
найбільше й найменше—
Параметри, частки й кількість шарів пораховані нами через weights=None. Точність — чужий замір на ImageNet з опису ваг.

ВибірЯк обирати на практиці

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

Три питання, які треба поставити собі в такому порядку:

Питання 1 · Скільки в тебе розмічених прикладів

Сотні — вибір архітектури майже нічого не вирішує, вирішує перенос навчання (тема 12) і аугментація (тема 10). Розділ 10 покаже це на вимірі. Десятки тисяч — архітектура починає важити, але рецепт усе ще важить більше. Мільйони — тоді й тільки тоді має сенс порівнювати архітектури всерйоз, і ти вже маєш обчислення на те, щоб зробити це чесно.

Питання 2 · Де це працюватиме і скільки має вкластися в кадр

Сервер із відеокартою — бери що завгодно з родини ResNet, розмір мережі там рідко буває проблемою. Телефон або браузер — дивись у бік MobileNet-v3 та EfficientNet-B0; 30 кадрів за секунду означає 33 мілісекунди на кадр, і це жорсткий поріг. Мікроконтролер — жодна зі згаданих не влізе, треба своя маленька мережа, зібрана під конкретний бюджет.

Питання 3 · Чи є передтренована модель на схожих даних

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

І остання порада, яка не залежить від відповідей: візьми дві-три кандидатури, а не десять. Кожна зайва кандидатура множиться на кількість прогонів із розділу 7. Десять архітектур, порівняних по одному прогону, дадуть тобі менше знання, ніж дві, порівняні по пʼять.

Дерево вибору

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

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

МежаКоли архітектура не має значення

Є ціла область задач, де все написане вище просто не спрацьовує — не тому, що воно неправильне, а тому, що вибір архітектури там узагалі не є важелем. Це задачі, де розмічених даних мало.

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

прикладівширокаглибоказалишковапереносрозкид між архітектурамивиграш переносу
360.1720.1670.1750.7020.008+0.527
1800.3080.3700.5500.7250.242+0.175
6000.8900.6550.9650.7430.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 із його мільйоном зображень, а не на твоєму датасеті з двохсот.

Коли архітектура не вирішує

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

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

ПідсумокПідсумок блоку 3

Шість тем блоку пройшли шлях від однієї мережі 2012 року до питання «як узагалі порівнювати мережі». Що з цього варто винести.

13 · AlexNet і VGG

Глибина запрацювала, і разом із нею прийшла проблема: 96 % ваг AlexNet і 89.4 % ваг VGG16 сиділи в повнозвʼязній голові. VGG показала, що однорідність важливіша за винахідливість: один розмір ядра, повторений тринадцять разів, побив набір ручних рішень.

14 · ResNet

Глибше перестало працювати, і причина була не в перенавчанні. Скіп-зʼєднання коштує нуль параметрів і знімає обмеження. Заразом голову викинули: у ResNet18 в лінійному шарі лишилось 4.4 % ваг замість 89.4 %.

15 · Ефективні архітектури

Питання змістилося з «краще» на «дешевше», і зʼясувалося, що «дешевше» означає три різні речі. Роздільна згортка розділила просторову й канальну роботу. Архітектуру навчилися не вигадувати, а шукати перебором.

16-17 · Що всередині

Тема 16 питала, чи можна вчитися без розмітки, тема 17 — що саме мережа бачить усередині. Обидві про те, що архітектура — не єдина ручка, за яку можна тягнути.

18 · Порівняння

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

Що з блоку лишиться, коли зʼявиться наступне покоління мереж? Не назви й не рейтинги — вони застаріють. Лишаться три звички.

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

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

ДаліМісток до блоку 4

Усі девʼять архітектур із нашої таблиці — і AlexNet 2012 року, і EfficientNet 2019-го — побудовані на одному й тому самому припущенні. Воно зашите так глибоко, що ми перестали його помічати ще в темі 07: сусідні пікселі повʼязані, далекі — ні. Згортка дивиться у вікно 3×3 і не знає нічого про решту зображення; щоб побачити далекі звʼязки, їй потрібно нагромадити десятки шарів.

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

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

Про це — блок 4, «Трансформери у зорі», і починається він із теми 19. Від згортки до уваги.