Hyperparameters and HPO
Important
By default, all new solutions use automatic training. With automatic training, you incur training costs while
your solution is active. To avoid unnecessary costs, when you are finished you can update the solution to turn off automatic training. For information about training
costs, see Amazon Personalize pricing
You specify hyperparameters before training to optimize the trained model for your particular use case. This contrasts with model parameters whose values are determined during the training process.
Hyperparameters are specified using the
algorithmHyperParameters
key that is part of the SolutionConfig
object that is passed to the CreateSolution operation.
A condensed version of the CreateSolution
request is
below. The example includes the solutionConfig
object. You
use solutionConfig
to override the default parameters of a
recipe.
{ "name": "string", "recipeArn": "string", "eventType": "string", "solutionConfig": { "optimizationObjective": { "itemAttribute": "string", "objectiveSensitivity": "string" }, "eventValueThreshold": "string", "featureTransformationParameters": { "string" : "string" }, "algorithmHyperParameters": { "string" : "string" }, "hpoConfig": { "algorithmHyperParameterRanges": { ... }, "hpoResourceConfig": { "maxNumberOfTrainingJobs": "string", "maxParallelTrainingJobs": "string" } }, }, }
Different recipes use different hyperparameters. For the available hyperparameters, see the individual recipes in Choosing a recipe.
Enabling hyperparameter optimization
Hyperparameter optimization (HPO), or tuning, is the task of choosing optimal hyperparameters for a specific learning objective. The optimal hyperparameters are determined by running many training jobs using different values from the specified ranges of possibilities.
With User-Personalization-v2 and Personalized-Ranking-v2,
if you turn on automatic training, Amazon Personalize automatically performs HPO every 90 days. Without automatic training, no HPO occurs. For all other recipes, you must enable HPO. To
use HPO, set performHPO
to true
, and
include the hpoConfig
object.
Hyperparameters can be categorical, continuous, or integer-valued.
The hpoConfig
object has keys that correspond to each
of these types, where you specify the hyperparameters and their
ranges. You must provide each type in your request, but if a recipe doesn't have
a parameter of a type, you can leave it empty. For example, User-Personalization does
not have a tunable hyperparameter of continuous type. So for the continousHyperParameterRange
, you would pass an empty array.
The following code shows how to create a solution with HPO enabled using the SDK for Python (Boto3).
The solution in the example uses the
User-Personalization recipe
recipe and
has HPO set to true
. The code provides a value for hidden_dimension
and the categoricalHyperParameterRanges
and integerHyperParameterRanges
.
The continousHyperParameterRange
is empty and the hpoResourceConfig
sets the maxNumberOfTrainingJobs
and maxParallelTrainingJobs
.
import boto3 personalize = boto3.client('personalize') create_solution_response = personalize.create_solution( name = "solution name", datasetGroupArn = 'arn:aws:personalize:region:accountId:dataset-group/datasetGroupName', recipeArn = 'arn:aws:personalize:::recipe/aws-user-personalization', performHPO = True, solutionConfig = { "algorithmHyperParameters": { "hidden_dimension": "55" }, "hpoConfig": { "algorithmHyperParameterRanges": { "categoricalHyperParameterRanges": [ { "name": "recency_mask", "values": [ "true", "false"] } ], "integerHyperParameterRanges": [ { "name": "bptt", "minValue": 2, "maxValue": 22 } ], "continuousHyperParameterRanges": [ ] }, "hpoResourceConfig": { "maxNumberOfTrainingJobs": "4", "maxParallelTrainingJobs": "2" } } } )
For more information about HPO, see Automatic model tuning.
Viewing hyperparameters
You can view the hyperparameters of the solution by calling the DescribeSolution operation. The following
sample shows a DescribeSolution
output. After creating a solution version (training a model),
you can also view hyperparameters with the DescribeSolutionVersion operation.
{ "solution": { "name": "hpo_coonfig_solution", "solutionArn": "arn:aws:personalize:region:accountId:solution/solutionName", "performHPO": true, "performAutoML": false, "recipeArn": "arn:aws:personalize:::recipe/aws-user-personalization", "datasetGroupArn": "arn:aws:personalize:region:accountId:dataset-group/datasetGroupName", "eventType": "click", "solutionConfig": { "hpoConfig": { "hpoResourceConfig": { "maxNumberOfTrainingJobs": "4", "maxParallelTrainingJobs": "2" }, "algorithmHyperParameterRanges": { "integerHyperParameterRanges": [ { "name": "training.bptt", "minValue": 2, "maxValue": 22 } ], "continuousHyperParameterRanges": [], "categoricalHyperParameterRanges": [ { "name": "data.recency_mask", "values": [ "true", "false" ] } ] } }, "algorithmHyperParameters": { "hidden_dimension": "55" } }, "status": "ACTIVE", "creationDateTime": "2022-07-08T12:12:48.565000-07:00", "lastUpdatedDateTime": "2022-07-08T12:12:48.565000-07:00" } }