โครงข่ายกราฟคอนโวลูชัน (GCN)
กรอบการส่งข้อความ GCNConv การรวมคุณลักษณะโหนด และการตั้งค่า PyTorch Geometric
โครงข่ายกราฟคอนโวลูชัน (GCN) เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
จาก CNN สู่ GCN
CNN ใช้ประโยชน์จากโครงสร้างแบบตารางในรูปภาพ ส่วนเครือข่ายคอนโวลูชันบนกราฟ (GCN)ขยายแนวคิดคอนโวลูชันไปยังกราฟที่ไม่เป็นระเบียบ ทำให้แต่ละโหนดปรับปรุงตัวแทนของตนเองโดยใช้ข้อมูลจากโหนดข้างเคียง วิธีนี้รองรับข้อมูลที่ไม่มีตารางตายตัว
การส่งต่อข้อความ
GCN ใช้กรอบการทำงานแบบการส่งต่อข้อความ: ในแต่ละชั้น โหนดทุกโหนดจะ (1) รวบรวมข้อความจากโหนดข้างเคียง (2) รวมข้อความเหล่านั้น และ (3) ปรับปรุงเวกเตอร์ตัวแทนของตนเอง การซ้อนหลายชั้นทำให้ข้อมูลไหลผ่านกราฟได้
การรวมข้อมูลจากโหนดข้างเคียง
การดำเนินการหลักคือการรวมคุณลักษณะของโหนดข้างเคียง ชั้น GCN แบบง่ายจะหาค่าเฉลี่ยของเวกเตอร์คุณลักษณะของโหนดข้างเคียงของโหนดหนึ่ง (รวมตัวโหนดนั้นเองด้วย) จากนั้นจึงใช้การแปลงเชิงเส้นที่เรียนรู้ได้และฟังก์ชันไม่เชิงเส้น
# For each node v:
# h_v = activation( W * mean(features of v and its neighbors) )เหตุใดจึงต้องปรับมาตรฐานเมทริกซ์การเชื่อมต่อ
โหนดที่มีดีกรีสูงจะมีอิทธิพลมากเกินไปหากเรารวมโหนดข้างเคียงโดยตรง GCN จึงใช้เมทริกซ์การเชื่อมต่อที่ปรับมาตรฐานเพื่อปรับขนาดอิทธิพล ทำให้ขนาดของเวกเตอร์ตัวแทนโหนดคงที่สำหรับโหนดที่มีดีกรีต่างกัน
สูตรการปรับมาตรฐาน
การปรับมาตรฐานแบบสมมาตรจะเพิ่มลูปที่เชื่อมโหนดเข้ากับตัวเอง จากนั้นปรับขนาดตามดีกรีของโหนด เขียนได้เป็น D^(-1/2) (A + I) D^(-1/2) การเพิ่มเมทริกซ์เอกลักษณ์ I ทำให้โหนดสามารถคงคุณลักษณะของตนเองไว้ระหว่างการรวมข้อมูล
# A_hat = A + I (add self-loops)
# D_hat = degree matrix of A_hat
# A_norm = D_hat^(-1/2) * A_hat * D_hat^(-1/2)PyTorch Geometric
PyTorch Geometric (PyG) เป็นไลบรารีมาตรฐานสำหรับ GNN ใน PyTorch โดยมีชั้นสำเร็จรูป เช่น GCNConv ซึ่งจัดการคอนโวลูชันแบบส่งต่อข้อความที่ปรับมาตรฐานให้คุณ
import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConvชั้น GCNConv ชั้นเดียว
GCNConv(in_channels, out_channels) สร้างการทำคอนโวลูชันบนกราฟหนึ่งครั้ง โดยรับเมทริกซ์คุณลักษณะของโหนด x และ edge_index (การเชื่อมต่อของกราฟในรูปแบบ COO) แล้วส่งคืนเวกเตอร์ตัวแทนโหนดที่ปรับปรุงแล้ว
conv = GCNConv(in_channels=16, out_channels=32)
# x: [num_nodes, 16], edge_index: [2, num_edges]
h = conv(x, edge_index) # -> [num_nodes, 32]GCN แบบ 2 ชั้น
โดยทั่วไป GCN จะซ้อนกันสองชั้น ชั้นแรกจะแปลงคุณลักษณะและรวมข้อมูลจากโหนดข้างเคียงที่ห่างหนึ่งช่วง ส่วนชั้นที่สองจะรวมข้อมูลจากโหนดข้างเคียงที่ห่างสองช่วง ทำให้แต่ละโหนดมีขอบเขตรับข้อมูลครอบคลุมสองช่วง
class GCN(torch.nn.Module):
def __init__(self, in_dim, hid, out):
super().__init__()
self.conv1 = GCNConv(in_dim, hid)
self.conv2 = GCNConv(hid, out)
def forward(self, x, edge_index):
x = F.relu(self.conv1(x, edge_index))
x = F.dropout(x, training=self.training)
return self.conv2(x, edge_index)ขอบเขตรับข้อมูลขยายตามความลึก
ชั้น GCN แต่ละชั้นจะขยายขอบเขตรับข้อมูลของโหนดออกไปอีกหนึ่งช่วง สองชั้นจะมองเห็นบริเวณรอบข้างสองช่วง สามชั้นจะมองเห็นสามช่วง และต่อเนื่องไปเช่นนี้ ความลึกทำให้ข้อมูลจากระยะไกลเข้าถึงโหนดได้
การทำให้เรียบมากเกินไป
อย่างไรก็ตาม การซ้อนชั้นมากเกินไปทำให้เกิดการทำให้เรียบมากเกินไป: การหาค่าเฉลี่ยของโหนดข้างเคียงซ้ำ ๆ ทำให้เวกเตอร์ตัวแทนของโหนดทั้งหมดเข้าใกล้เวกเตอร์เดียวกันจนแทบแยกไม่ออก ส่งผลให้ความแตกต่างที่จำเป็นต่อการจำแนกหายไป ด้วยเหตุนี้ GCN ส่วนใหญ่จึงใช้เพียง 2 หรือ 3 ชั้น
การลดการทำให้เรียบมากเกินไป
เทคนิคที่ใช้ลดการทำให้เรียบมากเกินไป ได้แก่ การเชื่อมต่อแบบตกค้างหรือแบบข้าม เครือข่ายแบบความรู้กระโดดที่รวมผลลัพธ์จากหลายชั้น และการทำให้เครือข่ายมีความตื้น โดย GCN แบบตื้นมักทำได้ดีกว่าแบบลึกในการทดสอบมาตรฐาน
ตรวจสอบความเข้าใจอย่างรวดเร็ว
โปรดทดสอบความรู้เกี่ยวกับ GCN ของคุณ
สรุปทบทวน
คุณได้เรียนรู้เรื่องเครือข่ายคอนโวลูชันบนกราฟดังนี้
- GCN ใช้กรอบการทำงานแบบการส่งต่อข้อความ: รวมคุณลักษณะของโหนดข้างเคียงแล้วจึงปรับปรุงโหนด
- เมทริกซ์การเชื่อมต่อที่ปรับมาตรฐานพร้อมลูปที่เชื่อมโหนดเข้ากับตัวเองช่วยให้เวกเตอร์ตัวแทนมีเสถียรภาพ
GCNConvใน PyTorch Geometric ใช้สร้างการทำคอนโวลูชันหนึ่งครั้ง- สถาปัตยกรรมทั่วไปคือ GCN แบบ 2 ชั้น
- ความลึกที่มากเกินไปทำให้เกิดการทำให้เรียบมากเกินไป
คำถามที่พบบ่อย
บทเรียน “โครงข่ายกราฟคอนโวลูชัน (GCN)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โครงข่ายกราฟคอนโวลูชัน (GCN)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โครงข่ายกราฟคอนโวลูชัน (GCN)”
กรอบการส่งข้อความ GCNConv การรวมคุณลักษณะโหนด และการตั้งค่า PyTorch Geometric คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “โครงข่ายกราฟคอนโวลูชัน (GCN)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทฤษฎีกราฟสำหรับการเรียนรู้ของเครื่อง
- โครงข่ายกราฟคอนโวลูชัน (GCN)
- การจำแนกโหนดด้วย GNN
- การพยากรณ์เส้นเชื่อมและการจำแนกกราฟ