สารบัญ[ซ่อน][แสดง]
เทคนิคการเรียนรู้เชิงลึกที่เรียกว่า "โครงข่ายประสาทกราฟ" (GNN) ทำงานในโดเมนกราฟ เมื่อเร็ว ๆ นี้เครือข่ายเหล่านี้พบว่ามีการใช้งานในด้านต่างๆ รวมถึงการมองเห็นด้วยคอมพิวเตอร์ ระบบผู้แนะนำ และการเพิ่มประสิทธิภาพแบบผสมผสาน เป็นต้น
นอกจากนี้ เครือข่ายเหล่านี้สามารถใช้เพื่อแสดงระบบที่ซับซ้อน ซึ่งรวมถึงเครือข่ายสังคม เครือข่ายปฏิสัมพันธ์ระหว่างโปรตีนกับโปรตีน กราฟความรู้ และอื่นๆ ในหลายสาขาวิชา
พื้นที่ที่ไม่ใช่แบบยุคลิดเป็นที่ที่ข้อมูลกราฟทำงาน ตรงกันข้ามกับข้อมูลประเภทอื่นๆ เช่น รูปภาพ ในการจัดประเภทโหนด คาดการณ์ลิงก์ และข้อมูลคลัสเตอร์ จะใช้การวิเคราะห์กราฟ
ในบทความนี้ เราจะตรวจสอบกราฟ โครงข่ายประสาทเทียม ในรายละเอียด ประเภทของมัน ตลอดจนให้ตัวอย่างที่ใช้งานได้จริงโดยใช้ PyTorch
แล้วกราฟคืออะไร?
กราฟเป็นโครงสร้างข้อมูลประเภทหนึ่งที่ประกอบด้วยโหนดและจุดยอด การเชื่อมต่อระหว่างโหนดต่างๆ ถูกกำหนดโดยจุดยอด หากมีการระบุทิศทางในโหนด แสดงว่ากราฟมีทิศทาง มิฉะนั้นจะไม่มีทิศทาง
การใช้กราฟที่ดีคือการสร้างแบบจำลองความสัมพันธ์ระหว่างบุคคลต่างๆ ใน a เครือข่ายทางสังคม. เมื่อต้องรับมือกับสถานการณ์ที่ซับซ้อน เช่น ลิงก์และการแลกเปลี่ยน กราฟจะมีประโยชน์มาก
ใช้งานโดยระบบการแนะนำ การวิเคราะห์ความหมาย การวิเคราะห์เครือข่ายสังคม และการจดจำรูปแบบ
. การสร้างโซลูชันแบบกราฟเป็นฟิลด์ใหม่ล่าสุดที่ให้ความเข้าใจอย่างลึกซึ้งเกี่ยวกับข้อมูลที่ซับซ้อนและเชื่อมโยงกัน
กราฟโครงข่ายประสาท
โครงข่ายประสาทแบบกราฟเป็นโครงข่ายประสาทแบบพิเศษที่สามารถทำงานบนรูปแบบข้อมูลกราฟได้ การฝังกราฟและโครงข่ายประสาทเทียม (Convolutional Neural Network - CNN) มีผลกระทบอย่างมากต่อสิ่งเหล่านี้
Graph Neural Networks ถูกใช้ในงานที่รวมถึงการทำนายโหนด ขอบ และกราฟ
- CNN ใช้ในการจำแนกภาพ ในทำนองเดียวกัน ในการทำนายคลาส GNN จะถูกนำไปใช้กับตารางพิกเซลที่แสดงโครงสร้างกราฟ
- การจัดหมวดหมู่ข้อความโดยใช้โครงข่ายประสาทที่เกิดซ้ำ GNN ยังใช้กับสถาปัตยกรรมกราฟโดยที่แต่ละคำในวลีเป็นโหนด
เพื่อคาดการณ์โหนด ขอบ หรือกราฟทั้งหมด โครงข่ายประสาทเทียมถูกใช้เพื่อสร้าง GNN ตัวอย่างเช่น การคาดคะเนที่ระดับโหนด สามารถแก้ไขปัญหา เช่น การตรวจหาสแปม
การคาดคะเนลิงก์เป็นกรณีทั่วไปในระบบผู้แนะนำและอาจเป็นตัวอย่างของปัญหาการคาดการณ์ที่ชาญฉลาด
กราฟประเภทโครงข่ายประสาทเทียม
มีเครือข่ายประสาทหลายประเภทและ Convolutional Neural Networks ส่วนใหญ่มีอยู่ เราจะเรียนรู้เกี่ยวกับ GNN ที่เป็นที่รู้จักมากที่สุดในส่วนนี้
กราฟ Convolutional Networks (GCN)
พวกเขาเปรียบได้กับ CNN แบบคลาสสิก ได้คุณสมบัติโดยดูจากโหนดใกล้เคียง ฟังก์ชันการเปิดใช้งานถูกใช้โดย GNN เพื่อเพิ่มความไม่เป็นเชิงเส้นหลังจากรวมเวกเตอร์ของโหนดและส่งเอาต์พุตไปยังเลเยอร์ที่หนาแน่น
โดยพื้นฐานแล้วประกอบด้วยการบิดกราฟ เลเยอร์เชิงเส้น และฟังก์ชันการเปิดใช้งานที่ไม่ใช่ผู้เรียน GCN มีสองประเภทหลัก: Spectral Convolutional Networks และ Spatial Convolutional Networks
เครือข่ายตัวเข้ารหัสอัตโนมัติของกราฟ
ใช้ตัวเข้ารหัสเพื่อเรียนรู้วิธีแสดงกราฟและตัวถอดรหัสเพื่อพยายามสร้างกราฟอินพุตใหม่ มีชั้นคอขวดที่เชื่อมต่อตัวเข้ารหัสและตัวถอดรหัส
เนื่องจากตัวเข้ารหัสอัตโนมัติทำงานได้อย่างยอดเยี่ยมในการจัดการสมดุลของคลาส จึงมักใช้ในการทำนายลิงก์
โครงข่ายประสาทกราฟที่เกิดซ้ำ (RGNNs)
ในเครือข่ายหลายเชิงสัมพันธ์ โดยที่โหนดเดียวมีความสัมพันธ์มากมาย โหนดจะเรียนรู้รูปแบบการแพร่กระจายที่เหมาะสมที่สุดและสามารถจัดการกราฟได้ เพื่อเพิ่มความราบรื่นและลดการกำหนดพารามิเตอร์เกิน ตัวปรับมาตรฐานจะใช้ในรูปแบบของโครงข่ายกราฟประสาท
เพื่อให้ได้ผลลัพธ์ที่ดีขึ้น RGNN ต้องการพลังในการประมวลผลน้อยลง ใช้สำหรับการสร้างข้อความ การรู้จำคำพูด การแปลด้วยคอมพิวเตอร์ คำอธิบายรูปภาพ การแท็กวิดีโอ และการสรุปข้อความ
เครือข่ายกราฟประสาทแบบมีรั้วรอบขอบชิด (GGNNs)
เมื่อพูดถึงงานที่ต้องพึ่งพาระยะยาว พวกเขาทำได้ดีกว่า RGNN การรวมโหนด ขอบ และเกตชั่วคราวในการพึ่งพาระยะยาว โครงข่ายประสาทเทียมแบบกราฟที่มีรั้วรอบขอบชิดช่วยปรับปรุงเครือข่ายประสาทกราฟที่เกิดซ้ำ
เกตทำงานคล้ายกับ GRUs ที่ใช้เพื่อเรียกคืนและลืมข้อมูลในขั้นตอนต่างๆ
การใช้ Graph Neural Network โดยใช้ Pytorch
ปัญหาเฉพาะที่เราจะเน้นคือปัญหาการจัดหมวดหมู่โหนดทั่วไป เรามีโซเชียลเน็ตเวิร์กขนาดใหญ่ที่เรียกว่า มูซา-githubซึ่งรวบรวมจาก open API สำหรับนักพัฒนา GitHub
ขอบแสดงความสัมพันธ์ของผู้ติดตามร่วมกันระหว่างโหนด ซึ่งเป็นตัวแทนของนักพัฒนา (ผู้ใช้แพลตฟอร์ม) ที่ได้ติดดาวในที่เก็บอย่างน้อย 10 แห่ง (โปรดทราบว่าคำว่า Mutual หมายถึงความสัมพันธ์แบบไม่มีทิศทาง)
ตามตำแหน่งของโหนด ที่เก็บที่ติดดาว นายจ้าง และที่อยู่อีเมล คุณลักษณะของโหนดจะถูกดึงมา การคาดคะเนว่าผู้ใช้ GitHub เป็นนักพัฒนาเว็บหรือa นักพัฒนาแมชชีนเลิร์นนิง คืองานของเรา
ตำแหน่งงานของผู้ใช้แต่ละคนเป็นพื้นฐานสำหรับฟังก์ชันการกำหนดเป้าหมายนี้
การติดตั้ง PyTorch
ขั้นแรกเราต้องติดตั้ง ไพทอร์ช. คุณสามารถกำหนดค่าได้ตามเครื่องของคุณจาก โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม. นี่คือของฉัน:
การนำเข้าโมดูล
ตอนนี้เรานำเข้าโมดูลที่จำเป็น
การนำเข้าและสำรวจข้อมูล
ขั้นตอนต่อไปนี้คือการอ่านข้อมูลและพล็อตห้าแถวแรกและห้าแถวสุดท้ายจากไฟล์ป้ายกำกับ
มีเพียงสองในสี่คอลัมน์—id ของโหนด (เช่น ผู้ใช้) และ ml_target ซึ่งมีค่าเท่ากับ 1 หากผู้ใช้เป็นสมาชิกของชุมชนการเรียนรู้ของเครื่องและ 0 อย่างอื่นที่เกี่ยวข้องกับเราในสถานการณ์นี้
เนื่องจากมีเพียงสองคลาส ตอนนี้เราจึงมั่นใจได้ว่างานของเราเป็นปัญหาการจำแนกประเภทไบนารี
อันเป็นผลมาจากความไม่สมดุลของคลาสที่มีนัยสำคัญ ตัวแยกประเภทสามารถสันนิษฐานได้ว่าคลาสใดเป็นคนส่วนใหญ่มากกว่าการประเมินคลาสที่มีบทบาทต่ำกว่าปกติ ทำให้ความสมดุลของคลาสเป็นปัจจัยสำคัญอีกประการหนึ่งที่ต้องพิจารณา
การพล็อตฮิสโตแกรม (การกระจายความถี่) เผยให้เห็นความไม่สมดุลบางประการ เนื่องจากมีคลาสจากการเรียนรู้ของเครื่อง (label=1) น้อยกว่าคลาสอื่นๆ
การเข้ารหัสคุณสมบัติ
คุณสมบัติของโหนดแจ้งให้เราทราบถึงคุณลักษณะที่เกี่ยวข้องกับแต่ละโหนด ด้วยการใช้วิธีการของเราในการเข้ารหัสข้อมูล เราสามารถเข้ารหัสคุณลักษณะเหล่านั้นได้ทันที
เราต้องการใช้วิธีนี้เพื่อห่อหุ้มส่วนเล็กๆ ของเครือข่าย (เช่น 60 โหนด) เพื่อแสดงผล รหัสแสดงอยู่ที่นี่
การออกแบบและแสดงกราฟ
เราจะใช้เรขาคณิตของคบเพลิง ข้อมูลเพื่อสร้างกราฟของเรา
ในการสร้างโมเดลกราฟเดียวที่มีคุณสมบัติที่แตกต่างกัน (เป็นทางเลือก) จะใช้ข้อมูลที่เป็นอ็อบเจ็กต์ Python อย่างง่าย โดยใช้คลาสนี้และแอตทริบิวต์ต่อไปนี้ ซึ่งทั้งหมดนี้เป็นตัววัดเทนเซอร์—เราจะสร้างอ็อบเจกต์กราฟของเรา
รูปแบบของค่า x ซึ่งจะถูกจัดสรรให้กับคุณสมบัติของโหนดที่เข้ารหัส คือ [จำนวนโหนด จำนวนคุณสมบัติ]
รูปร่างของ y คือ [จำนวนโหนด] และจะถูกนำไปใช้กับป้ายกำกับโหนด
ดัชนีขอบ: ในการอธิบายกราฟที่ไม่มีทิศทาง เราจำเป็นต้องขยายดัชนีขอบเดิมเพื่อให้สามารถมีขอบชี้ตรงที่แตกต่างกันสองขอบที่เชื่อมโยงโหนดสองโหนดเดียวกัน แต่ชี้ไปในทิศทางตรงกันข้าม
จำเป็นต้องมีคู่ของขอบ อันหนึ่งชี้จากโหนด 100 ถึง 200 และอีกอันหนึ่งจาก 200 ถึง 100 ตัวอย่างเช่น ระหว่างโหนด 100 ถึง 200 หากมีการจัดเตรียมดัชนีขอบไว้ นี่คือวิธีการแสดงกราฟแบบไม่ระบุทิศทาง [2,2*จำนวนขอบเดิม] จะเป็นรูปแบบเทนเซอร์
เราสร้างวิธีการวาดกราฟเพื่อแสดงกราฟ ขั้นตอนแรกคือการแปลงเครือข่ายที่เป็นเนื้อเดียวกันของเราให้เป็นกราฟ NetworkX ซึ่งสามารถวาดได้โดยใช้ NetworkX.draw
สร้างโมเดล GNN ของเราและฝึกฝน
เราเริ่มต้นด้วยการเข้ารหัสข้อมูลทั้งชุดโดยดำเนินการเข้ารหัสข้อมูลด้วย light=False จากนั้นเรียกสร้างกราฟด้วย light=False เพื่อสร้างกราฟทั้งหมด เราจะไม่พยายามวาดกราฟขนาดใหญ่นี้ เนื่องจากฉันคิดว่าคุณกำลังใช้เครื่องท้องถิ่นที่มีทรัพยากรจำกัด
มาสก์ ซึ่งเป็นเวกเตอร์ไบนารีที่ระบุว่าโหนดใดเป็นของมาสก์แต่ละตัวโดยใช้ตัวเลข 0 และ 1 สามารถใช้เพื่อแจ้งขั้นตอนการฝึกว่าควรรวมโหนดใดระหว่างการฝึก และเพื่อบอกขั้นตอนการอนุมานว่าโหนดใดเป็นข้อมูลการทดสอบ คบเพลิงเรขาคณิต.แปลง.
สามารถเพิ่มการแยกระดับโหนดได้โดยใช้ Training Mask, Val Mask และคุณสมบัติ Test Mask ของคลาส AddTrainValTestMask ซึ่งสามารถใช้สร้างกราฟและช่วยให้เราระบุวิธีที่เราต้องการสร้างมาสก์ของเราได้
เราแค่ใช้ 10% สำหรับการฝึกอบรมและใช้ข้อมูล 60% เป็นชุดทดสอบในขณะที่ใช้ 30% เป็นชุดตรวจสอบ
ตอนนี้ เราจะซ้อนเลเยอร์ GCNConv สองเลเยอร์ โดยชั้นแรกจะมีจำนวนฟีเจอร์เอาต์พุตเท่ากับจำนวนฟีเจอร์ในกราฟของเราเป็นฟีเจอร์อินพุต
ในเลเยอร์ที่สองซึ่งมีโหนดเอาต์พุตเท่ากับจำนวนคลาสของเรา เราใช้ฟังก์ชันการเปิดใช้งาน relu และจัดหาคุณสมบัติแฝง
ดัชนีขอบและน้ำหนักขอบเป็นสองตัวเลือกจากหลายตัวเลือก x ที่ GCNConv ยอมรับได้ในฟังก์ชันการส่งต่อ แต่ในสถานการณ์ของเรา เราต้องการเพียงสองตัวแปรแรกเท่านั้น
แม้ว่าแบบจำลองของเราจะทำนายคลาสของทุกโหนดในกราฟได้ แต่เรายังต้องกำหนดความแม่นยำและความสูญเสียสำหรับแต่ละชุดแยกกันขึ้นอยู่กับเฟส
ตัวอย่างเช่น ระหว่างการฝึก เราเพียงต้องการใช้ชุดการฝึกเพื่อกำหนดความแม่นยำและการสูญเสียการฝึก ดังนั้นหน้ากากของเราจึงมีประโยชน์
ในการคำนวณการสูญเสียและความแม่นยำที่เหมาะสม เราจะกำหนดหน้าที่ของการสูญเสียที่ซ่อนไว้และความแม่นยำที่ซ่อนไว้
ฝึกโมเดล
ตอนนี้เราได้กำหนดวัตถุประสงค์การฝึกอบรมที่จะใช้คบเพลิงแล้ว อดัมเป็นนักเพิ่มประสิทธิภาพหลัก
เราจะดำเนินการฝึกอบรมสำหรับบางช่วงขณะที่คอยตรวจสอบความถูกต้องของการตรวจสอบ
นอกจากนี้เรายังวางแผนการสูญเสียและความแม่นยำของการฝึกอบรมตลอดยุคต่างๆ
ข้อเสียของโครงข่ายประสาทกราฟ
การใช้ GNN มีข้อเสียอยู่เล็กน้อย เมื่อใดที่ควรใช้ GNNa และวิธีเพิ่มประสิทธิภาพของโมเดลการเรียนรู้ด้วยเครื่องของเรา ทั้งคู่จะชัดเจนสำหรับเราหลังจากที่เราเข้าใจพวกเขามากขึ้นแล้ว
- แม้ว่า GNNs จะเป็นเครือข่ายแบบตื้น โดยปกติจะมีสามชั้น แต่โครงข่ายประสาทเทียมส่วนใหญ่สามารถเจาะลึกเพื่อปรับปรุงประสิทธิภาพได้ เราไม่สามารถดำเนินการที่ล้ำสมัยในชุดข้อมูลขนาดใหญ่ได้เนื่องจากข้อจำกัดนี้
- การฝึกโมเดลบนกราฟยากกว่า เนื่องจากไดนามิกเชิงโครงสร้างเป็นไดนามิก
- เนื่องจากเครือข่ายเหล่านี้มีค่าใช้จ่ายในการคำนวณที่สูง การปรับขนาดแบบจำลองสำหรับการผลิตจึงเป็นความท้าทาย การปรับขนาด GNN สำหรับการผลิตจะเป็นสิ่งที่ท้าทายหากโครงสร้างกราฟของคุณมีขนาดใหญ่และซับซ้อน
สรุป
ในช่วงไม่กี่ปีที่ผ่านมา GNN ได้พัฒนาเป็นเครื่องมือที่ทรงพลังและมีประสิทธิภาพสำหรับปัญหาการเรียนรู้ของเครื่องในโดเมนกราฟ บทความนี้จะให้ภาพรวมพื้นฐานของโครงข่ายประสาทกราฟ
หลังจากนั้น คุณสามารถเริ่มสร้างชุดข้อมูลที่จะใช้ในการฝึกและทดสอบแบบจำลองได้ เพื่อให้เข้าใจว่ามันทำงานอย่างไรและมีความสามารถอะไร คุณยังสามารถไปได้ไกลกว่านั้นมาก และฝึกมันโดยใช้ชุดข้อมูลประเภทอื่น
มีความสุขในการเข้ารหัส!
เขียนความเห็น