導航:首頁 > 源碼編譯 > 神經網路演算法求圖

神經網路演算法求圖

發布時間:2023-03-21 02:55:37

㈠ 一文詳解圖神經網路(二)

《The Graph Neural Network Model》

圖領域的應用主要可以分為兩種類型 :專注於 圖的應用(graph-focused) 和 專注於節點的應用(node-focused) 。對於graph-focused的應用,函數 和具體的節點無關,(即 ),訓練時,在一個圖的數據集中進行分類或回歸。對於node-focused的應用, 函數依賴於具體的節點 ,即

在一個圖-節點對的集合 , 表示圖的集合, 表示節點集合,圖領域問題可以表示成一個有如下數據集的監督和啟空學習框架:

其中, 表示集合 中的第 個節點, 表示節點 的期望目標(即標簽)。節點 的狀態用 表示,該節點的輸出用 表示, 為 local transition function , 為 local output function ,那麼 和 的更新方式如下:

其中, 分別表示節點 的特徵向量、與節點 相連的邊的特徵向量、節點 鄰居節點的狀態向量、節點 鄰居節點的特徵向量。 分別為所有的狀態、所有的輸出、所有的特徵向量、所有節點的特徵向量的疊加起來的向量,那麼上面函數可以寫成如下形式:

其中, 為 global transition function , 為 global output function ,分別是 和 的疊加形式

根據 Banach的不動點理論 ,假設 是一個壓縮映射函數,那麼式子有唯一不動點解,而且可以通過迭代方式逼近該不動點

其中, 表示 在第 個迭代時刻的值,對於任意初值,迭代的誤差是以指數速度減小的,使用迭代的形式寫出狀態和輸出的更新表達式為:

GNN的學習就是估計參數 ,使得函數 能夠近似估計訓練集

其中, 表示在圖 中監督學習的節點,對於graph-focused的任務,需要增加一個特殊的節點,該節點用來作為目標節點,這樣, graph-focused 任務和 node-focused 任務都能統一到節點預測任務上,學習目標可以是最小化如下二次損失函數

優化演算法基於隨機梯度下降的策略,優化步驟按照如下幾步進行:

在GNN中,函數 不需要滿足特定的約束,直接使用多層前饋神經網路,對於函數 ,則需要著重考慮,因為 需要滿足壓縮映射的條件,而且與不動點計算相關。下面提出兩種神經網路和不同的策略來滿足這些需求

對於節點n nn狀態的計算,將 改成如下形式

相當於是對節點 的每一個鄰居節點使用 ,並將得到的值求和來作為節點 的狀態,由此,對上式中的函數 按照如下方式實現:

其中,向量 ,矩陣 定喚瞎義為兩個前向神旁仔經網路的輸出。更確切地說,令產生矩陣 的網路為transition network,產生向量 的網路為forcing network

其中, , , 表示將 維的向量整理(reshape)成 的矩陣,也就是說,將transition network的輸出整理成方形矩陣,然後乘以一個系數就得到 , 就是forcing network的輸出

在這里,假定 ,這個可以通過設定transition function的激活函數來滿足,比如設定激活函數為 tanh() 。在這種情況下, , 和 分別是 的塊矩陣形式和 的堆疊形式,可得:

該式表示 對於任意的參數 是一個壓縮映射,矩陣 的 1-norm 定義為:

在這個結構中, 通過多層前饋網路實現,但是,並不是所有的參數 都會被使用,因為同樣需要保證 是一個壓縮映射函數,這個可以通過懲罰項來實現

其中,懲罰項 在 時為 ,在 時為0,參數 定義為希望的 的壓縮系數

NLP新人,歡迎大家一起交流,互相學習,共同成長~~

㈡ 一文徹底搞懂BP演算法:原理推導+數據演示+項目實戰(上篇)

反向傳播演算法(Backpropagation Algorithm,簡稱BP演算法)是深度學習的重要思想基礎,對於初學者來說也是必須要掌握的基礎知識!本文希望以一個清晰的脈絡和詳細的說明,來讓讀者徹底明白BP演算法的原理和計算過程。

全文分為上下兩篇,上篇主要介紹BP演算法的原理(即公式的推導),介紹完原理之後,我們會將一些具體的數據帶入一個簡單的三層神經網路中,去完整的體驗一遍BP演算法的計算過程;下篇是一個項目實戰,我們將帶著讀者一起親手實現一個BP神經網路(不使用任何第三方的深度學習框架)來解決一個具體的問題。

圖 1 所示是一個簡單的三層(兩個隱藏層,一個輸出層)神經網路結構,假設我們使用這個神經網路來解決二分類問題,我們給這個網路一個輸入樣本 ,通過前向運算得到輸出 。輸出值 的值域為 ,例如 的值越接近0,代表該樣本是"0"類的可能性越大,反之是"1"類的可能性大。

為了便於理解後續的內容,我們需要先搞清楚前向傳播的計算過程,以圖1所示的內容為例:

輸入的樣本為:

第一層網路的參數為:

第二層網路的參數為:

第三層網路的參數為:

第一層隱藏層有三個神經元: 、 和 。該層的輸入為:

以 神經元為例,則旁敏其輸入為:

同理有:

假設我們選擇函數 作為該層的激活函數(圖1中的激活函數都標了一個下標,一般情況下,同一層的激活函數都是一樣的,不同層可以選擇不同的激活函數),那麼該層的輸出為: 、 和 。

第二層隱藏層有兩個神經元: 和 。該層的輸入為:

即第二層的輸入是第一層的輸出乘以第二層的權重,再加上亮困第二層的偏置。因此得到和的輸入分別為:

該層的輸出分別為: 和 。

輸出層只有一個神經元 :。該層的輸入為:

即:

因為該網路要解決的是一個二分類問題,所以輸出層的激活函數也可以使用一個Sigmoid型函數,神經網路最後的輸出為: 。

在1.1節里,我們已經了解了數據沿著神經網路前向傳播的過程,這一節我們來介紹更重要的反向傳播的計算過程。假設我們使用隨機梯度下降的方式來學習神經網路的參數,損失函數定義為 ,其中 是該樣本的真實類標。使用梯度下降進行參數的學習,我們必須計算出損失函數關於神經網路中各層參數(權重 和偏置 )的偏導數。

假設我們要對第 層隱藏層的參數 和 求偏導數,即求 和 。假設 代表第 層神經元的運鍵枝輸入,即 ,其中 為前一層神經元的輸出,則根據鏈式法則有:

因此,我們只需要計算偏導數 、 和 。

前面說過,第k層神經元的輸入為: ,因此可以得到:

上式中, 代表第 層神經元的權重矩陣 的第 行, 代表第 層神經元的權重矩陣 的第 行中的第 列。

我們以1.1節中的簡單神經網路為例,假設我們要計算第一層隱藏層的神經元關於權重矩陣的導數,則有:

