Sztuczna inteligencja (ang. artificial intelligence – AI) to coraz częściej wykorzystywana technologia, obecna w różnych aspektach naszego życia. Jej implementacja otwiera przed nami coraz więcej możliwości i umożliwia rozwiązania, które przed jej zaistnieniem nie były możliwe. Ciągły rozwój w dziedzinie sztucznej inteligencji pokazuje, jak duże różnice występują między rozwiązaniami wykreowanymi przez umysł człowieka, a tymi proponowanymi nam przez maszyny. Okazuje się, że sztuczna inteligencja potrafi rozwiązywać pewne problemy w sposób zupełnie inny, niż zrobiłby to człowiek. 

W kontekście sztucznej inteligencji warto zauważyć, że dzisiejszy świat to świat dużych zbiorów danych (ang. big data). Dzięki sztucznej inteligencji i sieciom neuronowym możemy podejmować oparte na tych danych decyzje i pozyskiwać ogromne ilości informacji dosłownie w ciągu sekund. Pozyskiwana dzięki AI wiedza wpływa więc znacząco na tempo rozwoju wielu różnych dziedzin.

Zauważając ten potencjał,  w firmie WEBSENSA wykorzystujemy sztuczną inteligencję i jej podobszary, takie jak przetwarzanie języka naturalnego (ang. natural language processing) oraz narzędzia, takie jak uczenie maszynowe (ang. machine learning). Wdrażamy technologie oparte na AI w różnych projektach, zarówno tych realizowanych dla klientów, jak i w naszych własnych. Celem wprowadzenia do opisu sposobów wykorzystania przez nas tej technologii, przedstawimy teraz krótko specyfikę i budowę głównych rodzajów sieci neuronowych. 

SZTUCZNE SIECI NEURONOWE

Sieci neuronowe, nazywane właściwie sztucznymi sieciami neuronowymi (ang. artificial neural networks – ANN), oparte są na zasadzie działania biologicznych sieci neuronowych. ANN składają się z elementów zwanych neuronami, z których każdy może podejmować pojedyncze decyzje oparte na obliczeniach matematycznych. Sieci neuronowe są więc konstrukcją matematyczną – złożonym z warstw algorytmem, który po otrzymaniu danych wejściowych oddaje dane wyjściowe.

Sztuczne sieci neuronowe można stosować na różne sposoby, między innymi  do rozpoznawania wzorców, optymalizacji, pamięci asocjacyjnej i przewidywania. W tym artykule chcemy przybliżyć nieco dwa rodzaje sieci neuronowych.

Konwolucyjna sieć neuronowa

Konwolucyjna (splotowa) sieć neuronowa (ang. Convolutional neural network – CNN) to sieć specjalizująca się głównie w rozpoznawaniu i klasyfikowaniu obrazów. Można ją wykorzystywać do realizacji dowolnych zadań związanych z wizualizacją komputerową. Ogólnie rzecz biorąc, CNN wykorzystuje fakt, że każdy obraz składa się z dających się rozróżnić, pojedynczych elementów – pikseli. Sieć tworzy mechanizm analizy każdego z tych elementów w celu klasyfikacji obrazu jako całości.

3 warstwy CNN:

  1. Warstwa konwolucyjna (splotowa) – warstwa, w której obraz jest dzielony na małe fragmenty i analizowany po kilka pikseli jednocześnie. Efektem tej analizy jest mapa cech (ang. features map), która obrazuje, do jakiej klasy cech należy każdy z fragmentów obrazu. Jedna warstwa odpowiada jednej cesze obrazu, a ponieważ do modelowania używanych jest zwykle kilka cech – w jednej sieci występuje zazwyczaj wiele warstw konwolucyjnych.
  2. Warstwa łącząca (ang. pooling layer) – warstwa, w której analizie podlegają niewielkie obszary jednostek konwolucyjnych. W warstwie tej następuje redukcja  ilości informacji o każdym obiekcie (przy jednoczesnym zachowaniu najważniejszych informacji). Warstwa splotowa jest zwykle używana zamiennie z warstwą pooling.
  3. Warstwa w pełni połączona (ang. fully connected layer) – w tej warstwie następują ostateczne decyzje dotyczące klasyfikacji  obrazu.

