Деконструкція міфу про глибокому навчанні. Лекція в Яндексі

Оптимізм з приводу нейронних мереж поділяють не всі — або, принаймні, рівень такого оптимізму буває різним. Старший викладач факультету комп'ютерних наук ВШЕ Сергій Бартунов згоден, що нейромережева область зараз на підйомі. З іншого боку, він хоче внести деяку ясність в те, що відбувається, визначити реальний потенціал нейромереж. Незалежно від точки зору доповідача, глибоке навчання і правда не проникає в нашу сферу зовсім вже стрімкими темпами. Традиційні методи навчання все ще працюють, і не обов'язково будуть витіснені машинним інтелектом в найближчій майбутньому.


Під катом — розшифровка лекції та частина слайдів Сергія.



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

Така увага може бути вельми корисним з точки зору фінансування досліджень, якихось стартапів. Але ще воно стимулює зростання очікувань, частина з яких відверто малоадекватны, і навколо глибокого навчання надувається пузир.

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

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

Ще в цьому міфі є свої герої, які здійснюють великі епічні подвиги.



У цьому міфі є і самі великі подвиги вони залишаються в історії і розповідають один одному з уст в уста.



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

Нарешті, у цього міфу є свої послідовники, які обрали служіння культу замість об'єктивної реальності.



Давайте поговоримо про те, що таке глибоке навчання в масовій свідомості. По-перше — абсолютно нова технологія, аналогів якої раніше не було.

По-друге — спроба відтворити принципи роботи людського мозку або навіть перевершити їх.

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



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



Інший хороший приклад — рекурентні мережі. Відома модель seq to seq, sequence to sequence learning, що дозволяє, наприклад, здійснювати машинний переклад або будувати діалогові системи. Вона теж наробила багато шуму. Коли я читав приклади філософських діалогів з цією системою, у мене холодок пробіг по спині, тому що приклад зі статті має якийсь сенс. І знову багато заговорили, що ми наближаємося до якогось штучного інтелекту, і теж виникло відчуття, що мова йде про щось зовсім нове.

Це дійсно була нова модель, нова нейромережева архітектура, і результат, по суті, унікальний. Однак можна помітити, що складові цієї мережі, які відповідають за розпізнавання, скажімо, вхідного питання і за генерацію відповіді, являють собою досить давно відому рекуррентную архітектуру, і відома вона як long short-term memory або LSTM. Запропонована вона була аж у 1997 році — майже 20 років тому.

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

Цікаво, що це історичний результат, але також вірно і інше: частина цієї системи, безпосередньо відповідає за інтелект, за прийняття рішень, за принципи Q-learning, була запропонована аж у 1989 році в дисертації, по-моєму, Крістофера Уоткінса.



Що ж змінилося за ці 20 років? Чому колись нейромережі були технологією-аутсайдером, кожен жартував і знущався над дослідниками в цій області, а тепер все трошки навпаки?

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

Стало більше даних. Згаданий конкурс ImageNet і набір даних, для нього складається із 14 мільйонів розмічених об'єктів в 21 тисячу категорій. Об'єкти розмічені людьми. Хоча цей дата-сет створювався лише для однієї задачі, для класифікації зображень, завдяки йому з'явилися такі класні програми, як Prisma, перенесення стилів, і напевно ще витягнутий не весь потенціал. Був необхідний якісний перехід в наявності навчальних даних.

Нарешті, банально накопичився якийсь досвід в області машинного навчання. Наприклад, з'явилися роботи про те, як такі мережі правильно навчати і ініціалізувати; з'явилося більше розуміння того, як вони насправді влаштовані і працюють.



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

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



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

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

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

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

Як не дивно, саме такий чорний ящик відносно рідко використовується в практичних додатках.



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

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

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

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

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

А ось приклад сверточной мережі, яка показує одні з найкращих на даний момент результатів у конкурсі ImageNet. Це Inception-ResNet. Блок, позначений червоним, насправді виглядає так. Наступний блок виглядає так, і наступний.

Inception-ResNet має дуже складну структуру. Не цілком зрозуміло, навіщо тут потрібні такі асиметрії, така складна зв'язність між елементами мережі. І тут ми використовуємо ще більше апріорного знання вже навіть не тільки про розв'язуваної задачі, але і про метод навчання, який ми використовуємо, щоб цю мережу налаштувати. Тут ми прокидываем короткі зв'язку між шарами. Вони минуть кілька шарів мережі, щоб градієнти краще поширилися в обхід проміжного кількості шарів. Тут ми використовуємо так званий принцип залишкового навчання — припускаємо, що кожен наступний шар не просто змінює вхід попереднього, а намагається скоригувати, виправити помилки, допущені до нього. Тут дуже багато апріорних припущень.

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

В глибокому навчанні стався рівень підвищення абстракції апріорних припущень. Якщо раніше ми кодували ознаки вручну, то тепер ми приблизно знаємо, як повинні бути влаштовані цікаві нам ознаки, а выучатся вони самі. Але у нас як і раніше немає чорного ящика, який вирішить за нас все.

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



Також існує цікавий теза, що нейромережі працюють краще, ніж людина. Для частини завдань це так. На тому ж конкурсі ImageNet є кілька категорій, де у нейромереж точність вище, ніж у деяких людей.

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

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

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



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

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

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

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

Цікаво, що це дещо нагадує модель model-view-controller, яка іноді зустрічається в програмуванні. Може, звідси щось слід.



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

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

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

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



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

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

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

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

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

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

Якщо ми розібралися, що, можливо, глибоке навчання — не срібна куля і все одно там є до чого прагнути і куди розвиватися, то давайте поговоримо про інше. Що може прийти на зміну нейросетям і парадигмі дифференцируемого програмування в цілому?

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

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

Також повинна бути можливість універсально навчати потрібні моделі на великих даних.



У мене немає часу поговорити про одного з кандидатів, способых з часом замінити глибоке навчання. Дмитро Петрович зробив невеликий enter. Це може бути ймовірнісний програмування, це можуть бути імовірнісні моделі, в яких ми будемо автоматично виконувати висновок. Гіпотетично вони володіють всіма трьома властивостями, крім одного: зараз немає способу вигадати універсальний і швидкий алгоритм навчання для довільно складної імовірнісної моделі. Можливо, з використанням того ж нейробайесовского підходу вдасться це зробити.

Одну хвилину поговорю про роль великих даних. Давайте на мить забудемо про ImageNet. Згадаймо два приклади: DQN і AlphaGo. Цікаво те, що зазначені системи навчалися на симулированных даних. У випадку з DQN використовувалися знімки з емулятора комп'ютерних ігор, запуск якого набагато дешевше, ніж, наприклад, запуск робота в реальному світі. Якщо 10 млн віртуальних навчальних об'єктів ми можемо зібрати, то зібрати 10 млн реальних навчальних об'єктів набагато складніше, особливо якщо мова йде про стан якоїсь фізичної системи.

І AlphaGo крім розміченого (нерозбірливо — прим. ред.) використала 30 млн позицій, отриманих в ході гри системи з самою собою. Це дуже важливі ідеї, оскільки саме вони дозволили зібрати ефективну навчальну вибірку і навчити настільки складну модель.

Наступний прорив може коштувати дорого. В наступній предметної області, яка буде вирішена» нейромережами, теж повинно бути багато навчальних вибірок. Якщо ви хочете побудувати дуже досконалого чат-бота, вам десь треба знайти навчальну вибірку. І, можливо, вам доведеться вкласти багато грошей в її розмітку.



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

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

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.