Змест[Схаваць][Паказаць]
Метады глыбокага навучання, вядомыя як «нейронавыя сеткі графаў» (GNN), працуюць у вобласці графаў. Апошнім часам гэтыя сеткі знайшлі прымяненне ў розных галінах, у тым ліку ў камп'ютэрным зроку, рэкамендацыйных сістэмах і камбінаторнай аптымізацыі, каб назваць некалькі.
Акрамя таго, гэтыя сеткі можна выкарыстоўваць для прадстаўлення складаных сістэм, у тым ліку сацыяльных сетак, сетак бялкова-бялковага ўзаемадзеяння, графаў ведаў і іншых у некалькіх галінах даследавання.
Неэўклідава прастора - гэта тое, дзе працуюць даныя графіка, у адрозненне ад іншых тыпаў даных, такіх як выявы. Для класіфікацыі вузлоў, прагназавання сувязей і кластарных даных выкарыстоўваецца аналіз графаў.
У гэтым артыкуле мы разгледзім графік Neural Network падрабязна, яго віды, а таксама прывядуць практычныя прыклады выкарыстання PyTorch.
Такім чынам, што такое Graph?
Граф - гэта тып структуры даных, якая складаецца з вузлоў і вяршыняў. Сувязі паміж рознымі вузламі вызначаюцца вяршынямі. Калі кірунак пазначаны ў вузлах, то граф называецца накіраваным; у адваротным выпадку ён ненакіраваны.
Добрае прымяненне графікаў - гэта мадэляванне ўзаемаадносін паміж рознымі асобамі ў a сацыяльныя сеткі. Пры складаных абставінах, такіх як спасылкі і абмены, графікі вельмі карысныя.
Яны выкарыстоўваюцца ў рэкамендацыйных сістэмах, семантычным аналізе, аналізе сацыяльных сетак і распазнаванні вобразаў
. Стварэнне рашэнняў на аснове графаў - гэта зусім новая сфера, якая прапануе глыбокае разуменне складаных і ўзаемазвязаных даных.
Графік нейроннай сеткі
Нейронавыя сеткі з графікамі - гэта спецыялізаваныя тыпы нейронавых сетак, якія могуць працаваць з фарматам графічных даных. Значны ўплыў на іх аказваюць убудаванне графаў і згорткавыя нейронавыя сеткі (CNN).
Нейронавыя сеткі графа выкарыстоўваюцца ў задачах, якія ўключаюць прагназаванне вузлоў, рэбраў і графаў.
- CNN выкарыстоўваюцца для класіфікацыі малюнкаў. Падобным чынам, каб прагназаваць клас, GNN прымяняюцца да піксельнай сеткі, якая прадстаўляе структуру графа.
- Катэгарызацыя тэксту з выкарыстаннем рэцыдывавальных нейронных сетак. GNN таксама выкарыстоўваюцца з архітэктурамі графаў, дзе кожнае слова ў фразе з'яўляецца вузлом.
Каб прагназаваць вузлы, грані або поўныя графы, нейронавыя сеткі выкарыстоўваюцца для стварэння GNN. Прадказанне на ўзроўні вузла, напрыклад, можа вырашыць такую праблему, як выяўленне спаму.
Прагназаванне спасылак - тыповы выпадак у рэкамендацыйных сістэмах і можа быць прыкладам праблемы прагназавання па баках.
Графік тыпаў нейронных сетак
Існуе мноства тыпаў нейронавых сетак, і згорткавыя нейронавыя сеткі прысутнічаюць у большасці з іх. У гэтай частцы мы даведаемся пра найбольш вядомыя GNN.
Графічныя сверточные сеткі (GCN)
Яны параўнальныя з класічнымі CNN. Ён набывае характарыстыкі, гледзячы на бліжэйшыя вузлы. Функцыя актывацыі выкарыстоўваецца GNN для дадання нелінейнасці пасля агрэгавання вектараў вузлоў і адпраўкі вываду на шчыльны пласт.
Па сутнасці, ён складаецца з згортвання графіка, лінейнага пласта і функцыі актывацыі, якая не з'яўляецца навучэнцам. GCN бываюць двух асноўных разнавіднасцей: спектральныя згорткавыя сеткі і прасторавыя згорткавыя сеткі.
Графічныя сеткі аўтаматычнага кадавальніка
Ён выкарыстоўвае кадавальнік, каб даведацца, як прадстаўляць графікі, і дэкодэр, каб паспрабаваць рэканструяваць ўваходныя графікі. Існуе ўзровень вузкага месца, які злучае кадавальнік і дэкодэр.
Паколькі аўтакадавальнікі выдатна спраўляюцца з балансам класаў, яны часта выкарыстоўваюцца ў прагназаванні спасылак.
Нейронавыя сеткі перыядычнага графіка (RGNN)
У шматрэляцыйных сетках, дзе адзін вузел мае мноства сувязяў, ён вывучае аптымальны шаблон распаўсюджвання і можа кіраваць графікамі. Для павышэння гладкасці і памяншэння залішняй параметрызацыі ў гэтай форме нейроннай сеткі графа выкарыстоўваюцца рэгулязатары.
Каб атрымаць лепшыя вынікі, RGNN патрабуюць меншай вылічальнай магутнасці. Яны выкарыстоўваюцца для стварэння тэксту, распазнання маўлення, машыннага перакладу, апісання малюнкаў, пазначэння відэа і рэфератавання тэксту.
Gated Neural Graph Networks (GGNN)
Калі справа даходзіць да доўгатэрміновых залежных задач, яны пераўзыходзяць RGNN. Уключаючы вузлавыя, краёвыя і часовыя вароты на доўгатэрміновых залежнасцях, нейронныя сеткі са стробаваным графам паляпшаюць нейронныя сеткі рэкурэнтнага графа.
Вароты функцыянуюць аналагічна Gated Recurrent Units (GRU), таму што яны прывыклі выклікаць і забываць даныя на розных этапах.
Рэалізацыя нейронавай сеткі Graph з дапамогай 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 і навучыце яе
Мы пачынаем з кадзіравання ўсяго набору даных, выконваючы кодаванне дадзеных з light=False, а затым выклікаючы construct graph з light=False, каб пабудаваць увесь графік. Мы не будзем спрабаваць намаляваць гэты вялікі графік, таму што я мяркую, што вы выкарыстоўваеце лакальную машыну з абмежаванымі рэсурсамі.
Маскі, якія з'яўляюцца двайковымі вектарамі, якія ідэнтыфікуюць вузлы, якія належаць да кожнай канкрэтнай маскі, з дапамогай лічбаў 0 і 1, могуць быць выкарыстаны для паведамлення фазе навучання, якія вузлы павінны быць уключаны падчас навучання, і каб паведаміць фазе вываду, якія вузлы з'яўляюцца тэставымі дадзенымі. Факел геаметрыч.пераўтвар.
Раздзяленне на ўзроўні вузла можа быць дададзена з дапамогай навучальнай маскі, маскі val і тэставай маскі ўласцівасці класа AddTrainValTestMask, якія можна выкарыстоўваць для ўзяцця графіка і дазваляюць нам вызначыць, як мы хочам будаваць нашы маскі.
Мы проста выкарыстоўваем 10% для навучання і выкарыстоўваем 60% даных у якасці тэставага набору, а 30% - у якасці праверачнага набору.
Зараз мы складзем два пласта GCNConv, першы з якіх мае колькасць выхадных функцый, роўную колькасці функцый у нашым графіцы ў якасці ўваходных функцый.
На другім узроўні, які змяшчае выходныя вузлы, роўныя колькасці нашых класаў, мы ўжываем функцыю актывацыі relu і забяспечваем схаваныя функцыі.
Індэкс грані і вага грані - гэта дзве з мноства опцый x, якія GCNConv можа прыняць у функцыі наперад, але ў нашай сітуацыі нам патрэбныя толькі дзве першыя зменныя.
Нягледзячы на тое, што наша мадэль зможа прадказаць клас кожнага вузла на графе, нам усё роўна трэба вызначыць дакладнасць і страты для кожнага набору асобна ў залежнасці ад фазы.
Напрыклад, падчас трэніровак мы хочам выкарыстоўваць трэніровачны набор толькі для вызначэння дакладнасці і страт пры трэніроўцы, і таму нашы маскі становяцца карыснымі.
Каб разлічыць адпаведныя страты і дакладнасць, мы вызначым функцыі маскіраваных страт і маскіраванай дакладнасці.
Навучанне мадэлі
Цяпер, калі мы вызначылі навучальную мэту, для якой будзе выкарыстоўвацца факел. Адам - майстар-аптымізатар.
Мы будзем праводзіць навучанне для пэўнай колькасці эпох, сочачы за дакладнасцю праверкі.
Мы таксама паказваем страты і дакладнасць навучання ў розныя эпохі.
Недахопы нейроннай сеткі Graph
Выкарыстанне GNN мае некалькі недахопаў. Калі выкарыстоўваць GNNa і як павысіць прадукцыйнасць нашых мадэляў машыннага навучання, мы даведаемся пасля таго, як мы іх лепш зразумеем.
- У той час як GNN з'яўляюцца неглыбокімі сеткамі, як правіла, з трыма ўзроўнямі, большасць нейронавых сетак могуць ісці ўглыб, каб палепшыць прадукцыйнасць. З-за гэтага абмежавання мы не можам працаваць на пярэднім краі вялікіх набораў даных.
- Складаней навучыць мадэль на графах, так як іх структурная дынаміка дынамічная.
- З-за высокіх вылічальных выдаткаў гэтых сетак маштабаванне мадэлі для вытворчасці ўяўляе складанасці. Маштабаванне GNN для вытворчасці будзе складанай задачай, калі структура вашага графа велізарная і складаная.
заключэнне
За апошнія некалькі гадоў GNN ператварыліся ў магутныя і эфектыўныя інструменты для вырашэння праблем машыннага навучання ў вобласці графаў. Фундаментальны агляд графавых нейронавых сетак даецца ў гэтым артыкуле.
Пасля гэтага вы можаце пачаць ствараць набор даных, які будзе выкарыстоўвацца для навучання і тэставання мадэлі. Каб зразумець, як ён функцыянуе і на што ён здольны, вы таксама можаце пайсці значна далей і навучыць яго, выкарыстоўваючы іншы тып набору даных.
Шчаслівае кадаванне!
Пакінуць каментар