Machine learning nie rozwiąże wszystkich problemów. W jakich przypadkach sprawdza się najlepiej?
Panuje błędne przekonanie, że stosowanie machine learningu jest prostsze niż programowanie. Dla wielu praca z tym rozwiązaniem polega na podstawieniu danych do gotowej biblioteki. – Tymczasem to tylko kropka nad „i” w całym procesie, bo przecież trzeba spędzić miesiące na analizie danych, analizie problemu i próbie znalezienia logicznego powiązania tych danych – powiedział nam Jacek Wróblewski, Product Guardian w Ericsson.
O tym, do czego jeszcze warto wykorzystać tę technologię, rozmawiamy z Jackiem Wróblewskim oraz z Piotrem Wasilewskim, Senior Software Developerem.
Porozmawiajmy o polskim rynku sztucznej inteligencji. Jakich umiejętności potrzebuje junior, by znaleźć pierwszą pracę w dziale wykorzystującym machine learning?
Piotr: Junior aplikujący do działu machine learning powinien posiadać podstawową wiedzę teoretyczną dot. uczenia maszynowego, czyli znać różnice pomiędzy uczeniem nadzorowanym a nienadzorowanym. Przyda się także znajomość podstawowych pojęć, by po dołączeniu do zespołu, bez problemu rozumiała, o czym ten zespół rozmawia. Nie obędzie się także bez znajomości podstawowych metryk używanych do oceny wyników algorytmów uczenia maszynowego, z których korzystamy na co dzień.
A jeśli chodzi o język programowania, to jaki?
Piotr: Podstawowa znajomość Pythona powinna wystarczyć. Python króluje w obszarze sztucznej inteligencji. Dzieje się tak ze względu na sporą liczbę bibliotek i narzędzi, używanych w machine learningu, napisanych właśnie w tym języku programowania – np. Sickit-learn czy Pandas. Podczas rekrutacji zwracamy uwagę, czy kandydat podaje link do profilu na github.com, w którym prowadził kilka projektów. Na poziomie juniora mogą być to rozwiązania zadań studenckich lub tutoriali, niekoniecznie profesjonalne projekty.
Na co zwracasz uwagę przeglądając profil kandydata na githubie?
Piotr: Samo posiadanie aktywnego profilu na githubie to duży plus. Lubię spojrzeć na to, jaki ktoś ma tok myślenia przy rozwiązywaniu zadań. Świetnie, gdy na bieżąco komentuje i wyjaśnia społeczności, dlaczego zrobił coś tak, a nie inaczej, o co także zazwyczaj pytam podczas rozmowy.
Wspomniałeś o Pythonie. Znajomość innych języków jest także na plus czy to bez znaczenia?
Piotr: W rekrutacji do Ericsson zwracamy uwagę na Pythona. Główne produkty naszej firmy napisane są w C++, dlatego też szukamy osób, które znają założenia tego niskopoziomowego języka. Na poziomie juniora nie wymagamy ogromnej wiedzy o C++. Oba języki są obiektowe, dlatego jeśli ktoś zna Pythona, powinien sobie poradzić z C++.
Kiedy zainteresowaliście się sztuczną inteligencją i w jaki sposób pozyskiwaliście wiedzę na jej temat?
Jacek: Sztuczną inteligencją zainteresowałem się 20 lat temu na studiach, dowiedziałem się wtedy więcej na temat systemów ekspertowych, ale w praktyce nic z tą wiedzą nie zrobiłem. Na poważnie wróciłem do machine learningu cztery lata temu, gdy dowiedziałem się, że w Ericsson rusza projekt w obszarze machine learningu i dotyczy on kontroli ruchu sieci 4G. Szukano wtedy osoby do opieki nad aplikacją implementującą logikę ML, dlatego zgłosiłem się na ochotnika. W początkowej fazie wiedzę zdobywałem samodzielnie z książek i ze źródeł internetowych.
Razem z Piotrem wzięliśmy udział w zewnętrznym szkoleniu z data science, by podnieść kompetencje w tej tematyce. Podjąłem także studia podyplomowe na Politechnice Łódzkiej z data science oraz doktoranckie w tematyce telekomunikacji i sztucznej inteligencji. Obaj jesteśmy inżynierami, ukończyłem inżynierskie i magisterskie studia z informatyki. Programistą jestem już dobre kilkanaście lat, a zaczynałem od tworzenia serwisów internetowych w PHP a później aplikacji mobilnych na iPhone’a.
Piotr, jak wyglądało to w Twoim przypadku?
Piotr: Mam podobną historię do Jacka, bo także na poważnie zacząłem interesować się machine learningiem, gdy usłyszałem o projekcie wewnętrznym Ericsson. Wcześniej na studiach poznałem podstawy sztucznej inteligencji.
Jak wykorzystujecie machine learning w Ericsson?
Jacek: Obaj pracujemy w obszarze traffic control, czyli zajmujemy się kontrolą ruchu sieci. Mamy do czynienia z różnymi procedurami jak mobility, load balancing czy carrier aggregation. Do tego najbardziej nadaje się machine learning – celem naszej pracy jest usprawnieniem procedur, by niektóre pomiary zastąpić predykcjami modelu i zrezygnować z konfiguracji pomiarów budując modele machine learningowe. Przewidujemy także obciążenie sieci w celu wprowadzenia ulepszonych metod oszczędzania energii.
Celem zespołu jest stworzenie self organizing network, czyli sieci, która sama, dynamicznie potrafi znaleźć optymalne ustawienia procedur, właściwości, zależnie od warunków. Chcemy, by działo się to automatycznie i dynamicznie, bez udziału człowieka. Niektórych rzeczy nie da się zrobić ręcznie, np. mapy pokrycia serwisem, którą wykorzystujemy do przewidywania pokrycia przy procedurach mobility czy load balancing. To niewykonalne, by ręcznie stworzyć mapę dla każdej komórki, dlatego rozwiązaniem problemu może być machine learning.
Piotr: Kolejnym z ciekawszych zastosowań machine learningu jest garble speech detection. Czasami podczas rozmowy telefonicznej słyszymy zniekształcenie głosu. Do wykrycia takiego problemu wykorzystuje się właśnie machine learning, po to by w czasie rzeczywistym poprawić jej jakość. Trudno byłoby dokonać tego w sposób manualny.
Jak wygląda proces powstawania nowej funkcjonalności z perspektywy zespołu odpowiedzialnego za machine learning?
Piotr: Najważniejsze to zdefiniować problem, który chcielibyśmy rozwiązać. Trzeba sprawdzić, czy machine learning jest możliwy do użycia jako sposób rozwiązania takiego problemu i to jest ten punkt wyjścia, od którego powinniśmy zacząć. Następnie kluczowe, jak to w uczeniu maszynowym, są dane, których jest bardzo dużo. Musimy jednak wybrać te, które mogą pomóc nam rozwiązać dany problem. Zaczynamy od zidentyfikowania, czy wspomniane dane są dostępne dla nas, czy może trzeba je zebrać. Zbieranie danych wydłuża projekt, bo trzeba napisać odpowiedni kod, zaimplementować, przetestować, umówić się z klientem na zbieranie danych i dopiero wtedy przejść dalej.
Dane te musimy zebrać, przeanalizować, oczyścić z szumów. Finalnie musimy użyć ich w taki sposób, by dobrać odpowiedni algorytm uczenia maszynowego.
Właśnie w tej części projektu wykorzystuje się Pythona?
Piotr: Tak, Python daje dostęp do wielu narzędzi przydatnych w analizie danych. Zaletą jest to, że zespół jest angażowany w wytwarzanie takiej funkcji właściwie od początku. Od zdefiniowania danego problemu jesteśmy w stanie współpracować z developerami systemowymi, którzy wymyślają, jak takie rozwiązania mają działać i ich wspierać. Dopiero jak zakończymy ten etap, jesteśmy w stanie powiedzieć, czy dana funkcjonalność nadaje się do użycia uczenia maszynowego.
Wynikiem takiej analizy jest konkretny algorytm, który chcemy uzyskać, dobór parametrów, jakie musimy użyć do danego rozwiązania. Dalej wchodzimy w część, kiedy mamy decyzję, że ten machine learning pomoże nam rozwiązać problem, z którym się borykamy. Dopiero wtedy przechodzimy do faktycznego produktu, przechodzimy przez wszystkie fazy projektu:
- planujemy samo wykonanie produktu,
- planujemy testy, implementację, dokumentację,
- na końcu testujemy i sprawdzamy, czy idzie tak, jak powinno.
Co dzieje się dalej, po premierze funkcjonalności?
Piotr: Uczenie maszynowe nie jest statyczne jak programowanie, gdzie mamy sztywne reguły. Uczenie powinno samo dopasowywać się do tego, co dzieje się u klienta, na sieci. W trakcie implementacji próbujemy przewidywać różne sytuacje, kiedy zmieni się coś na świecie, to dana aplikacja powinna zareagować na to. W trakcie testowania funkcjonalności sprawdzamy, czy potrafi zaadoptować się do danej sytuacji. Jeśli chodzi o dalszą pracę po wypuszczeniu funkcjonalności, to wspieramy klientów, jeśli mają pytania.
Jacek: Zespół uczestniczy w testach w sieci klienckiej, podczas których sprawdzamy, jak sprawuje się dana funkcjonalność w różnych częściach sieci. Sprawdzamy wyniki i porównujemy z naszymi przewidywaniami.
O czym za mało mówi się w kontekście machine learningu? Mam wrażenie, że często pada stwierdzenie dot. automatyzacji, żebyśmy wszystko w miarę możliwości automatyzowali.
Jacek: Moim zdaniem za dużo mówi się o machine learningu, automatyzacji, jakby była lekiem na całe zło. Bardzo dużo mówi się w tym kontekście o uczeniu głębokim. Wiele osób uważa, że przy pomocy deep learningu da się rozwiązać wszystkie problemy. A przecież można użyć prostszych sposobów. Są też sytuacje, w których uczenia maszynowego po prostu nie da się zastosować, na przykład ze względu na zbyt małą ilość danych.
Panuje też błędne przekonanie, że machine learning to prosta sprawa, prostsza niż programowanie, ponieważ ludziom wydaje się, że to tylko podstawienie danych do gotowej biblioteki i mamy gotowe rozwiązanie. Tymczasem to tylko kropka nad „i” w całym procesie, bo przecież trzeba spędzić miesiące na analizie danych, analizie problemu i próbie znalezienia logicznego powiązania tych danych. Wymaga to wielu godzin prób i żmudnej analizy, nie jest to takie proste, na jakie wygląda.
Piotr: Część algorytmów machine learningowych jest zasobożerna, do ich wykorzystania potrzebna jest potężna moc obliczeniowa. Czasami niekoniecznie warto brnąć w tym kierunku. Polecam rozejrzeć się za innymi sposobami rozwiązania naszego problemu, zanim bez zastanowienia wybierzemy machine learning.
Odwróćmy trochę sytuację. Jak oceniacie, czy w danej sytuacji będzie najlepszym rozwiązaniem danego problemu?
Jacek: Musimy zastanowić się, jakie dane są fizycznie dostępne. Przyda nam się to przy ocenie, czy dane rozwiązanie jest realne do wykonania. Niektórych nie da się uzyskać, zmierzyć w odpowiednim czasie. Możemy także zderzyć się z sytuacją, w której wytrenowaliśmy modele uczenia maszynowego, a ich jakość jest poniżej oczekiwań. Może to wynikać z tego, że dane są niskiej jakości. Wtedy zastanowiłbym się, czy rzeczywiście potrzebujemy machine learningu do tego projektu.
Piotr: Z mojej perspektywy, na podstawie projektów, które zrealizowaliśmy, bardzo ważna jest wiedza o tym, w jaki sposób chcemy zmierzyć, czy dana funkcjonalność coś daje, czy to będzie łatwe do zmierzenia a może nie. Ważne, żeby nie zapomnieć o tym, że to, co robimy, ma rozwiązać jakiś problem, a najlepiej byśmy udowodnili to, czy nasz sposób rozwiązuje ten problem. Może być to także wskaźnikiem tego, by klient mógł w łatwy sposób zobaczyć, czy coś działa.
Jacek: Podkreśliłbym także kwestię kosztu projektu i potencjalne zyski. Może okazać się, że nasze skomplikowane rozwiązanie, w które zainwestowaliśmy sporo czasu i pieniędzy daje poprawę rzędu ułamka procenta, co przenosi się na minimalny zysk dla klienta. Trudno to oszacować na początku projektu. Okazuje się zazwyczaj po połowie pracy, że być może zysk będzie dużo mniejszy, niż sobie założyliśmy.
Czy Waszym zdaniem 2022 rok to rok machine learningu? To branża, do której warto wejść?
Jacek: Od kilku lat mamy do czynienia z czwartą rewolucją przemysłową, która polega na tym, że budujemy coraz większą sieć urządzeń internetu rzeczy. Te urządzenia mają być autonomiczne i inteligentne, służą do tego, by optymalizować procesy takie jak: zagadnienia logistyczne, pewne elementy produkcji w przemyśle, transport i inne zagadnienia życia codziennego.
W przyszłości, myślę, z tych drobnych klocków będziemy budować większą całość, mam na myśli smart cities. Przykładowo w Singapurze można obserwować zjawiska polegające na wykorzystaniu machine learningu do optymalizacji takich procesów jak dystrybucja żywności, wszelkich dóbr, transport miejski, zużycie energii. Do wszystkich tych elementów potrzebna jest sztuczna inteligencja.
Piotr: W moim przekonaniu branża ta będzie się bardzo dobrze rozwijać ponieważ wszyscy korzystamy z machine learningu. Przykładem może być poruszanie się z telefonem. Możliwe, że stacja bazowa stosuje uczenie maszynowe, by sprawdzić, do jakiej stacji ewentualnie nas przepiąć. Tak samo jest w przypadku oglądania Netfliksa, który rekomenduje filmy i seriale, wykorzystując uczenie maszynowe.
Dlaczego polecacie Ericsson jako miejsce do rozwijania się w kierunku machine learning?
Piotr: W Ericsson prowadzimy i będziemy prowadzić projekty wykorzystujące machine learning. Dlatego jeśli szukacie miejsca, gdzie w praktyce wykorzystacie wiedzę, ale i będziecie zdobywali ją przy nowych, wyzywających projektach, to na pewno nie będziecie się u nas nudzić. Udostępniamy także szkolenia wewnętrzne, ale korzystamy z zewnętrznych szkoleń.
Piotr Wasilewski. Senior Software Developer w Ericsson. Absolwent informatyki na Politechnice Łódzkiej. Od 7 lat rozwija nowe funkcjonalności w ramach LTE przy użyciu C++, Pythona oraz Erlanga. Od 4 lat zajmuje się głównie zagadnieniami związanymi z Machine Learning.
Jacek Wróblewski. 4G ML Product Guardian w Ericsson. Odpowiedzialny za rozwój implementacji ML w 4G/LTE Traffic Control. W obszarze telekomunikacji (Ericsson) pracuje od 6 lat, Machine Learningiem zajmuje się zawodowo od 4 lat. Jako programista w różnych technologiach pracuje łącznie od około 13 lat.