最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

圖神經(jīng)網(wǎng)絡(luò)GNN算法基本原理詳解

 更新時(shí)間:2022年05月10日 14:24:28   作者:Cyril_KI  
這篇文章主要為大家介紹了圖神經(jīng)網(wǎng)絡(luò)GNN算法基本原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

本文結(jié)合一個(gè)具體的無(wú)向圖來(lái)對(duì)最簡(jiǎn)單的一種GNN進(jìn)行推導(dǎo)。本文第一部分是數(shù)據(jù)介紹,第二部分為推導(dǎo)過(guò)程中需要用的變量的定義,第三部分是GNN的具體推導(dǎo)過(guò)程,最后一部分為自己對(duì)GNN的一些看法與總結(jié)。

1. 數(shù)據(jù)

利用networkx簡(jiǎn)單生成一個(gè)無(wú)向圖:

# -*- coding: utf-8 -*-
"""
@Time : 2021/12/21 11:23
@Author :KI 
@File :gnn_basic.py
@Motto:Hungry And Humble
"""
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
G = nx.Graph()
node_features = [[2, 3], [4, 7], [3, 7], [4, 5], [5, 5]]
edges = [(1, 2), (1, 3), (2, 4), (2, 5), (1, 3), (3, 5), (3, 4)]
edge_features = [[1, 3], [4, 1], [1, 5], [5, 3], [5, 6], [5, 4], [4, 3]]
colors = []
edge_colors = []
# add nodes
for i in range(1, len(node_features) + 1):
    G.add_node(i, feature=str(i) + ':(' + str(node_features[i-1][0]) + ',' + str(node_features[i-1][1]) + ')')
    colors.append('#DCBB8A')
# add edges
for i in range(1, len(edge_features) + 1):
    G.add_edge(edges[i-1][0], edges[i-1][1], feature='(' + str(edge_features[i-1][0]) + ',' + str(edge_features[i-1][1]) + ')')
    edge_colors.append('#3CA9C4')
# draw
fig, ax = plt.subplots()
pos = nx.spring_layout(G)
nx.draw(G, pos=pos, node_size=2000, node_color=colors, edge_color='black')
node_labels = nx.get_node_attributes(G, 'feature')
nx.draw_networkx_labels(G, pos=pos, labels=node_labels, node_size=2000, node_color=colors, font_color='r', font_size=14)
edge_labels = nx.get_edge_attributes(G, 'feature')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=14, font_color='#7E8877')
ax.set_facecolor('deepskyblue')
ax.axis('off')
fig.set_facecolor('deepskyblue')
plt.show()

如下所示:

其中,每一個(gè)節(jié)點(diǎn)都有自己的一些特征,比如在社交網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)(用戶(hù))有性別以及年齡等特征。

5個(gè)節(jié)點(diǎn)的特征向量依次為:

[[2, 3], [4, 7], [3, 7], [4, 5], [5, 5]]

同樣,6條邊的特征向量為:

[[1, 3], [4, 1], [1, 5], [5, 3], [5, 6], [5, 4], [4, 3]]

2. 變量定義

特征向量實(shí)際上也就是節(jié)點(diǎn)或者邊的標(biāo)簽,這個(gè)是圖本身的屬性,一直保持不變。

3. GNN算法

GNN算法的完整描述如下:Forward向前計(jì)算狀態(tài),Backward向后計(jì)算梯度,主函數(shù)通過(guò)向前和向后迭代調(diào)用來(lái)最小化損失。

主函數(shù)中:

上述描述只是一個(gè)總體的概述,可以略過(guò)先不看。

3.1 Forward

早期的GNN都是RecGNN,即循環(huán)GNN。這種類(lèi)型的GNN基于信息傳播機(jī)制: GNN通過(guò)不斷交換鄰域信息來(lái)更新節(jié)點(diǎn)狀態(tài),直到達(dá)到穩(wěn)定均衡。節(jié)點(diǎn)的狀態(tài)向量 x 由以下 f w ?函數(shù)來(lái)進(jìn)行周期性更新:

 

解析上述公式:對(duì)于節(jié)點(diǎn) n ,假設(shè)為節(jié)點(diǎn)1,更新其狀態(tài)需要以下數(shù)據(jù)參與:

這里的fw只是形式化的定義,不同的GNN有不同的定義,如隨機(jī)穩(wěn)態(tài)嵌入(SSE)中定義如下:

由更新公式可知,當(dāng)所有節(jié)點(diǎn)的狀態(tài)都趨于穩(wěn)定狀態(tài)時(shí),此時(shí)所有節(jié)點(diǎn)的狀態(tài)向量都包含了其鄰居節(jié)點(diǎn)和相連邊的信息。