因為偏置b是一個常數項,因此偏導數的計算也很簡單:

依然以第一層隱藏層的神經元為例,則有:

偏導數 又稱為 誤差項(error term,也稱為「靈敏度」) ,一般用 表示,例如 是第一層神經元的誤差項,其值的大小代表了第一層神經元對於最終總誤差的影響大小。

根據第一節的前向計算,我們知道第 層的輸入與第 層的輸出之間的關系為:

又因為 ,根據鏈式法則,我們可以得到 為:

由上式我們可以看到,第 層神經元的誤差項 是由第 層的誤差項乘以第 層的權重,再乘以第 層激活函數的導數(梯度)得到的。這就是誤差的反向傳播。
現在我們已經計算出了偏導數 、 和 ,則 和 可分別表示為:

下面是基於隨機梯度下降更新參數的反向傳播演算法:

單純的公式推導看起來有些枯燥,下面我們將實際的數據帶入圖1所示的神經網路中,完整的計算一遍。

我們依然使用如圖5所示的簡單的神經網路,其中所有參數的初始值如下:

輸入的樣本為(假設其真實類標為"1"):

第一層網路的參數為:

第二層網路的參數為:

第三層網路的參數為:

假設所有的激活函數均為Logistic函數: 。使用均方誤差函數作為損失函數:

為了方便求導,我們將損失函數簡化為:

我們首先初始化神經網路的參數,計算第一層神經元:

上圖中我們計算出了第一層隱藏層的第一個神經元的輸入 和輸出 ,同理可以計算第二個和第三個神經元的輸入和輸出:

接下來是第二層隱藏層的計算,首先我們計算第二層的第一個神經元的輸入z₄和輸出f₄(z₄):

同樣方法可以計算該層的第二個神經元的輸入 和輸出 :

最後計算輸出層的輸入 和輸出 :

首先計算輸出層的誤差項 ,我們的誤差函數為 ,由於該樣本的類標為「1」,而預測值為 ,因此誤差為 ,輸出層的誤差項為:

接著計算第二層隱藏層的誤差項,根據誤差項的計算公式有:

最後是計算第一層隱藏層的誤差項:

㈢ 急求人工神經網路的MATLAB演算法~~求大蝦教我

1、採用2-5-1三層BP網路結構即可實現其
MATLAB 程序如下:
clc
clear
a=rand(2,200);
x=a(1,:);
y=a(2,:);
F=x.^2+y.^2;
net=newff(minmax(a),[5,1],{'tansig' 'purelin'},'trainlm');
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainparam.goal=0.001;
net=train(net,a,F)
b=rand(2,100);
x1=b(1,:);
y1=b(2,:);
F1=x1.^2+y1.^2;
ty=sim(net,b);
subplot(1,2,1)
plot(F1);
subplot(1,2,2)
plot(ty,'r')

以上程序我運行很好,。

2、神經網路的核心就是求權值W,偏置值b,很多演算法都可實現,當V,M收斂後,就確定這個函數了,只是這個函數為非線性函數,非常復雜,表達困難,已經包含在訓練好的神經網路了,此時,可以用這個網路進行預測和分類

記住分給我啊,這個matlab程序花了很多時間,注釋懶的寫了,你應該看的懂的。

㈣ 神經網路演算法-梯度下降GradientDescent

神經網路文章索引

上一篇神經網路結構中,我們介紹了神經元的結構,激活函數以及每個神經元激活值的演算法,涉及到權重、偏置值等。

上一篇結尾提到,對於28*28的黑白手寫圖像識別,我們需要13002個權重和偏置數值,才能讓我們的神經網路最後輸出正確結果。

所謂的機器學習,就是尋找這13002個數值的過程。首先這里有兩點需要注意:

在負無窮到正無窮之間,如何獲得一萬多個數字最佳的匹配值?這比在全世界挑選1萬人讓TA們一起相愛還要難。

我們的做法是用計算機強大運算速度,暴力解決問題。

好了,現在,暴力不是問題,要想出奇跡的關鍵就在於如何找到如何 優化的規律

要想做優化,首先要明確目標,找到當前神經網路和期望結果之間的差距。

從下圖可以看到,隨機設定的神經網路最終輸出的是混亂的一層(被黃色線框標出),距離最右邊我們期望只點亮神經元3的情況差距很大。

我們把混亂輸出層的每個神經元與期望層每個對應神經元激活值相減,然後平方,再累加在一起,這就是方差cost代價,如下圖,計算得到cost是3.37。

我們用這個cost來表示當前神經網路13002個設定值和期望設定值之間的差距,當然,這個cost等於0是差距最小,也就是最接近期望設定值。——當然這只是針對數字3的1張圖片來說,我們需要的是針對0~9共10個數字的數萬張圖片,cost都能是最小。

從下圖,我們來看一下神經網路的功能。它能利用13002個設定值經過3層神經元激活值的計算,把784個像素亮度變為10個數字(我們期望這10個數字中只有一個是1,其他都是0)。

這13002個權重和偏置數字,加上激活值的演算法,就是神經網路的「想法」。

我們再來看看代價函數的情況,如下圖,它是利用很多很多的訓練圖片(已經明確了對應的數字),把13002個數字變為1個cost代價數。

寫成函數形式

我們假設最簡單的情況,只有1個權重和1個偏置:

x和y是任意可能的數值,我們希望知道當x和y是什麼數值的時候z最小。

每一組[x,y]都對應唯一的z,我們可以假想,有無數個[x,y,z]這樣的位置點,在三維空間坐標中,它們就會組成一個面(曲面或平面),如下圖。

從幾何意義上看,我們就是要找到凹陷最低的那個位置點的x,y的值,因為那裡z也就是cost代價最低。

假設上面的xyz繪制的cost曲面是個山地,你是一個旅行者,需要行走找到最低點的位置,你會怎麼辦?

沒錯,只要一直往下走,那麼就能走到所在區域的最低點。——當然,如果山後面還有更深的山谷,那麼你可能找到的只是局部最低點,而並非世界最低點。

實際上,對於復雜的超多維度來說,找到世界最低點幾乎是不可能任務。我們唯一能做的就是多找幾個局部最低點,然後選擇其中最低的那個。

同樣,如果我們落腳在[x',y'],那麼可以嘗試對比[x'+0.1,y'],[x'-0.1,y'],[x',y'-0.1],[x',y'+0.1],如果[x'+0.1,y']是最低的,那麼我們就走到這里,然後繼續嘗試對比四周點的高度。這就是梯度下降的演算法。

如下圖,我們沿著虛線一步一步下山找到最低點。

