溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

發(fā)布時(shí)間:2022-05-10 16:36:18 來源:億速云 閱讀:387 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么”,在日常操作中,相信很多人在python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

    1. 圖信號(hào)處理知識(shí)

    圖卷積神經(jīng)網(wǎng)絡(luò)涉及到圖信號(hào)處理的相關(guān)知識(shí),也是由圖信號(hào)處理領(lǐng)域的知識(shí)推導(dǎo)發(fā)展而來,了解圖信號(hào)處理的知識(shí)是理解圖卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)。

    1.1 圖的拉普拉斯矩陣

    拉普拉斯矩陣是體現(xiàn)圖結(jié)構(gòu)關(guān)聯(lián)的一種重要矩陣,是圖卷積神經(jīng)網(wǎng)絡(luò)的一個(gè)重要部分。

    1.1.1 拉普拉斯矩陣的定義及示例

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    實(shí)例:

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    按照上述計(jì)算式子,可以得到拉普拉斯矩陣為:

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    1.1.2 正則化拉普拉斯矩陣

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    1.1.3 拉普拉斯矩陣的性質(zhì)

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    1.2 圖上的傅里葉變換

    傅里葉變換是一種分析信號(hào)的方法,它可分析信號(hào)的成分,也可用這些成分合成信號(hào)。它將信號(hào)從時(shí)域轉(zhuǎn)換到頻域,從頻域視角給出了信號(hào)處理的另一種解法。(1)對(duì)于圖結(jié)構(gòu),可以定義圖上的傅里葉變換(GFT),對(duì)于任意一個(gè)在圖G上的信號(hào)x,其傅里葉變換表示為:

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    從線代角度,可以清晰的看出:v1,…, vn構(gòu)成了N維特征空間中的一組完備基向量,G中任意一個(gè)圖信號(hào)都可表示為這些基向量的線性加權(quán)求和,系數(shù)為圖信號(hào)對(duì)應(yīng)傅里葉基上的傅里葉系數(shù)。

    回到之前提到的拉普拉斯矩陣刻畫平滑度的總變差:

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    可以看成:刻畫圖平滑度的總變差是圖中所有節(jié)點(diǎn)特征值的線性組合,權(quán)值為傅里葉系數(shù)的平方??傋儾钊∽钚≈档臈l件是圖信號(hào)與最小的特征值所對(duì)應(yīng)的特征向量完全重合,結(jié)合其描述圖信號(hào)整體平滑度的意義,可將特征值等價(jià)成頻率:特征值越低,頻率越低,對(duì)應(yīng)的傅里葉基變化緩慢,即相近節(jié)點(diǎn)的信號(hào)值趨于一致。

    把圖信號(hào)所有的傅里葉系數(shù)結(jié)合稱為頻譜(spectrum),頻域的視角從全局視角既考慮信號(hào)本身,也考慮到圖的結(jié)構(gòu)性質(zhì)。

    1.3 圖信號(hào)濾波器

    圖濾波器(Graph Filter)為對(duì)圖中的頻率分量進(jìn)行增強(qiáng)或衰減,圖濾波算子核心為其頻率響應(yīng)矩陣,為濾波器帶來不同的濾波效果。

    故圖濾波器根據(jù)濾波效果可分為低通,高通和帶通。

    低通濾波器:保留低頻部分,關(guān)注信號(hào)的平滑部分;

    高通濾波器:保留高頻部分,關(guān)注信號(hào)的劇烈變化部分;

    帶通濾波器:保留特定頻段部分;

    而拉普拉斯矩陣多項(xiàng)式擴(kuò)展可形成圖濾波器H:

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    2. 圖卷積神經(jīng)網(wǎng)絡(luò)

    2.1 數(shù)學(xué)定義

    圖卷積運(yùn)算的數(shù)學(xué)定義為:

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    上述公式存在一個(gè)較大問題:學(xué)習(xí)參數(shù)為N,這涉及到整個(gè)圖的所有節(jié)點(diǎn),對(duì)于大規(guī)模數(shù)據(jù)極易發(fā)生過擬合。

    進(jìn)一步的化簡(jiǎn)推導(dǎo):將之前說到的拉普拉斯矩陣的多項(xiàng)式展開代替上述可訓(xùn)練參數(shù)矩陣。

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    此結(jié)構(gòu)內(nèi)容即定義為圖卷積層(GCN layer),有圖卷積層堆疊得到的網(wǎng)絡(luò)模型即為圖卷積網(wǎng)絡(luò)GCN。

    2.2 GCN的理解及時(shí)間復(fù)雜度

    圖卷積層是對(duì)頻率響應(yīng)矩陣的極大化簡(jiǎn),將本要訓(xùn)練的圖濾波器直接退化為重歸一化拉普拉斯矩陣

    python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    2.3 GCN的優(yōu)缺點(diǎn)

    優(yōu)點(diǎn):GCN作為近年圖神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)之作,對(duì)處理圖數(shù)據(jù)非常有效,其對(duì)圖結(jié)構(gòu)的結(jié)構(gòu)信息和節(jié)點(diǎn)的屬性信息同時(shí)學(xué)習(xí),共同得到最終的節(jié)點(diǎn)特征表示,考慮到了節(jié)點(diǎn)之間的結(jié)構(gòu)關(guān)聯(lián)性,這在圖操作中是非常重要的。

    缺點(diǎn):過平滑問題(多層疊加之后,節(jié)點(diǎn)的表示向量趨向一致,節(jié)點(diǎn)難以區(qū)分),由于GCN具有一個(gè)低通濾波器的作用(j聚合特征時(shí)使得節(jié)點(diǎn)特征不斷融合),多次迭代后特征會(huì)趨于相同。

    3. Pytorch代碼解析

    GCN層的pytorch實(shí)現(xiàn):

    class GraphConvolutionLayer(nn.Module):
        '''
            圖卷積層:Lsym*X*W
                其中 Lsym表示正則化圖拉普拉斯矩陣, X為輸入特征, W為權(quán)重矩陣, X'表示輸出特征;
                *表示矩陣乘法
        '''
        def __init__(self, input_dim, output_dim, use_bias=True):
            #初始化, parameters: input_dim-->輸入維度, output_dim-->輸出維度, use_bias-->是否使用偏置項(xiàng), boolean
            super(GraphConvolutionLayer,self).__init__()
            self.input_dim=input_dim
            self.output_dim=output_dim
            self.use_bias=use_bias #是否加入偏置, 默認(rèn)為True
            self.weight=nn.Parameter(torch.Tensor(input_dim, output_dim))#權(quán)重矩陣為可訓(xùn)練參數(shù)
            if self.use_bias==True: #加入偏置
                self.bias=nn.Parameter(torch.Tensor(output_dim)) 
            else: #設(shè)置偏置為空
                self.register_parameter('bias', None)
            self.reset_parameters()
        def reset_parameters(self):
            #初始化參數(shù)
            stdv = 1. / math.sqrt(self.weight.size(1))
            self.weight.data.uniform_(-stdv, stdv)#使用均勻分布U(-stdv,stdv)初始化權(quán)重Tensor
            if self.bias is not None:
                self.bias.data.uniform_(-stdv, stdv)
        def forward(self, adj, input_feature):
            #前向傳播, parameters: adj-->鄰接矩陣(輸入為正則化拉普拉斯矩陣), input_future-->輸入特征矩陣
            temp=torch.mm(input_feature, self.weight)#矩陣乘法, 得到X*W
            output_feature=torch.sparse.mm(adj, temp)#由于鄰接矩陣adj為稀疏矩陣, 采用稀疏矩陣乘法提高計(jì)算效率, 得到Lsym*temp=Lsym*X*W
            if self.use_bias==True: #若設(shè)置了偏置, 加入偏置項(xiàng)
                output_feature+=self.bias
            return output_feature

    定義兩層的GCN網(wǎng)絡(luò)模型:

    class GCN(nn.Module):
        '''
            定義兩層GCN網(wǎng)絡(luò)模型
        '''
        def __init__(self, input_dim, hidden_dim, output_dim):
            #初始化, parameters: input_dim-->輸入維度, hidden_dim-->隱藏層維度, output_dim-->輸出維度
            super.__init__(GCN, self).__init__()
            #定義兩層圖卷積層
            self.gcn1=GraphConvolutionLayer(input_dim, hidden_dim)
            self.gcn2=GraphConvolutionLayer(hidden_dim, output_dim)
        def forward(self, adj, feature):
            #前向傳播, parameters: adj-->鄰接矩陣, feature-->輸入特征
            x=F.relu(self.gcn1(adj, feature))
            x=self.gcn2(adj, x)
            return F.log_softmax(x, dim=1)

    到此,關(guān)于“python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)的原理是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI