Niedawno pojawiła się , która dobrze pokazuje tendencje w uczeniu maszynowym ostatnich lat. Krótko mówiąc, liczba startupów w dziedzinie uczenia maszynowego w ciągu ostatnich dwóch lat gwałtownie spadła.

Cóż, rozwiążmy kwestię «czy bąbel pękł», «jak dalej żyć» i porozmawiajmy, skąd w ogóle ta sytuacja.
Na początek porozmawiajmy o tym, co było buforem tej krzywej. Skąd się wzięła? Zapewne wszyscy pamiętają uczenia maszynowego w 2012 roku w konkursie ImageNet. To było pierwsze globalne wydarzenie! Ale w rzeczywistości nie jest to takie proste. Poza tym wzrost krzywej zaczyna się nieco wcześniej. Podzieliłbym go na kilka momentów.
- Rok 2008 to pojawienie się terminu "wielkie dane". Prawdziwe produkty zaczęły się od 2010 roku. Wielkie dane są ściśle związane z uczeniem maszynowym. Bez wielkich danych niemożliwe jest stabilne działanie algorytmów, które istniały wówczas. A to nie są sieci neuronowe. Do 2012 roku sieci neuronowe były domeną marginalnej mniejszości. Jednak wtedy zaczęły działać zupełnie inne algorytmy, które istniały już od lat, a nawet dziesięcioleci: (1963, 1993 rok), (1995), (2003),… Startupy tamtych lat w pierwszej kolejności zajmowały się automatyczną obróbką danych strukturalnych: kasy, użytkownicy, reklama, wiele innych.
Pochodną tej pierwszej fali jest zestaw frameworków, takich jak XGBoost, CatBoost, LightGBM i tak dalej.
- W latach 2011-2012 wygrały szereg konkursów dotyczących rozpoznawania obrazów. Rzeczywiste ich zastosowanie nieco się opóźniło. Powiedziałbym, że masowo przemyślane startupy i rozwiązania zaczęły się pojawiać od 2014 roku. Dwa lata zajęło zrozumienie, że sieci neuronowe rzeczywiście działają, stworzenie wygodnych frameworków, które można było wdrożyć i uruchomić w rozsądnym czasie, opracowanie metod, które stabilizowałyby i przyspieszały czas konwergencji.
Sieci konwolucyjne pozwoliły na rozwiązywanie zadań związanych z widzeniem maszynowym: klasyfikacja obrazów i obiektów na obrazach, wykrywanie obiektów, rozpoznawanie obiektów i ludzi, poprawa obrazów itd.
- Lata 2015-2017. Boom algorytmów i projektów związanych z sieciami rekurencyjnymi lub ich odpowiednikami (LSTM, GRU, TransformerNet itp.). Pojawiły się dobrze działające algorytmy „mowa-na-tekst”, systemy maszynowego tłumaczenia. Częściowo opierają się na sieciach konwolucyjnych do wydobywania podstawowych cech. Częściowo na tym, że nauczyliśmy się zbierać naprawdę duże i dobre zbiory danych.

„Bańka pękła? Hype przegrzany? Umarli jak blockchain?”
A jakże! Jutro w twoim telefonie przestanie działać Siri, a pojutrze Tesla nie odróżni skrętu od kangura.
Sieci neuronowe już działają. Są w dziesiątkach urządzeń. Naprawdę pozwalają zarabiać, zmieniają rynek i otaczający nas świat. Hype wygląda nieco inaczej:

Po prostu sieci neuronowe przestały być czymś nowym. Tak, wielu ludzi ma wygórowane oczekiwania. Ale wiele firm nauczyło się stosować sieci neuronowe i tworzyć na ich podstawie produkty. Sieci neuronowe dają nowe funkcjonalności, pozwalają zredukować miejsca pracy, obniżyć ceny usług:
- Firmy produkcyjne integrują algorytmy do analizy wad na linii produkcyjnej.
- Farma hodowlana kupuje systemy do monitorowania krów.
- Automatyczne kombajny.
- Zautomatyzowane call-center.
- Filtry w SnapChat. (no przynajmniej coś sensownego!)
Ale najważniejsze, co nie jest takie oczywiste: „Nowych pomysłów jest coraz mniej, albo nie przyniosą natychmiastowego kapitału”. Sieci neuronowe rozwiązały dziesiątki problemów. I rozwiążą jeszcze więcej. Wszystkie oczywiste pomysły, które były — stworzyły wiele startupów. Ale wszystko, co było na powierzchni — już zostało zrealizowane. W ciągu ostatnich dwóch lat nie spotkałem ani jednego nowego pomysłu na zastosowanie sieci neuronowych. Żadnego nowego podejścia (no dobra, jest kilka problemów z GAN-ami).
A każdy kolejny startup jest coraz trudniejszy. Wymaga już nie dwóch chłopaków szkolących sieć neuronową na otwartych danych. Wymaga programistów, serwerów, zespołu do oznaczania, złożonego wsparcia itp.
W rezultacie — startupów jest coraz mniej. A produkcji więcej. Trzeba dodać rozpoznawanie tablic rejestracyjnych? Na rynku są setki specjalistów z odpowiednim doświadczeniem. Można zatrudnić i w ciągu kilku miesięcy twój pracownik stworzy system. Lub kupić gotowy. Ale tworzenie nowego startupu?.. Szaleństwo!
Musisz stworzyć system śledzenia odwiedzających – po co płacić za mnóstwo licencji, skoro można w ciągu 3-4 miesięcy zbudować własny, dostosowany do swojego biznesu.
Neuronalne sieci przechodzą teraz tę samą drogę, którą przebyły dziesiątki innych technologii.
Pamiętasz, jak pojęcie „twórca stron internetowych” zmieniało się od 1995 roku? Dopóki rynek nie jest nasycony specjalistami. Profesjonalistów jest bardzo mało. Ale mogę się spierać, że za 5-10 lat nie będzie większej różnicy między programistą Java a twórcą sieci neuronowych. Specjalistów obu kategorii będzie wystarczająco dużo na rynku.
Po prostu pojawi się klasa zadań, do których będą używane sieci neuronowe. Pojawia się zadanie – zatrudniasz specjalistę.
„A co dalej? Gdzie obiecana sztuczna inteligencja?”
A tu pojawia się mała, ale interesująca niejasność :)
Obecny stos technologii, jak się wydaje, nie doprowadzi nas do sztucznej inteligencji. Pomysły, ich nowość – w dużej mierze się wyczerpały. Porozmawiajmy o tym, co utrzymuje obecny poziom rozwoju.
Ograniczenia
Zacznijmy od autonomicznych pojazdów. Wydaje się, że stworzenie całkowicie autonomicznych samochodów przy obecnych technologiach jest możliwe. Ale za ile lat to się wydarzy – nie wiadomo. Tesla uważa, że stanie się to w ciągu kilku lat –

Jest wielu innych , którzy oceniają to na 5-10 lat.
Moim zdaniem najprawdopodobniej za 15 lat infrastruktura miast zmieni się na tyle, że pojawienie się autonomicznych pojazdów stanie się nieuniknione, stanie się ich kontynuacją. Ale to nie można uznać za inteligencję. Nowoczesna Tesla to bardzo skomplikowany proces filtrowania danych, ich wyszukiwania i ponownego uczenia. To zasady-zasady-zasady, zbieranie danych i filtry na nich (oto opisałem to nieco dokładniej, albo możesz obejrzeć z oznaczenia).
Pierwszy problem
I właśnie tu widzimy pierwszy fundamentalny problem. Big Data. This is exactly what has birthed the current wave of neural networks and machine learning. Nowadays, to do something complex and automatic, a lot of data is needed. Not just a lot, but an immense amount. Automated algorithms for gathering, labeling, and utilizing this data are required. If we want the machine to recognize trucks against the sun, we first need to collect a sufficient number of samples. If we want the machine not to go crazy over a bicycle attached to a trunk, we need even more samples.
And one example is not enough. Hundreds? Thousands?

The second problem
The second problem — is visualizing what our neural network has understood. This is a very non-trivial task. Until now, few people understand how to visualize this. These articles are quite recent, and this is just a few examples, albeit somewhat distant:
the fixation on textures. It shows well what the neural network tends to get fixated on + what it perceives as starting information.

attention in . In reality, attention can often be used precisely to show what triggered such a reaction in the network. I have encountered such things for debugging and product solutions. There are many articles on this topic. But the more complex the data, the harder it is to figure out how to achieve stable visualization.

And yes, the old good set of "look at what’s inside the grid in ". These images were popular 3-4 years ago, but everyone quickly understood that they are beautiful but not very meaningful.

I haven’t mentioned dozens of other tips, methods, hacks, and research on how to display the internals of the network. Do these tools work? Do they help quickly understand what the problem is and debug the network?.. Extract the last few percent? Well, it’s pretty much like this:

You can look at any competition on Kaggle. And the description of how people make final decisions. We piled up 100-500-800 million models, and it worked!
Of course, I am exaggerating. But these approaches do not provide quick and straightforward answers.
With sufficient experience, by trying different options, one can produce a verdict on why your system made such a decision. However, fixing the system’s behavior will be challenging. Setting a workaround, moving the threshold, adding a dataset, choosing a different backend network.
The third problem
The third fundamental problem — sieci uczą nie logiki, a statystyki. Statystycznie to :

Logicznie — to niezbyt podobne. Sieci neuronowe nie uczą się niczego skomplikowanego, jeśli nie są do tego zmuszane. Zawsze uczą się maksymalnie prostych cech. Są oczy, nos, głowa? Oznacza to, że to twarz! Albo przynieś przykład, gdzie oczy nie będą oznaczały twarzy. I znów — miliony przykładów.
Jest mnóstwo miejsca na dnie
Powiedziałbym, że to właśnie te trzy globalne problemy ograniczają dzisiaj rozwój sieci neuronowych i uczenia maszynowego. A tam, gdzie te problemy nie ograniczały — już aktywnie się je wykorzystuje.
Czy to koniec? Sieci neuronowe stanęły?
Nie wiadomo. Ale oczywiście wszyscy mają nadzieję, że nie.
Istnieje wiele podejść i kierunków do rozwiązania tych fundamentalnych problemów, które opisałem powyżej. Ale jak dotąd żadne z tych podejść nie pozwoliło na stworzenie czegoś fundamentalnie nowego, rozwiązanie czegoś, co do tej pory nie zostało rozwiązane. Jak na razie wszystkie fundamentalne projekty są realizowane w oparciu o stabilne podejścia (Tesla), lub pozostają projektami testowymi instytutów lub korporacji (Google Brain, OpenAI).
Mówiąc brutalnie, głównym kierunkiem jest stworzenie pewnego wysokopoziomowego przedstawienia danych wejściowych. W pewnym sensie „pamięci”. Najprostszym przykładem pamięci są różne „Embedding” — przedstawienia obrazów. Na przykład, wszystkie systemy rozpoznawania twarzy. Sieć uczy się uzyskiwać z twarzy pewne stabilne przedstawienie, które nie zależy od kąta, oświetlenia, rozdzielczości. W zasadzie sieć minimalizuje metrykę „różne twarze — daleko” i „te same — blisko”.

Do takiego uczenia potrzebne są dziesiątki i setki tysięcy przykładów. Jednak wynik przynosi pewne zalążki „One-shot Learning”. Teraz nie potrzebujemy setek twarzy, by zapamiętać człowieka. Zaledwie jedna twarz, i już — my !
Tylko że jest problem… Sieć może nauczyć się tylko dość prostych obiektów. Przy próbie rozróżniania nie twarzy, a na przykład „ludzi po ubraniu” (zadanie ) — jakość spada o wiele rzędów. I sieć już nie może nauczyć się wystarczająco oczywistych zmian kątów.
A uczenie się na milionach przykładów — też jakoś tak sobie rozrywka.
Są prace nad znacznym zmniejszeniem wyborów. Na przykład można od razu przypomnieć sobie jedną z pierwszych prac z zakresu OneShot Learning :

Takich prac jest wiele, na przykład lub lub .
Minus jeden — zazwyczaj uczenie się dobrze działa na prostych, „MNIST-owych przykładach”. A przy przejściu do bardziej złożonych zadań — potrzebna jest duża baza, model obiektów lub jakaś magia.
W ogóle prace nad uczeniem One-Shot to bardzo interesujący temat. Można znaleźć wiele pomysłów. Ale w dużej mierze te dwa problemy, które wymieniłem (wstępne uczenie na ogromnym zbiorze danych / niestabilność na trudnych danych) — bardzo utrudniają naukę.
Z drugiej strony do tematu Embedding pasują GAN — generatywne sieci rywalizujące. Na pewno czytałeś na Habrze mnóstwo artykułów na ten temat. (, ,)
Cechą GAN jest formowanie pewnej wewnętrznej przestrzeni stanów (w zasadzie tego samego Embedding), która pozwala na stworzenie obrazu. Mogą to być , mogą być .

Problem GAN — im bardziej złożony generowany obiekt, tym trudniej go opisać w logice „generator-dyskryminator”. W rezultacie z rzeczywistych zastosowań GAN, które są na językach - tylko DeepFake, który znowu manipuluje wizerunkami twarzy (dla których istnieje ogromna baza).
Innych przydatnych zastosowań spotkałem bardzo mało. Zwykle jakieś kluczki z dorabianiem obrazków.
I znowu. Nikt nie ma pojęcia, jak to pozwoli nam przejść do świetlanej przyszłości. Reprezentacja logiki/przestrzeni w sieci neuronowej — to dobrze. Ale potrzebna jest ogromna liczba przykładów, nie rozumiemy, jak neuronka to przedstawia, nie rozumiemy, jak zmusić neuronki do zapamiętania jakiejś rzeczywiście złożonej reprezentacji.
Uczenie przez wzmacnianie — to podejście z zupełnie innej strony. Na pewno pamiętasz, jak Google pokonał wszystkich w Go. Niedawne zwycięstwa w Starcraft i Dota. Ale tu wszystko wygląda znacznie mniej różowo i obiecująco. Najlepiej o RL i jego trudnościach opowiada .
Jeśli krótko podsumować, co pisał autor:
- Modele prosto z pudełka nie pasują / w większości przypadków działają źle.
- Praktyczne zadania można łatwiej rozwiązać w inny sposób. Boston Dynamics nie używa RL z powodu jego złożoności / nieprzewidywalności / trudności obliczeniowych.
- Aby RL zadziałał — potrzebna jest skomplikowana funkcja. Często trudno ją stworzyć / napisać.
- Trudno uczyć modele. Trzeba poświęcić mnóstwo czasu, aby je wytrzeć i wyprowadzić z lokalnych optimum.
- W rezultacie trudno powtórzyć model, jego niestabilność przy najmniejszych zmianach.
- Często nadmiernie dopasowuje się do jakichś losowych wzorców, aż do generatorów liczb losowych.
Kluczowym punktem jest to, że RL obecnie nie działa w produkcji. Google prowadzi jakieś eksperymenty ( , ). Ale nie widziałem żadnego produktu systemowego.
Pamięć. Minusem wszystkiego, co opisano powyżej, jest brak struktury. Jednym z podejść, jak to próbują uporządkować, jest umożliwienie sieci neuronowej dostępu do osobnej pamięci, aby mogła zapisywać i nadpisywać wyniki swoich kroków. Wówczas sieć neuronowa może być definiowana przez aktualny stan pamięci. To bardzo przypomina klasyczne procesory i komputery.
Najbardziej znane i popularne — od DeepMind:

Wygląda na to, że oto jest klucz do zrozumienia inteligencji? Ale raczej nie. System nadal wymaga ogromnych zbiorów danych do trenowania. A działa głównie na zorganizowanych danych tabelarycznych. Przy tym gdy Facebook analogiczny problem, poszedł w kierunku „dość z pamięcią, po prostu zróbmy sieć neuronową bardziej złożoną, a przykładów więcej — i ona sama się nauczy”.
Rozdzielenie. Innym sposobem stworzenia znaczącej pamięci jest wykorzystanie tych samych embeddingów, ale wprowadzając dodatkowe kryteria podczas treningu, które pozwoliłyby wydobywać z nich „znaczenia”. Na przykład chcielibyśmy wytrenować sieć neuronową do rozróżniania zachowań ludzi w sklepie. Gdybyśmy poszli standardową drogą — musielibyśmy stworzyć dziesięć sieci. Jedna szuka człowieka, druga określa, co robi, trzecia jego wiek, czwarta — płeć. Oddzielna logika obserwuje część sklepu, gdzie on działa/uczy się na ten temat. Trzecia określa jego trajektorię, itd.
Lub, gdyby danych było nieskończoność, można by wytrenować jedną sieć na wszelkie możliwe wyniki (oczywiście nie można zebrać tak ogromnego zbioru danych).
Podejście do dezentylgencji mówi nam — a dlaczego nie nauczyć sieci w taki sposób, aby sama potrafiła rozróżniać pojęcia. Żeby potrafiła na podstawie wideo stworzyć embedding, gdzie jeden obszar określałby działanie, inny — pozycję na podłodze w czasie, inny — wzrost człowieka, a jeszcze inny — jego płeć. Przy tym, podczas uczenia, chciałbym prawie nie podpowiadać sieci takich kluczowych pojęć, a żeby sama wyróżniała i grupowała obszary. Takich artykułów jest stosunkowo mało (niektóre z nich , , ) i ogólnie są dość teoretyczne.
Jednak to kierunek, przynajmniej teoretycznie, powinien zamykać wymienione na początku problemy.

Rozkład obrazu według parametrów „kolor ścian/kolor podłogi/kształt obiektu/kolor obiektu/i.t.d.”

Rozkład twarzy według parametrów „rozmiar, brwi, orientacja, kolor skóry, i.t.d.”
Inne
Istnieje wiele innych, niezbyt globalnych kierunków, które pozwalają jakoś zmniejszać bazy, pracować z bardziej zróżnicowanymi danymi, i.t.d.
Attention. Prawdopodobnie nie ma sensu выделять это jako osobną metodę. Po prostu podejście, które wzmacnia inne. Jest mu poświęconych wiele artykułów (,,). Sens Attention polega na tym, by wzmocnić reakcję sieci na istotne obiekty podczas uczenia. Często poprzez jakieś zewnętrzne wskazanie celu lub niewielką zewnętrzną sieć.
Symulacja 3D. Jeśli stworzyć dobry silnik 3D, można nim często zamknąć 90% danych treningowych (widziałem nawet przykład, kiedy prawie 99% danych zamykano przy użyciu dobrego silnika). Istnieje wiele pomysłów i hacków, jak zmusić sieć wytrenowaną na silniku 3D do pracy z rzeczywistymi danymi (fine tuning, style transfer, i.t.d.). Ale często stworzenie dobrego silnika — jest o kilka rzędów wielkości trudniejsze niż zebranie danych. Przykłady, kiedy tworzono silniki:
Nauka robotów (, )
Szkolenia towarów w sklepie (jednak w dwóch projektach, które zrobiliśmy — spokojnie obejshliśmy się bez tego).
Nauka w Tesli (znowu to wideo, które było wcześniej).
Wnioski
Cały artykuł to w pewnym sensie wnioski. Prawdopodobnie główny przekaz, który chciałem przekazać — „koniec łatwych rozwiązań, sieci neuronowe nie oferują już prostych wyników”. Teraz trzeba pracować, budując skomplikowane rozwiązania. Lub pracować, robiąc skomplikowane badania naukowe.
A w ogóle temat jest dyskusyjny. Może czytelnicy mają jakieś ciekawsze przykłady?
Źródło: habr.com