首先快速的從下圖了解幾個基本概念。
下圖的弧線表示的是某個函數y=f(x),比如拋物線方程y=x 2 。
曲線上任取兩個點a,b,它們對應x和x+dx。(d是指德爾塔大寫Δ,小寫δ)
ab兩點對應的y的差是dy。
現在直線ab看上去是曲線的割線(有ab兩個交點)。
假設b點沿著曲線,越來越靠近a點,那麼dx極限趨近於0,這時候dy也會越來越小趨近於0,但是!我們會意識到dy/dx永遠不會是0,而最終它仍然是角∠cab的對邊比鄰邊,也就是正切三角函數值。
實際上,這也正是曲線的切線的定義。
可以想像,我們取的a點越是靠右,那麼這個切線越是豎直。
如果我們把這個切線看做表示某個一次方程,如y=mx+n這種形式,那麼a點越靠右,直線越豎直,m值也就越大。
我們把m值叫做直線的斜率。

導數derivative ,一元函數y=f(x)(即因變數y只受到一個自變數x影響的函數)中任意取x,如果x增加極小趨近於0的Δx(或者寫為dx),那麼y相應的被增加Δy(或者寫作dy),那麼導數就是dy/dx,而又有dy=f(x+dx)-f(x),所以:

從函數的曲線圖上可以看到,某點的導數就是dx趨近於0時候∠cab的正切,導數反映了切線的陡峭程度,也就是y隨著x變化的快慢程度。

微分differential ,簡單說就是Δx和Δy,或者記作dx和dy。x稱之為自變數,y稱之為因變數,那麼x趨近於最小的時候的值,就是x的微分(趨近0又不是0的那個神秘值),同樣y的微分也是這個意思,總之是想得到又摸不到的神奇值。

斜率slope ,一元一次函數(直線方程)y=mx+n的系數m值。在這里就是a點的導數值f'(x)。

切線tangent ,某個點a的切線,就是經過a點的,以A點斜率為系數的方程y=f'(x)x+n所表示的直線。

自變數dependent variable和因變數 independent variable ,x自己的變化,引發y被動變化。

好了,我們來看 多變數微分Multivariable differential

上面都是一個y收到一個x的影響y=f(x),多變數就是不止受到一個自變數的影響,我們以最簡單的z=f(x,y)為例,z=x 2 +y 2 。

綠軸x的變化和紅軸y的變化,都會對應藍軸z的變化。
x從負無窮到正無窮無限種可能,y也是無限種可能,x和y復合到一起就在水平方向覆蓋了全部地面,z值有高有低,就像現實世界中的海拔一樣,把xy平面凸起或凹陷。(圖中粉色沒有畫出全部曲面)

我們可以想像,這時候不能討論A點的切線了,而應該考慮它的 切平面tangent plane (下圖綠色平面)。

方向導數directional derivative ,就是曲面上過A點的任意曲線的切線(下圖紫色線)組成的平面,就是切平面。

這么多紫色的方向中,哪一個方向最陡峭?對於這個z=x 2 +y 2 函數來說,明顯是最接近豎直朝上的那個箭頭和最接近豎直朝下的那個箭頭。
和曲線一樣道理,越陡峭意味著z對x、y的變化越敏感,或者說dx、dy的變化會引發更多的dz。
梯度gradient ,我們規定,能夠引發因變數最快變化的那個切線正方向,就叫做曲面方程上這個點的梯度。注意梯度是個xyz表示的三維方向,例如[0,0,1]表示z軸豎直向上,[0.1,0.1,1]就往xy的正方向偏一點點。

對於只有xy兩個變數的三維曲面來說,我們還可以只是考慮x+0.1,x-0.1,y+0.1,y-0.1這樣的試探方法找到最低點,只要2*2=4次就可以了,周全一點也就8次。

但是對於我們手寫數字識別中13002個自變數來說,那就要2 13002 次,這是不可行的。

借用多元微分,我們可以找到13002個自變數某一隨機點對應的切平面(實際早已不是什麼平面了,我們姑且這么說),也可以計算出其中變化最快的方向,就是梯度,數學家已經證明,不管多少個維度,沿著梯度往前走一步,都能獲得最快變化後新的一個點,這個點是一個n維向量,對於我們的案例來說就是13003個新數字組成的數組[0.322,0.123,0.55,0.222,...0.233]共13003個數字。

唯一要說明的一點不同就是,為了找最低點,我們不是往上走,而是往相反的負方向,朝下走。

步長step size ,就是我們每次沿著 負梯度 往下走多遠,在機器學習演算法裡面它叫做 學習率learning rate ,同樣道理,步子邁小了走得太慢,找到最低點耗時間太久,步子太大了容易跳過最低點(注意,1萬多維的復雜情況不是我們上面三維漏斗曲面那麼簡單可以描述的)。所以我們經常設置0.00001這樣小的數字,好在很多機器學習程序都會適當的自動調整它(比如Tensorflow中的梯度下降優化GradientDescentOptimizer),實際上不會讓它太慢。

同時,我們從上圖中看到,計算出的負梯度是由很多數字組成的數組,每個數字代表一個維度(就像xy那樣),所以我們只要在原來的位置點坐標(比如[x,y])上分別把這個梯度(比如[0.1,-0.3])加上去就能得到新的點([x+0.1,y-0.3])。

內容小結

如果您發現文章錯誤,請不吝留言指正;
如果您覺得有用,請點喜歡;
如果您覺得很有用,感謝轉發~

END

㈤ 神經網路演算法

20 世紀五、六⼗年代,科學家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影響,發明了感知機(Perceptrons)。

⼀個感知器接受⼏個⼆進制輸⼊, ,並產⽣⼀個⼆進制輸出:

如上圖所示的感知機有三個輸⼊: 。通常可以有更多或更少輸⼊。 我們再引⼊權重: ,衡量輸入對輸出的重要性。感知機的輸出為0 或者 1,則由分配權重後的總和 ⼩於等於或者⼤於閾值決定。和權重⼀樣,閾值(threshold)是⼀個實數,⼀個神經元的參數。⽤更精確的代數形式如下:

給三個因素設置權重來作出決定:

可以把這三個因素對應地⽤⼆進制變數 來表⽰。例如,如果天⽓好,我們把

,如果不好, 。類似地,如果你的朋友陪你去, ,否則 。 也類似。

這三個對於可能對你來說,「電影好不好看」對你來說最重要,而天氣顯得不是那麼的重要。所以你會這樣分配權值: ,然後定義閾值threshold=5。

現在,你可以使⽤感知器來給這種決策建⽴數學模型。

例如:

隨著權重和閾值的變化,你可以得到不同的決策模型。很明顯,感知機不是⼈做出決策使⽤的全部模型。但是這個例⼦說明了⼀個感知機如何能權衡不同的依據來決策。這看上去也可以⼤致解釋⼀個感知機⽹絡有時確實能夠做出一些不錯的決定。

現在我們隊上面的結構做一點變化,令b=-threshold,即把閾值移到不等號左邊,變成偏置, 那麼感知器的規則可以重寫為:

引⼊偏置只是我們描述感知器的⼀個很⼩的變動,但是我們後⾯會看到它引導更進⼀步的符號簡化。因此,我們不再⽤閾值,⽽總是使⽤偏置。