Warstwa łącząca jest też nazywana próbkowaniem w dół i działa na każdej mapie cech, w celu utworzenia nowych zestawów połączonych map cech. Warstwa łącząca ma za zadanie zmniejszyć rozmiar danych (liczbę pikseli czy wartości). Uzyskane wyniki w postaci map z próbkowaniem w dół są przydatne ze względu na wrażliwość sieci na lokalizację elementów obrazu. Po połączeniu map, sieci stają się bardziej odporne na zmiany położenia obiektu na obrazie.

W pełni połączona warstwa jest kluczową częścią każdej sieci neuronowej, w tym także CNN. W tej warstwie odbywa się końcowa klasyfikacja obrazów do wersji komputerowej, a jej celem jest porządkowanie obrazów według przyjętych klas.

Po tym, jak warstwa konwolucyjna i warstwa pooling zakończą analizę, dane wyjściowe są spłaszczone w pojedynczy wektor wartości, gdzie każda wartość pokazuje, jakie jest prawdopodobieństwo, że konkretna cecha należy do określonej klasy. W pełni połączona warstwa zbiera wyniki tego procesu oraz oblicza wynik klasyfikacji, a następnie przechodzi przez wsteczną propagację.

Propagacja wsteczna (ang. backpropagation) to algorytm, który minimalizuje możliwość błędu poprzez wyszukiwanie optymalnych wartości wag sieci. Podczas tego procesu dokonuje się korekty wag poszczególnych neuronów w taki sposób, aby zmniejszyły błąd jaki był obliczony na wyjściu sieci. Cały ten proces pozwala uzyskać wynik jak najbardziej zgodny z prawdą.

Rekurencyjna sieć neuronowa

Rekurencyjna sieć neuronowa (ang. Recurrent neural network – RNN) to wielowarstwowa sieć neuronowa, która wykorzystuje uczenie głębokie do przewidywania lub klasyfikacji danych sekwencyjnych, w tym językowych. RNN jest oparta na procesie wyszukiwania zależności, w którym bierze pod uwagę elementy analizowanych danych wejściowych.

Ten rodzaj sieci różni się od pozostałych. W przeciwieństwie do jednokierunkowych sieci neuronowych, dane wyjściowe niektórych warstw są przesyłane z powrotem do danych wejściowych poprzedniej warstwy. To dodanie pozwala na analizę danych sekwencyjnych, czego nie jest w stanie wykonać tradycyjna sieć neuronowa.

Zastosowania RNN:

  1. analiza czasowa  – np. wykrywanie anomalii szeregów czasowych
  2. przetwarzanie języka naturalnego – np. generowanie tekstu, rozpoznawanie mowy i tłumaczenie maszynowe
  3. wizja komputerowa – np. generowanie opisu obrazu czy modelowanie języka

Wady sieci neuronowych

Chociaż sieci neuronowe otwierają przed nami wiele możliwości, korzystanie z nich wiąże się też z różnymi ograniczeniami. Ich przyczyną mogą być między innymi ilość lub jakość danych wejściowych – jeśli nie zapewnimy wystarczającej ich ilości lub nie będą one reprezentatywne. Sieć może mieć wtedy problemy z wyciągnięciem odpowiednich wniosków i klasyfikacją danych według jakiegoś wzoru czy korelacji.

Kolejna problematyczna sytuacja może pojawić się w przypadku bardzo dużych sieci neuronowych. Im są one większe, tym ich “trenowanie” staje się trudniejsze i bardziej czasochłonne. Aby uzyskać pożądane efekty, sieci neuronowe wymagają trenowania w zakresie „poprawnego” działania danych wejściowych, a w przypadku dużych zbiorów danych – dłuższego czasu ich przetwarzania.

NASZE PROJEKTY OPARTE NA AI

1. System Rozpoznawania Obrazów dla McDonald’s

Razem z OMD Poland Media Agency i McDonald’s Poland WEBSENSA stworzyła System Rozpoznawania Obrazów, którego zadaniem było wykrywanie, które produkty sieci McDonald były prezentowane na zdjęciach użytkowników Instagrama z hashtagiem #mamsmakanamaka.

