Содржина[Крие][Прикажи]
Техниките за длабоко учење познати како „графски невронски мрежи“ (GNN) функционираат во доменот на графиконот. Овие мрежи во последно време најдоа употреба во различни области, вклучувајќи компјутерска визија, системи за препораки и комбинаторна оптимизација, за да наведат неколку.
Покрај тоа, овие мрежи може да се користат за претставување на сложени системи, вклучувајќи социјални мрежи, мрежи за интеракција помеѓу протеини и протеини, графикони на знаење и други во неколку области на студии.
Неевклидовиот простор е местото каде што функционираат податоците од графиконот, за разлика од другите типови податоци како сликите. Со цел да се класифицираат јазлите, да се предвидат врски и кластерски податоци, се користи анализа на графикони.
Во оваа статија, ќе го испитаме Графикот Neural Network во детали, неговите типови, како и давање практични примери со користење на PyTorch.
Значи, што е График?
Графикот е тип на податочна структура составена од јазли и темиња. Врските помеѓу различните јазли се одредуваат со темињата. Ако насоката е означена во јазлите, се вели дека графикот е насочен; во спротивно, тоа е ненасочено.
Добра примена на графиконите е моделирање на односите меѓу различни поединци во a социјална мрежа. Кога се работи со сложени околности, како што се врски и размени, графиконите се многу корисни.
Тие се користат од системи за препораки, семантичка анализа, анализа на социјалните мрежи и препознавање на модели
. Создавањето решенија базирани на графикони е сосема ново поле кое нуди проникливо разбирање на сложени и меѓусебно поврзани податоци.
Графикон невронска мрежа
Графички невронски мрежи се специјализирани типови на невронски мрежи кои можат да работат на формат на податоци од графикони. Вградувањето на графикони и конволутивните невронски мрежи (CNN) имаат значително влијание врз нив.
Графички невронски мрежи се користат во задачи кои вклучуваат предвидување јазли, рабови и графикони.
- CNN се користат за класифицирање на слики. Слично на тоа, за да се предвиди класа, GNN се применуваат на пикселната мрежа што ја претставува структурата на графикот.
- Категоризација на текст со помош на рекурентни невронски мрежи. GNN се користат и со графички архитектури каде што секој збор во фразата е јазол.
Со цел да се предвидат јазли, рабови или целосни графикони, невронските мрежи се користат за создавање GNN. Предвидувањето на ниво на јазол, на пример, може да реши проблем како откривање спам.
Предвидувањето на врската е типичен случај во системите со препораки и може да биде пример за проблем со предвидување на работ.
Графикон Типови невронски мрежи
Постојат бројни типови на невронски мрежи, а конволуционите невронски мрежи се присутни во повеќето од нив. За најпознатите GNN ќе дознаеме во овој дел.
Графички конволуциони мрежи (GCN)
Тие се споредливи со класичните CNN. Стекнува карактеристики со гледање на блиските јазли. Функцијата за активирање се користи од страна на GNN за да се додаде нелинеарност по агрегирање на вектори на јазли и испраќање на излезот до густиот слој.
Во суштина, тој е составен од конволуција на графиконот, линеарен слој и функција за активирање што не е ученик. GCN доаѓаат во две главни варијанти: Spectral Convolutional Networks и Spatial Convolutional Networks.
Мрежи за авто-шифрирање графикони
Користи енкодер за да научи како да претставува графикони и декодер за да се обиде да ги реконструира влезните графикони. Има слој на тесно грло што ги поврзува енкодерот и декодерот.
Бидејќи автоматските енкодери вршат одлична работа во справувањето со рамнотежата на класата, тие често се користат во предвидувањето на врските.
Рекурентни графички невронски мрежи (RGNN)
Во мулти-релационите мрежи, каде што еден јазол има бројни релации, тој ја учи оптималната шема на дифузија и може да управува со графиконите. Со цел да се зголеми мазноста и да се намали преголемата параметризација, регулаторите се користат во оваа форма на графички невронски мрежи.
Со цел да се добијат подобри резултати, RGNN бараат помала процесорска моќ. Тие се користат за генерирање текст, препознавање говор, машински превод, опис на слики, означување на видео и сумирање на текст.
Затворени невронски графички мрежи (GGNN)
Кога станува збор за долгорочни зависни задачи, тие ги надминуваат RGNNs. Со вклучување на јазли, рабови и временски порти на долгорочни зависности, невронските мрежи со затворен график ги подобруваат рекурентните невронски мрежи на графикони.
Портите функционираат слично како Gated Recurrent Units (GRUs) со тоа што се користат за повикување и заборавање податоци во различни фази.
Имплементација на Графичка невронска мрежа користејќи Pytorch
Специфичното прашање на кое ќе се фокусираме е вообичаено прашање за категоризација на јазлите. Имаме значителна социјална мрежа наречена musae-github, кој беше компајлиран од отвореното API, за програмерите на GitHub.
Рабовите ги прикажуваат меѓусебните врски со следбеници помеѓу јазлите, кои ги претставуваат програмерите (корисниците на платформата) кои звездале во најмалку 10 складишта (забележете дека зборот взаемно означува ненасочена врска).
Врз основа на локацијата на јазолот, складиштата со ѕвезда, работодавачот и адресата на е-пошта, карактеристиките на јазолот се преземаат. Предвидување дали корисникот на GitHub е веб-развивач или развивач на машинско учење е наша задача.
Насловот на работното место на секој корисник послужи како основа за оваа функција за таргетирање.
Инсталирање на PyTorch
За почеток, прво треба да инсталираме PyTorch. Можете да го конфигурирате според вашата машина од овде. Еве го мојот:
Увоз на модули
Сега, ги увезуваме потребните модули
Увезување и истражување на податоците
Следниот чекор е да ги прочитате податоците и да ги нацртате првите пет редови и последните пет редови од датотеката со етикети.
Само две од четирите колони - id на јазолот (т.е. корисник) и ml_target, што е 1 ако корисникот е член на заедницата за машинско учење и 0 во спротивно - се релевантни за нас во оваа ситуација.
Имајќи предвид дека има само две класи, сега можеме да бидеме сигурни дека нашата задача е прашање на бинарна класификација.
Како резултат на значителни класни нерамнотежи, класификаторот може само да претпостави која класа е мнозинство наместо да ја оценува недоволно застапената класа, правејќи ја рамнотежата на класите уште еден клучен фактор што треба да се земе предвид.
Исцртувањето на хистограмот (дистрибуција на фреквенција) открива одредена нерамнотежа бидејќи има помалку класи од машинското учење (етикета=1) отколку од другите класи.
Кодирање на функции
Карактеристиките на јазлите не информираат за карактеристиката што е поврзана со секој јазол. Со имплементирање на нашиот метод за кодирање на податоци, можеме веднаш да ги шифрираме тие карактеристики.
Сакаме да го искористиме овој метод за да инкапсулираме мал дел од мрежата (да речеме, 60 јазли) за прикажување. Кодот е наведен овде.
Дизајнирање и прикажување графикони
Ќе користиме геометриски факел. податоци за да се изгради нашиот график.
За моделирање на еден график со различни (опционално) својства, се користат податоци што се едноставен објект на Python. Со користење на оваа класа и следните атрибути - од кои сите се тензори за факел - ќе го создадеме нашиот графички објект.
Формата на вредноста x, која ќе биде доделена на карактеристиките на кодираниот јазол, е [број на јазли, број на карактеристики].
Обликот на y е [број на јазли] и ќе се примени на етикетите на јазлите.
Индекс на рабови: За да опишеме ненасочен график, треба да ги прошириме оригиналните индекси на рабовите за да дозволиме постоење на два различни насочени рабови кои ги поврзуваат истите два јазли, но покажуваат спротивни насоки.
Потребен е пар на рабови, едниот покажувајќи од јазолот 100 до 200, а другиот од 200 до 100, на пример, помеѓу јазлите 100 и 200. Ако се дадени индексите на рабовите, тогаш вака може да се претстави ненасочениот график. [2,2*број на оригинални рабови] ќе биде формата на тензорот.
Ние го креираме нашиот метод за цртање график за прикажување график. Првиот чекор е да ја трансформираме нашата хомогена мрежа во графикон NetworkX, кој потоа може да се нацрта со помош на NetworkX.draw.
Направете го нашиот GNN модел и обучете го
Започнуваме со кодирање на целиот сет на податоци со извршување на кодирани податоци со light=False и потоа повикување на construct graph со light=False за да се изгради целиот график. Нема да се обидеме да го нацртаме овој голем график затоа што претпоставувам дека користите локална машина која има ограничени ресурси.
Маските, кои се бинарни вектори кои идентификуваат кои јазли припаѓаат на секоја специфична маска користејќи ги цифрите 0 и 1, може да се користат за да се извести фазата на обука кои јазли треба да се вклучат за време на обуката и да се каже на фазата на заклучување кои јазли се податоците од тестот. Факелот геометриски.трансформира.
Сплит на ниво на јазол може да се додаде со користење на маската за обука, val маската и својствата на маската за тестирање на класата AddTrainValTestMask, кои може да се користат за да се земе графикон и да ни овозможи да одредиме како сакаме да се конструираат нашите маски.
Ние само користиме 10% за обука и користиме 60% од податоците како тест сет додека користиме 30% како комплет за валидација.
Сега, ќе поставиме два слоја GCNConv, од кои првиот има број на излезни карактеристики што е еднаков на бројот на карактеристики во нашиот график како влезни карактеристики.
Во вториот слој, кој содржи излезни јазли еднаков на бројот на нашите класи, применуваме функција за активирање на релу и ги снабдуваме латентните карактеристики.
Индексот на рабовите и тежината на рабовите се две од многуте опции x што GCNConv може да ги прифати во функцијата напред, но во нашата ситуација ни требаат само првите две променливи.
И покрај фактот дека нашиот модел ќе може да ја предвиди класата на секој јазол во графикот, сепак треба да ја одредиме точноста и загубата за секое множество посебно во зависност од фазата.
На пример, за време на тренингот, ние сакаме само да го искористиме комплетот за обука за да ја одредиме прецизноста и губењето на тренингот, и затоа тука ни се нашите маски.
За да ја пресметаме соодветната загуба и точност, ќе ги дефинираме функциите на маскирана загуба и маскирана точност.
Тренирање на моделот
Сега кога ја дефиниравме целта за обука за која ќе се користи факелот. Адам е главен оптимизатор.
Обуката ќе ја спроведеме за одреден број епохи, притоа внимавајќи на точноста на валидацијата.
Ние, исто така, ги зацртуваме загубите и точноста на обуката во различни епохи.
Недостатоци на Графичка невронска мрежа
Користењето на GNN има неколку недостатоци. Кога да користиме GNNa и како да ги подобриме перформансите на нашите модели за машинско учење, ќе ни биде јасно откако ќе ги разбереме подобро.
- Додека GNN се плитки мрежи, обично со три слоја, повеќето невронски мрежи можат да одат длабоко за да ги подобрат перформансите. Не можеме да работиме на најсовремена работа со големи збирки на податоци поради ова ограничување.
- Потешко е да се обучи модел на графикони, бидејќи нивната структурна динамика е динамична.
- Поради високите пресметковни трошоци на овие мрежи, скалирањето на моделот за производство претставува предизвици. Скалирањето на GNN за производство ќе биде предизвик ако структурата на вашиот график е огромна и комплицирана.
Заклучок
Во текот на изминатите неколку години, GNN се развија во моќни и ефективни алатки за проблеми со машинското учење во доменот на графиконите. Основен преглед на графичките невронски мрежи е даден во оваа статија.
После тоа, можете да започнете да креирате база на податоци што ќе се користи за обука и тестирање на моделот. За да разберете како функционира и за што е способен, можете исто така да отидете многу подалеку и да го обучите користејќи различен вид на податоци.
Среќно кодирање!
Оставете Одговор