這與圖嵌入有些類(lèi)似:如果是節(jié)點(diǎn)嵌入,我們最終得到的是一個(gè)節(jié)點(diǎn)的向量表示,而這些向量是根據(jù)隨機(jī)游走序列得到的,隨機(jī)游走序列中又包括了節(jié)點(diǎn)的鄰居信息, 因此節(jié)點(diǎn)的向量表示中包含了連接信息。

證明上述更新過(guò)程能夠收斂需要用到不動(dòng)點(diǎn)理論,這里簡(jiǎn)單描述下:

如果我們有以下更新公式:

GNN的Foward描述如下:

解釋?zhuān)?/p>

3.2 Backward

在節(jié)點(diǎn)嵌入中,我們最終得到了每個(gè)節(jié)點(diǎn)的表征向量,此時(shí)我們就能利用這些向量來(lái)進(jìn)行聚類(lèi)、節(jié)點(diǎn)分類(lèi)、鏈接預(yù)測(cè)等等。

GNN中類(lèi)似,得到這些節(jié)點(diǎn)狀態(tài)向量的最終形式不是我們的目的,我們的目的是利用這些節(jié)點(diǎn)狀態(tài)向量來(lái)做一些實(shí)際的應(yīng)用,比如節(jié)點(diǎn)標(biāo)簽預(yù)測(cè)。

因此,如果想要預(yù)測(cè)的話(huà),我們就需要一個(gè)輸出函數(shù)來(lái)對(duì)節(jié)點(diǎn)狀態(tài)進(jìn)行變換,得到我們要想要的東西:

最容易想到的就是將節(jié)點(diǎn)狀態(tài)向量經(jīng)過(guò)一個(gè)前饋神經(jīng)網(wǎng)絡(luò)得到輸出,也就是說(shuō) g w g_w gw?可以是一個(gè)FNN,同樣的, f w f_w fw?也可以是一個(gè)FNN:

我們利用 g w g_w gw?函數(shù)對(duì)節(jié)點(diǎn) n n n收斂后的狀態(tài)向量 x n x_n xn?以及其特征向量 l n l_n ln?進(jìn)行變換,就能得到我們想要的輸出,比如某一類(lèi)別,某一具體的數(shù)值等等。

BP算法中,我們有了輸出后,就能算出損失,然后利用損失反向傳播算出梯度,最后再利用梯度下降法對(duì)神經(jīng)網(wǎng)絡(luò)的參數(shù)進(jìn)行更新。

對(duì)于某一節(jié)點(diǎn)的損失(比如回歸)我們可以簡(jiǎn)單定義如下:

有了z(t)后,我們就能求導(dǎo)了:

z(t)的求解方法在Backward中有描述:

因此,在Backward中需要計(jì)算以下導(dǎo)數(shù):

4.總結(jié)與展望

本文所講的GNN是最原始的GNN,此時(shí)的GNN存在著不少的問(wèn)題,比如對(duì)不動(dòng)點(diǎn)隱藏狀態(tài)的更新比較低效。

由于CNN在CV領(lǐng)域的成功,許多重新定義圖形數(shù)據(jù)卷積概念的方法被提了出來(lái),圖卷積神經(jīng)網(wǎng)絡(luò)ConvGNN也被提了出來(lái),ConvGNN被分為兩大類(lèi):頻域方法(spectral-based method )和空間域方法(spatial-based method)。2009年,Micheli在繼承了來(lái)自RecGNN的消息傳遞思想的同時(shí),在架構(gòu)上復(fù)合非遞歸層,首次解決了圖的相互依賴(lài)問(wèn)題。在過(guò)去的幾年里還開(kāi)發(fā)了許多替代GNN,包括GAE和STGNN。這些學(xué)習(xí)框架可以建立在RecGNN、ConvGNN或其他用于圖形建模的神經(jīng)架構(gòu)上。

GNN是用于圖數(shù)據(jù)的深度學(xué)習(xí)架構(gòu),它將端到端學(xué)習(xí)與歸納推理相結(jié)合,業(yè)界普遍認(rèn)為其有望解決深度學(xué)習(xí)無(wú)法處理的因果推理、可解釋性等一系列瓶頸問(wèn)題,是未來(lái)3到5年的重點(diǎn)方向。

因此,不僅僅是GNN,圖領(lǐng)域的相關(guān)研究都是比較有前景的,這方面的應(yīng)用也十分廣泛,比如推薦系統(tǒng)、計(jì)算機(jī)視覺(jué)、物理/化學(xué)(生命科學(xué))、藥物發(fā)現(xiàn)等等。