Przeszkoliliśmy sieci neuronowe tak, aby  rozpoznawały i klasyfikowały te produkty na zdjęciach. Byliśmy w stanie otagować i wyróżnić produkty sieci – hamburgery, frytki, kawy, zimne napoje, lody i desery. Dzięki temu możliwe było zobaczenie, z jakimi produktami sieci McDonald użytkownicy najchętniej robią sobie zdjęcia, a tym samym – które produkty są najbardziej popularne wśród konsumentów.

System ten pozwolił firmie McDonald lepiej poznać preferencje swoich konsumentów, a następnie polepszyć komunikację z klientami w mediach społecznościowych. Zebrane dane umożliwiły  wdrożenie skuteczniejszej promocji marki w Internecie.

Projekt okazał się dużym sukcesem. Doceniono go między innymi na konkursie INNOVATION 2018 otrzymaliśmy za niego III miejsce w kategorii media/algorytmy i narzędzia optymalizacyjne.

2. WEBSENSA OpenRTB Bidder 

Bidder to część naszego zestawu produktów stworzonych dla obszaru AdTech OpenRTB (real-time bidding). Jego celem jest wybór i wyświetlenie najbardziej odpowiedniej reklamy dla użytkownika odwiedzającego daną stronę z zestawu wszystkich aktywnych kampanii reklamowych.

Złożoność produktu OpenRTB Bidder opiera się na:

  • do wyboru są dziesiątki tysięcy aktywnych kampanii reklamowych i kreacji,
  • użytkowników opisują setki funkcji i segmentów,
  • wybrana reklama musi być odpowiednia dla danej strony,
  • powstają tysiące zapytań ofertowych na sekundę, które musimy obsłużyć,
  • każde zapytanie ofertowe (decyzja o wyświetleniu reklamy) musi zostać obsłużone w czasie krótszym niż 50 ms, aby było wzięte pod uwagę przez Bid Exchange,
  • wybrana reklama musi mieć najwyższy przewidywany CTR (ang. click-through-rate – współczynnik klikalności), przewidywaną możliwość lub wartość konwersji w zależności od rodzaju kampanii.

Ostatnia z wymienionych kwestii może być rozwiązana tylko za pomocą algorytmów uczenia maszynowego lub sieci neuronowych. Przez ponad rok ciągłego rozwoju i testowania kolejnych wersji WEBSENSA OpenRTB Bidder wdrażaliśmy różne algorytmy uczenia maszynowego i architektury sieci neuronowych.

Technologie wykorzystane w OpenRTB Bidder

Zaczęliśmy od regresji logistycznej (ang.  logistic regression), ale nie dało nam to wyników lepszych niż prosta heurystyka. Drugim rozwiązaniem była maszyna do faktoryzacji (ang. factorisation machine) oparta na sieci neuronowej z warstwami w pełni połączonymi. Następnie wdrożyliśmy rekurencyjną sieć neuronową i uwzględniliśmy w niej historię sesji użytkowników, co znacznie poprawiło wydajność Biddera. Ostateczne rozwiązanie oparliśmy na specjalnym rodzaju sieci rekurencyjnej – long short-term memory (LSTM), która okazała się świetnym rozwiązaniem.

Obecnie WEBSENSA OpenRTB Bidder opiera się na specjalnie dostosowywanych sieciach neuronowych opartych na wcześniejszych doświadczeniach. Ze względu na spersonalizowane podejście nasz Bidder przewyższa konkurencję w dziedzinie openRTB. Stale rozwijamy to narzędzie i mamy nadzieję, że testowanie nowych architektur sieci neuronowych będzie dawało nam coraz lepsze wyniki.

3. WEBSENSA Freeeze App

Jest to projekt, który realizowaliśmy przez kilka miesięcy w ramach naszych wewnętrznych projektów badawczo-rozwojowych. Chcieliśmy dzięki niemu spróbować czegoś zupełnie innego, niż robiliśmy dotąd. Celem projektu było stworzenie aplikacji wykorzystującej fotograficzną technikę bullet-time (znaną również jako efekt zatrzymania czasu czy fotografię obrotową). Efekt zatrzymania czasu daje możliwości ciekawego kreowania obrazu i uchwyceniu dynamizmu chwili.

Aplikacja Freeeze ma umożliwiać stworzenie efektu bullet-time za pomocą jedynie 2 smartfonów.