感知機是首個可以學習的人工神經網路,它的出現引起的神經網路的第一層高潮。需要指出的是,感知機只能做簡單的線性分類任務,而且Minsky在1969年出版的《Perceptron》書中,證明了感知機對XOR(異或)這樣的問題都無法解決。但是感知機的提出,對神經網路的發展是具有重要意義的。

通過上面的感知機的觀察我們發現一個問題,每個感知機的輸出只有0和1,這就意味著有時我們只是在單個感知機上稍微修改了一點點權值w或者偏置b,就可能造成最終輸出完全的反轉。也就是說,感知機的輸出是一個階躍函數。如下圖所示,在0附近的時候,輸出的變化是非常明顯的,而在遠離0的地方,我們可能調整好久參數也不會發生輸出的變化。

這樣階躍的跳變並不是我們想要的,我們需要的是當我們隊權值w或者偏置b做出微小的調整後,輸出也相應的發生微小的改變芹則禪。這同時也意味值我們的輸出不再只是0和1,還可以輸出小數。由此我們引入了S型神經元。

S型神經元使用 S 型函數,也叫Sigmoid function函數,我們用它作為激活函數。其表達式如下:

圖像如下圖所示:

利⽤實際的 σ 函數,我們得到⼀個,就像上⾯說明的,平滑的感知器。 σ 函數的平滑特性,正是關鍵因素,⽽不是其細部形式盯明。 σ 的平滑意味著權重和偏置的微⼩變化,即 ∆w 和 ∆b,會從神經元產⽣⼀個微⼩的輸出變化 ∆output。實際上,微積分告訴我們

∆output 可以很好地近似表⽰為:

上面的式子是⼀個反映權重、偏置變化嫌塵和輸出變化的線性函數。這⼀線性使得我們可以通過選擇權重和偏置的微⼩變化來達到輸出的微⼩變化。所以當 S 型神經元和感知器本質上是相同的,但S型神經元在計算處理如何變化權重和偏置來使輸出變化的時候會更加容易。

有了對S型神經元的了解,我們就可以介紹神經網路的基本結構了。具體如下:

在⽹絡中最左邊的稱為輸⼊層,其中的神經元稱為輸⼊神經元。最右邊的,即輸出層包含有輸出神經元,在圖中,輸出層只有⼀個神經元。中間層,既然這層中的神經元既不是輸⼊也不是輸出,則被稱為隱藏層。

這就是神經網路的基本結構,隨著後面的發展神經網路的層數也隨之不斷增加和復雜。

我們回顧一下神經網路發展的歷程。神經網路的發展歷史曲折盪漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經歷了數次大起大落。

從單層神經網路(感知機)開始,到包含一個隱藏層的兩層神經網路,再到多層的深度神經網路,一共有三次興起過程。詳見下圖。

我們希望有⼀個演算法,能讓我們找到權重和偏置,以⾄於⽹絡的輸出 y(x) 能夠擬合所有的 訓練輸⼊ x。為了量化我們如何實現這個⽬標,我們定義⼀個代價函數:

這⾥ w 表⽰所有的⽹絡中權重的集合, b 是所有的偏置, n 是訓練輸⼊數據的個數,
a 是表⽰當輸⼊為 x 時輸出的向量,求和則是在總的訓練輸⼊ x 上進⾏的。當然,輸出 a 取決於 x, w和 b,但是為了保持符號的簡潔性,我沒有明確地指出這種依賴關系。符號 ∥v∥ 是指向量 v 的模。我們把 C 稱為⼆次代價函數;有時也稱被稱為均⽅誤差或者 MSE。觀察⼆次代價函數的形式我們可以看到 C(w, b) 是⾮負的,因為求和公式中的每⼀項都是⾮負的。此外,代價函數 C(w,b)的值相當⼩,即 C(w; b) ≈ 0,精確地說,是當對於所有的訓練輸⼊ x, y(x) 接近於輸出 a 時。因

此如果我們的學習演算法能找到合適的權重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,當 C(w; b) 很⼤時就不怎麼好了,那意味著對於⼤量地輸⼊, y(x) 與輸出 a 相差很⼤。因此我們的訓練演算法的⽬的,是最⼩化權重和偏置的代價函數 C(w; b)。換句話說,我們想要找到⼀系列能讓代價盡可能⼩的權重和偏置。我們將采⽤稱為梯度下降的演算法來達到這個⽬的。

下面我們將代價函數簡化為C(v)。它可以是任意的多元實值函數, 。
注意我們⽤ v 代替了 w 和 b 以強調它可能是任意的函數,我們現在先不局限於神經⽹絡的環境。

為了使問題更加簡單我們先考慮兩個變數的情況,想像 C 是⼀個只有兩個變數 和 的函數,我們的目的是找到 和 使得C最小。

如上圖所示,我們的目的就是找到局部最小值。對於這樣的一個問題,一種方法就是通過微積分的方法來解決,我們可以通過計算導數來求解C的極值點。但是對於神經網路來說,我們往往面對的是非常道的權值和偏置,也就是說v的維數不只是兩維,有可能是億萬維的。對於一個高維的函數C(v)求導數幾乎是不可能的。

在這種情況下,有人提出了一個有趣的演算法。想像一下一個小球從山頂滾下山谷的過程, 我們的⽇常經驗告訴我們這個球最終會滾到⾕底。我們先暫時忽略相關的物理定理, 對球體的⾁眼觀察是為了激發我們的想像⽽不是束縛我們的思維。因此與其陷進物理學⾥凌亂的細節,不如我們就這樣問⾃⼰:如果我們扮演⼀天的上帝,能夠構造⾃⼰的物理定律,能夠⽀配球體可以如何滾動,那麼我們將會採取什麼樣的運動學定律來讓球體能夠總是滾落到⾕底呢?

為了更精確地描述這個問題,讓我們思考⼀下,當我們在 和 ⽅向分別將球體移動⼀個很⼩的量,即 ∆ 和 ∆ 時,球體將會發⽣什麼情況。微積分告訴我們 C 將會有如下變化:

也可以用向量表示為

現在我們的問題就轉換為不斷尋找一個小於0的∆C,使得C+∆C不斷變小。

假設我們選取:

這⾥的 η 是個很⼩的正數(稱為學習速率),於是

由於 ∥∇C∥2 ≥ 0,這保證了 ∆C ≤ 0,即,如果我們按照上述⽅程的規則去改變 v,那麼 C
會⼀直減⼩,不會增加。

所以我們可以通過不斷改變v來C的值不斷下降,是小球滾到最低點。

總結⼀下,梯度下降演算法⼯作的⽅式就是重復計算梯度 ∇C,然後沿著相反的⽅向移動,沿著⼭⾕「滾落」。我們可以想像它像這樣:

