Khung Kiến Trúc Truyền Thông Điệp Tổng Quát MPNN (Gilmer et al. ICML 2017)
1. Tạo thông điệp (Message Function Mt):
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: graph-convolutional-network-gcn-layer.
Nội dung đề bài
Mục tiêu kiến thức
- Gilmer et al. (2017) thống nhất hầu hết các mô hình GNN (GCN, GAT, GraphSAGE) vào một khung tổng quát gọi là Message Passing Neural Networks (MPNN) gồm 3 giai đoạn tại mỗi bước t:
- Tạo thông điệp (Message Function Mt):
mij(t) = Mt(hi(t), hj(t), eij) (Thông điệp gửi từ đỉnh láng giềng j tới đỉnh i phụ thuộc vào trạng thái 2 đỉnh và đặc trưng cạnh eij).
- Gom cụm thông điệp (Aggregation Function bigoplus):
mi(t) = bigoplusj ∈ Ni mij(t) (Phải là một toán tử bất biến hoán vị như ∑ hoặc mean).
- Cập nhật trạng thái (Update Function Ut):
hi(t+1) = Ut(hi(t), mi(t)) (Thường dùng mạng MLP hoặc tế bào GRU).
Yêu cầu
Xây dựng lớp MPNNLayer(torch.nn.Module):
class MPNNLayer(nn.Module):
def __init__(self, node_dim: int, edge_dim: int, out_dim: int, aggr: str = "sum"):
pass
def forward(self, h: torch.Tensor, edge_index: torch.Tensor, edge_attr: torch.Tensor) -> torch.Tensor:
# h: (N, node_dim)
# edge_index: (2, E) where edge_index[0] = source, edge_index[1] = target
# edge_attr: (E, edge_dim)
# Returns: (N, out_dim)
pass- Message:
M([h_src, h_dst, edge_attr])qua một Linear layer(node_dim * 2 + edge_dim -> out_dim). - Aggregate: Dùng
scatter_addhoặc lặp để gom thông điệp vào đỉnh đíchtarget = edge_index[1]. - Update:
U([h_dst, m_aggregated])qua Linear layer(node_dim + out_dim -> out_dim).
Input
- Lớp
MPNNLayer(node_dim,edge_dim,out_dim,aggr): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.
Output
- Các phương thức của
MPNNLayer: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.
Ràng buộc
- Thời gian chạy tối đa: 3000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
node_dim, edge_dim, out_dim = (4, 2, 8)
mpnn = MPNNLayer(node_dim, edge_dim, out_dim)
h = torch.randn(2, node_dim)
edge_index = torch.tensor([[0], [1]], dtype=torch.long)
edge_attr = torch.randn(1, edge_dim)
mpnn(h, edge_index, edge_attr)Output
[[ 0.0166, -0.0193, -0.1555, 0.1239, 0.2539, 0.1403, -0.0507, -0.0993],
[ 0.0896, 0.2029, 0.0723, -0.2866, -0.3438, -0.0526, -0.3759, 0.2249]]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
torch.manual_seed(42)
node_dim, edge_dim, out_dim = (4, 2, 8)
mpnn = MPNNLayer(node_dim, edge_dim, out_dim)
h = torch.randn(2, node_dim)
edge_index = torch.tensor([[0], [1]], dtype=torch.long)
e1 = torch.randn(1, edge_dim)
e2 = e1 + 10.0
out1 = mpnn(h, edge_index, e1)
out2 = mpnn(h, edge_index, e2)Output
[[ 0.3727, 0.0455, -0.4174, -0.1621, 0.5048, -0.1361, -0.5602, -0.7397],
[ 0.2055, 0.4013, -0.1843, -0.3846, 0.1103, -1.0218, 0.655 , -0.9531]]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
