Spis treści[Ukryć][Pokazać]
Techniki głębokiego uczenia znane jako „graficzne sieci neuronowe” (GNN) działają w domenie grafów. Sieci te znalazły ostatnio zastosowanie w różnych dziedzinach, m.in. w wizjach komputerowych, systemach rekomendujących i optymalizacji kombinatorycznej.
Ponadto sieci te mogą być wykorzystywane do reprezentowania złożonych systemów, w tym sieci społecznościowych, sieci interakcji białko-białko, wykresów wiedzy i innych w kilku dziedzinach nauki.
Przestrzeń nieeuklidesowa jest miejscem, w którym działają dane wykresu, w przeciwieństwie do innych typów danych, takich jak obrazy. Do klasyfikowania węzłów, przewidywania połączeń i danych klastrowych wykorzystywana jest analiza grafowa.
W tym artykule przyjrzymy się wykresowi Sieć neuronowa szczegółowo, jego rodzaje, a także podaj praktyczne przykłady z wykorzystaniem PyTorch.
Czym więc jest wykres?
Wykres to rodzaj struktury danych składającej się z węzłów i wierzchołków. Połączenia między różnymi węzłami są określane przez wierzchołki. Jeśli kierunek jest wskazany w węzłach, mówi się, że graf jest skierowany; w przeciwnym razie jest nieukierunkowany.
Dobrym zastosowaniem grafów jest modelowanie relacji między różnymi osobami w serwis społecznościowy. Kiedy mamy do czynienia ze złożonymi okolicznościami, takimi jak linki i wymiany, wykresy są bardzo pomocne.
Są wykorzystywane przez systemy rekomendacji, analizę semantyczną, analizę sieci społecznościowych i rozpoznawanie wzorców
. Tworzenie rozwiązań opartych na wykresach to zupełnie nowa dziedzina, która oferuje wnikliwe zrozumienie złożonych i powiązanych ze sobą danych.
Wykres sieci neuronowej
Graficzne sieci neuronowe to wyspecjalizowane typy sieci neuronowych, które mogą działać w formacie danych wykresu. Osadzanie grafów i konwolucyjne sieci neuronowe (CNN) mają na nie istotny wpływ.
Graficzne sieci neuronowe są wykorzystywane w zadaniach, które obejmują przewidywanie węzłów, krawędzi i wykresów.
- CNN są używane do klasyfikowania obrazów. Podobnie, aby przewidzieć klasę, GNN są stosowane do siatki pikseli, która reprezentuje strukturę wykresu.
- Kategoryzacja tekstu przy użyciu rekurencyjnych sieci neuronowych. Sieci GNN są również używane z architekturami grafowymi, w których każde słowo w wyrażeniu jest węzłem.
Aby prognozować węzły, krawędzie lub kompletne grafy, sieci neuronowe są wykorzystywane do tworzenia sieci GNN. Na przykład przewidywanie na poziomie węzła może rozwiązać problem, taki jak wykrywanie spamu.
Przewidywanie połączeń jest typowym przypadkiem w systemach rekomendujących i może być przykładem problemu przewidywania krawędzi.
Wykresowe typy sieci neuronowych
Istnieje wiele typów sieci neuronowych, a w większości z nich występują splotowe sieci neuronowe. W tej części dowiemy się o najbardziej znanych sieciach GNN.
Grafowe sieci splotowe (GCN)
Są porównywalne z klasycznymi CNN. Nabiera cech, patrząc na pobliskie węzły. Funkcja aktywacji jest używana przez GNN do dodawania nieliniowości po agregacji wektorów węzłów i wysłaniu danych wyjściowych do gęstej warstwy.
Składa się on ze splotu wykresu, warstwy liniowej i w istocie funkcji aktywacji osoby nieuczącej się. Sieci GCN występują w dwóch głównych odmianach: Spectral Convolutional Networks i Spatial Convolutional Networks.
Wykres sieci autokodera
Wykorzystuje koder, aby nauczyć się przedstawiać wykresy, a dekoder, aby spróbować zrekonstruować wykresy wejściowe. Istnieje warstwa wąskiego gardła łącząca koder i dekoder.
Ponieważ autokodery doskonale radzą sobie z balansem klas, są często wykorzystywane do przewidywania linków.
Rekurencyjne grafowe sieci neuronowe (RGNN)
W sieciach wielorelacyjnych, gdzie pojedynczy węzeł ma wiele relacji, uczy się optymalnego wzorca dyfuzji i może zarządzać grafami. W celu zwiększenia gładkości i ograniczenia przeparametryzacji, w tej formie grafowej sieci neuronowej stosuje się regularyzatory.
Aby uzyskać lepsze wyniki, RGNN wymagają mniejszej mocy obliczeniowej. Są wykorzystywane do generowania tekstu, rozpoznawania mowy, tłumaczenia maszynowego, opisu obrazu, znakowania wideo i podsumowania tekstu.
Bramkowane sieci grafów neuronowych (GGNN)
Jeśli chodzi o długoterminowe zadania zależne, przewyższają one RGNN. Poprzez uwzględnienie bramek węzłowych, brzegowych i czasowych w zależnościach długoterminowych, sieci neuronowe z bramkowanym grafem wzmacniają sieci neuronowe z grafem rekurencyjnym.
Bramki działają podobnie do bramkowanych jednostek rekurencyjnych (GRU), ponieważ służą do przywoływania i zapominania danych na różnych etapach.
Implementacja Graph Neural Network za pomocą Pythona
Konkretny problem, na którym się skupimy, to powszechny problem z kategoryzacją węzłów. Mamy sporą sieć społecznościową o nazwie musae-github, który został skompilowany z otwartego interfejsu API dla programistów GitHub.
Krawędzie pokazują wzajemne relacje zwolenników między węzłami, które reprezentują programistów (użytkowników platformy), którzy grali w co najmniej 10 repozytoriach (zauważ, że słowo wzajemne wskazuje na nieukierunkowaną relację).
Właściwości węzła są pobierane na podstawie lokalizacji węzła, repozytoriów oznaczonych gwiazdką, pracodawcy i adresu e-mail. Przewidywanie, czy użytkownik GitHub jest programistą internetowym, czy programista uczenia maszynowego to nasze zadanie.
Stanowisko pracy każdego użytkownika służyło jako podstawa tej funkcji targetowania.
Instalowanie PyTorcha
Na początek musimy najpierw zainstalować PyTorch. Możesz go skonfigurować zgodnie z twoją maszyną od tutaj. Tutaj jest moje:
Importowanie modułów
Teraz importujemy niezbędne moduły
Importowanie i eksploracja danych
Następnym krokiem jest odczytanie danych i wykreślenie pierwszych pięciu i ostatnich pięciu wierszy z pliku etykiet.
W tej sytuacji istotne są dla nas tylko dwie z czterech kolumn — identyfikator węzła (tj. user) i ml_target, który wynosi 1, jeśli użytkownik jest członkiem społeczności uczenia maszynowego, a 0 w innym przypadku.
Biorąc pod uwagę, że istnieją tylko dwie klasy, możemy być teraz pewni, że naszym zadaniem jest kwestia klasyfikacji binarnej.
W wyniku znacznej nierównowagi klas, klasyfikator może po prostu założyć, która klasa jest większością, zamiast oceniać klasę niedostatecznie reprezentowaną, co sprawia, że równowaga klas jest kolejnym kluczowym czynnikiem do rozważenia.
Wykreślenie histogramu (rozkładu częstotliwości) ujawnia pewien brak równowagi, ponieważ jest mniej klas z uczenia maszynowego (etykieta=1) niż z innych klas.
Kodowanie funkcji
Charakterystyki węzłów informują nas o funkcji, która jest powiązana z każdym węzłem. Implementując naszą metodę do kodowania danych, możemy błyskawicznie zakodować te cechy.
Chcemy wykorzystać tę metodę do enkapsulacji niewielkiej części sieci (powiedzmy 60 węzłów) do wyświetlania. Kod znajduje się tutaj.
Projektowanie i wyświetlanie wykresów
Wykorzystamy pochodnię geometryczną. dane do zbudowania naszego wykresu.
Do modelowania pojedynczego wykresu z różnymi (opcjonalnymi) właściwościami używane są dane będące prostym obiektem Pythona. Korzystając z tej klasy i następujących atrybutów — z których wszystkie są tensorami pochodni — stworzymy nasz obiekt wykresu.
Postać wartości x, która zostanie przypisana do zakodowanych cech węzła, to [liczba węzłów, liczba cech].
Kształt y to [liczba węzłów] i zostanie zastosowany do etykiet węzłów.
indeks krawędzi: Aby opisać graf nieskierowany, musimy rozwinąć oryginalne indeksy krawędzi, aby umożliwić istnienie dwóch odrębnych krawędzi skierowanych, które łączą te same dwa węzły, ale wskazują przeciwne kierunki.
Para krawędzi, jedna wskazująca od węzła 100 do 200, a druga od 200 do 100, jest wymagana, na przykład między węzłami 100 i 200. Jeśli podane są indeksy krawędzi, to tak można przedstawić graf nieskierowany. [2,2*liczba oryginalnych krawędzi] będzie formą tensorową.
Tworzymy naszą metodę rysowania wykresu, aby wyświetlić wykres. Pierwszym krokiem jest przekształcenie naszej jednorodnej sieci w graf NetworkX, który można następnie narysować za pomocą NetworkX.draw.
Stwórz nasz model GNN i wytrenuj go
Zaczynamy od zakodowania całego zestawu danych, wykonując kodowanie danych ze światłem=False, a następnie wywołując graf konstrukcji ze światłem=False, aby zbudować cały wykres. Nie będziemy próbować rysować tak dużego wykresu, ponieważ zakładam, że używasz lokalnego komputera, który ma ograniczone zasoby.
Maski, które są wektorami binarnymi, które identyfikują, które węzły należą do każdej konkretnej maski za pomocą cyfr 0 i 1, mogą być używane do powiadamiania fazy uczenia, które węzły powinny być uwzględnione podczas uczenia, oraz do informowania fazy wnioskowania, które węzły są danymi testowymi. Pochodnia geometryczna.transformacje.
Podział na poziomie węzła można dodać za pomocą właściwości maski szkoleniowej, maski val i maski testowej klasy AddTrainValTestMask, które można wykorzystać do wykonania wykresu i umożliwienia nam określenia, w jaki sposób nasze maski mają być konstruowane.
Po prostu wykorzystujemy 10% do treningu i używamy 60% danych jako zestawu testowego, a 30% jako zestawu walidacyjnego.
Teraz ułożymy dwie warstwy GCNConv, z których pierwsza ma liczbę obiektów wyjściowych, która jest równa liczbie obiektów na naszym wykresie jako obiektów wejściowych.
W drugiej warstwie, która zawiera węzły wyjściowe równe liczbie naszych klas, stosujemy funkcję aktywacji relu i dostarczamy cechy ukryte.
Indeks krawędzi i waga krawędzi to dwie z wielu opcji x, które GCNConv może zaakceptować w funkcji forward, ale w naszej sytuacji potrzebujemy tylko dwóch pierwszych zmiennych.
Pomimo tego, że nasz model będzie w stanie przewidzieć klasę każdego węzła na grafie, nadal musimy określić dokładność i stratę dla każdego zestawu osobno w zależności od fazy.
Na przykład podczas treningu chcemy wykorzystać zestaw treningowy tylko do określenia dokładności i utraty treningu, dlatego przydają się nasze maski.
Aby obliczyć odpowiednią stratę i dokładność, zdefiniujemy funkcje maskowanej straty i maskowanej dokładności.
Trenowanie modelu
Teraz, gdy zdefiniowaliśmy cel szkolenia, do którego będzie używana latarka. Adam jest mistrzem optymalizacji.
Przeprowadzimy szkolenie przez określoną liczbę epok, mając na uwadze dokładność walidacji.
Planujemy również straty i dokładność treningu w różnych epokach.
Wady grafowej sieci neuronowej
Korzystanie z sieci GNN ma kilka wad. Kiedy zastosować GGNa i jak zwiększyć wydajność naszych modeli uczenia maszynowego, staniemy się dla nas jasne, gdy lepiej je zrozumiemy.
- Chociaż GNN to płytkie sieci, zazwyczaj składające się z trzech warstw, większość sieci neuronowych może sięgać głęboko, aby poprawić wydajność. Z powodu tego ograniczenia nie jesteśmy w stanie działać na najwyższym poziomie w przypadku dużych zbiorów danych.
- Trudniej jest trenować model na wykresach, ponieważ ich dynamika strukturalna jest dynamiczna.
- Ze względu na wysokie koszty obliczeniowe tych sieci, skalowanie modelu do produkcji stanowi wyzwanie. Skalowanie GNN do produkcji będzie trudne, jeśli struktura wykresu jest ogromna i skomplikowana.
Wnioski
W ciągu ostatnich kilku lat sieci GNN stały się potężnymi i skutecznymi narzędziami do rozwiązywania problemów z uczeniem maszynowym w domenie grafów. W tym artykule przedstawiono fundamentalny przegląd grafowych sieci neuronowych.
Następnie możesz rozpocząć tworzenie zestawu danych, który będzie używany do trenowania i testowania modelu. Aby zrozumieć, jak działa i do czego jest zdolny, możesz pójść znacznie dalej i przeszkolić go przy użyciu innego rodzaju zestawu danych.
Miłego kodowania!
Dodaj komentarz