為了使梯度下降能夠正確地運⾏,我們需要選擇合適的學習速率η,確保C不斷減少,直到找到最小值。

知道了兩個變數的函數 C 的梯度下降方法,我們可以很容易的把它推廣到多維。我們假設 C 是⼀個有 m 個變數 的多元函數。 ∆C 將會變為:

其中, ∇C為

∆v為:

更新規則為:

在回到神經網路中,w和b的更新規則為:

前面提到神經⽹絡如何使⽤梯度下降演算法來學習他們⾃⾝的權重和偏置。但是,這⾥還留下了⼀個問題:我們並沒有討論如何計算代價函數的梯度。這里就需要用到一個非常重要的演算法:反向傳播演算法(backpropagation)。

反向傳播演算法的啟示是數學中的鏈式法則。

四個方程:

輸出層誤差方程:

當前層誤差方程:

誤差方程關於偏置的關系:

誤差方程關於權值的關系

演算法描述:

檢視這個演算法,你可以看到為何它被稱作反向傳播。我們從最後⼀層開始向後計算誤差向量δ。這看起來有點奇怪,為何要從後⾯開始。但是如果你認真思考反向傳播的證明,這種反向移動其實是代價函數是⽹絡輸出的函數的結果。為了理解代價隨前⾯層的權重和偏置變化的規律,我們需要重復作⽤鏈式法則,反向地獲得需要的表達式。

參考鏈接: http://neuralnetworksanddeeplearning.com/

㈥ 卷積神經網路演算法是什麼

一維構築、二維構築、全卷積構築。

卷積神經網路(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網路(Feedforward Neural Networks),是深度學習(deep learning)的代表演算法之一。

卷積神經網路具有表徵學習(representation learning)能力,能夠按其階層結構對輸入信息進行平移不變分類(shift-invariant classification),因此也被稱為「平移不變人工神經網路(Shift-Invariant Artificial Neural Networks, SIANN)」。

卷積神經網路的連接性:

卷積神經網路中卷積層間的連接被稱為稀疏連接(sparse connection),即相比於前饋神經網路中的全連接,卷積層中的神經元僅與其相鄰層的部分,而非全部神經元相連。具體地,卷積神經網路第l層特徵圖中的任意一個像素(神經元)都僅是l-1層中卷積核所定義的感受野內的像素的線性組合。

卷積神經網路的稀疏連接具有正則化的效果,提高了網路結構的穩定性和泛化能力,避免過度擬合,同時,稀疏連接減少了權重參數的總量,有利於神經網路的快速學習,和在計算時減少內存開銷。

卷積神經網路中特徵圖同一通道內的所有像素共享一組卷積核權重系數,該性質被稱為權重共享(weight sharing)。權重共享將卷積神經網路和其它包含局部連接結構的神經網路相區分,後者雖然使用了稀疏連接,但不同連接的權重是不同的。權重共享和稀疏連接一樣,減少了卷積神經網路的參數總量,並具有正則化的效果。

在全連接網路視角下,卷積神經網路的稀疏連接和權重共享可以被視為兩個無限強的先驗(pirior),即一個隱含層神經元在其感受野之外的所有權重系數恆為0(但感受野可以在空間移動);且在一個通道內,所有神經元的權重系數相同。

㈦ 神經網路BP模型

一、BP模型概述

誤差逆傳播(Error Back-Propagation)神經網路模型簡稱為BP(Back-Propagation)網路模型。

Pall Werbas博士於1974年在他的博士論文中提出了誤差逆傳播學習演算法。完整提出並被廣泛接受誤差逆傳播學習演算法的是以Rumelhart和McCelland為首的科學家小組。他們在1986年出版「Parallel Distributed Processing,Explorations in the Microstructure of Cognition」(《並行分布信息處理》)一書中,對誤差逆傳播學習演算法進行了詳盡的分析與介紹,並對這一演算法的潛在能力進行了深入探討。

BP網路是一種具有3層或3層以上的階層型神經網路。上、下層之間各神經元實現全連接,即下層的每一個神經元與上層的每一個神經元都實現權連接,而每一層各神經元之間無連接。網路按有教師示教的方式進行學習,當一對學習模式提供給網路後,神經元的激活值從輸入層經各隱含層向輸出層傳播,在輸出層的各神經元獲得網路的輸入響應。在這之後,按減小期望輸出與實際輸出的誤差的方向,從輸入層經各隱含層逐層修正各連接權,最後回到輸入層,故得名「誤差逆傳播學習演算法」。隨著這種誤差逆傳播修正的不斷進行,網路對輸入模式響應的正確率也不斷提高。

BP網路主要應用於以下幾個方面:

1)函數逼近:用輸入模式與相應的期望輸出模式學習一個網路逼近一個函數;

2)模式識別:用一個特定的期望輸出模式將它與輸入模式聯系起來;

3)分類:把輸入模式以所定義的合適方式進行分類;

4)數據壓縮:減少輸出矢量的維數以便於傳輸或存儲。

在人工神經網路的實際應用中,80%~90%的人工神經網路模型採用BP網路或它的變化形式,它也是前向網路的核心部分,體現了人工神經網路最精華的部分。

二、BP模型原理

下面以三層BP網路為例,說明學習和應用的原理。

1.數據定義

P對學習模式(xp,dp),p=1,2,…,P;

輸入模式矩陣X[N][P]=(x1,x2,…,xP);

目標模式矩陣d[M][P]=(d1,d2,…,dP)。

三層BP網路結構

輸入層神經元節點數S0=N,i=1,2,…,S0;

隱含層神經元節點數S1,j=1,2,…,S1;

神經元激活函數f1[S1];

權值矩陣W1[S1][S0];

偏差向量b1[S1]。

輸出層神經元節點數S2=M,k=1,2,…,S2;

神經元激活函數f2[S2];

權值矩陣W2[S2][S1];

偏差向量b2[S2]。

學習參數

目標誤差ϵ;

初始權更新值Δ0

最大權更新值Δmax

權更新值增大倍數η+

權更新值減小倍數η-

2.誤差函數定義

對第p個輸入模式的誤差的計算公式為

中國礦產資源評價新技術與評價新模型

y2kp為BP網的計算輸出。

3.BP網路學習公式推導

BP網路學習公式推導的指導思想是,對網路的權值W、偏差b修正,使誤差函數沿負梯度方向下降,直到網路輸出誤差精度達到目標精度要求,學習結束。

各層輸出計算公式

輸入層

y0i=xi,i=1,2,…,S0;

隱含層

中國礦產資源評價新技術與評價新模型

y1j=f1(z1j),

j=1,2,…,S1;

輸出層

中國礦產資源評價新技術與評價新模型

y2k=f2(z2k),

k=1,2,…,S2。

輸出節點的誤差公式

中國礦產資源評價新技術與評價新模型

對輸出層節點的梯度公式推導

中國礦產資源評價新技術與評價新模型

