Widzenie komputerowe to jeden z najbardziej wpływowych obszarów sztucznej inteligencji, zmieniający niemal każdy aspekt naszego życia na równi z generatywną sztuczną inteligencją. Od analizy obrazu medycznego i pojazdów autonomicznych po systemy bezpieczeństwa – wizja komputerowa oparta na sztucznej inteligencji ma kluczowe znaczenie dla poprawy bezpieczeństwa, wydajności i opieki zdrowotnej dzięki technologiom takim jak wykrywanie obiektów, rozpoznawanie twarzy i klasyfikacja obrazów.
Ale wizja komputerowa robi furorę nie tylko w wyspecjalizowanych dziedzinach; jest to także część aplikacji konsumenckich, z których korzystamy na co dzień. Ulepszanie ostrości aparatu, edytowanie zdjęć, rozpoznawanie tekstu w czasie rzeczywistym i skanowanie za pomocą aparatu w smartfonie, umożliwianie inteligentnym urządzeniom domowym, takim jak kamery bezpieczeństwa, wykrywanie i ostrzeganie użytkowników o ruchu, szacowanie pozycji dla aplikacji do śledzenia kondycji, identyfikacja kalorii i żywności dla aplikacji do śledzenia diety, identyfikacja twarzy w celu odblokowywania telefonów oraz wykrywanie i klasyfikacja twarzy w celu porządkowania zdjęć według osób w albumach. Aplikacje te stały się integralną częścią codziennych doświadczeń milionów ludzi.
Źródło: Prawdziwa wizja komputerowa autorstwa Borisa Denisenko w sprawie Średni
Większość inżynierów zajmujących się uczeniem maszynowym nie buduje swoich modeli od zera, aby ożywić te funkcje. Zamiast tego polegają na istniejących modelach open source. Chociaż jest to najbardziej wykonalne podejście, ponieważ budowanie modelu od zera jest zbyt kosztowne, nadal pozostaje wiele do zrobienia, zanim model będzie można wykorzystać w aplikacji.
Po pierwsze, model open source może rozwiązać podobny scenariusz, ale nie dokładnie taki, jakiego potrzebuje inżynier. Na przykład inżynier ML może potrzebować aplikacji porównującej różne napoje, ale dostępny model jest przeznaczony do porównywania artykułów spożywczych. Chociaż dobrze radzi sobie z jedzeniem, może mieć problemy z napojami.
Po drugie, rzeczywiste warunki, w których te modele muszą działać, często znacznie różnią się od środowisk, dla których zostały pierwotnie zaprojektowane. Na przykład model może mieć setki milionów parametrów, co czyni go zbyt dużym i wymagającym obliczeń, aby można go było uruchomić, powiedzmy, na smartfonie. Próba uruchomienia takiego modelu na urządzeniu z ograniczonymi zasobami obliczeniowymi prowadzi do niskiej wydajności, nadmiernego zużycia baterii lub awarii.
Dostosowywanie się do rzeczywistych scenariuszy i warunków
To prędzej czy później powoduje, że większość inżynierów stosujących uczenie maszynowe do widzenia komputerowego w aplikacjach konsumenckich staje przed koniecznością:
- Dostosowanie istniejącego modelu open source do konkretnego scenariusza.
- Optymalizacja modelu pod kątem pracy w ramach ograniczonych możliwości.
Dostosowanie modelu nie jest czymś, co można po prostu przepuścić. Zaczynasz od wstępnie wytrenowanego modelu i dostosowujesz go do konkretnego zadania. Wiąże się to z modyfikacją wielu parametrów — liczby warstw, liczby neuronów w każdej warstwie, szybkości uczenia się, rozmiaru partii i innych. Sama liczba możliwych kombinacji może być przytłaczająca i wymagać przetestowania potencjalnie milionów różnych konfiguracji. W tym miejscu w grę wchodzi optymalizacja hiperparametrów (HPO). HPO pomaga usprawnić ten proces, umożliwiając szybsze znalezienie najlepszej konfiguracji niż w przypadku ręcznego dostosowywania parametrów osobno.
Po dostosowaniu modelu do swojego scenariusza kolejnym wyzwaniem jest uruchomienie go na urządzeniu z ograniczonymi zasobami. Na przykład może być konieczne wdrożenie modelu na smartfonie z zaledwie 6 GB pamięci RAM. W takich przypadkach kompresja modelu staje się niezbędna, aby zmniejszyć rozmiar modelu i umożliwić zarządzanie nim na urządzeniach z ograniczoną pamięcią i mocą obliczeniową.
Techniki optymalizacji hiperparametrów (HPO).
Optymalizacja hiperparametrów polega na znalezieniu najlepszego zestawu parametrów dla sieci neuronowej, aby zminimalizować błąd w konkretnym zadaniu. Załóżmy, że trenujesz model, aby oszacował wiek osoby na podstawie zdjęcia. Błąd w tym kontekście odnosi się do odchylenia wieku oszacowanego przez model od rzeczywistego wieku danej osoby – mierzonego, powiedzmy, liczbą lat, w których jest on wyłączony.
Wyszukiwanie siatki
Wyszukiwanie siatki to metoda brutalna, która znajduje optymalną kombinację poprzez testowanie każdego możliwego zestawu parametrów. Zaczynasz od istniejącego modelu i dostosowujesz go do swojego zadania. Następnie systematycznie modyfikujesz parametry — takie jak liczba neuronów lub warstw — aby zobaczyć, jak te zmiany wpływają na błąd modelu. Przeszukiwanie siatki polega na testowaniu każdej kombinacji tych parametrów w celu znalezienia tej, która powoduje najniższy błąd. Wyzwanie polega na tym, że istnieje wiele parametrów, które można dostosować, a każdy z nich ma szeroki zakres potencjalnych wartości.
Choć metoda ta gwarantuje znalezienie najlepszej opcji, jest niezwykle czasochłonna i często niepraktyczna.
Losowe wyszukiwanie
Innym podejściem jest wyszukiwanie losowe, w którym losowo próbujesz część możliwych kombinacji zamiast testować każdą kombinację. Metoda ta polega na wybraniu losowych wartości każdego parametru z określonego zakresu i przetestowaniu tych kombinacji. Chociaż jest szybsze niż wyszukiwanie siatki, nie gwarantuje najlepszego wyniku. Jednak prawdopodobnie znajdzie dobre, jeśli nie optymalne rozwiązanie. To kompromis pomiędzy szybkością i precyzją.
Na przykład, jeśli istnieje 1000 możliwych kombinacji parametrów, można losowo pobrać próbkę i przetestować 100, co zajmie tylko jedną dziesiątą czasu w porównaniu do testowania wszystkich kombinacji.
HPO z wykorzystaniem algorytmów optymalizacyjnych
Metody dostrajania hiperparametrów oparte na optymalizacji wykorzystują różne podejścia matematyczne w celu skutecznego znajdowania najlepszych ustawień parametrów. Na przykład optymalizacja bayesowska wykorzystuje modele probabilistyczne do kierowania wyszukiwaniem, podczas gdy TetraOpt — algorytm opracowany przez autora i zespół — wykorzystuje optymalizację pociągu tensorów, aby lepiej poruszać się po przestrzeniach wielowymiarowych. Metody te są bardziej wydajne niż wyszukiwanie siatkowe lub losowe, ponieważ mają na celu zminimalizowanie liczby ocen potrzebnych do znalezienia optymalnych hiperparametrów, koncentrując się na najbardziej obiecujących kombinacjach bez testowania każdej możliwości.
Takie algorytmy optymalizacyjne pomagają szybciej znajdować lepsze rozwiązania, co jest szczególnie cenne, gdy ocena modelu jest kosztowna obliczeniowo. Ich celem jest zapewnienie najlepszych wyników przy jak najmniejszej liczbie prób.
Model ML Techniki kompresji
Gdy model sprawdzi się w teorii, kolejnym wyzwaniem jest uruchomienie go w rzeczywistych warunkach. Weźmy na przykład ResNet do rozpoznawania twarzy, YOLO do zarządzania ruchem i analityki sportowej lub VGG do przesyłania stylu i moderowania treści. Chociaż modele te są potężne, często są zbyt duże dla urządzeń o ograniczonych zasobach, takich jak smartfony lub inteligentne aparaty fotograficzne.
Inżynierowie ML sięgają po zestaw sprawdzonych technik kompresji, aby uczynić modele bardziej wydajnymi w takich środowiskach. Metody te — kwantyzacja, przycinanie, dekompozycja macierzy i destylacja wiedzy — są niezbędne do zmniejszenia rozmiaru i wymagań obliczeniowych modeli sztucznej inteligencji przy jednoczesnym zachowaniu ich wydajności.
Kwantyzacja
Źródło: Opanuj sztukę kwantyzacji autorstwa Jana Marcela Kezmanna w sprawie Średni
Kwantyzacja jest jedną z najpopularniejszych metod kompresji sieci neuronowych, przede wszystkim dlatego, że wymaga minimalnej liczby dodatkowych obliczeń w porównaniu z innymi technikami.
Podstawowa idea jest prosta: sieć neuronowa składa się z wielu macierzy wypełnionych liczbami. Liczby te mogą być przechowywane na komputerze w różnych formatach, takich jak zmiennoprzecinkowa (np. 32,15) lub liczba całkowita (np. 4). Różne formaty zajmują różną ilość pamięci. Na przykład liczba w formacie float32 (np. 3.14) zajmuje 32 bity pamięci, podczas gdy liczba w formacie int8 (np. 42) zajmuje tylko 8 bitów.
Jeśli liczby modelu są oryginalnie przechowywane w formacie float32, można je przekonwertować na format int8. Ta zmiana znacznie zmniejsza zużycie pamięci modelu. Na przykład model zajmujący początkowo 100 MB można po kwantyzacji skompresować do zaledwie 25 MB.
Przycinanie
Jak wspomniano wcześniej, sieć neuronowa składa się z zestawu macierzy wypełnionych liczbami, zwanych „wagami”. Przycinanie to proces usuwania „nieistotnych” wag z tych macierzy. Eliminując te niepotrzebne ciężary, zachowanie modelu pozostaje w dużej mierze niezmienione, ale wymagania dotyczące pamięci i obliczeń są znacznie zmniejszone.
Wyobraźmy sobie na przykład, że jedna z macierzy sieci neuronowej wygląda następująco:
Po przycięciu może wyglądać mniej więcej tak:
Kreski („-”) wskazują, gdzie elementy zostały usunięte podczas przycinania. Ten uproszczony model wymaga do działania mniej zasobów obliczeniowych.
Rozkład macierzy
Dekompozycja macierzy to kolejna skuteczna metoda kompresji, która polega na rozbiciu (lub „rozłożeniu”) dużych macierzy w sieci neuronowej na kilka mniejszych, prostszych macierzy.
Załóżmy na przykład, że jedna z macierzy w sieci neuronowej wygląda następująco:
Rozkład macierzy pozwala nam zastąpić tę pojedynczą dużą macierz dwiema mniejszymi.
Po pomnożeniu te mniejsze macierze dają taki sam wynik jak oryginalna, zapewniając, że zachowanie modelu pozostanie spójne.
Oznacza to, że możemy zastąpić macierz z pierwszego rysunku macierzami z drugiego.
Oryginalna macierz zawiera 9 parametrów, ale po rozłożeniu macierze łącznie zawierają tylko 6, co daje redukcję o ~33%. Jedną z kluczowych zalet tej metody jest możliwość znacznej kompresji modeli AI – w niektórych przypadkach nawet kilkukrotnej.
Należy zauważyć, że rozkład macierzy nie zawsze jest idealnie dokładny. Czasami w procesie wprowadzany jest niewielki błąd przybliżenia, ale wzrost wydajności często przewyższa tę niewielką wadę.
Destylacja wiedzy
Destylacja wiedzy to technika budowania mniejszego modelu, zwanego „modelem ucznia”, poprzez przeniesienie wiedzy z większego, bardziej złożonego modelu, zwanego „modelem nauczyciela”. Kluczową ideą jest trenowanie mniejszego modelu obok większego, tak aby model ucznia nauczył się naśladować zachowanie modelu nauczyciela.
Oto jak to działa: Te same dane przekazujesz przez dużą sieć neuronową (nauczyciel) i skompresowaną (uczeń). Obydwa modele generują wyniki, a model ucznia jest szkolony tak, aby generował wyniki możliwie najbardziej podobne do wyników nauczyciela. W ten sposób skompresowany model uczy się działać podobnie do większego modelu, ale z mniejszą liczbą parametrów.
Destylację można łatwo połączyć z kwantyzacją, przycinaniem i rozkładem macierzy, gdzie model nauczyciela jest wersją oryginalną, a uczeń skompresowaną. Kombinacje te pomagają udoskonalić dokładność skompresowanego modelu.
W praktyce inżynierowie często łączą te techniki, aby zmaksymalizować wydajność swoich modeli podczas wdrażania ich w rzeczywistych scenariuszach.
Sztuczna inteligencja ewoluuje dwiema równoległymi ścieżkami. Z jednej strony napędza imponujący postęp w takich obszarach jak opieka zdrowotna, przesuwając granice tego, co uważaliśmy za możliwe. Z drugiej strony, równie kluczowe jest dostosowanie sztucznej inteligencji do warunków rzeczywistych, ponieważ wprowadzanie zaawansowanej technologii w codzienne życie milionów ludzi, często płynnie i niezauważalnie. Ta dwoistość odzwierciedla wpływ rewolucji smartfonów, która przekształciła przetwarzanie danych z czegoś destrukcyjnego i kosztownego w technologię dostępną i praktyczną dla każdego.
Inżynierowie wykorzystują techniki optymalizacji omówione w tym artykule, aby sztuczna inteligencja stała się namacalną częścią codziennego życia. Badania te są w toku, a duże firmy technologiczne (takie jak Meta, Tesla czy Huawei) i laboratoria badawcze inwestują znaczne zasoby w znajdowanie nowych sposobów optymalizacji modeli. Jednak dobrze wdrożone techniki HPO i metody kompresji już pomagają inżynierom na całym świecie we wprowadzaniu najnowszych modeli do codziennych scenariuszy i urządzeń, tworząc imponujące produkty dla milionów ludzi dzisiaj i popychając branżę do przodu dzięki opublikowanym i otwartym odkryciom.