17.4.3 高度なハイパーパラメータ・カスタマイズ
豊富なハイパーパラメータ・カスタマイズを使用して、Unsupervised GraphWiseモデルを構築できます。各ノードに対して内部的に、GraphWiseによって、近隣表現の集計が適用されます。この操作は、次のサブ構成クラスのいずれかを使用して構成できます。
GraphWiseConvLayerConfig
: GraphWiseConvLayerは、Hamilton et alによるInductive Representation Learning on Large Graphs (GraphSage)に基づいています。GraphWiseAttentionLayerConfig
: GraphWiseAttentionLayerは、Velickovic et alによるGraph Attention Neworks (GAT)に基づいています。これは、集計をよりスマートにしますが、計算コストが高くなります。
次のコード例では、畳込み層構成にGraphWiseConvLayerConfig
クラスを使用します。この例では、過剰適合に打ち消すために、GraphWiseモデルに対して重み減衰パラメータ0.001
およびドロップ確率0.5
のドロップアウトも指定しています。
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 dgiLayerConfig = analyst.graphWiseDgiLayerConfigBuilder().
setCorruptionFunction(new PermutationCorruption()).
setDiscriminator(GraphWiseDgiLayerConfig.Discriminator.BILINEAR).
setReadoutFunction(GraphWiseDgiLayerConfig.ReadoutFunction.MEAN).
build()
opg4j> var model = analyst.unsupervisedGraphWiseModelBuilder().
setVertexInputPropertyNames("vertex_features").
setEdgeInputPropertyNames("edge_features").
setConvLayerConfigs(convLayerConfig).
setDgiLayerConfig(dgiLayerConfig).
setLossFunction(UnsupervisedGraphWiseModelConfig.LossFunction.SIGMOID_CROSS_ENTROPY).
setEmbeddingDim(256).
setLearningRate(0.05).
setNumEpochs(30).
setSeed(42).
setShuffle(false).
setStandardize(true).
setBatchSize(64).
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();
GraphWiseDgiLayerConfig dgiLayerConfig = analyst.graphWiseDgiLayerConfigBuilder()
.setCorruptionFunction(new PermutationCorruption())
.setDiscriminator(GraphWiseDgiLayerConfig.Discriminator.BILINEAR)
.setReadoutFunction(GraphWiseDgiLayerConfig.ReadoutFunction.MEAN)
.build();
UnsupervisedGraphWiseModel model = analyst.unsupervisedGraphWiseModelBuilder()
.setVertexInputPropertyNames("vertex_features")
.setEdgeInputPropertyNames("edge_features")
.setDgiLayerConfig(dgiLayerConfig)
.setLossFunction(UnsupervisedGraphWiseModelConfig.LossFunction.SIGMOID_CROSS_ENTROPY)
.setConvLayerConfigs(convLayerConfig)
.setWeightDecay(0.001)
.setEmbeddingDim(256)
.setLearningRate(0.05)
.setNumEpochs(30)
.setSeed(42)
.setShuffle(false)
.setStandardize(true)
.setBatchSize(64)
.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)
dgi_layer_config = dict(corruption_function=None,
readout_function="mean",
discriminator="bilinear")
dgi_layer = analyst.graphwise_dgi_layer_config(**dgi_layer_config)
params = dict(conv_layer_config=[conv_layer],
dgi_layer_config=dgi_layer,
loss_fn="sigmoid_cross_entropy",
vertex_input_property_names=["vertex_features"],
edge_input_property_names=["edge_features"],
weight_decay=0.001,
layer_size=256,
learning_rate=0.05,
num_epochs=30,
seed=42,
standardize=true,
batch_size=64
)
model = analyst.unsupervised_graphwise_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)
詳細は、Javadocを参照してください。