E是多個y2m的函數,但只有一個y2k與wkj有關,各y2m間相互獨立。

其中

中國礦產資源評價新技術與評價新模型

中國礦產資源評價新技術與評價新模型

設輸出層節點誤差為

δ2k=(dk-y2k)·f2′(z2k),

中國礦產資源評價新技術與評價新模型

同理可得

中國礦產資源評價新技術與評價新模型

對隱含層節點的梯度公式推導

中國礦產資源評價新技術與評價新模型

E是多個y2k的函數,針對某一個w1ji,對應一個y1j,它與所有的y2k有關。因此,上式只存在對k的求和,其中

中國礦產資源評價新技術與評價新模型

中國礦產資源評價新技術與評價新模型

設隱含層節點誤差為

中國礦產資源評價新技術與評價新模型

中國礦產資源評價新技術與評價新模型

同理可得

中國礦產資源評價新技術與評價新模型

4.採用彈性BP演算法(RPROP)計算權值W、偏差b的修正值ΔW,Δb

1993年德國 Martin Riedmiller和Heinrich Braun 在他們的論文「A Direct Adaptive Method for Faster Backpropagation Learning:The RPROP Algorithm」中,提出Resilient Backpropagation演算法——彈性BP演算法(RPROP)。這種方法試圖消除梯度的大小對權步的有害影響,因此,只有梯度的符號被認為表示權更新的方向。

權改變的大小僅僅由權專門的「更新值」

確定

中國礦產資源評價新技術與評價新模型

其中

表示在模式集的所有模式(批學習)上求和的梯度信息,(t)表示t時刻或第t次學習。

權更新遵循規則:如果導數是正(增加誤差),這個權由它的更新值減少。如果導數是負,更新值增加。

中國礦產資源評價新技術與評價新模型

RPROP演算法是根據局部梯度信息實現權步的直接修改。對於每個權,我們引入它的

各自的更新值

,它獨自確定權更新值的大小。這是基於符號相關的自適應過程,它基

於在誤差函數E上的局部梯度信息,按照以下的學習規則更新

中國礦產資源評價新技術與評價新模型

其中0<η-<1<η+

在每個時刻,如果目標函數的梯度改變它的符號,它表示最後的更新太大,更新值

應由權更新值減小倍數因子η-得到減少;如果目標函數的梯度保持它的符號,更新值應由權更新值增大倍數因子η+得到增大。

為了減少自由地可調參數的數目,增大倍數因子η+和減小倍數因子η被設置到固定值

η+=1.2,

η-=0.5,

這兩個值在大量的實踐中得到了很好的效果。

RPROP演算法採用了兩個參數:初始權更新值Δ0和最大權更新值Δmax

當學習開始時,所有的更新值被設置為初始值Δ0,因為它直接確定了前面權步的大小,它應該按照權自身的初值進行選擇,例如,Δ0=0.1(默認設置)。

為了使權不至於變得太大,設置最大權更新值限制Δmax,默認上界設置為

Δmax=50.0。

在很多實驗中,發現通過設置最大權更新值Δmax到相當小的值,例如

Δmax=1.0。

我們可能達到誤差減小的平滑性能。

5.計算修正權值W、偏差b

第t次學習,權值W、偏差b的的修正公式

W(t)=W(t-1)+ΔW(t)

b(t)=b(t-1)+Δb(t)

其中,t為學習次數。

6.BP網路學習成功結束條件每次學習累積誤差平方和

中國礦產資源評價新技術與評價新模型

每次學習平均誤差

中國礦產資源評價新技術與評價新模型

當平均誤差MSE<ε,BP網路學習成功結束。

7.BP網路應用預測

在應用BP網路時,提供網路輸入給輸入層,應用給定的BP網路及BP網路學習得到的權值W、偏差b,網路輸入經過從輸入層經各隱含層向輸出層的「順傳播」過程,計算出BP網的預測輸出。

8.神經元激活函數f

線性函數

f(x)=x,

f′(x)=1,

f(x)的輸入范圍(-∞,+∞),輸出范圍(-∞,+∞)。

一般用於輸出層,可使網路輸出任何值。

S型函數S(x)

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍(0,1)。

f′(x)=f(x)[1-f(x)],

f′(x)的輸入范圍(-∞,+∞),輸出范圍(0,

]。

一般用於隱含層,可使范圍(-∞,+∞)的輸入,變成(0,1)的網路輸出,對較大的輸入,放大系數較小;而對較小的輸入,放大系數較大,所以可用來處理和逼近非線性的輸入/輸出關系。

在用於模式識別時,可用於輸出層,產生逼近於0或1的二值輸出。

雙曲正切S型函數

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍(-1,1)。

f′(x)=1-f(x)·f(x),

f′(x)的輸入范圍(-∞,+∞),輸出范圍(0,1]。

一般用於隱含層,可使范圍(-∞,+∞)的輸入,變成(-1,1)的網路輸出,對較大的輸入,放大系數較小;而對較小的輸入,放大系數較大,所以可用來處理和逼近非線性的輸入/輸出關系。

階梯函數

類型1

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍{0,1}。

f′(x)=0。

類型2

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍{-1,1}。

f′(x)=0。

斜坡函數

類型1

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍[0,1]。

中國礦產資源評價新技術與評價新模型

f′(x)的輸入范圍(-∞,+∞),輸出范圍{0,1}。

類型2

中國礦產資源評價新技術與評價新模型

f(x)的輸入范圍(-∞,+∞),輸出范圍[-1,1]。

中國礦產資源評價新技術與評價新模型

f′(x)的輸入范圍(-∞,+∞),輸出范圍{0,1}。

三、總體演算法

1.三層BP網路(含輸入層,隱含層,輸出層)權值W、偏差b初始化總體演算法

(1)輸入參數X[N][P],S0,S1,f1[S1],S2,f2[S2];

(2)計算輸入模式X[N][P]各個變數的最大值,最小值矩陣 Xmax[N],Xmin[N];

(3)隱含層的權值W1,偏差b1初始化。

情形1:隱含層激活函數f( )都是雙曲正切S型函數

1)計算輸入模式X[N][P]的每個變數的范圍向量Xrng[N];

2)計算輸入模式X的每個變數的范圍均值向量Xmid[N];

3)計算W,b的幅度因子Wmag

4)產生[-1,1]之間均勻分布的S0×1維隨機數矩陣Rand[S1];

5)產生均值為0,方差為1的正態分布的S1×S0維隨機數矩陣Randnr[S1][S0],隨機數范圍大致在[-1,1];

6)計算W[S1][S0],b[S1];

7)計算隱含層的初始化權值W1[S1][S0];

8)計算隱含層的初始化偏差b1[S1];

9))輸出W1[S1][S0],b1[S1]。

情形2:隱含層激活函數f( )都是S型函數

1)計算輸入模式X[N][P]的每個變數的范圍向量Xrng[N];

