Zwłaszcza w kontekście zawodów kaggle zauważyłem, że wydajność modelu polega na wyborze / inżynierii funkcji. Chociaż w pełni rozumiem, dlaczego tak jest w przypadku bardziej konwencjonalnych / oldskulowych algorytmów ML, nie rozumiem, dlaczego tak jest w przypadku korzystania z głębokich sieci neuronowych.
Powołując się na książkę Deep Learning:
Głębokie uczenie się rozwiązuje ten centralny problem w uczeniu się przez reprezentację, wprowadzając reprezentacje wyrażone w postaci innych, prostszych reprezentacji. Dogłębne uczenie się umożliwia komputerowi tworzenie złożonych koncepcji z prostszych koncepcji.
Dlatego zawsze myślałem, że jeśli „informacja jest w danych”, wystarczająco głęboka, dobrze sparametryzowana sieć neuronowa wybrałaby odpowiednie funkcje, biorąc pod uwagę wystarczający czas szkolenia.
Odpowiedzi:
Co się stanie, jeśli „wystarczająco głęboka” sieć będzie nieuchronnie ogromna, albo uczyni model szkolenia zbyt drogimi (sumy opłat AWS!) Lub ponieważ musisz wdrożyć sieć w środowisku o ograniczonych zasobach?
Jak można wiedzieć, a priori , że sieć jest dobrze parametryzowane? Znalezienie dobrze działającej sieci może wymagać wielu eksperymentów.
Co jeśli dane, z którymi pracujesz, nie są „przyjazne” standardowym metodom analizy, takim jak łańcuch binarny zawierający tysiące lub miliony bitów, w których każda sekwencja ma inną długość?
Co jeśli jesteś zainteresowany danymi na poziomie użytkownika, ale jesteś zmuszony do pracy z bazą danych, która zbiera tylko dane na poziomie transakcji?
Załóżmy, że Twoje dane mają postać liczb całkowitych, takich jak , a Twoim zadaniem jest przewidzieć sumę cyfr, więc celem w tym przykładzie jest . Łatwo jest parsować każdą cyfrę w tablicy, a następnie sumować tablicę („inżynieria funkcji”), ale w przeciwnym razie stanowi wyzwanie.12,32,486,7 3,5,18,7
Chcielibyśmy żyć w świecie, w którym analiza danych jest „pod klucz”, ale tego rodzaju rozwiązania zwykle istnieją tylko w szczególnych przypadkach. Dużo pracy poświęcono opracowaniu głębokich CNN do klasyfikacji obrazów - wcześniejsza praca obejmowała krok, który przekształcił każdy obraz w wektor o stałej długości.
Inżynieria cech pozwala praktykowi bezpośrednio przekształcić wiedzę na temat problemu w wektor o stałej długości, który można wykorzystać w sieciach przekazywania danych. Wybór funkcji może rozwiązać problem włączenia tak wielu nieistotnych funkcji, że jakikolwiek sygnał został utracony, a także radykalnie zmniejszyć liczbę parametrów do modelu.
źródło
Kluczowymi słowami są tutaj priory i skala . Jako prosty przykład wyobraź sobie, że próbujesz przewidzieć wiek osoby na podstawie zdjęcia. Dzięki zestawowi danych obrazów i grup wiekowych możesz wyszkolić model dogłębnego uczenia się, aby dokonywać prognoz. Jest to obiektywnie naprawdę nieefektywne, ponieważ 90% obrazu jest bezużyteczne, a tylko region z osobą jest faktycznie przydatny. W szczególności twarz osoby, jej ciało i może ubrania.
Z drugiej strony możesz zamiast tego użyć wstępnie przeszkolonej sieci wykrywania obiektów, aby najpierw wyodrębnić ramki ograniczające dla danej osoby, przyciąć obraz, a następnie przekazać go przez sieć. Ten proces znacznie poprawi dokładność twojego modelu z wielu powodów:
1) Wszystkie zasoby sieciowe (tj. Wagi) mogą skupiać się na rzeczywistym zadaniu przewidywania wieku, w przeciwieństwie do konieczności najpierw znalezienia osoby. Jest to szczególnie ważne, ponieważ twarz osoby zawiera przydatne funkcje. W przeciwnym razie drobniejsze funkcje, których potrzebujesz, mogą zostać utracone w pierwszych kilku warstwach. Teoretycznie wystarczająco duża sieć mogłaby rozwiązać ten problem, ale byłoby to bardzo nieefektywne. Przycięty obraz jest również znacznie bardziej regularny niż obraz oryginalny. Podczas gdy na oryginalnym obrazie jest mnóstwo szumów, można stwierdzić, że rozbieżności w przyciętym obrazie są znacznie bardziej skorelowane z celem.
2) Przycięty obraz można znormalizować, aby uzyskać tę samą skalę . Pomaga to drugiej sieci radzić sobie z problemami ze skalowaniem, ponieważ na oryginalnym obrazie ludzie mogą występować w pobliżu lub daleko. Wcześniejsza normalizacja skali sprawia, że przycięty obraz gwarantuje, że będzie w nim osoba, która wypełnia cały przycięty obraz (pomimo tego, że jest w pikselach, jeśli są daleko). Aby zobaczyć, jak to może pomóc w skalowaniu, przycięty obiekt, który ma połowę szerokości i wysokości oryginalnego obrazu, ma 4x krotną liczbę pikseli do przetworzenia, a zatem ta sama sieć zastosowana do tego obrazu miałaby 4x pole odbiorcze oryginalnej sieci na każdej warstwie.
Na przykład w konkursie kaggle płuc częstym tematem w najlepszych rozwiązaniach było pewnego rodzaju wstępne przetwarzanie obrazów płuc, które przycinało je jak najwięcej i izolowało składniki każdego płuca. Jest to szczególnie ważne w przypadku obrazów 3D, ponieważ efekt jest sześcienny: usuwając 20% każdego wymiaru, pozbywasz się prawie połowy pikseli!
źródło
Moja intuicja dotycząca tego zjawiska związana jest ze złożonością modelu, którego należy się nauczyć. Głęboka sieć neuronowa może faktycznie przybliżać dowolną funkcję w teorii , ale wymiar przestrzeni parametrów może być naprawdę duży, jak w milionach. Tak więc znalezienie dobrej sieci neuronowej jest naprawdę trudne. Lubię myśleć o inżynierii cech jako o lepszym początku algorytmu, dostarczając mu dodatkowych informacji na temat reprezentacji danych, które są w pewnym sensie wystarczająco dobre. Oczywiście nie jest to formalne wyjaśnienie, na to pytanie może być bardzo trudno odpowiedzieć z naukowym rygorem.
źródło