Наскоро излезе , която добре показва тенденцията в машинното обучение през последните години. Накратко: броят на стартъпите в областта на машинното обучение рязко спадна през последните две години.

Е, какво. Нека разгледаме "избухна ли балонът", "как да продължим напред" и да говорим откъде изобщо се появи този проблем.
Първо, да поговорим какво беше катализатор на тази крива. Откъде произхожда тя. Сигурно всички си спомнят в машинното обучение през 2012 година на конкурса ImageNet. Ние знаем, че това е първото глобално събитие! Но всъщност не е така. А и растежът на кривата започва малко по-рано. Бих разделил това на няколко момента.
- 2008 година е годината, в която се появява терминът "големи данни". Реалните продукти започнаха от 2010 година. Големите данни са пряко свързани с машинното обучение. Без големи данни е невъзможно стабилното функциониране на алгоритмите, които съществуваха по това време. И това не са невронни мрежи. До 2012 година невронните мрежи бяха преобладаващо в ръцете на маргиналното малцинство. Вместо това, тогава започнаха да работят съвсем различни алгоритми, които съществуваха години или дори десетилетия: (1963, 1993 години), (1995), (2003),… Стартъпите от онези години предимно се свързваха с автоматична обработка на структурирани данни: каси, потребители, реклама и много друго.
Производната на тази първа вълна — набор от фреймуоркове, като XGBoost, CatBoost, LightGBM и т.н.
- През 2011-2012 година спечелиха редица конкурси по разпознаване на изображения. Реалното им използване отне известно време. Бих казал, че масово осмислените стартъпи и решения започнаха да се появяват от 2014 година. Две години бяха необходими, за да се усвои, че невронките все пак работят, да се създадат удобни фреймуоркове, които могат да се инсталират и стартират за разумно време, да се разработят методи, които стабилизират и ускоряват времето за сближаване.
Конволюционните мрежи позволиха решаването на задачи в машинното зрение: класификация на изображения и обекти на изображение, откриване на обекти, разпознаване на предмети и хора, подобряване на изображения и т.н.
- 2015-2017 година. Бум на алгоритми и проекти, свързани с рекурентни мрежи или техните аналози (LSTM, GRU, TransformerNet и т.н.). Появиха се добре работещи алгоритми за "говор-в-текст", системи за машинен превод. Частично те са основани на конволюционни мрежи за извличане на основни характеристики. Частично на това, че научихме да събираме наистина големи и качествени датасети.

"Буквално балонът се спука? Хайпът прегря? Те умряха като блокчейн?"
Ами да! Утре Сири в телефона ви спира да работи, а вдругиден Тесла няма да разпознае завой от кенгуру.
Невронните мрежи вече работят. Те са в десетки устройства. Те наистина позволяват печалби, променят пазара и околния свят. Хайпът изглежда малко по-различно:

Просто невронните мрежи вече не са нещо ново. Да, много хора имат преувеличени очаквания. Но множество компании научиха как да прилагат невронките и да създават продукти на тяхна основа. Невронките предлагат нови функционалности, позволяват съкращаване на работни места, намаляват цената на услугите:
- Производствени компании интегрират алгоритми за анализ на дефекти на конвейера.
- Животновъдни стопанства купуват системи за мониторинг на крави.
- Автоматизирани комбайни.
- Автоматизирани кол центрове.
- Филтри в SnapChat. (поне нещо полезно!)
Но основното, и не най-очевидното: "Новите идеи свършиха, или те няма да донесат мигновен капитал". Невронните мрежи решиха десетки проблеми. И ще решат още повече. Всички очевидни идеи, които съществуваха, родиха множество стартъпи. Но всичко, което беше на повърхността, вече беше събрано. През последните две години не съм срещал нито една нова идея за приложение на невронни мрежи. Нито един нов подход (добре, освен с GAN-ите има някои проблеми).
А всеки следващ стартъп става все по-сложен. Той вече не изисква само двама момчета, които обучават невронка на открити данни. Той изисква програмисти, сервери, екип от маркировчици, сложна поддръжка и т.н.
В резултат — стартъпите стават по-малко. А производството — повече. Нужно ли е да добавите разпознаване на автомобилни номера? На пазара има стотици специалисти с релевантен опит. Можете да наемете и за два месеца вашият служител ще направи системата. Или да купите готова. Но да правите нов стартъп?.. Лудост!
Необходимо създаване на система за проследяване на посетители — защо да плащате за куп лицензии, когато можете за 3-4 месеца да изградите своя, адаптирана за вашия бизнес.
В момента невронните мрежи преминават през същия път, по който минаха десетки други технологии.
Помните ли как се е променяло понятието „разработчик на сайтове“ от 1995 година насам? Докато пазарът не е наситен със специалисти. Професионалистите са много малко. Но мога да споря, че след 5-10 години няма да има особена разлика между програмист на Java и разработчик на невронни мрежи. И двата вида специалисти ще бъдат достатъчни на пазара.
Просто ще има клас задачи, за които ще се решават с невронни мрежи. Появява се задача — наемате специалист.
„А какво следва? Къде е обещаният изкуствен интелект?“
И тук има малка, но интересна неяснота:)
Този стек от технологии, който съществува днес, очевидно няма да ни доведе до изкуствения интелект. Идеите, тяхната новизна — в значителна част са се изчерпали. Нека поговорим за това, което задържа текущото ниво на развитие.
Ограничения
Нека започнем с автономните автомобили. Изглежда, че е ясно, че пълно автономно шофиране е възможно при настоящите технологии — но след колко години това ще се случи — не е ясно. Tesla смята, че ще стане след няколко години —

Има много други , които оценяват това като 5-10 години.
Скорее всего, според мен, след 15 години инфраструктурата на градовете вече сама ще се промени така, че появата на автономни автомобили ще стане неизменен факт, ще бъде нейно продължение. Но това не може да се счита за интелект. Съвременната Tesla — това е много сложен конвейер за филтриране на данни, тяхното търсене и преобучение. Това са правила-правила-правила, събиране на данни и филтриране над тях (вот аз написах малко повече за това, или вижте с оставка).
Проблем номер едно
И именно тук виждаме първия фундаментален проблем. Големи данни. Това е точно това, което доведе до настоящата вълна от невронни мрежи и машинно обучение. В момента, за да направим нещо сложно и автоматизирано, е необходимо много данни. Не просто много, а наистина много. Нужни са автоматизирани алгоритми за събиране, етикиране и използване на данните. Ако искаме машината да види камиони на фона на слънцето — първо трябва да съберем достатъчно от тях. Ако искаме машината да не излезе от релсите от велосипед, прикрепен към багажника — трябват ни повече семпли.
Едно единствено примера не стига. Стотици? Хиляди?

Вторият проблем
Вторият проблем — визуализацията на това, което невронната мрежа е разбрала. Това е много нетривиална задача. Все още малко хора разбират как да го визуализират. Тези статии са доста нови, това са само няколко примера, дори и отдалечени:
зацикляне на текстурите. Добре показва какво точно невронката е склонна да зацикля и каква информация възприема като отправна.

внимание при . Всъщност вниманието често може да се използва именно за показване на това, което е предизвикало реакция в мрежата. Срещал съм такива неща и за отстраняване на грешки, и за продуктовите решения. Има много статии на тази тема. Но колкото по-сложни са данните, толкова по-трудно е да разберем как да постигнем устойчива визуализация.

И да, старият добър комплект от „погледни какво има в мрежата в . Тези картинки бяха популярни преди 3-4 години, но всички бързо осъзнаха, че те са красиви, но не предоставят много смисъл.

Не споменах десетки други трикове, методи, хакове, изследвания относно визуализацията на вътрешността на мрежата. Работят ли тези инструменти? Помагат ли те бързо да се разбере къде е проблемът и да се отстрани мрежата?.. Да се извлекат последните проценти? Ами, горе-долу така:

Можете да видите който и да е конкурс на Kaggle. И описанието на това как хората правят финалните решения. Направихме 100-500-800 милиона модела и то проработи!
Разбира се, преувеличавам. Но тези подходи не дават бързи и директни отговори.
С достатъчно опит, опитвайки различни варианти, може да се направи заключение защо вашата система е взела подобно решение. Но коригирането на поведението на системата ще бъде трудно. Да се сложи бърз ремонт, да се премести прага, да се добави датасет, да се вземе друга backend мрежа.
Проблем номер три
Трети основен проблем — мрежите учат не логика, а статистика. Статистически това :