以上就是圖神經(jīng)網(wǎng)絡(luò)GNN算法基本原理詳解的詳細(xì)內(nèi)容,更多關(guān)于圖神經(jīng)網(wǎng)絡(luò)GNN算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Pandas-DataFrame知識(shí)點(diǎn)匯總

    Pandas-DataFrame知識(shí)點(diǎn)匯總

    這篇文章主要介紹了Pandas-DataFrame知識(shí)點(diǎn)匯總,DataFrame是一種表格型數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值,下面我們一起進(jìn)入文章了解更多詳細(xì)內(nèi)容吧,需要的小伙伴也可以參考一下
    2022-03-03
  • python神經(jīng)網(wǎng)絡(luò)ShuffleNetV2模型復(fù)現(xiàn)詳解

    python神經(jīng)網(wǎng)絡(luò)ShuffleNetV2模型復(fù)現(xiàn)詳解

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)ShuffleNetV2模型復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 利用PyWebIO庫(kù)10分鐘搭建一個(gè)漂亮的Python?Web應(yīng)用

    利用PyWebIO庫(kù)10分鐘搭建一個(gè)漂亮的Python?Web應(yīng)用

    這篇文章主要介紹了PyWebIO是一個(gè)用于在瀏覽器上獲取輸入和進(jìn)行輸出的Python工具庫(kù),它能讓我們零前端知識(shí),純Python代碼構(gòu)建Web應(yīng)用,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • Python實(shí)現(xiàn)的歸并排序算法示例

    Python實(shí)現(xiàn)的歸并排序算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的歸并排序算法,簡(jiǎn)單描述了歸并排序算法的原理,并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)歸并排序的具體操作技巧,需要的朋友可以參考下
    2017-11-11
  • Python高階函數(shù)extract與extractall使用實(shí)例探究

    Python高階函數(shù)extract與extractall使用實(shí)例探究

    這篇文章主要為大家介紹了Python高階函數(shù)extract與extractall使用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • tensorflow通過(guò)模型文件,使用tensorboard查看其模型圖Graph方式

    tensorflow通過(guò)模型文件,使用tensorboard查看其模型圖Graph方式

    今天小編就為大家分享一篇tensorflow通過(guò)模型文件,使用tensorboard查看其模型圖Graph方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python functools模塊學(xué)習(xí)總結(jié)

    Python functools模塊學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Python functools模塊學(xué)習(xí)總結(jié),本文講解了functools.partial、functool.update_wrapper、functool.wraps、functools.reduce、functools.cmp_to_key、functools.total_ordering等方法的使用實(shí)例,需要的朋友可以參考下
    2015-05-05
  • python實(shí)現(xiàn)excel和csv中的vlookup函數(shù)示例代碼

    python實(shí)現(xiàn)excel和csv中的vlookup函數(shù)示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)excel和csv中的vlookup函數(shù),介紹如何使用python在excel和csv里實(shí)現(xiàn)vlookup函數(shù)的功能,首先需要簡(jiǎn)單了解一下python如何操作excel,需要的朋友可以參考下
    2023-01-01
  • Python使用Tesseract實(shí)現(xiàn)從圖像中讀取文本

    Python使用Tesseract實(shí)現(xiàn)從圖像中讀取文本

    Tesseract?是一個(gè)基于計(jì)算機(jī)的系統(tǒng),用于光學(xué)字符識(shí)別?(OCR)?和其他圖像到文本處理,本文將介紹如何使用?Python?中的?Tesseract?創(chuàng)建一個(gè)可以從圖像中讀取文本的程序,需要的可以參考下
    2023-11-11
  • Python turtle畫(huà)圖庫(kù)&&畫(huà)姓名實(shí)例

    Python turtle畫(huà)圖庫(kù)&&畫(huà)姓名實(shí)例

    今天小編就為大家分享一篇Python turtle畫(huà)圖庫(kù)&&畫(huà)姓名實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01

最新評(píng)論

宁津县| 车致| 平远县| 吴桥县| 镶黄旗| 太仆寺旗| 靖安县| 渭源县| 新宾| 洪泽县| 仁寿县| 邳州市| 莒南县| 津南区| 柘荣县| 双辽市| 双桥区| 邢台市| 潮州市| 特克斯县| 鸡东县| 桦甸市| 贵南县| 南丰县| 文安县| 安溪县| 固镇县| 安乡县| 岳池县| 乐清市| 金昌市| 甘南县| 盐津县| 仲巴县| 平潭县| 肥乡县| 柳河县| 雷波县| 长治市| 梅河口市| 自贡市|