Съдържание[Крия][Покажи]
Техниките за задълбочено обучение, известни като „графични невронни мрежи“ (GNN), работят в областта на графите. Тези мрежи напоследък намериха приложение в различни области, включително компютърно зрение, препоръчителни системи и комбинаторна оптимизация, за да назовем само няколко.
В допълнение, тези мрежи могат да се използват за представяне на сложни системи, включително социални мрежи, мрежи за взаимодействие протеин-протеин, графики на знания и други в няколко области на изследване.
Неевклидовото пространство е мястото, където работят графични данни, за разлика от други типове данни като картини. За да се класифицират възли, да се предвидят връзки и клъстерни данни, се използва анализ на графики.
В тази статия ще разгледаме графиката невронни мрежи подробно, неговите видове, както и предоставяне на практически примери с помощта на PyTorch.
И така, какво е Graph?
Графът е вид структура от данни, съставена от възли и върхове. Връзките между различните възли се определят от върховете. Ако посоката е посочена във възлите, се казва, че графиката е насочена; в противен случай е ненасочен.
Добро приложение на графиките е моделирането на взаимоотношенията между различни индивиди в a социална мрежа. Когато работите със сложни обстоятелства, като връзки и обмен, графиките са много полезни.
Те се използват от системи за препоръки, семантичен анализ, анализ на социални мрежи и разпознаване на шаблони
. Създаването на базирани на графики решения е чисто нова област, която предлага проницателно разбиране на сложни и взаимосвързани данни.
Графична невронна мрежа
Графичните невронни мрежи са специализирани типове невронни мрежи, които могат да работят с графичен формат на данни. Вграждането на графики и конволюционните невронни мрежи (CNN) оказват значително влияние върху тях.
Графичните невронни мрежи се използват в задачи, които включват прогнозиране на възли, ръбове и графики.
- CNN се използват за класифициране на изображения. По подобен начин, за да се предвиди клас, GNN се прилагат към пикселната мрежа, която представлява структурата на графиката.
- Текстова категоризация с помощта на повтарящи се невронни мрежи. GNN се използват и с графични архитектури, където всяка дума във фраза е възел.
За да се прогнозират възли, ръбове или пълни графики, се използват невронни мрежи за създаване на GNN. Прогнозата на ниво възел, например, може да разреши проблем като откриване на спам.
Предвиждането на връзката е типичен случай в препоръчителните системи и може да бъде пример за проблем с предсказване по ръба.
Графика на видовете невронни мрежи
Съществуват множество типове невронни мрежи и конволюционните невронни мрежи присъстват в повечето от тях. В тази част ще научим за най-известните GNN.
Графични конволюционни мрежи (GCN)
Те са сравними с класическите CNN. Той придобива характеристики, като гледа близките възли. Функцията за активиране се използва от GNN за добавяне на нелинейност след агрегиране на вектори на възли и изпращане на изхода към плътния слой.
Състои се от графична конволюция, линеен слой и по същество функция за активиране на неучащите се. GCN се предлагат в две основни разновидности: спектрални конволюционни мрежи и пространствени конволюционни мрежи.
Графични мрежи за автоматично кодиране
Той използва енкодер, за да научи как да представя графики и декодер, за да се опита да реконструира входни графики. Има слой с тесни места, свързващ енкодера и декодера.
Тъй като автоматичните енкодери вършат отлична работа при управлението на баланса на класовете, те често се използват при прогнозиране на връзки.
Невронни мрежи с повтаряща се графика (RGNN)
В мрежи с много релации, където един възел има множество релации, той научава оптималния модел на разпространение и може да управлява графиките. За да се увеличи гладкостта и да се намали свръхпараметризацията, в тази форма на графична невронна мрежа се използват регулатори.
За да получат по-добри резултати, RGNN изискват по-малко процесорна мощност. Те се използват за генериране на текст, разпознаване на реч, машинен превод, описание на картина, видео маркиране и обобщаване на текст.
Gated Neural Graph Networks (GGNN)
Когато става въпрос за дългосрочно зависими задачи, те превъзхождат RGNN. Чрез включването на възли, ръбове и времеви порти върху дългосрочни зависимости, невронните мрежи със затворени графи подобряват невронните мрежи с повтарящи се графи.
Портите функционират подобно на Gated Recurrent Units (GRUs), тъй като те се използват за извикване и забравяне на данни на различни етапи.
Внедряване на графична невронна мрежа с помощта на Pytorch
Конкретният проблем, върху който ще се съсредоточим, е общ проблем с категоризирането на възли. Имаме голяма социална мрежа, наречена musae-github, който е компилиран от отворения API за разработчици на GitHub.
Ръбовете показват взаимоотношенията на взаимни последователи между възлите, които представляват разработчици (потребители на платформа), които са участвали в поне 10 хранилища (обърнете внимание, че думата взаимна показва ненасочена връзка).
Въз основа на местоположението на възела, хранилищата със звезда, работодателя и имейл адреса се извличат характеристиките на възела. Предсказване дали потребител на GitHub е уеб разработчик или a разработчик на машинно обучение е нашата задача.
Заглавието на всеки потребител послужи като основа за тази функция за насочване.
Инсталиране на PyTorch
За да започнем, първо трябва да инсталираме PyTorch. Можете да го конфигурирате според вашата машина от тук. Ето я моята:
Импортиране на модули
Сега импортираме необходимите модули
Импортиране и изследване на данните
Следващата стъпка е да прочетете данните и да начертаете първите пет реда и последните пет реда от файла с етикети.
Само две от четирите колони – id на възела (т.е. потребител) и ml_target, което е 1, ако потребителят е член на общността за машинно обучение и 0 в противен случай – са подходящи за нас в тази ситуация.
Като се има предвид, че има само два класа, сега можем да сме сигурни, че нашата задача е проблем с двоична класификация.
В резултат на значителни класови дисбаланси, класификаторът може просто да приеме коя класа е мнозинството, вместо да оценява недостатъчно представения клас, което прави класовия баланс друг решаващ фактор, който трябва да се вземе предвид.
Начертаването на хистограмата (честотно разпределение) разкрива известен дисбаланс, тъй като има по-малко класове от машинно обучение (етикет=1), отколкото от другите класове.
Функционално кодиране
Характеристиките на възлите ни информират за функцията, която е свързана с всеки възел. Като внедрим нашия метод за кодиране на данни, можем незабавно да кодираме тези характеристики.
Искаме да използваме този метод, за да капсулираме малка част от мрежата (да речем, 60 възела) за показване. Кодът е посочен тук.
Проектиране и показване на графики
Ще използваме геометрия на факла. данни за изграждане на нашата графика.
За моделиране на единична графика с различни (незадължителни) свойства се използват данни, които са прост обект на Python. Като използваме този клас и следните атрибути – всички от които са тензори на факела – ще създадем нашия графичен обект.
Формата на стойността x, която ще бъде присвоена на характеристиките на кодирания възел, е [брой възли, брой характеристики].
Формата на y е [брой възли] и ще бъде приложена към етикетите на възлите.
индекс на ръба: За да опишем неориентирана графа, трябва да разширим оригиналните индекси на ръба, за да позволим съществуването на два различни насочени ръба, които свързват едни и същи два възела, но сочат в противоположни посоки.
Двойка ръбове, единият сочещ от възел 100 до 200, а другият от 200 до 100, е необходим, например, между възли 100 и 200. Ако индексите на ръба са предоставени, това е начинът, по който може да бъде представен неориентираният график. [2,2*брой оригинални ръбове] ще бъде тензорната форма.
Създаваме нашия метод за рисуване на графика, за да покажем графика. Първата стъпка е да трансформираме нашата хомогенна мрежа в NetworkX графика, която след това може да бъде начертана с помощта на NetworkX.draw.
Направете нашия GNN модел и го обучете
Започваме с кодиране на целия набор от данни, като изпълняваме encode data с light=False и след това извикваме construct graph с light=False, за да изградим цялата графика. Няма да се опитваме да начертаем тази голяма графика, защото предполагам, че използвате локална машина с ограничени ресурси.
Маските, които са двоични вектори, които идентифицират кои възли принадлежат към всяка конкретна маска с помощта на цифрите 0 и 1, могат да се използват за уведомяване на фазата на обучение кои възли трябва да бъдат включени по време на обучението и да се каже на фазата на извод кои възли са тестовите данни. Факел geometric.transforms.
Разделяне на ниво възел може да бъде добавено с помощта на свойствата на маска за обучение, маска val и тестова маска на класа AddTrainValTestMask, който може да се използва за вземане на графика и да ни позволи да посочим как искаме да бъдат конструирани нашите маски.
Ние просто използваме 10% за обучение и използваме 60% от данните като тестов набор, докато използваме 30% като набор за валидиране.
Сега ще подредим два слоя GCNConv, първият от които има изходен брой функции, който е равен на броя функции в нашата графика като входни характеристики.
Във втория слой, който съдържа изходни възли, равни на броя на нашите класове, ние прилагаме функция за активиране на relu и предоставяме латентните функции.
Индексът на ръба и теглото на ръба са две от многото опции x, които GCNConv може да приеме във функцията за препращане, но в нашата ситуация се нуждаем само от първите две променливи.
Въпреки факта, че нашият модел ще може да предвиди класа на всеки възел в графиката, все още трябва да определим точността и загубата за всеки набор поотделно в зависимост от фазата.
Например, по време на тренировка, ние искаме само да използваме тренировъчния комплект, за да определим точността и загубата на тренировка, и затова нашите маски са полезни тук.
За да изчислим подходящата загуба и точност, ще дефинираме функциите на маскираната загуба и маскираната точност.
Обучение на модела
След като сме дефинирали тренировъчната цел, за която ще се използва фенерчето. Адам е майстор оптимизатор.
Ще проведем обучението за определен брой епохи, като следим за точността на валидиране.
Ние също така начертаваме загубите и точността на обучението през различни епохи.
Недостатъци на графичната невронна мрежа
Използването на GNN има няколко недостатъка. Кога да използваме GNNa и как да подобрим производителността на нашите модели за машинно обучение, ще ни бъде изяснено, след като ги разберем по-добре.
- Докато GNN са плитки мрежи, обикновено с три слоя, повечето невронни мрежи могат да достигнат дълбоко, за да подобрят производителността. Поради това ограничение не сме в състояние да работим най-модерно с големи набори от данни.
- По-трудно е да се обучи модел върху графики, тъй като тяхната структурна динамика е динамична.
- Поради високите изчислителни разходи на тези мрежи, мащабирането на модела за производство представлява предизвикателство. Мащабирането на GNN за производство ще бъде предизвикателство, ако структурата на вашата графика е огромна и сложна.
Заключение
През последните няколко години GNN се превърнаха в мощни и ефективни инструменти за проблеми с машинното обучение в областта на графите. В тази статия е даден фундаментален преглед на графичните невронни мрежи.
След това можете да започнете да създавате набор от данни, който ще се използва за обучение и тестване на модела. За да разберете как функционира и на какво е способен, можете също да отидете много по-далеч и да го обучите, като използвате различен вид набор от данни.
Честито кодиране!
Оставете коментар