Логически — не изглежда така. Невронните мрежи не учат нещо сложно, освен ако не бъдат принудени. Те винаги учат максимално прости характеристики. Има ли очи, нос, глава? Значи, това е лице! Или представи пример, в който очите не означават лице. И отново — милиони примери.
Има много място в дъното
Бих казал, че точно тези три глобални проблема в момента ограничават развитието на невронните мрежи и машинното обучение. А там, където тези проблеми не ограничаваха — вече активно се използва.
Това ли е краят? Невронните мрежи спират ли?
Никой не знае. Но, разбира се, всички се надяват, че не.
Има много подходи и направления за решаване на тези фундаментални проблеми, които описах по-горе. Но досега нито един от тези подходи не е позволил да се направи нещо фундаментално ново, да се реши нещо, което досега не е било решавано. За момента всички фундаментални проекти се реализират на база стабилни подходи (Tesla), или остават тестови проекти на институции или корпорации (Google Brain, OpenAI).
Грубо казано, основното направление е създаването на високо ниво на представяне на входящите данни. В известен смисъл “памет”. Най-простият пример за памет са различни “Embedding” — представяния на изображения. Например, всички системи за разпознаване на лица. Мрежата учи да получи от лицето стабилно представяне, което не зависи от завъртане, осветление, резолюция. Основно, мрежата минимизира метриката “различни лица — далеч” и “еднакви — близо”.

За такова обучение са нужни десетки и стотици хиляди примери. Затова резултатът носи някои зачатъци на “One-shot Learning”. Сега не ни трябват стотици лица, за да запомним човек. Само едно лице, и всичко — ние !
Обаче има проблем... Мрежата може да научи само достатъчно прости обекти. При опит да различава не лица, а например “хора по облекло” (задача ) — качеството пада значително. И мрежата не може да научи достатъчно очевидни смени на ъглите.
И да се учи на милиони примери — също не е толкова приятно развлечение.
Има изследвания за значително намаляване на избора. Например, веднага се сещам за една от първите работи по OneShot Learning :

Има много такива изследвания, например или или .
Минус едно — обикновено обучението работи добре със простички случаи, като примери от "MNIST". При преминаване към по-сложни задачи обаче е необходима голяма база, модел на обектите или някаква магия.
В действителност, проучванията в областта на One-Shot обучението са много интересна тема. Открива се много идеи. Но по-голямата част от двете посочени от мен проблема (предобучение на огромен датасет / нестабилност при сложни данни) силно пречат на обучението.
От друга страна, темата за вградените представяния (Embedding) е свързана с GAN — генеративно-състезателни мрежи. Вероятно сте чели много статии по темата на Хабър., ,)
Характерна черта на GAN е формирането на определено вътрешно пространство на състояния (по същество същото като вграждане), което позволява да се нарисува изображение. Това могат да бъдат , могат да бъдат .

Проблемата с GAN е, че колкото по-сложен е генерираният обект, толкова по-трудно е да се опише с логиката "генератор-дискриминатор". В резултат, от реалните приложения на GAN само DeepFake е на слух, който отново манипулира представите за лица (за които съществува огромна база).
Други полезни приложения съм срещал много рядко. Обикновено става дума за някакви свистелки и перделки за доизрисуване на изображения.
И отново. Никой няма представа как това би ни помогнало да преминем към светлото бъдеще. Представянето на логиката / пространството в невронна мрежа е хубаво. Но е необходимо огромно количество примери, не е ясно как невронната мрежа представя това в себе си, и не е ясно как да накараме невронната мрежа да запомни някакво наистина сложно представяне.
Обучение чрез подсилване е напълно различен подход. Вероятно си спомняте как Google победи всички в Go. Ненадминати победи в Starcraft и Dota. Но тук всичко не е толкова розово и перспективно. Най-добре за RL и неговите сложности разказва .
Ако накратко обобщим това, което авторът е писал:
- Моделите от кутията не подходите / обикновено работят зле в повечето случаи.
- Практическите задачи могат да бъдат решени по-лесно по друг начин. Boston Dynamics не използва RL заради неговата сложност / непредсказуемост / сложността на изчисленията.
- За да заработи RL — нужна е сложна функция. Често е трудно да се създаде / напише.
- Трудно е да се обучават модели. Налага се да се губи много време, за да се развият и излязат от локалните оптимуми.
- Като следствие — трудно е да се повтори модел, нестабилност на модела при най-малките промени.
- Често се оверфитва на какви ли да е случайности, включително генератори на случайни числа
Ключовият момент е, че RL все още не работи в продукция. Google провеждат някакви експерименти ( , ). Но не съм виждал нито една продуктова система.
Памет. Минусът на всичко описано по-горе е неструктуриранността. Един от подходите, с които се опитват да подредят всичко това, е да предоставят на невронната мрежа достъп до отделна памет. Така че тя може да записва и презаписва резултатите от стъпките си. Тогава невронната мрежа може да се определи от текущото състояние на паметта. Това много напомня на класическите процесори и компютри.
Най-известната и популярна — от DeepMind:

Изглежда, че ето го, ключът към разбирането на интелекта? Но по-скоро не. Системата все пак изисква огромен масив от данни за тренировка. А работи основно със структурирани таблични данни. В същото време когато Facebook аналогична проблема, те избраха пътя "нафиг паметта, просто ще направим мрежата по-сложна и с повече примери — и тя сама ще се обучи".
Разделение. Друг начин да се създаде значима памет е да се вземат същите ембединг, но при обучението да се въведат допълнителни критерии, които да позволят да се изолират "съществата" в тях. Например, искаме да обучим невронната мрежа да различава поведението на човек в магазин. Ако следвахме стандартния път — щяхме да трябва да направим десетина мрежи. Една търси човека, втората определя какво прави, третата неговата възраст, четвъртата — пола. Отделна логика наблюдава частта от магазина, където той учи/обучава на това. Третата определя неговата траектория и т.н.
Или, ако имаше безкрайно много данни, можеше да се обучи една мрежа на всевъзможните изходи (очевидно е, че такъв масив от данни не може да се събере).
Дизентанглимент подходът ни казва — хайде да обучим мрежа така, че тя сама да може да различава понятия. За да формулира ембединг по видео, където една област да определя действието, една — позицията на пода във времето, една — ръста на човека, а още една — пола му. При обучението искаме почти да не подсказваме на мрежата такива ключови понятия, а тя сама да изолира и групира областите. Такива статии не са много (някои от тях , , ) и като цяло те са доста теоретични.
Но това направление, поне теоретично, трябва да решава посочените в началото проблеми.

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

Разлагане на лице по параметри "размер, вежди, ориентация, цвят на кожата, и т.н."
Други
Съществуват много други, не толкова глобални направления, които позволяват по някакъв начин да намалят базите, да работят с по-разнородни данни и т.н.
Attention. Вероятно, няма смисъл да го изтъквам като отделен метод. Просто подход, който усилва другите. На него са посветени много статии (,,). Същността на Attention е да усили реакцията на мрежата именно на значимите обекти по време на обучение. Често с някакво външно целеуказание или малка външна мрежа.
3D симулация. Ако се създаде хубав 3D движок, той може да покрие 90% от обучаващите данни (виждал съм дори пример, когато почти 99% от данните се покриват с добър движок). Има много идеи и трикове как да накараме мрежа, обучена на 3D движок, да работи с реални данни (фино настройване, трансфер на стил и т.н.). Но често създаването на добър движок е многократно по-сложно от събирането на данни. Примери, когато са създавани движки:
Обучение на роботи (, )
Обучение стоки в магазин (но в двата проекта, които реализирахме — ние спокойно минавахме без това).
Обучение в Tesla (отново това видео, което беше по-горе).
Изводи
Цялата статия по някакъв начин е заключения. Вероятно основното послание, което исках да предам е — „безплатните решения приключиха, невронките вече не предлагат лесни решения“. Сега трябва да работим, изграждайки сложни решения. Или да работим, правейки сложни научни изследвания.
А всъщност темата е дискусионна. Може би читателите имат по-интересни примери?
Източник: habr.com
