სარჩევი[დამალვა][ჩვენება]
ღრმა სწავლის ტექნიკა, რომელიც ცნობილია როგორც "გრაფიკული ნერვული ქსელები" (GNNs) მოქმედებს გრაფიკის დომენში. ამ ქსელებმა ბოლო დროს გამოიყენეს სხვადასხვა სფეროში, მათ შორის კომპიუტერული ხედვა, სარეკომენდაციო სისტემები და კომბინატორიული ოპტიმიზაცია.
გარდა ამისა, ეს ქსელები შეიძლება გამოყენებულ იქნას რთული სისტემების წარმოსაჩენად, მათ შორის სოციალური ქსელები, ცილა-ცილა ურთიერთქმედების ქსელები, ცოდნის გრაფიკები და სხვა კვლევების რამდენიმე სფეროში.
არაევკლიდური სივრცე არის გრაფიკის მონაცემები, განსხვავებით სხვა ტიპის მონაცემებისგან, როგორიცაა სურათები. კვანძების კლასიფიკაციის, ბმულების პროგნოზირებისა და კლასტერული მონაცემების მიზნით, გამოიყენება გრაფიკის ანალიზი.
ამ სტატიაში ჩვენ განვიხილავთ გრაფიკს ნერვული ქსელი დეტალურად, მისი ტიპები, ასევე მოცემულია პრაქტიკული მაგალითები PyTorch-ის გამოყენებით.
მაშ, რა არის გრაფიკი?
გრაფიკი არის მონაცემთა სტრუქტურის ტიპი, რომელიც შედგება კვანძებისა და წვეროებისგან. სხვადასხვა კვანძებს შორის კავშირები განისაზღვრება წვეროებით. თუ მიმართულება მითითებულია კვანძებში, ამბობენ, რომ გრაფიკი მიმართულია; წინააღმდეგ შემთხვევაში, ის არამიმართულია.
გრაფიკების კარგი გამოყენებაა სხვადასხვა ინდივიდებს შორის ურთიერთობების მოდელირება ა სოციალური ქსელი. როდესაც საქმე გვაქვს რთულ გარემოებებთან, როგორიცაა ბმულები და გაცვლები, გრაფიკები ძალიან სასარგებლოა.
ისინი გამოიყენება სარეკომენდაციო სისტემებით, სემანტიკური ანალიზით, სოციალური ქსელების ანალიზით და შაბლონების ამოცნობით
. გრაფიკზე დაფუძნებული გადაწყვეტილებების შექმნა სრულიად ახალი სფეროა, რომელიც გვთავაზობს რთული და ურთიერთდაკავშირებული მონაცემების გამჭრიახ გაგებას.
გრაფიკული ნერვული ქსელი
გრაფიკული ნერვული ქსელები არის ნერვული ქსელის სპეციალიზებული ტიპები, რომლებსაც შეუძლიათ ფუნქციონირება გრაფიკის მონაცემთა ფორმატზე. გრაფიკის ჩანერგვა და კონვოლუციური ნერვული ქსელები (CNN) მნიშვნელოვან გავლენას ახდენს მათზე.
გრაფიკული ნერვული ქსელები გამოიყენება ამოცანებში, რომლებიც მოიცავს კვანძების, კიდეების და გრაფიკების პროგნოზირებას.
- CNN გამოიყენება სურათების კლასიფიკაციისთვის. ანალოგიურად, კლასის პროგნოზირებისთვის, GNN გამოიყენება პიქსელების ბადეზე, რომელიც წარმოადგენს გრაფიკის სტრუქტურას.
- ტექსტის კატეგორიზაცია განმეორებითი ნერვული ქსელების გამოყენებით. GNN ასევე გამოიყენება გრაფიკის არქიტექტურებთან, სადაც ფრაზის თითოეული სიტყვა არის კვანძი.
კვანძების, კიდეების ან სრული გრაფიკების პროგნოზირების მიზნით, ნერვული ქსელები გამოიყენება GNN-ების შესაქმნელად. მაგალითად, კვანძის დონეზე პროგნოზს შეუძლია გადაჭრას პრობლემა, როგორიცაა სპამის გამოვლენა.
ბმულის პროგნოზირება ტიპიური შემთხვევაა რეკომენდატორ სისტემებში და შეიძლება იყოს პროგნოზირების პრობლემის მაგალითი.
გრაფიკული ნერვული ქსელის ტიპები
ნერვული ქსელის მრავალი ტიპი არსებობს და მათ უმრავლესობაში არის კონვოლუციური ნერვული ქსელები. ყველაზე ცნობილ GNN-ებს ამ ნაწილში გავეცნობით.
გრაფიკული კონვოლუციური ქსელები (GCN)
ისინი შედარებულია კლასიკურ CNN-ებთან. ის იძენს მახასიათებლებს ახლომდებარე კვანძების დათვალიერებით. აქტივაციის ფუნქციას იყენებენ GNN-ები არაწრფივობის დასამატებლად კვანძის ვექტორების აგრეგაციისა და გამომავალი მკვრივ ფენაში გაგზავნის შემდეგ.
იგი შედგება Graph convolution, წრფივი შრე და არა-მოსწავლის აქტივაციის ფუნქცია, არსებითად. GCNs მოდის ორ ძირითად სახეობაში: სპექტრული კონვოლუციური ქსელები და სივრცითი კონვოლუციური ქსელები.
გრაფიკის ავტო-კოდერის ქსელები
ის იყენებს ენკოდერს, რათა ისწავლოს გრაფიკების წარმოდგენა და დეკოდერს შეყვანის გრაფიკების რეკონსტრუქციის მიზნით. არსებობს ბოთლის ფენა, რომელიც აკავშირებს ენკოდერსა და დეკოდერს.
ვინაიდან ავტომატური შიფრები შესანიშნავად ასრულებენ კლასის ბალანსის დამუშავებას, ისინი ხშირად გამოიყენება ბმულების პროგნოზირებაში.
განმეორებადი გრაფიკული ნერვული ქსელები (RGNN)
მრავალრელაციურ ქსელებში, სადაც ერთ კვანძს აქვს მრავალი მიმართება, ის სწავლობს ოპტიმალური დიფუზიის შაბლონს და შეუძლია მართოს გრაფიკები. სიგლუვის გასაზრდელად და ზედმეტ პარამეტრიზაციის შესამცირებლად, რეგულალიზატორები გამოიყენება გრაფიკული ნერვული ქსელის ამ ფორმით.
უკეთესი შედეგების მისაღებად, RGNN-ებს ნაკლები დამუშავების ძალა სჭირდება. ისინი გამოიყენება ტექსტის გენერირებისთვის, მეტყველების ამოცნობისთვის, მანქანური თარგმანისთვის, სურათების აღწერილობისთვის, ვიდეოს მონიშვნისთვის და ტექსტის შეჯამებისთვის.
დახურული ნერვული გრაფიკის ქსელები (GGNN)
როდესაც საქმე ეხება გრძელვადიან დამოკიდებულ ამოცანებს, ისინი აჯობებენ RGNN-ებს. გრძელვადიან დამოკიდებულებებზე კვანძის, კიდეების და დროებითი კარიბჭეების ჩართვის საშუალებით, დახურული გრაფის ნეირონული ქსელები აძლიერებენ განმეორებად გრაფიკულ ნერვულ ქსელებს.
კარიბჭეები ფუნქციონირებს ისევე, როგორც Gated Recurrent Units (GRUs), რადგან ისინი გამოიყენება სხვადასხვა ეტაპებზე მონაცემების გასახსენებლად და დავიწყებაზე.
გრაფიკული ნერვული ქსელის დანერგვა Pytorch-ის გამოყენებით
კონკრეტული საკითხი, რომელზეც ჩვენ ყურადღებას გავამახვილებთ, არის საერთო კვანძების კატეგორიზაციის საკითხი. ჩვენ გვაქვს საკმაოდ დიდი სოციალური ქსელი ე.წ მუსაე-გითჰუბი, რომელიც შედგენილია ღია API-დან, GitHub დეველოპერებისთვის.
კიდეები აჩვენებს კვანძებს შორის მიმდევრების ურთიერთმიმართებას, რომლებიც წარმოადგენენ დეველოპერებს (პლატფორმის მომხმარებლებს), რომლებმაც ითამაშეს მინიმუმ 10 საცავში (გაითვალისწინეთ, რომ სიტყვა mutual მიუთითებს არამიმართულ ურთიერთობაზე).
კვანძის მდებარეობის, ვარსკვლავით მონიშნული საცავების, დამსაქმებლისა და ელექტრონული ფოსტის მისამართის მიხედვით, კვანძის მახასიათებლების მოძიება ხდება. პროგნოზირება, არის თუ არა GitHub მომხმარებელი ვებ დეველოპერი თუ ა მანქანათმცოდნეობის დეველოპერი ჩვენი ამოცანაა.
თითოეული მომხმარებლის ვაკანსიის დასახელება ემსახურებოდა ამ მიზნობრივი ფუნქციის საფუძველს.
PyTorch-ის ინსტალაცია
დასაწყისისთვის, ჩვენ ჯერ უნდა დავაყენოთ პიტორჩი. თქვენ შეგიძლიათ დააკონფიგურიროთ იგი თქვენი აპარატის მიხედვით აქ დაწკაპუნებით. აი ჩემი:
მოდულების იმპორტი
ახლა ჩვენ შემოვიტანთ საჭირო მოდულებს
იმპორტი და შეისწავლეთ მონაცემები
შემდეგი ნაბიჯი არის მონაცემების წაკითხვა და პირველი ხუთი მწკრივის და ბოლო ხუთი მწკრივის დახატვა ეტიკეტების ფაილიდან.
ოთხი სვეტიდან მხოლოდ ორი - კვანძის ID (ანუ მომხმარებელი) და ml_target, რომელიც არის 1, თუ მომხმარებელი არის მანქანათმცოდნეობის საზოგადოების წევრი და 0, სხვაგვარად, ჩვენთვის აქტუალურია ამ სიტუაციაში.
იმის გათვალისწინებით, რომ მხოლოდ ორი კლასია, ახლა შეგვიძლია დარწმუნებული ვიყოთ, რომ ჩვენი ამოცანაა ორობითი კლასიფიკაციის საკითხი.
მნიშვნელოვანი კლასის დისბალანსის შედეგად, კლასიფიკატორს შეუძლია უბრალოდ ივარაუდოს, რომელი კლასია უმრავლესობა, ვიდრე შეაფასოს ნაკლებად წარმოდგენილი კლასი, რაც კლასიფიკატორს კიდევ ერთ გადამწყვეტ ფაქტორად აქცევს გასათვალისწინებლად.
ჰისტოგრამის დახატვა (სიხშირის განაწილება) ავლენს გარკვეულ დისბალანსს, რადგან მანქანური სწავლებიდან ნაკლები კლასებია (ეტიკეტი=1), ვიდრე სხვა კლასებიდან.
ფუნქციის კოდირება
კვანძების მახასიათებლები გვამცნობს ფუნქციის შესახებ, რომელიც ასოცირდება თითოეულ კვანძთან. მონაცემთა დაშიფვრის ჩვენი მეთოდის განხორციელებით, ჩვენ შეგვიძლია მყისიერად დავაშინოთ ეს მახასიათებლები.
ჩვენ გვსურს გამოვიყენოთ ეს მეთოდი ქსელის მცირე ნაწილის (ვთქვათ, 60 კვანძის) ჩასახატად ჩვენებისთვის. კოდი აქ არის ჩამოთვლილი.
გრაფიკების დიზაინი და ჩვენება
ჩვენ გამოვიყენებთ ჩირაღდნის გეომეტრიულს. მონაცემები ჩვენი გრაფიკის შესაქმნელად.
სხვადასხვა (არასავალდებულო) თვისებების მქონე ცალკეული გრაფიკის მოდელირებისთვის გამოიყენება მონაცემები, რომლებიც მარტივი პითონის ობიექტია. ამ კლასის და შემდეგი ატრიბუტების გამოყენებით - ყველა მათგანი ჩირაღდნის ტენსორია - ჩვენ შევქმნით ჩვენს გრაფიკულ ობიექტს.
x მნიშვნელობის ფორმა, რომელიც მიეკუთვნება კოდირებული კვანძის მახასიათებლებს, არის [კვანძების რაოდენობა, მახასიათებლების რაოდენობა].
y-ის ფორმა არის [კვანძების რაოდენობა] და ის გამოყენებული იქნება კვანძების ეტიკეტებზე.
კიდეების ინდექსი: იმისათვის, რომ აღვწეროთ არამიმართული გრაფიკი, ჩვენ უნდა გავაფართოვოთ პირვანდელი კიდეების ინდექსები, რათა დავუშვათ ორი განსხვავებული მიმართული კიდეების არსებობა, რომლებიც აკავშირებს ერთსა და იმავე ორ კვანძს, მაგრამ მიმართულია საპირისპირო მიმართულებით.
კიდეების წყვილი, ერთი მიუთითებს კვანძიდან 100-დან 200-მდე, მეორე კი 200-დან 100-მდე, საჭიროა, მაგალითად, 100-დან 200-მდე კვანძებს შორის. თუ კიდეების ინდექსები მოწოდებულია, მაშინ ასე შეიძლება იყოს არამიმართული გრაფიკის წარმოდგენა. [2,2* ორიგინალური კიდეების რაოდენობა] იქნება ტენსორის ფორმა.
ჩვენ ვქმნით ჩვენი დახატვის გრაფიკის მეთოდს გრაფიკის საჩვენებლად. პირველი ნაბიჯი არის ჩვენი ჰომოგენური ქსელის გარდაქმნა NetworkX გრაფიკად, რომელიც შემდეგ შეიძლება დახატოს NetworkX.draw-ის გამოყენებით.
გააკეთეთ ჩვენი GNN მოდელი და ავარჯიშეთ იგი
ჩვენ ვიწყებთ მონაცემთა მთელი ნაკრების დაშიფვრით, კოდირებული მონაცემების შესრულებით light=False და შემდეგ გამოვიძახით construct graph with light=False, რომ ავაშენოთ მთელი გრაფიკი. ჩვენ არ შევეცდებით ამ დიდი გრაფიკის დახატვას, რადგან მე ვარაუდობ, რომ თქვენ იყენებთ ადგილობრივ მანქანას, რომელსაც აქვს შეზღუდული რესურსები.
ნიღბები, რომლებიც ორობითი ვექტორებია, რომლებიც განსაზღვრავენ, რომელ კვანძებს მიეკუთვნება თითოეული კონკრეტული ნიღაბი ციფრების გამოყენებით 0 და 1, შეიძლება გამოყენებულ იქნას ტრენინგის ფაზის შესატყობინებლად, თუ რომელი კვანძები უნდა იყოს ჩართული ტრენინგის დროს და დასკვნის ფაზას უთხრას, რომელი კვანძებია ტესტის მონაცემები. ჩირაღდანი გეომეტრიული.გარდაქმნის.
კვანძის დონის გაყოფა შეიძლება დაემატოს AddTrainValTestMask კლასის სასწავლო ნიღბის, val mask-ის და ტესტის ნიღბის თვისებების გამოყენებით, რომელიც შეიძლება გამოვიყენოთ გრაფიკის ასაღებად და საშუალებას მოგვცემს დავაზუსტოთ, როგორ გვინდა ჩვენი ნიღბების აგება.
ჩვენ უბრალოდ ვიყენებთ 10%-ს ტრენინგისთვის და ვიყენებთ მონაცემთა 60%-ს, როგორც ტესტის კომპლექტს, ხოლო 30%-ს ვიყენებთ როგორც ვალიდაციის კომპლექტს.
ახლა ჩვენ დავაწყობთ ორ GCNConv ფენას, რომელთაგან პირველს აქვს გამომავალი ფუნქციების რაოდენობა, რომელიც უდრის ჩვენს გრაფიკის ფუნქციების რაოდენობას, როგორც შეყვანის ფუნქციებს.
მეორე ფენაში, რომელიც შეიცავს ჩვენი კლასების რაოდენობის ტოლ გამომავალ კვანძებს, ჩვენ ვიყენებთ რელუ აქტივაციის ფუნქციას და ვაწვდით ფარულ ფუნქციებს.
კიდეების ინდექსი და კიდეების წონა არის ორი მრავალი ვარიანტიდან x, რომელსაც GCNConv შეუძლია მიიღოს წინსვლის ფუნქციაში, მაგრამ ჩვენს სიტუაციაში ჩვენ გვჭირდება მხოლოდ პირველი ორი ცვლადი.
იმისდა მიუხედავად, რომ ჩვენს მოდელს შეუძლია გრაფიკის ყველა კვანძის კლასის პროგნოზირება, ჩვენ მაინც უნდა განვსაზღვროთ სიზუსტე და დანაკარგი თითოეული ნაკრებისთვის ცალკე ფაზის მიხედვით.
მაგალითად, ვარჯიშის დროს ჩვენ გვსურს გამოვიყენოთ მხოლოდ სავარჯიშო ნაკრები სიზუსტისა და ვარჯიშის დანაკარგის დასადგენად და, შესაბამისად, სწორედ აქ გამოდგება ჩვენი ნიღბები.
შესაბამისი დანაკარგისა და სიზუსტის გამოსათვლელად განვსაზღვრავთ ნიღბიანი დანაკარგისა და ნიღბიანი სიზუსტის ფუნქციებს.
მოდელის ვარჯიში
ახლა, როდესაც ჩვენ განვსაზღვრეთ სასწავლო მიზანი, რისთვისაც გამოყენებული იქნება ჩირაღდანი. ადამი ოსტატი ოპტიმიზატორია.
ჩვენ ჩავატარებთ ტრენინგს გარკვეული ეპოქის განმავლობაში და ვადევნებთ თვალს ვალიდაციის სიზუსტეს.
ჩვენ ასევე ვგეგმავთ ტრენინგის დანაკარგებს და სიზუსტეს სხვადასხვა ეპოქაში.
გრაფიკული ნერვული ქსელის ნაკლოვანებები
GNN-ების გამოყენებას აქვს რამდენიმე უარყოფითი მხარე. როდის გამოვიყენოთ GNNa და როგორ გავაუმჯობესოთ ჩვენი მანქანათმცოდნეობის მოდელების ეფექტურობა, ჩვენთვის გასაგები გახდება მას შემდეგ, რაც მათ უკეთ გავიგებთ.
- მიუხედავად იმისა, რომ GNN არის არაღრმა ქსელები, როგორც წესი, სამი ფენით, ნერვული ქსელების უმეტესობას შეუძლია ღრმად შევიდეს მუშაობის გასაუმჯობესებლად. ამ შეზღუდვის გამო ჩვენ ვერ ვახერხებთ უახლესი შესრულებას მონაცემთა დიდ ნაკრებებზე.
- გრაფიკებზე მოდელის მომზადება უფრო რთულია, რადგან მათი სტრუქტურული დინამიკა დინამიურია.
- ამ ქსელების მაღალი გამოთვლითი ხარჯების გამო, წარმოებისთვის მოდელის მასშტაბირება წარმოადგენს გამოწვევებს. GNN-ების სკალირება წარმოებისთვის რთული იქნება, თუ თქვენი გრაფიკის სტრუქტურა უზარმაზარი და რთულია.
დასკვნა
ბოლო რამდენიმე წლის განმავლობაში, GNN-ები ჩამოყალიბდა მძლავრ და ეფექტურ ინსტრუმენტებად მანქანური სწავლების საკითხებისთვის გრაფიკის დომენში. გრაფიკული ნერვული ქსელების ფუნდამენტური მიმოხილვა მოცემულია ამ სტატიაში.
ამის შემდეგ შეგიძლიათ დაიწყოთ მონაცემთა ნაკრების შექმნა, რომელიც გამოყენებული იქნება მოდელის ტრენინგისა და ტესტირებისთვის. იმის გასაგებად, თუ როგორ ფუნქციონირებს და რა შეუძლია მას, ასევე შეგიძლიათ ბევრად უფრო შორს წახვიდეთ და ავარჯიშოთ იგი სხვადასხვა ტიპის მონაცემთა ბაზის გამოყენებით.
ბედნიერი კოდირება!
დატოვე პასუხი