Tradycyjnym sposobem osiągnięcia tego efektu jest posiadanie od 24 do 150+ aparatów fotograficznych, które umiejscowione są na szynach wokół fotografowanego obiektu. Poprzez złączenie zrobionych przez nie w tym samym momencie zdjęć tworzy się kolejne klatki filmu. Ponieważ zorganizowanie takich warunków jest poza zasięgiem większości z nas, postanowiliśmy stworzyć projekt Freeeze. Aplikacja ma umożliwiać stworzenie efektu bullet-time za pomocą jedynie 2 smartfonów. Działanie Freeeze opiera się na synchronizacji 2 zrobionych zdjęć, a potem wygenerowaniu za pomocą algorytmów wykorzystujących sieci neuronowe wszystkich zdjęć pośrednich.

Aby to było możliwe, musieliśmy najpierw pozyskać ogromne ilość danych treningowych – zdjęć reprezentujących różne sceny pod wieloma, specjalnie dobranymi kątami widzenia. Następnie wykorzystaliśmy sieci neuronowe, aby nauczyły się odtwarzać na podstawie 2 zdjęć danej sceny jej widok z dowolnego innego kąta patrzenia. 

Zbieranie danych we Freeeze

Dane wejściowe, jakich użyliśmy w pierwszym etapie to zestawy ujęć powstałych w technice obrotowej. Bardzo ważne na tym etapie było zebranie na tyle dużego zbioru zdjęć, aby sieci neuronowe miały materiał do generowania pożądanych wyników. Użyliśmy dwóch metod zbierania danych.

W pierwszym etapie – sami zabraliśmy się za robienie zdjęć. Na statywie zainstalowaliśmy trzy kamery i skierowaliśmy ich obiektywy w to jedno miejsce. Używając tej konstrukcji sfilmowaliśmy obiekty, a następnie powstałe filmy pocięliśmy na kadry, aby uzyskać ujęcia z różnych miejsc – pod różnymi kątami. Filmy robiliśmy w kilku lokalizacjach – naszym biurze oraz przestrzeni miejskiej – aby zebrany materiał był jak najbardziej zróżnicowany.

Drugą metodą, z której skorzystaliśmy, było cięcie na kadry dostępnych filmów wykorzystujących efekt zatrzymania czasu. Dzięki połączeniu tych dwóch metod zebraliśmy wystarczającą ilość materiału, aby rozpocząć trenowanie sieci neuronowych.

Sieci neuronowe we Freeeze

We Freeeze użyliśmy dwóch rodzajów sieci neuronowych. Pierwszym z nich była konwolucyjna sieć neuronowa, wykorzystująca rozpoznawanie obrazów i uczenie głębokie. Sieć ta miała na celu analizowanie obrazów wejściowych, klasyfikowanie różnych elementów na tych obrazach, a dzięki temu odróżnienie jednego od drugiego.

Drugim użytym przez nas rozwiązaniem była sieć generative adversarial network (GAN), która posiada zdolność generowania nowych treści (w naszym przypadku – zdjęć). Składa się ona z dwóch podmodeli: generatora i dyskryminatora. Generator, jak sugeruje jego nazwa, generuje nowe przykłady, natomiast dyskryminator próbuje rozróżnić prawdziwe przykłady (te z zestawu danych) od tych fałszywych (tych wygenerowanych).

W projekcie Freeeze są użyte dwie sieci neuronowe, które ze sobą konkurują, jednocześnie ucząc się od siebie nawzajem

Są to dwie współpracujące ze sobą sieci neuronowe, z których pierwsza ma generować z otrzymanych danych wejściowych nowe obrazy, natomiast druga – rozróżniać rzeczywiste obrazy od tych generowanych przez pierwszą sieć neuronową. Można powiedzieć, że w rozwiązaniu GAN te dwie sieci konkurują ze sobą, jednocześnie ucząc się od siebie nawzajem. Jak to działa? Druga sieć wykrywa fałszywe obrazy stworzone przez pierwszą, natomiast pierwsza kreuje na tyle realistyczne kadry, aby nie zostały wykryte przez tę drugą.

Obecny rozwój projektu Freeeze

W czasie pisania tego artykułu projekt jest ciągle w fazie rozwoju. Jeśli jesteś zainteresowany naszymi postępami w tym projekcie, napisz do nas. Zachęcamy też do zapisu do newslettera naszego bloga – na pewno będziemy informować o kolejnych kamieniach milowych w naszych projektach.