Чи лопнув міхур машинного навчання, чи початок нової зорі

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

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

Для початку поговоримо, що було бустером цієї кривої. Звідки вона взялася. Напевно, всі згадають перемогу машинного навчання у 2012 році на конкурсі ImageNet. Адже це перша глобальна подія! Але насправді це не так. Та й зростання кривої починається дещо раніше. Я розбив би його на кілька моментів.

  1. 2008 це поява терміна "великі дані". Реальні продукти розпочали з'являтися з 2010 року. Великі дані безпосередньо пов'язані з машинним навчанням. Без великих даних неможлива стабільна робота алгоритмів, які існували на той момент. І це не нейронні мережі. До 2012 року нейронні мережі — це доля маргінальної меншості. Натомість тоді почали працювати зовсім інші алгоритми, які існували вже роки, а то й десятиліття: SVM(1963,1993 роки), Випадковий ліс (1995) AdaBoost (2003),… Стартапи тих років насамперед пов'язані з автоматичною обробкою структурованих даних: каси, користувачі, реклама, багато іншого.

    Похідна цієї першої хвилі - набір фреймворків, таких як XGBoost, CatBoost, LightGBM і т.д.

  2. У 2011-2012 роках свёрточние нейронні мережі виграли низку конкурсів із розпізнавання зображень. Реальне їх використання дещо затяглося. Я б сказав, що масово осмислені стартапи і рішення почали з'являтися з 2014 року. Два роки знадобилося щоб переварити що нейронки все-таки працюють, зробити зручні фреймворки, які можна було поставити і запустити за розумний час, розробити методи, які б стабілізували і прискорили час сходження.

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

  3. 2015-2017 роки. Бум алгоритмів та проектів зав'язаних на рекурентні мережі або їх аналоги (LSTM, GRU, TransformerNet тощо). З'явилися алгоритми, що добре працюють, «мова-в-текст», системи машинного перекладу. Частково вони засновані на згорткових мережах для виділення базових фіч. Частково на тому, що навчилися збирати реально великі і хороші датасети.

Чи лопнув міхур машинного навчання, чи початок нової зорі

“Бульбашка луснула? Хайп перегрітий? Вони померли як блокчейн?
А то ж! Завтра у телефоні перестане працювати Сірі, а післязавтра Тесла не відрізнить поворот від кенгуру.

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

Чи лопнув міхур машинного навчання, чи початок нової зорі

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

  • Виробничі компанії інтегрують алгоритми аналізу шлюбу на конвеєрі.
  • Тваринницькі господарства купують системи контролю корів.
  • Автоматичні комбайни.
  • Автоматизовані Call-центри.
  • Фільтри в SnapChat. (ну хоч щось слушне!)

Але головне, і не найочевидніше: "Нових ідей більше немає, або вони не принесуть миттєвого капіталу". Нейронні мережі вирішили десятки проблем. І вирішать ще більше. Всі очевидні ідеї, які були — породили безліч стартапів. Але все, що було на поверхні, вже зібрали. За останні два роки я не зустрічав жодної нової ідеї для застосування нейронних мереж. Жодного нового підходу (ну, ок, там трохи з GAN-ами є проблем).

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

Як результат – стартапів стає менше. А ось продакшна більше. Потрібно зробити розпізнавання автомобільних номерів? На ринку сотні спеціалістів із релевантним досвідом. Можна найняти і за кілька місяців ваш співробітник зробить систему. Або купити готову. Але робити новий стартап?.. Безумство!

Потрібно створити систему трекінгу відвідувачів - навіщо платити за купу ліцензій, коли можна за 3-4 місяці зробити свою, заточити її для свого бізнесу.

Зараз нейронні мережі проходять той же шлях, який пройшли десятки інших технологій.

Пам'ятаєте, як змінювалося з 1995 року поняття «розробник сайтів»? Поки що ринок не насичений фахівцями. Фахівців дуже мало. Але я можу посперечатися, що через 5-10 років не буде особливої ​​різниці між програмістом Java та розробником нейронних мереж. І тих, і тих фахівців буде достатньо на ринку.

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

"А що далі? Де обіцяний штучний інтелект?

А ось тут є невелика, але цікава незрозуміла:)

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

Обмеження

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


Є багато інших фахівцівякі оцінюють це як 5-10 років.

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

