Зміст[Сховати][Показати]
Методи глибокого навчання, відомі як «графові нейронні мережі» (GNN), працюють у графовій області. Останнім часом ці мережі знайшли застосування в різних областях, включаючи комп’ютерне зір, системи рекомендацій і комбінаторну оптимізацію, щоб назвати декілька.
Крім того, ці мережі можна використовувати для представлення складних систем, включаючи соціальні мережі, мережі білок-білкової взаємодії, графи знань та інші в кількох областях дослідження.
У неевклідовому просторі працюють дані графіків, на відміну від інших типів даних, таких як зображення. Щоб класифікувати вузли, прогнозувати зв’язки та кластерні дані, використовується аналіз графів.
У цій статті ми розглянемо графік Нейронна мережа детально, його види, а також навести практичні приклади використання PyTorch.
Отже, що таке Graph?
Граф — це тип структури даних, що складається з вузлів і вершин. Зв'язки між різними вузлами визначаються вершинами. Якщо у вузлах вказано напрямок, то граф називається спрямованим; інакше він не спрямований.
Хорошим застосуванням графіків є моделювання стосунків між різними особами в a соціальна мережа. Коли ви маєте справу зі складними обставинами, такими як посилання та обмін, графіки дуже корисні.
Вони використовуються системами рекомендацій, семантичним аналізом, аналізом соціальних мереж і розпізнаванням шаблонів
. Створення рішень на основі графіків — це абсолютно нова сфера, яка пропонує глибоке розуміння складних і взаємопов’язаних даних.
Графік нейронної мережі
Графові нейронні мережі — це спеціалізовані типи нейронних мереж, які можуть працювати з графічним форматом даних. Значний вплив на них мають вбудовування графів і згорткові нейронні мережі (CNN).
Нейронні мережі графів використовуються в задачах, які включають прогнозування вузлів, ребер і графів.
- CNN використовуються для класифікації зображень. Так само, щоб передбачити клас, GNN застосовуються до піксельної сітки, яка представляє структуру графа.
- Категоризація тексту за допомогою рекурентних нейронних мереж. GNN також використовуються з архітектурами графів, де кожне слово у фразі є вузлом.
Щоб спрогнозувати вузли, ребра або повні графи, нейронні мережі використовуються для створення GNN. Прогнозування на рівні вузла, наприклад, може вирішити таку проблему, як виявлення спаму.
Прогнозування зв’язку є типовим випадком у системах рекомендацій і може бути прикладом проблеми прогнозування по краях.
Графік типів нейронних мереж
Існує багато типів нейронних мереж, і згорткові нейронні мережі присутні в більшості з них. Про найвідоміші GNN ми дізнаємося в цій частині.
Графічні згорткові мережі (GCN)
Їх можна порівняти з класичними CNN. Він набуває характеристик, дивлячись на сусідні вузли. Функція активації використовується мережами GNN для додавання нелінійності після агрегування векторів вузлів і надсилання результату на щільний шар.
По суті, він складається із згортки графа, лінійного шару та функції активації, яка не є учнями. GCN бувають двох основних різновидів: спектральні згорткові мережі та просторові згорткові мережі.
Графічні мережі автоматичного кодування
Він використовує кодер, щоб навчитися представляти графіки, і декодер, щоб спробувати реконструювати вхідні графіки. Є вузьке місце, що з’єднує кодер і декодер.
Оскільки автоматичні кодери чудово справляються з балансом класів, вони часто використовуються для прогнозування посилань.
Нейронні мережі рекурентного графа (RGNN)
У багатореляційних мережах, де один вузол має численні зв’язки, він вивчає оптимальний шаблон дифузії та може керувати графіками. Щоб підвищити плавність і зменшити надмірну параметризацію, у цій формі графової нейронної мережі використовуються регуляризатори.
Щоб отримати кращі результати, RGNN потребують меншої обчислювальної потужності. Вони використовуються для створення тексту, розпізнавання мовлення, машинного перекладу, опису зображень, додавання тегів до відео та підсумовування тексту.
Гейтовані нейронні графові мережі (GGNN)
Коли мова заходить про довготривалі залежні завдання, вони перевершують RGNN. Включаючи вузлові, реберні та часові ворота для довгострокових залежностей, нейронні мережі зі стробованими графами вдосконалюють нейронні мережі рекурентних графів.
Шлюзи функціонують подібно до Gated Recurrent Units (GRU), оскільки вони звикли відкликати та забувати дані на різних етапах.
Реалізація графової нейронної мережі за допомогою Pytorch
Конкретна проблема, на якій ми зосередимося, — це звичайна проблема категоризації вузлів. У нас є велика соціальна мережа під назвою musae-github, який було зібрано з відкритого API для розробників GitHub.
Ребра показують зв’язки взаємних послідовників між вузлами, які представляють розробників (користувачів платформи), які брали участь у принаймні 10 сховищах (зауважте, що слово «взаємний» вказує на ненаправлений зв’язок).
На основі розташування вузла, сховищ із зірочкою, роботодавця та електронної адреси витягуються характеристики вузла. Прогнозування того, чи є користувач GitHub веб-розробником чи a розробник машинного навчання це наше завдання.
Посада кожного користувача слугувала основою для цієї функції націлювання.
Встановлення PyTorch
Для початку нам спочатку потрібно встановити PyTorch. Ви можете налаштувати його відповідно до своєї машини з тут. Ось мій:
Імпорт модулів
Тепер ми імпортуємо необхідні модулі
Імпортування та дослідження даних
Наступним кроком є читання даних і побудова перших п’яти рядків і останніх п’яти рядків із файлу міток.
Лише два з чотирьох стовпців — ідентифікатор вузла (тобто користувач) і 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.
Поділ на рівні вузла можна додати за допомогою властивостей навчальної маски, маски значення та тестової маски класу AddTrainValTestMask, які можна використовувати для створення графіка та дозволу нам вказати, як ми хочемо будувати наші маски.
Ми використовуємо лише 10% для навчання та використовуємо 60% даних як тестовий набір, а 30% використовуємо як набір перевірки.
Тепер ми складемо два шари GCNConv, перший з яких має кількість вихідних функцій, що дорівнює кількості функцій у нашому графіку як вхідних.
На другому рівні, який містить вихідні вузли, що дорівнює кількості наших класів, ми застосовуємо функцію активації relu та надаємо приховані функції.
Індекс краю та вага краю є двома з багатьох параметрів x, які GCNConv може прийняти у функції прямого пересилання, але в нашій ситуації нам потрібні лише перші дві змінні.
Незважаючи на те, що наша модель зможе передбачити клас кожного вузла на графі, нам все одно потрібно визначити точність і втрати для кожного набору окремо в залежності від фази.
Наприклад, під час тренувань ми хочемо використовувати тренувальний набір лише для визначення точності та втрат на тренуванні, і тому наші маски стають у пригоді.
Щоб обчислити відповідні втрати та точність, ми визначимо функції замаскованих втрат і замаскованої точності.
Навчання моделі
Тепер, коли ми визначили навчальну мету, для якої буде використовуватися факел. Адам — майстерний оптимізатор.
Ми проведемо навчання для певної кількості епох, стежачи за точністю перевірки.
Ми також малюємо втрати та точність навчання в різні епохи.
Недоліки графової нейронної мережі
Використання GNN має кілька недоліків. Коли використовувати GNNa і як підвищити продуктивність наших моделей машинного навчання, ми з’ясуємо, коли ми краще їх зрозуміємо.
- У той час як GNN є неглибокими мережами, зазвичай із трьома рівнями, більшість нейронних мереж можуть проникати вглиб, щоб підвищити продуктивність. Через це обмеження ми не можемо працювати на передньому краї великих наборів даних.
- Навчати модель на графах складніше, оскільки їх структурна динаміка динамічна.
- Через високі обчислювальні витрати цих мереж масштабування моделі для виробництва представляє проблеми. Масштабування GNN для виробництва буде складним завданням, якщо структура вашого графа величезна та складна.
Висновок
За останні кілька років GNN перетворилися на потужні та ефективні інструменти для вирішення проблем машинного навчання в області графів. У цій статті наведено фундаментальний огляд графових нейронних мереж.
Після цього ви можете почати створювати набір даних, який використовуватиметься для навчання та тестування моделі. Щоб зрозуміти, як він функціонує та на що він здатний, ви також можете піти набагато далі та навчити його, використовуючи інший тип набору даних.
Щасливе кодування!
залишити коментар