نویسنده (ها): کالپان دارامشی
در ابتدا منتشر شده در به سمت هوش مصنوعیبشر
شبکه های عصبی نمودار چیست؟
شبکه های عصبی نمودار (GNN) قدرت بازنمایی شبکه های عصبی را با ساختار پیچیده نمودارها ترکیب می کنند. شبکه های عصبی عمیق ، به ویژه آنهایی که از یک چارچوب توجه چند سر استفاده می کنند ، در پردازش تصاویر و داده های متنی برتری دارند. از طرف دیگر ، نمودارها می توانند داده ها را به عنوان شبکه ای از گره ها (نهادها) و لبه ها (روابط بین نهادها) قالب بندی کنند تا به طور مؤثر وابستگی های پیچیده را ضبط کنند. GNNS ساختار نمودارها را به طور مکرر داده ها برای یک گره از همسایگان خود جمع می کند. تجمع تکراری داده ها از طریق مکانیسم عبور پیام حاصل می شود. این امکان را به شبکه می دهد تا تعبیه شده گره را که هم از ویژگی های یک گره رمزگذاری می کند و هم موقعیت آن را در نمودار یاد بگیرد رشته شناسیبشر این تعبیه ها می توانند به GNN کمک کنند تا الگوهای پنهان را کشف کنند ، پیش بینی داده ها را انجام دهند و طبقه بندی گره و نمودار را انجام دهند.
چگونه GNN در پشت صحنه کار می کند؟
در این بخش ، ما عملیات ریاضی اساسی را درک خواهیم کرد.

برای سادگی ، ما یک را در نظر گرفته ایم معادله خطی برای مدل شبکه عصبی. در معادله ، y خروجی است ، x ورودی است ، W وزن شبکه عصبی و B تعصب شبکه است. شبکه های عصبی سنتی از یک معادله خطی برای تبدیل ورودی ها استفاده می کنند. برای داده های بعدی بالاتر ، این تحول خطی با استفاده از عملیات ماتریس، جایی که متغیرها به عنوان نشان داده می شوند ماتریس و عملیاتی مانند ضرب و علاوه بر این تبدیل می شود ضرب ماتریس وت علاوه بر ماتریسبشر
در مورد نمودارها ، پیچیدگی اضافه شده از همه همسایگان متصل یک گره است. ما می توانیم با استفاده از یک مکانیسم عبور پیام ، تمام اطلاعات را از همسایگان یک گره جمع کنیم ، که این معادله را به جمع یک گره با یک جمع می کند حرف همسایگان

داده های موجود در معادله باید باشد عادی شده برای اسکان گره هایی با همسایگان کمتری. اطلاعات جمع شده برای گره هایی با تعداد بیشتری از همسایگان از گره های با تعداد کمتری بزرگتر خواهد بود. بنابراین ، درجه هر گره و همسایه آن به عنوان یک عامل عادی سازی عمل می کند.

تجزیه و تحلیل
ما انتخاب کرده ایم داده های باشگاه کاراته زاخاری در بسته هندسی مشعل برای تجزیه و تحلیل و توضیح موجود است. کلاسیک مجموعه داده به طور گسترده ای به عنوان معیار برای تجزیه و تحلیل گرافیکی مورد استفاده قرار می گیرد و به عنوان یک نقطه شروع عالی برای هر کسی که با GNN یاد می گیرد و آزمایش می کند ، خدمت می کند.
ما Torch_geometric را نصب می کنیم و پاندا بسته ها و واردات کلاس ها و توابع لازم برای اهداف آزمایش ما.
!pip install torch_geometric
!pip install pandas
import torch
import torch.nn.functional as F
from torch.nn import Linear
from torch_geometric.datasets import KarateClub
from torch_geometric.explain import Explainer, GNNExplainer
from torch_geometric.nn import GCNConv, GCN2Conv, GATConvfrom torch_geometric.utils import to_networkx
import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
dataset = KarateClub()
data = dataset[0]G = to_networkx(data, to_undirected=True)
plt.figure(figsize=(12,12))
plt.axis('off')
nx.draw_networkx(G,
pos=nx.spring_layout(G, seed=0),
with_labels=True,
node_size=800,
node_color=data.y,
cmap="hsv",
vmin=-2,
vmax=3,
width=0.8,
edge_color="grey",
font_size=14
)
plt.show()

مجموعه داده ها یک شبکه اجتماعی با 34 عضو در این باشگاه را نشان می دهد. هر گره نماینده یک عضو است و لبه ها نمایانگر تعامل اجتماعی بین اعضای خارج از باشگاه هستند. این تعامل ، گروه بندی اعضا را در بخش های مختلف در داخل باشگاه ایجاد کرده است. وظیفه اصلی پیش بینی بخش عضو باشگاه یا طبقه بندی هر گره است.
خصوصیات نمودار
- تعداد گره ها (اعضا): 34
- تعداد لبه ها (تعامل اجتماعی): 156 (کارگردانی و بدون وزنی)
- ویژگی های گره: هر گره 34 ویژگی دارد.
- برچسب های گره: چهار کلاس برای طبقه بندی در دسترس است.
اجرای GNN
ما از اجرای شبکه توجه نمودار برای GNN خود استفاده می کنیم. از مکانیسم توجه برای شناسایی مناسب ترین ویژگی ها و گره های همسایه برای پیش بینی استفاده می شود.
class GAT(torch.nn.Module):
def __init__(self, in_channels, hidden_channels, out_channels):
super().__init__()
self.gat_conv_first = GATConv(in_channels, hidden_channels)
self.gat_conv_second = GATConv(hidden_channels, out_channels)def forward(self, x, edge_index):
x = F.relu(self.gat_conv_first(x,edge_index))
return self.gat_conv_second(x, edge_index)
راه اندازی مدل
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = GAT(in_channels=dataset.num_node_features, hidden_channels=5, out_channels=dataset.num_classes).to(device)
data = data.to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.02)
loss_fn = torch.nn.CrossEntropyLoss()
آموزش مدل و نتایج
def accuracy(pred_y, y):
return (pred_y == y).sum() / len(y)# 4. Training loop
def train():
model.train()
optimizer.zero_grad()
z = model(data.x, data.edge_index)
loss = loss_fn(z[data.train_mask], data.y[data.train_mask])
acc = accuracy(z.argmax(dim=1), data.y)
loss.backward()
optimizer.step()
return loss,acc
# Train the model
loss_list = []
acc_list = []
for epoch in range(1, 101):
loss,acc = train()
loss_list.append(loss.item())
acc_list.append(acc.item())
print(f'Epoch : {epoch} Loss : {loss}, Accuracy: {acc}')
df = pd.DataFrame({'Epochs': range(1,101), 'Loss': loss_list, 'Accuracy': acc_list})
df.plot(x='Epochs', y=['Loss', 'Accuracy'])
plt.title('Line Plot of Loss and Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Loss and Accuracy')
plt.show()

نتایج آموزش حاکی از کاهش تدریجی از دست دادن و افزایش دقت است. این فرایند به دقت آموزش بیش از 90 ٪ دست می یابد ، که برای اهداف آزمایش ما کافی است.
XAI
سرانجام ، ما به جایی می رسیم که می توانیم روند توضیح GNN خود را شروع کنیم.
بسته هندسی مشعل GNNExPlainer را به ما ارائه می دهد تا روند تجمع پیام را در یک گره توضیح و تجسم کنیم و همچنین ویژگی های مهم مورد استفاده برای طبقه بندی گره را ضبط کنیم.
explainer = Explainer(
model=model,
algorithm=GNNExplainer(epochs=200),
explanation_type='model',
node_mask_type='attributes',
edge_mask_type='object',
model_config=dict(
task_level='node',
return_type='log_probs',
mode='multiclass_classification'
)
)# Explain the prediction for a single node (e.g., index 5)
explanation = explainer(x=data.x, edge_index=data.edge_index, index=5)
# Visualize the explanation
explanation.visualize_graph(path='explanation.png')
#explanation.get_explanation_subgraph().visualize_graph(path='sub_graph.png')
explanation.visualize_feature_importance(path='feature_importance.png',top_k=10)

اگر از نزدیک مشاهده کنیم ، برخی از لبه های توضیحات فوق ضعف و برخی دیگر برجسته هستند. لبه های برجسته حاکی از وزن یا تأثیر زیاد است و لبه های ضعیف حاکی از وزن کم یا تأثیر برای گره مورد نظر است.

نمودار فوق ویژگی های مهم برای طبقه بندی گره را برجسته می کند. اهمیت ویژگی وزن هر ویژگی مورد استفاده برای طبقه بندی یا اهداف پیش بینی را فراهم می کند.
برچسب های ویژگی (به عنوان مثال ، ‘5’ ، ’10’ ، ‘0’) در محور y با شاخص های ویژگی های ورودی مطابقت دارد ، نه شناسه های گره در نمودار. همانطور که نمودار نوار نشان می دهد ، ویژگی های 5 ، 10 و 0 دارای بالاترین امتیاز برای این طبقه بندی گره است.
کتابخانه های XAI مانند شکل، همچنین می تواند معیارهای اهمیت با ویژگی مشابه را ایجاد کند یادگیری ماشین مدل ها.
چرا ما به XAI احتیاج داریم؟
تصور کنید که ما در حال کار بر روی یک شبکه عظیم هستیم و موظف به توضیح پیش بینی GNN از طبقه بندی گره هستیم. بدون قابلیت XAI ، این استدلال می شود که گره ها و ویژگی های همسایه بر این تصمیم تأثیر گذاشته اند. توضیح دهندگان GNN به ما کمک می کنند تا شکاف را برطرف کنیم و بینش لازم را در اختیار ما قرار دهیم.
قابلیت های XAI به عیب یابی یا اشکال زدایی مدل ، ایجاد اعتماد و تفسیر کمک می کند و الزامات حسابرسی و انطباق را نیز برآورده می کند.
در اصل ، XAI به عنوان پلی بین خروجی جعبه سیاه GNN و نیاز انسان به درک ، اطمینان حاصل می کند که می توان از این مدل های قدرتمند با مسئولیت پذیری و مؤثر استفاده کرد.
کل کد آزمایش را می توان در آن یافت گیتوببشر
امیدوارم مقاله را دوست داشته باشید و امروز چیز جدیدی یاد گرفته اید !!
منتشر شده از طریق به سمت هوش مصنوعی
منبع: https://towardsai.net/p/machine-learning/xai-graph-neural-networks