2)計算輸入模式X的每個變數的范圍均值向量Xmid[N];

3)計算W,b的幅度因子Wmag;

4)產生[-1,1]之間均勻分布的S0×1維隨機數矩陣Rand[S1];

5)產生均值為0,方差為1的正態分布的S1×S0維隨機數矩陣Randnr[S1][S0],隨機數范圍大致在[-1,1];

6)計算W[S1][S0],b[S1];

7)計算隱含層的初始化權值W1[S1][S0];

8)計算隱含層的初始化偏差b1[S1];

9)輸出W1[S1][S0],b1[S1]。

情形3:隱含層激活函數f( )為其他函數的情形

1)計算輸入模式X[N][P]的每個變數的范圍向量Xrng[N];

2)計算輸入模式X的每個變數的范圍均值向量Xmid[N];

3)計算W,b的幅度因子Wmag

4)產生[-1,1]之間均勻分布的S0×1維隨機數矩陣Rand[S1];

5)產生均值為0,方差為1的正態分布的S1×S0維隨機數矩陣Randnr[S1][S0],隨機數范圍大致在[-1,1];

6)計算W[S1][S0],b[S1];

7)計算隱含層的初始化權值W1[S1][S0];

8)計算隱含層的初始化偏差b1[S1];

9)輸出W1[S1][S0],b1[S1]。

(4)輸出層的權值W2,偏差b2初始化

1)產生[-1,1]之間均勻分布的S2×S1維隨機數矩陣W2[S2][S1];

2)產生[-1,1]之間均勻分布的S2×1維隨機數矩陣b2[S2];

3)輸出W2[S2][S1],b2[S2]。

2.應用彈性BP演算法(RPROP)學習三層BP網路(含輸入層,隱含層,輸出層)權值W、偏差b總體演算法

函數:Train3BP_RPROP(S0,X,P,S1,W1,b1,f1,S2,W2,b2,f2,d,TP)

(1)輸入參數

P對模式(xp,dp),p=1,2,…,P;

三層BP網路結構;

學習參數。

(2)學習初始化

1)

2)各層W,b的梯度值

初始化為零矩陣。

(3)由輸入模式X求第一次學習各層輸出y0,y1,y2及第一次學習平均誤差MSE

(4)進入學習循環

epoch=1

(5)判斷每次學習誤差是否達到目標誤差要求

如果MSE<ϵ,

則,跳出epoch循環,

轉到(12)。

(6)保存第epoch-1次學習產生的各層W,b的梯度值

(7)求第epoch次學習各層W,b的梯度值

1)求各層誤差反向傳播值δ;

2)求第p次各層W,b的梯度值

3)求p=1,2,…,P次模式產生的W,b的梯度值

的累加。

(8)如果epoch=1,則將第epoch-1次學習的各層W,b的梯度值

設為第epoch次學習產生的各層W,b的梯度值

(9)求各層W,b的更新

1)求權更新值Δij更新;

2)求W,b的權更新值

3)求第epoch次學習修正後的各層W,b。

(10)用修正後各層W、b,由X求第epoch次學習各層輸出y0,y1,y2及第epoch次學習誤差MSE

(11)epoch=epoch+1,

如果epoch≤MAX_EPOCH,轉到(5);

否則,轉到(12)。

(12)輸出處理

1)如果MSE<ε,

則學習達到目標誤差要求,輸出W1,b1,W2,b2

2)如果MSE≥ε,

則學習沒有達到目標誤差要求,再次學習。

(13)結束

3.三層BP網路(含輸入層,隱含層,輸出層)預測總體演算法

首先應用Train3lBP_RPROP( )學習三層BP網路(含輸入層,隱含層,輸出層)權值W、偏差b,然後應用三層BP網路(含輸入層,隱含層,輸出層)預測。

函數:Simu3lBP( )。

1)輸入參數:

P個需預測的輸入數據向量xp,p=1,2,…,P;

三層BP網路結構;

學習得到的各層權值W、偏差b。

2)計算P個需預測的輸入數據向量xp(p=1,2,…,P)的網路輸出 y2[S2][P],輸出預測結果y2[S2][P]。

四、總體演算法流程圖

BP網路總體演算法流程圖見附圖2。

五、數據流圖

BP網數據流圖見附圖1。

六、實例

實例一 全國銅礦化探異常數據BP 模型分類

1.全國銅礦化探異常數據准備

在全國銅礦化探數據上用穩健統計學方法選取銅異常下限值33.1,生成全國銅礦化探異常數據。

2.模型數據准備

根據全國銅礦化探異常數據,選取7類33個礦點的化探數據作為模型數據。這7類分別是岩漿岩型銅礦、斑岩型銅礦、矽卡岩型、海相火山型銅礦、陸相火山型銅礦、受變質型銅礦、海相沉積型銅礦,另添加了一類沒有銅異常的模型(表8-1)。

3.測試數據准備

全國化探數據作為測試數據集。

4.BP網路結構

隱層數2,輸入層到輸出層向量維數分別為14,9、5、1。學習率設置為0.9,系統誤差1e-5。沒有動量項。

表8-1 模型數據表

續表

5.計算結果圖

如圖8-2、圖8-3。

圖8-2

圖8-3 全國銅礦礦床類型BP模型分類示意圖

實例二 全國金礦礦石量品位數據BP 模型分類

1.模型數據准備

根據全國金礦儲量品位數據,選取4類34個礦床數據作為模型數據,這4類分別是綠岩型金礦、與中酸性浸入岩有關的熱液型金礦、微細浸染型型金礦、火山熱液型金礦(表8-2)。

2.測試數據准備

模型樣本點和部分金礦點金屬量、礦石量、品位數據作為測試數據集。

3.BP網路結構

輸入層為三維,隱層1層,隱層為三維,輸出層為四維,學習率設置為0.8,系統誤差1e-4,迭代次數5000。

表8-2 模型數據

4.計算結果

結果見表8-3、8-4。

表8-3 訓練學習結果

表8-4 預測結果(部分)

續表

㈧ 推薦系統論文閱讀(十)-基於圖神經網路的序列推薦演算法

論文:

論文地址: https://arxiv.org/abs/1811.00855

論文題目:《Session-based Recommendation with Graph Neural Networks》SR-GNN

github: https://github.com/CRIPAC-DIG/SR-GNN

基於會話的推薦一般是將序列會話建模,將整個session進行編碼,變成一個隱向量,然後利用這個隱向量進行下一個點擊預測。但是這種方法沒有考慮到item直接復雜的轉換(transitions)關系,也就是item之間在點擊的session中除了時間順序外還有復雜的有向圖內的節點指向關系,所以之前的方法不足以很好的對點擊序列進行建模。

現有基於會話的推薦,方法主要集中於循環神經網路和馬爾可夫鏈,論文提出了現有方法的兩個缺點:

1)當一個session中用戶的行為數量十分有限時,這些方法難以獲取准確的用戶行為表示。如當使用RNN模型時,用戶行為的表示即最後一個單元的輸出,論文認為只有這樣並非十分准確。

2)根據先前的工作發現,物品之間的轉移模式在會話推薦中是十分重要的特徵,但RNN和馬爾可夫過程只對相鄰的兩個物品的 單向轉移關系 進行建模,而忽略了會話中其他的物品。

為了克服上述缺陷,本文提出了用圖神經網路對方法對用戶對session進行建模:

下面具體介紹怎麼進行圖序列推薦

V = {v1,v2...vm}為全部的item,S = { }為一個session裡面按時間順序的點擊物品,論文的目標是預測用戶下一個要點擊的物品vs,n+1,模型的任務是輸出所有item的預測概率,並選擇top-k進行推薦。

我們為每一個Session構建一個子圖,並獲得它對應的出度和入度矩陣。

假設一個點擊序列是v1->v2->v4->v3,那麼它得到的子圖如下圖中紅色部分所示:

另一個例子,一個點擊序列是v1->v2->v3->v2->v4,那麼它得到的子圖如下:

同時,我們會為每一個子圖構建一個出度和入度矩陣,並對出度和入度矩陣的每一行進行歸一化,如我們序列v1->v2->v3->v2->v4對應的矩陣如下:

這個矩陣裡面的值是怎麼計算的呢?下面講一下:

看左邊的出度矩陣,第一行為 0 1 0 0 ,代表著v1->v2,因為v1,只有一個指向的item,所以為1;看第二行,0 0 1/2 1/2,因為v2有指向v3和v4的邊,所以進行歸一化後每一個值都變成了1/2。入度矩陣的計算方法也是一樣的,就不再說了。

本文採用的是GRU單元進行序列建模,將圖信息嵌入到神經網路中,讓GRU充分學習到item之間的關系,傳統的GRU只能學到相鄰的兩個物品之間的關系,加入圖信息後就能學到整個session子圖的信息。

計算公式如下:

為了剛好的理解這個計算過程,我們還是使用之前那個例子:v1->v2->v3->v2->v4來一步步分析輸入到輸出的過程。

(1) 是t時刻,會話s中第i個點擊對應的輸入, 是n✖️2n的矩陣,也就是會話子圖的完整矩陣,而 是其中一行,即物品vi所對應的那行,大小為1✖️2n,n代表序列中不同物品的數量。

如果按照例子來看,如果i取2,那麼 為 [0 0 1/2 1/2 1/2 0 1/2 0]

進一步的,可以把 :拆解為[ , ]

(2) 可以理解為序列中第i個物品,在訓練過程中對應的嵌入向量,這個向量隨著模型的訓練不斷變化,可以理解為隱藏層的狀態,是一個d維向量。

   (3)  H是d*2d的權重向量,也可以看作是一個分塊的矩陣,可以理解為H=[Hin|Hout],每一塊都是d*d的向量。

那麼我們來看看計算過程:

1)[ ..., ] ,結果是d * n的矩陣,轉置之後是n*d的矩陣,計作

2) : H相當於[   ],即拆開之後相乘再拼接,因此結果是一個1 * 2d的向量。

上面就是完整的第i個點擊的輸入的計算過程,可以看到,在進入GRU計算之前,通過跟As,i矩陣相乘,把圖信息嵌入到了神經網路中取,加深了神經網路學習到的item之間的交互信息。

此外,就是GRU的計算過程了,跟原始的GRU不一樣的地方在於輸入從xt變成了嵌入了圖信息的as,i。

通樣也有更新門和重置門,計算方法跟原始GRU一模一樣。

這里的 其實就是相當於原始gru中的 ,只不過在SR-GNN裡面,進行一輪運算的時候i是沒有變化,相當於每個物品單獨進去GRU進行計算,得到自己的向量,也就是說在GRU的計算過程中, 是不斷變化的,看一下源碼更易於理解:

hidden就是公式裡面的 ,在gru的每一個step計算中都會進行更新,這里我有個疑問,如果所有item的hidden都更新的話,那麼應該是整個序列中所有的item並行進入GRU中進行計算,每一個step都得到自己的vector,當每個item的vector更新後,下一個step就重新根據新的 計算 ,接著計算下一個step。

計算過程大概就是下面這樣:

這里有四個GRU並行計算,沒次更新自己的hidden狀態,輸入則考慮所有的hidden和圖信息。

從上面的圖看來,每一個item都要進行T個step得到自己的item-vec,所以經過T個step後,我們就得到了序列中所有item的向量,即:

圖中用藍色框框畫出來的向量,有了這些向量後,我們怎麼得到預測結果呢?這就引入了下一個問題。

觀察上面的模型結構,我們看到attention,沒錯,我們認為一個session中的這些item-vec並不都對預測結果產生影響,有些item對結果影響很大,有些影響很小,所以我們進行了加權求和。同時,論文認為session對最後一個item-vec,s1=vn是重要的,所以單獨拿出來:

公式(6)就是簡單的attention操作,其實從公式上來看就是計算每個vi跟最後一個向量vn的權值,然後進行加權求和。

在最後的輸出層,使用sh和每個物品的embedding進行內積計算,這里vi應該是item的embedding層出來的向量,而不是後面一直更新的hidden:

最後通過一個softmax得到最終每個物品的點擊概率:

損失函數為交叉熵損失函數:

從數據上來看,SR-GNN超過了經典的GRU4REC,這也說明了圖信息的嵌入能帶來更好的推薦效果。

本論文很巧妙的將圖信息嵌入的神經網路中,更高地讓GRU學習到每個item之間的關系,不再局限於相鄰的物品之間進行學習。近年來,圖神經網路的思想和方法屢屢被用在推薦系統中,學好圖神經網路應該是推薦系統的下一個熱潮。

閱讀全文

與神經網路演算法求圖相關的資料

熱點內容
閱讀源碼真的有價值嗎 瀏覽:181
linux強制退出命令 瀏覽:321
韓國高分電影愛情推理片 瀏覽:445
同截面梁箍筋加密 瀏覽:220
肉一點的有聲小說 瀏覽:457
程序員情感語錄 瀏覽:901
喀什雲存儲伺服器 瀏覽:89
看片網址貼吧 瀏覽:200
酷安下載不了app如何解決 瀏覽:357
各種排序演算法思想 瀏覽:339
雲伺服器便簽怎麼拿出來 瀏覽:797
有部外國電影一群人在游泳 瀏覽:285
在哪能看島國片 瀏覽:175
客戶端如何讀取伺服器 瀏覽:365
附近電影院訂票 瀏覽:614
好孩子狼孩電影播放 瀏覽:880
中國男人和外國女孩電影 瀏覽:325
趙薇拍的電影 瀏覽:920
python如何合並多個excel文件 瀏覽:865
南宮嬌離微揚免費閱讀 瀏覽:43