

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon Neptune ML 中的模型和模型訓練
<a name="machine-learning-models-and-training"></a>

Neptune ML 會使用圖形神經網路 (GNN) 為各種機器學習任務建立模型。圖形神經網路已被證明可為圖形機器學習任務取得最先進的結果，並且在從圖形結構化資料中擷取資訊模式方面非常出色。

## Neptune ML 中的圖形神經網路 (GNN)
<a name="machine-learning-gnns"></a>

圖形神經網路 (GNN) 屬於一系列神經網路，它們透過考慮附近節點的結構和特徵來計算節點表示法。GNN 補充了其他不是很適合圖形資料的傳統機器學習和神經網路方法。

GNN 用來解決機器學習任務，例如節點分類和迴歸 (預測節點的屬性)，以及邊緣分類和迴歸 (預測邊緣的屬性) 或連結預測 (預測圖形中的兩個節點是否應該連接)。

一般來說，將 GNN 用於機器學習任務涉及兩個階段：
+ 編碼階段，其中 GNN 會計算圖形中每個節點的 d 維向量。這些向量也稱為*表示法*或*嵌入*。
+ 解碼階段，其中會根據編碼的表示法做出預測。

對於節點分類和迴歸，節點表示法可以直接用於分類和迴歸任務。對於邊緣分類和迴歸，邊緣上事件節點的節點表示法會用作分類或迴歸的輸入。對於連結預測，計算邊緣可能性分數的方式為使用一對節點表示法和一個邊緣類型表示法。

[Deep Graph Library (DGL)](https://www.dgl.ai/) 可為這些任務促進 GNN 的有效定義和訓練。

不同的 GNN 模型在訊息傳遞的構想下得到了統一。在此檢視中，圖形中節點的表示法是使用節點鄰居的表示法 (訊息)，以及節點的初始表示法來計算。在 Neptune ML 中，節點的初始表示法是從擷取自其節點屬性的特徵衍生的，或是可學習的，並且取決於節點的身分。

Neptune ML 還提供了選項，讓您串連節點特徵和可學習節點表示法，以充當原始節點表示法。

對於 Neptune ML 中涉及圖形與節點屬性的各種任務，我們會使用[關聯式圖形卷積網路](https://arxiv.org/abs/1703.06103) (R-GCN) 來執行編碼階段。R-GCN 是 GNN 架構，非常適合具有多個節點和邊緣類型的圖形 (這些圖形稱為異質圖)。

R-GCN 網絡由固定數量的層組成，一個接一個地堆疊。R-GCN 的每一層都會使用其可學習模型參數來彙總資訊，而這些資訊來自節點的鄰近 1 躍點鄰域。由於後續層會使用前一層的輸出表示法做為輸入，因此影響節點最終嵌入之圖形鄰域的半徑取決於 R-GCN 網路的層數 (`num-layer`)。

例如，這表示雙層網路使用的資訊來自兩個躍點之外的節點。

若要深入了解 GNN，請參閱[圖形神經網路的全面調查](https://arxiv.org/abs/1901.00596)。[如需 Deep Graph Library (DGL) 的詳細資訊，請造訪 DGL 網頁](https://www.dgl.ai/)。如需有關使用 DGL 搭配 GNN 的實作教學課程，請參閱[使用 Deep Graph Library 學習圖形神經網路](https://www.amazon.science/videos-webinars/learning-graph-neural-networks-with-deep-graph-library)。

## 訓練圖形神經網路
<a name="machine-learning-gnn-training"></a>

在機器學習中，取得模型以了解如何對任務做出良好預測的程序稱為模型訓練。通常執行此操作的方式為指定要最佳化的特定目標，以及用來執行此最佳化的演算法。

此程序也會用於訓練 GNN，以了解下游任務的合適表示法。我們會針對該任務建立目標函數，而該任務會在模型訓練期間最小化。[例如，對於節點分類，我們會使用 [CrosssentroPyLoss](https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html) 做為目標，這會懲罰錯誤分類，而對於節點迴歸，我們會將 MeanSquareError](https://pytorch.org/docs/stable/generated/torch.nn.MSELoss.html) 降至最低。

目標通常是一個損失函數，其會取得特定資料點的模型預測，並將它們與該資料點的基準真相值進行比較。它會傳回損失值，其會顯示模型預測的偏差程度。訓練程序的目標是將損失降到最低，並確保模型預測接近基準真相。

深度學習中用於訓練程序的最佳化演算法通常是梯度下降的變體。在 Neptune ML 中，我們會使用 [Adam](https://arxiv.org/pdf/1412.6980.pdf)，這是一種演算法，用於隨機目標函數的一階梯度型最佳化，而這些函數是以低階時刻的自適應估計為基礎。

雖然模型訓練程序會嘗試確保學到的模型參數接近目標函數的最小值，但模型的整體效能也取決於模型的*超參數*，而這些超參數是訓練演算法未學習的模型設定。例如，學到的節點表示法 (`num-hidden`) 的維數是影響模型效能的超參數。因此，在機器學習中，執行超參數最佳化 (HPO) 來選擇合適的超參數是很常見的。

Neptune ML 使用 SageMaker AI 超參數調校任務來啟動具有不同超參數組態的多個模型訓練執行個體，以嘗試尋找一系列超參數設定的最佳模型。請參閱 [在 Neptune ML 中自訂模型超參數組態](machine-learning-customizing-hyperparams.md)。

## Neptune ML 中的知識圖譜嵌入模型
<a name="machine-learning-kg-embedding"></a>

知識圖譜 (KG) 是編碼不同實體 (節點) 及其關聯 (邊緣) 之相關資訊的圖形。在 Neptune ML 中，當圖形不包含節點屬性，只包含與其他節點的關聯時，預設會套用知識圖譜嵌入模型以執行連結預測。雖然, R-GCN 模型與可學習嵌入也可以透過將模型類型指定為 `"rgcn"` 來用於這些圖形,但知識圖譜嵌入模型更簡單，且被設計為對大型知識圖譜的學習表示法有效。

知識圖譜嵌入模型用於連結預測任務，以預測完成三重 `(h, r, t)` 的節點或關聯，其中 `h` 是來源節點、`r` 是關聯類型，而 `t` 是目的地節點。

在 Neptune ML 中實作的知識圖譜嵌入模型是 `distmult`、`transE` 和 `rotatE`。若要深入了解知識圖譜嵌入模型，請參閱 [DGL-KE](https://github.com/awslabs/dgl-ke)。

## 在 Neptune ML 中訓練自訂模型
<a name="machine-learning-training-custom-models"></a>

Neptune ML 可讓您針對特定案例定義和實作自己的自訂模型。如需如何實作自訂模型，以及如何使用 Neptune ML 基礎結構來訓練該模型的相關資訊，請參閱 [Neptune ML 中的自訂模型](machine-learning-custom-models.md)。