忘了 忘了,以前學的矩陣知識全交給老師了,敲黑板了,矩陣乘法實例講解

在這個地方整蒙了,W1和W2這倆是矩陣的標記,但是後面只有個Tr-1和Cr-1,我????

實際上,1 x Tr-1這種表示,即可以是向量也可以是矩陣呀,沒有問題,往下理解是向量,往上理解就是矩陣,

其次,W1與 做運算是將W1當作Tr-1 × 1的矩陣進行運算,而W3和 運算是將其當成1 × Cr-1進行運算,我們可以看到W1和W3是都是用的R^(?)的形式表示的矩陣,但是運算時候卻不一樣,敲黑板了!這就是我整蒙圈的地方,你想R^(?)是個歐幾里得空間,1×Cr-1和Cr-1 × 1都是R^Cr-1的歐幾里得空間,因此R^(?)這個東西我們是根據運算可以實時調整它是1 x c還是c x 1的!

 

接下來就是R^(N x Cr-1 x Tr-1),這個???這咋個運算哦?

敲黑板!這種高維的,我們以低維的眼光去分解他,看成N個Cr-1 x Tr-1的矩陣,那麼W3與分別與N個相乘,那麼自然就得到了N個1 x Tr-1的矩陣,再寫成R就是R^(N x Tr-1)了。再轉置一下,右邊W3的計算結果就是一個R^(Tr-1 x N)的值

 

好!那麼代碼裏面怎麼搞得呢?先上代碼:

# defer the shape of params
        self.W_1.shape = (num_of_timesteps, )  #對標初始化的時間長度
        self.W_2.shape = (num_of_features, num_of_timesteps)   #特徵數目 x 時間長度
        self.W_3.shape = (num_of_features, )
        self.b_s.shape = (1, num_of_vertices, num_of_vertices)
        self.V_s.shape = (num_of_vertices, num_of_vertices)
        for param in [self.W_1, self.W_2, self.W_3, self.b_s, self.V_s]:
            param._finish_deferred_init()    #完成模塊的初始化

        # compute spatial attention scores
        # shape of lhs is (batch_size, V, T)
        lhs = nd.dot(nd.dot(x, self.W_1.data()), self.W_2.data())  #lhs式子左部

        # shape of rhs is (batch_size, T, V)
        #之所以x是四維的是因爲批處理的問題,batch_size=10意思是10個樣本同時進行計算。x的維度是10 x V x features x T
        rhs = nd.dot(self.W_3.data(), x.transpose((2, 0, 3, 1)))
        
        product = nd.batch_dot(lhs, rhs)

        S = nd.dot(self.V_s.data(),
                   nd.sigmoid(product + self.b_s.data())
                     .transpose((1, 2, 0))).transpose((2, 0, 1))

誒?這裏面咋有多了一維?啥情況,原因是我們訓練是一個batch一個batch訓練的

那麼這裏面咋沒有 .T的轉置操作呢?講解

一開始batch_size x N x C x T,那麼你當然可以直接算,然後再來個轉置,最終能夠滿足Tr-1 x N的結果,但如果你先對這個高維的矩陣進行一下transpose的變化,變換成C x batch x T x N這個形式再和W3運算,就可以直接得到T x N就不用做轉置了。類似於上面三維的情況,C x batch x T x N做運算的時候看成C x  1的矩陣,裏面的1是batch x T x N,然後就成了batch x T x N,因爲batch是訓練用的,其實就是Tr-1 x N了

 

參考資料:Attention Based Spatial-Temporal Graph Convolutional Networks for Traffic Flow Forecasting 2020.AAAI

                  https://github.com/wanhuaiyu/ASTGCN

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章