读论文系列(二)Convolutional Neural Networks over Tree Structures for Programming Language Processing
系列文章目錄
讀論文系列(一)Automated software vulnerability detection with machine learning
文章目錄
- 系列文章目錄
- Keywards
- Overall Architecture(整體架構)
- Representation Learning for AST Nodes
- Vector representations(embeddings) 向量表示的大致過程
- 連續二叉樹的提出
- Coding Layer
- Tree-based Convolutional Layer
- Dynamic Pooling
- The “Continuous Binary Tree” Model
- Experiments
- result
Keywards
抽象語法樹(AST)
樹卷積神經網絡(TBCNN)Tree-Based Convolutional Neural Network
連續二叉樹
Overall Architecture(整體架構)
AST節點首先被表示為一個分布式實值向量
tree-based convolution kernel 基于樹的卷積核,在AST上滑動提取提取程序的結構信息
通過dynamic pooling來收集信息
加上一個隱藏層
輸出層最后使用softmax
Representation Learning for AST Nodes
Vector representations(embeddings) 向量表示的大致過程
對于每個非葉節點p及其直接子節點 c1 …cn
葉子節點ci的權重矩陣
偏執bias
li是葉節點的權重系數
連續二叉樹的提出
原因:非葉節點的子節點數目不同,導致葉子節點的權重矩陣不同
為了克服這一問題,引出連續二叉樹
只有兩個權重矩陣作為模型參數
Wi 是兩個參數矩陣根據節點位置的線性組合
Coding Layer
在對所有的特征進行預訓練后,將其丟進模型進行訓練
對于葉子節點,只是將預訓練階段學習的向量表示
對于非葉節點p,它有兩種表示法:在預訓練階段學習的表示法
編碼的表示法
其公式如下
組合參數
Tree-based Convolutional Layer
我的理解是:
這個虛線三角形是一個特殊的卷積核,通過在樹上滑動來提取特征(一般卷積是個矩陣的kernel,但在該模型中,則表示為樹的深度,如圖,深度設置為2)
滑動到底層沒有那么多的節點的時候,就填0
輸出
維數為卷積核的個數
Dynamic Pooling
在卷積之后,提取AST中的結構特征,并生成新的樹。新樹的形狀和大小與原始樹完全相同,但在不同的程序中有所不同。因此,提取的特征不能直接輸入到固定大小的神經層。動態池用于解決這個問題。
最簡單的方法可能是將所有特征匯集到一個向量中。我們稱之為單向池。具體來說,每個維度的最大值取自基于樹的卷積檢測的特征。我們還提出了一種替代方案,即三向池,根據特征在AST中的位置,將特征池分成三個部分:頂部、左下方和右下方(圖2b)。正如我們將從實驗結果中看到的,簡單的單向池和三向池一樣有效。因此,我們在實驗中采用了單向池。
合并后,特征完全連接到隱藏層,然后饋送到輸出層(softmax)進行監督分類。通過動態池過程,整個AST的結構特征以短路徑到達輸出層。因此,可以通過反向傳播有效地訓練它們。
The “Continuous Binary Tree” Model
在我們的模型中,我們將任何子樹視為“二叉”樹,無論其大小和形狀如何。也就是說,我們只有三個權矩陣作為卷積的參數,兩個用于編碼。我們稱之為連續二叉樹。
直接貼圖
卷積的三個參數
Wconv 和三個參數的系數關系
參數計算
所有參數
Experiments
關于數據集部分,論文原文給了明確解釋
result
總結
以上是生活随笔為你收集整理的读论文系列(二)Convolutional Neural Networks over Tree Structures for Programming Language Processing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVa-1583 生成元
- 下一篇: QE画声子谱