Բառը[Թաքցնել][Ցուցադրում]
Խորը ուսուցման տեխնիկան, որը հայտնի է որպես «գրաֆիկ նեյրոնային ցանցեր» (GNN) գործում է գրաֆիկական տիրույթում: Այս ցանցերը վերջերս կիրառություն գտան մի շարք ոլորտներում, ներառյալ համակարգչային տեսլականը, առաջարկող համակարգերը և կոմբինատորային օպտիմիզացումը, մի քանիսը նշելու համար:
Բացի այդ, այս ցանցերը կարող են օգտագործվել բարդ համակարգեր ներկայացնելու համար, ներառյալ սոցիալական ցանցերը, սպիտակուց-սպիտակուց փոխազդեցության ցանցերը, գիտելիքների գծապատկերները և այլ ուսումնասիրությունների մի շարք ոլորտներում:
Ոչ էվկլիդեսյան տարածությունն այն է, որտեղ գործում են գրաֆիկական տվյալները, ի տարբերություն այլ տեսակի տվյալների, ինչպիսիք են նկարները: Հանգույցները դասակարգելու, կապերը կանխատեսելու և կլաստերային տվյալները դասակարգելու համար օգտագործվում է գրաֆիկական վերլուծություն։
Այս հոդվածում մենք կուսումնասիրենք գրաֆիկը նեյրոնային ցանց մանրամասնորեն, դրա տեսակները, ինչպես նաև տրամադրել գործնական օրինակներ PyTorch-ի միջոցով:
Այսպիսով, ինչ է գրաֆիկը:
Գրաֆիկը տվյալների կառուցվածքի տեսակ է, որը կազմված է հանգույցներից և գագաթներից: Տարբեր հանգույցների միջև կապերը որոշվում են գագաթներով: Եթե ուղղությունը նշված է հանգույցներում, ապա ասում են, որ գրաֆիկը ուղղված է. հակառակ դեպքում՝ անուղղորդված է։
Գրաֆիկների լավ կիրառումը տարբեր անհատների միջև հարաբերությունների մոդելավորումն է a Հայկական սոցիալական ցանց:. Երբ գործ ունենք բարդ հանգամանքների հետ, ինչպիսիք են հղումները և փոխանակումները, գրաֆիկները շատ օգտակար են:
Դրանք օգտագործվում են առաջարկությունների համակարգերի, իմաստային վերլուծության, սոցիալական ցանցերի վերլուծության և օրինաչափությունների ճանաչման միջոցով
. Գրաֆիկի վրա հիմնված լուծումների ստեղծումը բոլորովին նոր ոլորտ է, որն առաջարկում է բարդ և փոխկապակցված տվյալների խորաթափանց ըմբռնում:
Գրաֆիկական նեյրոնային ցանց
Գրաֆիկական նեյրոնային ցանցերը նեյրոնային ցանցերի մասնագիտացված տեսակներ են, որոնք կարող են գործել գրաֆիկական տվյալների ձևաչափով: Գրաֆի ներկառուցումը և կոնվոլյուցիոն նեյրոնային ցանցերը (CNN) զգալի ազդեցություն ունեն դրանց վրա:
Գրաֆիկական նեյրոնային ցանցերն օգտագործվում են այնպիսի առաջադրանքներում, որոնք ներառում են հանգույցների, եզրերի և գրաֆիկների կանխատեսումը:
- CNN-ներն օգտագործվում են նկարները դասակարգելու համար: Նմանապես, դասը կանխատեսելու համար GNN-ները կիրառվում են պիքսելային ցանցի վրա, որը ներկայացնում է գրաֆիկի կառուցվածքը:
- Տեքստի դասակարգում կրկնվող նեյրոնային ցանցերի միջոցով: GNN-ներն օգտագործվում են նաև գրաֆիկական ճարտարապետություններում, որտեղ արտահայտության յուրաքանչյուր բառ հանգույց է:
Հանգույցների, եզրերի կամ ամբողջական գրաֆիկների կանխատեսման համար նեյրոնային ցանցերն օգտագործվում են GNN-ներ ստեղծելու համար: Օրինակ, հանգույցի մակարդակի կանխատեսումը կարող է լուծել այնպիսի խնդիր, ինչպիսին է սպամի հայտնաբերումը:
Հղման կանխատեսումը տիպիկ դեպք է առաջարկող համակարգերում և կարող է լինել եզրային կանխատեսման խնդրի օրինակ:
Գրաֆիկական նեյրոնային ցանցերի տեսակները
Գոյություն ունեն նեյրոնային ցանցերի բազմաթիվ տեսակներ, և դրանց մեծ մասում առկա են կոնվոլյուցիոն նեյրոնային ցանցեր: Ամենահայտնի GNN-ների մասին կիմանանք այս հատվածում։
Graph Convolutional Networks (GCN)
Դրանք համեմատելի են դասական CNN-ների հետ: Այն ձեռք է բերում բնութագրեր՝ նայելով մոտակա հանգույցներին։ Ակտիվացման ֆունկցիան օգտագործվում է GNN-ների կողմից՝ հանգույցների վեկտորները միավորելուց և ելքը խիտ շերտ ուղարկելուց հետո ոչ գծայինություն ավելացնելու համար։
Այն կազմված է Graph convolution-ից, գծային շերտից և ոչ սովորողների ակտիվացման ֆունկցիայից, ըստ էության: GCN-ները գալիս են երկու հիմնական տեսակով՝ սպեկտրալ կոնվոլյուցիոն ցանցեր և տարածական կոնվոլյուցիոն ցանցեր:
Գրաֆիկական ավտոմատ կոդավորող ցանցեր
Այն օգտագործում է կոդավորիչ՝ սովորելու, թե ինչպես ներկայացնել գրաֆիկները, և ապակոդավորիչ՝ փորձելով վերակառուցել մուտքային գրաֆիկները: Կոդավորիչն ու ապակոդավորիչը միացնող խցանման շերտ կա:
Քանի որ ավտոմատ կոդավորիչները հիանալի աշխատանք են կատարում դասի հավասարակշռությունը կարգավորելու համար, դրանք հաճախ օգտագործվում են հղումների կանխատեսման մեջ:
Կրկնվող գրաֆիկական նեյրոնային ցանցեր (RGNN)
Բազմառաբերական ցանցերում, որտեղ մեկ հանգույցն ունի բազմաթիվ հարաբերություններ, այն սովորում է դիֆուզիոն օպտիմալ օրինաչափությունը և կարող է կառավարել գրաֆիկները: Սահունությունը բարձրացնելու և չափից ավելի պարամետրացումը նվազեցնելու համար կարգավորիչները օգտագործվում են գրաֆիկական նեյրոնային ցանցի այս ձևում:
Ավելի լավ արդյունքներ ստանալու համար RGNN-ները պահանջում են ավելի քիչ վերամշակող հզորություն: Դրանք օգտագործվում են տեքստի ստեղծման, խոսքի ճանաչման, մեքենայական թարգմանության, նկարների նկարագրության, տեսանյութերի հատկորոշման և տեքստի ամփոփման համար:
Դռնփակ նեյրոնային գրաֆիկական ցանցեր (GGNN)
Երբ խոսքը վերաբերում է երկարաժամկետ կախված առաջադրանքներին, դրանք գերազանցում են RGNN-ներին: Երկարաժամկետ կախվածությունների վրա ընդգրկելով հանգույցներ, եզրեր և ժամանակավոր դարպասներ, փակ գրաֆիկական նեյրոնային ցանցերը ուժեղացնում են պարբերական գրաֆիկական նեյրոնային ցանցերը:
Դարպասները գործում են այնպես, ինչպես Gated Recurrent Units (GRUs), քանի որ դրանք օգտագործվում են տարբեր փուլերում տվյալների հետ կանչելու և մոռանալու համար:
Գրաֆիկ նեյրոնային ցանցի իրականացում Pytorch-ի միջոցով
Հատուկ խնդիրը, որի վրա մենք կենտրոնանալու ենք, հանգույցների դասակարգման ընդհանուր խնդիրն է: Մենք ունենք զգալի սոցիալական ցանց, որը կոչվում է մուսաե-գիթուբ, որը կազմվել է բաց 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-ով և այնուհետև կանչելով struct graph light=False՝ ամբողջ գրաֆիկը կառուցելու համար: Մենք չենք փորձի նկարել այս մեծ գրաֆիկը, քանի որ ես ենթադրում եմ, որ դուք օգտագործում եք տեղական մեքենա, որն ունի սահմանափակ ռեսուրսներ:
Դիմակները, որոնք երկուական վեկտորներ են, որոնք բացահայտում են, թե որ հանգույցները պատկանում են յուրաքանչյուր հատուկ դիմակին, օգտագործելով 0 և 1 թվանշանները, կարող են օգտագործվել ուսուցման փուլին տեղեկացնելու համար, թե որ հանգույցները պետք է ներառվեն մարզման ընթացքում և եզրակացության փուլին ասելու, թե որ հանգույցներն են թեստի տվյալները: Ջահը geometric.transforms.
Հանգույցի մակարդակի բաժանումը կարող է ավելացվել՝ օգտագործելով AddTrainValTestMask դասի ուսուցման դիմակ, val mask և թեստային դիմակ հատկությունները, որոնք կարող են օգտագործվել գրաֆիկ վերցնելու համար և թույլ տալ մեզ հստակեցնել, թե ինչպես ենք մենք ցանկանում, որ մեր դիմակները կառուցվեն:
Մենք պարզապես օգտագործում ենք 10% ուսուցման համար և օգտագործում ենք տվյալների 60% որպես թեստային հավաքածու, մինչդեռ օգտագործում ենք 30% որպես վավերացման հավաքածու:
Այժմ մենք կդասավորենք GCNConv երկու շերտ, որոնցից առաջինն ունի ելքային առանձնահատկությունների քանակ, որը հավասար է մեր գրաֆիկի հատկանիշների թվին որպես մուտքային հատկանիշներ:
Երկրորդ շերտում, որը պարունակում է ելքային հանգույցներ, որոնք հավասար են մեր դասերի քանակին, մենք կիրառում ենք relu-ակտիվացման ֆունկցիա և մատակարարում թաքնված հատկանիշները։
Եզրային ինդեքսը և եզրային քաշը երկուսն են բազմաթիվ տարբերակներից x, որոնք GCNConv-ը կարող է ընդունել առաջընթաց ֆունկցիայի մեջ, բայց մեր իրավիճակում մեզ անհրաժեշտ են միայն առաջին երկու փոփոխականները:
Չնայած այն հանգամանքին, որ մեր մոդելը կկարողանա կանխատեսել գրաֆիկի յուրաքանչյուր հանգույցի դասը, մենք դեռ պետք է որոշենք ճշգրտությունը և կորուստը յուրաքանչյուր հավաքածուի համար՝ կախված փուլից:
Օրինակ, մարզումների ժամանակ մենք ցանկանում ենք օգտագործել միայն մարզումների հավաքածուն՝ ճշտությունը և մարզումների կորուստը որոշելու համար, և, հետևաբար, այստեղ է, որ մեր դիմակները հարմար են:
Համապատասխան կորուստը և ճշգրտությունը հաշվարկելու համար մենք կսահմանենք դիմակավորված կորստի և դիմակավորված ճշգրտության գործառույթները:
Մոդելի մարզում
Այժմ, երբ մենք սահմանել ենք ուսումնական նպատակը, որի համար կօգտագործվի ջահը: Ադամը վարպետ օպտիմիզատոր է:
Մենք դասընթացները կանցկացնենք որոշակի թվով դարաշրջանների համար՝ հետևելով վավերացման ճշգրտությանը:
Մենք նաև գծագրում ենք վերապատրաստման կորուստներն ու ճշգրտությունները տարբեր դարաշրջաններում:
Գրաֆիկ նեյրոնային ցանցի թերությունները
GNN-ների օգտագործումն ունի մի քանի թերություններ. Երբ օգտագործել GNNa-ն և ինչպես բարելավել մեր մեքենայական ուսուցման մոդելների արդյունավետությունը, երկուսն էլ մեզ պարզ կդառնա, երբ մենք ավելի լավ ըմբռնենք դրանք:
- Մինչ GNN-ները մակերեսային ցանցեր են, սովորաբար երեք շերտով, նեյրոնային ցանցերի մեծ մասը կարող է խորանալ՝ բարելավելու աշխատանքը: Այս սահմանափակման պատճառով մենք չենք կարող առաջադեմ աշխատել մեծ տվյալների հավաքածուներում:
- Ավելի դժվար է մոդել պատրաստել գրաֆիկների վրա, քանի որ դրանց կառուցվածքային դինամիկան դինամիկ է:
- Այս ցանցերի հաշվողական բարձր ծախսերի պատճառով արտադրության համար մոդելի մասշտաբը մարտահրավեր է ներկայացնում: Արտադրության համար GNN-ների չափումը դժվար կլինի, եթե ձեր գրաֆիկի կառուցվածքը հսկայական և բարդ է:
Եզրափակում
Վերջին մի քանի տարիների ընթացքում GNN-ները վերածվել են հզոր և արդյունավետ գործիքների՝ գրաֆիկական տիրույթում մեքենայական ուսուցման խնդիրների համար: Գրաֆիկական նեյրոնային ցանցերի հիմնարար ակնարկը տրված է այս հոդվածում:
Դրանից հետո դուք կարող եք սկսել ստեղծել տվյալների հավաքածու, որը կօգտագործվի մոդելը վերապատրաստելու և փորձարկելու համար: Հասկանալու համար, թե ինչպես է այն գործում և ինչի է ունակ, կարող եք նաև շատ ավելի հեռու գնալ և վարժեցնել այն՝ օգտագործելով այլ տեսակի տվյալների բազա:
Շնորհավոր կոդավորում:
Թողնել գրառում