перша проблема

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

Причому одного прикладу не вистачить. Сотні? Тисячі?

Чи лопнув міхур машинного навчання, чи початок нової зорі

друга проблема

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

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

Чи лопнув міхур машинного навчання, чи початок нової зорі

Ну і так, старий добрий набір з подивися що у сітки всередині фільтрах». Ці картинки були популярні роки 3-4 тому, але всі швидко зрозуміли, що картинки щось красиві, та сенсу в них не багато.

Чи лопнув міхур машинного навчання, чи початок нової зорі

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

Чи лопнув міхур машинного навчання, чи початок нової зорі

Можете переглянути будь-який конкурс на Kaggle. І опис того, як народ фінальні рішення робить. Ми настали 100-500-800 мульйонів моделок і воно запрацювало!

Я, звісно, ​​утрирую. Але швидких та прямих відповідей ці підходи не дають.

Маючи достатній досвід, потикавши різні варіанти можна видати вердикт про те, чому ваша система прийняла таке рішення. Але виправити поведінку системи буде складно. Поставити милицю, пересунути поріг, додати датасет, взяти іншу backend-мережу.

Третя проблема

Третя фундаментальна проблема сітки вчать не логіку, а статистику. Статистично це особа:

Чи лопнув міхур машинного навчання, чи початок нової зорі

Логічно – не дуже схоже. Нейронні мережі не вчать щось складне, якщо не змушують. Вони завжди вчать максимально прості ознаки. Чи є очі, ніс, голова? Значить, це обличчя! Або наводь приклад де очі не означатимуть обличчя. І знову мільйони прикладів.

Внизу є багато місця

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

Це кінець? Нейронні мережі встали?

Невідомо. Але, звісно, ​​всі сподіваються, що ні.

Є багато підходів та напрямків до вирішення тих фундаментальних проблем, які я висвітлив вище. Але поки що жоден із цих підходів не дозволив зробити щось фундаментально нове, вирішити щось, що досі не вирішувалося. Поки всі фундаментальні проекти робляться на основі стабільних підходів (Tesla), або залишаються тестовими проектами інститутів або корпорацій (Google Brain, OpenAI).

Якщо говорити грубо, основний напрямок — створення деякого високорівневого представлення вхідних даних. У якомусь сенсі “пам'яті”. Найпростіший приклад пам'яті – це різні “Embedding” – уявлення зображень. Ну, наприклад, усі системи розпізнавання облич. Мережа вчиться отримати з особи деяке стабільне уявлення, яке не залежить від повороту, освітлення, дозволу. По суті мережа мінімізує метрику "різні особи - далеко" і "однакові - близько".

Чи лопнув міхур машинного навчання, чи початок нової зорі

Для такого навчання потрібні десятки та сотні тисяч прикладів. Проте результат несе деякі зачатки “One-shot Learning”. Тепер нам не потрібно сотні осіб, щоб запам'ятати людину. Лише одна особа, і все — ми дізнаємося!
Тільки ось проблемка ... Сітка може вивчити тільки досить прості об'єкти. При спробі розрізняти не обличчя, а, наприклад, людей по одязі (завдання Re-indentification) - Якість провалюється на багато порядків. І мережа не може вивчити досить очевидні зміни ракурсів.

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

Є роботи із значного зменшення виборів. Наприклад, відразу можна згадати одну з перших робіт з OneShot Learning від гугла:

Чи лопнув міхур машинного навчання, чи початок нової зорі

Таких робіт багато, наприклад 1 або 2 або 3.

Мінус один — зазвичай навчання непогано працює на якихось простих, “MNIST'івських прикладах”. А при переході до складних завдань — потрібна велика база, модель об'єктів чи якась магія.
Взагалі роботи з One-Shot навчання – це дуже цікава тема. Багато ідей ти знаходиш. Але здебільшого ті дві проблеми, які я перерахував (перевищення на величезному датасеті / нестабільність на складних даних) — дуже заважають навчанню.

З іншого боку, до теми Embedding підходять GAN — генеративно змагальні мережі. Ви, напевно, читали на Хабре купу статей на цю тему. (1, 2,3)
Особливістю GAN є формування деякого внутрішнього простору станів (по суті того ж таки Embedding), яке дозволяє намалювати зображення. Це можуть бути особи, можуть бути дії.

