17.3.3 高度なハイパーパラメータ・カスタマイズ
GraphWiseConvLayerConfig
: GraphWiseConvLayerは、Hamilton et alによるInductive Representation Learning on Large Graphs (GraphSage)に基づいています。GraphWiseAttentionLayerConfig
: GraphWiseAttentionLayerは、Velickovic et alによるGraph Attention Neworks (GAT)に基づいています。これは、集計をよりスマートにしますが、計算コストが高くなります。
また、enable_ml_accelerators
グラフ・サーバー(PGX)構成パラメータを使用して、グラフィック処理ユニット(GPU)を有効または無効にできます(詳細は、「グラフ・サーバー(PGX)エンジンの構成パラメータ」を参照)。また、GPUサポートを使用するために、システムが次の前提条件を満たしていることを確認してください:
- CUDA (Compute Unified Device Architecture)ツールキットがインストールされているGPUデバイスが必要です。
- 次のCUDAライブラリのリストが必要です:
libcuda.so.1
libnvrtc.so.12
libnvToolsExt.so.1
libcudart.so.12
enable_ml_accelerators
オプションはデフォルトで有効になっています。ただし、GPUデバイスが検出されず、CUDAツールキットがインストールされていない場合、この機能は無効になり、CPUはすべてのPgxMLライブラリ操作に使用されます。
次のコード例では、畳込み層構成にGraphWiseConvLayerConfig
クラスを使用します。この例では、過剰適合に対抗するために、GraphWiseモデルに対して重み減衰パラメータ0.001
およびドロップ確率0.5
のドロップアウトを指定しています。また、setEnableAccelerator
メソッドが、使用可能なGPUを使用できるようになっていることにも注意してください。
opg4j> var weightProperty = analyst.pagerank(trainGraph).getName()
opg4j> var convLayerConfig = analyst.graphWiseConvLayerConfigBuilder().
setNumSampledNeighbors(25).
setActivationFunction(ActivationFunction.TANH).
setWeightInitScheme(WeightInitScheme.XAVIER).
setWeightedAggregationProperty(weightProperty).
setDropoutRate(0.5).
build()
opg4j> var predictionLayerConfig = analyst.graphWisePredictionLayerConfigBuilder().
setHiddenDimension(32).
setActivationFunction(ActivationFunction.RELU).
setWeightInitScheme(WeightInitScheme.HE).
setDropoutRate(0.5).
build()
opg4j> var model = analyst.supervisedEdgeWiseModelBuilder().
setVertexInputPropertyNames("vertex_features").
setEdgeInputPropertyNames("edge_features").
setEdgeTargetPropertyName("labels").
setConvLayerConfigs(convLayerConfig).
setPredictionLayerConfigs(predictionLayerConfig).
setWeightDecay(0.001).
setEnableAccelerator(true). // Enable or disable GPU
build()
String weightProperty = analyst.pagerank(trainGraph).getName();
GraphWiseConvLayerConfig convLayerConfig = analyst.graphWiseConvLayerConfigBuilder()
.setNumSampledNeighbors(25)
.setActivationFunction(ActivationFunction.TANH)
.setWeightInitScheme(WeightInitScheme.XAVIER)
.setWeightedAggregationProperty(weightProperty)
.setDropoutRate(0.5)
.build();
GraphWisePredictionLayerConfig predictionLayerConfig = analyst.graphWisePredictionLayerConfigBuilder()
.setHiddenDimension(32)
.setActivationFunction(ActivationFunction.RELU)
.setWeightInitScheme(WeightInitScheme.HE)
.setDropoutRate(0.5)
.build();
SupervisedEdgeWiseModel model = analyst.supervisedEdgeWiseModelBuilder()
.setVertexInputPropertyNames("vertex_features")
.setEdgeInputPropertyNames("edge_features")
.setEdgeTargetPropertyName("labels")
.setConvLayerConfigs(convLayerConfig)
.setPredictionLayerConfigs(predictionLayerConfig)
.setWeightDecay(0.001)
.setEnableAccelerator(true) // Enable or disable GPU
.build();
weightProperty = analyst.pagerank(train_graph).name
conv_layer_config = dict(num_sampled_neighbors=25,
activation_fn='tanh',
weight_init_scheme='xavier',
neighbor_weight_property_name=weightProperty,
dropout_rate=0.5)
conv_layer = analyst.graphwise_conv_layer_config(**conv_layer_config)
pred_layer_config = dict(hidden_dim=32,
activation_fn='relu',
weight_init_scheme='he',
dropout_rate=0.5)
pred_layer = analyst.graphwise_pred_layer_config(**pred_layer_config)
params = dict(edge_target_property_name="labels",
conv_layer_config=[conv_layer],
pred_layer_config=[pred_layer],
vertex_input_property_names=["vertex_features"],
edge_input_property_names=["edge_features"],
seed=17,
weight_decay=0.001,
enable_accelerator=True # Enable or disable GPU
)
model = analyst.supervised_edgewise_builder(**params)
前述の例では、GraphWiseConvLayerConfig
をGraphWiseAttentionLayerConfig
クラスに置き換えて、Graph Attention Networksモデルを構築できます。また、サンプリングされた近隣の数がsetNumSampledNeighbors
を使用して-1
に設定されている場合、すべての近隣ノードがサンプリングされることに注意してください。
opg4j> var convLayerConfig = analyst.graphWiseAttentionLayerConfigBuilder().
setNumSampledNeighbors(25).
setActivationFunction(ActivationFunction.LEAKY_RELU).
setWeightInitScheme(WeightInitScheme.XAVIER_UNIFORM).
setHeadAggregation(AggregationOperation.MEAN).
setNumHeads(4).
setDropoutRate(0.5).
build()
GraphWiseAttentionLayerConfig convLayerConfig = analyst.graphWiseAttentionLayerConfigBuilder()
.setNumSampledNeighbors(25)
.setActivationFunction(ActivationFunction.LEAKY_RELU)
.setWeightInitScheme(WeightInitScheme.XAVIER_UNIFORM)
.setHeadAggregation(AggregationOperation.MEAN)
.setNumHeads(4)
.setDropoutRate(0.5)
.build();
conv_layer_config = dict(num_sampled_neighbors=25,
activation_fn='leaky_relu',
weight_init_scheme='xavier_uniform',
aggregation_operation='mean',
num_heads=4,
dropout_rate=0.5)