Чи лопнув міхур машинного навчання, чи початок нової зорі

Проблема GAN — чим складніше об'єкт, що генерується, тим складніше описувати його в логіці “генератор-дискримінатор”. У результаті реальних застосувань GAN, які на слуху -тільки DeepFake, який знову ж таки, маніпулює з уявленнями осіб (для яких існує величезна база).

Інших корисних застосувань я зустрічав дуже мало. Зазвичай якісь свистелки-перделки з домальовування картинок.

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

Підсилення навчання - Це захід зовсім з іншого боку. Напевно ви пам'ятаєте як Google обіграв усіх у Go. Нещодавні перемоги в Starcraft та Dota. Але тут все далеко не так райдужно та перспективно. Найкраще про RL та його складності розповідає ця стаття.

Якщо коротко підсумувати, що писав автор:

  • Моделі з коробки не підходять / працюють у більшості випадків погано
  • Практичні завдання найпростіше вирішити іншими способами. Boston Dynamics не використовує RL через його складність/непередбачуваність/складність обчислень
  • Щоб RL запрацював, потрібна складна функція. Найчастіше її складно створити/написати
  • Важко навчати моделі. Доводиться витрачати купу часу, щоб розкачати і вивести з локальних оптимумів.
  • Як наслідок — складно повторити модель, нестійкість моделі за найменших змін
  • Часто оверфітується на якісь ліві закономірності, аж до генератора випадкових чисел

Ключовий момент — RL поки що не працює у продакшні. У гугла є якісь експерименти ( 1, 2 ). Але я не бачив жодної продуктової системи.

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

Найвідоміша та найпопулярніша стаття - Від DeepMind:

Чи лопнув міхур машинного навчання, чи початок нової зорі

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

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

Або, якби було безліч даних, то можна було б навчити одну мережу на всілякі результати (очевидно, що такий масив даних набрати не можна).

Дизентелгмент підхід каже нам — а давайте навчати мережу так, щоб вона сама змогла розрізняти поняття. Щоб вона по відео сформувала ембединг, де одна область визначала б дію, одна – позицію на підлозі у часі, одна – зростання людини, а ще одна – її стать. При цьому під час навчання хотілося б майже не підказувати мережі такі ключові поняття, а щоб вона сама виділяла та групувала області. Таких статей досить мало (деякі з них 1, 2, 3) і загалом вони досить теоретичні.

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

Чи лопнув міхур машинного навчання, чи початок нової зорі

Розкладання зображення за параметрами "колір стін/колір підлоги/форма об'єкта/колір об'єкта/т.д."

Чи лопнув міхур машинного навчання, чи початок нової зорі

Розкладання особи за параметрами "розмір, брови, орієнтація, колір шкіри, і.т.д."

Інше

Є багато інших не стільки глобальних напрямів, які дозволяють якось зменшувати бази, працювати з різнорідними даними, і.т.д.

Увага. Напевно, немає сенсу виділяти це як окремий метод. Просто підхід, який посилює інші. Йому присвячено багато статей (1,2,3). Сенс Attention у тому, щоб посилити у мережі реакцію саме на значні об'єкти під час навчання. Найчастіше якимось зовнішнім цілевказівкою, або невеликою зовнішньою мережею.

3Д-симуляція. Якщо зробити хороший 3д движок, їм часто можна закрити 90% навчальних даних (я навіть бачив приклад коли майже 99% даних закривалося хорошим движком). Є багато ідей і хаків як змусити мережу навчену на 3д движку працювати за реальними даними (Fine tuning, style transfer, і т.д.). Але найчастіше зробити хороший двигун - на кілька порядків складніше, ніж набрати дані. Приклади коли робили двигуни:
Навчання роботів (google, braingarden)
Навчання розпізнавання товарів у магазині (але у двох проектах, які ми робили — ми спокійно обходилися без цього).
Навчання у Tesla (знову ж те відео що було вище).

Висновки

Вся стаття це у певному сенсі висновки. Напевно, основний посил, який я хотів зробити — «халява скінчилася, нейронки не дають більше простих рішень». Тепер треба працювати складні рішення. Або працювати роблячи складні наукові ресурси.

А загалом тема дискутабельна. Може читачі мають більш цікаві приклади?

Джерело: habr.com

Додати коментар або відгук