Skip to content

Add [0, 1] bounds to LearnedFeatureImputation in input transform argparse (#5185)#5185

Open
hvarfner wants to merge 5 commits intofacebook:mainfrom
hvarfner:export-D101058043
Open

Add [0, 1] bounds to LearnedFeatureImputation in input transform argparse (#5185)#5185
hvarfner wants to merge 5 commits intofacebook:mainfrom
hvarfner:export-D101058043

Conversation

@hvarfner
Copy link
Copy Markdown

@hvarfner hvarfner commented Apr 21, 2026

Summary:

The LearnedFeatureImputation transform supports constraining imputation
values to a bounded range via sigmoid, but the Ax input transform
argparse dispatcher never passed bounds. This left imputation values
unconstrained, allowing them to drift far outside [0, 1] during MLL
optimization.

Pass bounds=[[0,...,0], [1,...,1]] to constrain imputation values to the
normalized input range, since the preceding Normalize transform maps
features to [0, 1].

Differential Revision: D101058043

@meta-cla meta-cla Bot added the CLA Signed Do not delete this pull request or issue due to inactivity. label Apr 21, 2026
@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented Apr 21, 2026

@hvarfner has exported this pull request. If you are a Meta employee, you can view the originating Diff in D101058043.

@meta-codesync meta-codesync Bot changed the title Add [0, 1] bounds to LearnedFeatureImputation in input transform argparse Add [0, 1] bounds to LearnedFeatureImputation in input transform argparse (#5185) Apr 21, 2026
@hvarfner hvarfner force-pushed the export-D101058043 branch from 7040f13 to fb0d563 Compare April 21, 2026 21:05
hvarfner pushed a commit to hvarfner/Ax that referenced this pull request Apr 21, 2026
…arse (facebook#5185)

Summary:

The LearnedFeatureImputation transform supports constraining imputation
values to a bounded range via sigmoid, but the Ax input transform
argparse dispatcher never passed bounds. This left imputation values
unconstrained, allowing them to drift far outside [0, 1] during MLL
optimization.

Pass bounds=[[0,...,0], [1,...,1]] to constrain imputation values to the
normalized input range, since the preceding Normalize transform maps
features to [0, 1].

Differential Revision: D101058043
@hvarfner hvarfner force-pushed the export-D101058043 branch from fb0d563 to 574f1cf Compare April 21, 2026 21:10
hvarfner pushed a commit to hvarfner/Ax that referenced this pull request Apr 21, 2026
…arse (facebook#5185)

Summary:
Pull Request resolved: facebook#5185

The LearnedFeatureImputation transform supports constraining imputation
values to a bounded range via sigmoid, but the Ax input transform
argparse dispatcher never passed bounds. This left imputation values
unconstrained, allowing them to drift far outside [0, 1] during MLL
optimization.

Pass bounds=[[0,...,0], [1,...,1]] to constrain imputation values to the
normalized input range, since the preceding Normalize transform maps
features to [0, 1].

Differential Revision: D101058043
Carl Hvarfner added 4 commits April 21, 2026 16:03
…ok#5167)

Summary:
Pull Request resolved: facebook#5167

The Ax JSON decoder's `botorch_component_from_json` strips the
`BUFFERED_PREFIX` from state_dict keys only for `TransformedDistribution`
subclasses. This misses priors like `BetaPrior` whose underlying
distribution (`Beta`) uses `property` descriptors delegating to an
internal `Dirichlet`, causing `_bufferize_attributes` to use the prefix.

Broaden the check from `TransformedDistribution` to
`(TransformedDistribution, Prior)` so all gpytorch priors with buffered
attributes deserialize correctly.

Differential Revision: D100341242

Reviewed By: sdaulton
…acebook#5106)

Summary:
X-link: https://github.com/facebookexternal/botorch_fb/pull/34

Pull Request resolved: facebook#5106

Wire LearnedFeatureImputation and ImputedMultiTaskGP into Ax:

1. **input_transform_argparse dispatcher**: Computes `feature_indices` and `d`
   from a heterogeneous MultiTaskDataset using target-first feature ordering.
   Validates that the dataset is a MultiTaskDataset with heterogeneous features.

2. **Storage registry**: Register ImputedMultiTaskGP in MODEL_REGISTRY and
   LearnedFeatureImputation in INPUT_TRANSFORM_REGISTRY.

3. **Model selection (utils.py)**: When a heterogeneous MultiTaskDataset is
   detected and a model class is specified (e.g. ImputedMultiTaskGP), use the
   specified class instead of force-overriding to HeterogeneousMTGP. Also add
   automatic Normalize + LearnedFeatureImputation transform chaining for
   ImputedMultiTaskGP.

Differential Revision: D97625733
…ing_gs (facebook#5183)

Summary:
Pull Request resolved: facebook#5183

When the source and target search spaces are incompatible,
any model class is silently overridden to `HeterogeneousMTGP`. This prevents using other models at all.

Now, we only  override to `HeterogeneousMTGP` in get_transfer_learning_gs, instead of in two different places in the stack. Thus, we will still have the same functionality but not double-force it.

Differential Revision: D101174566
…acebook#5184)

Summary:
Pull Request resolved: facebook#5184

The transfer learning adapter explicitly passed `bounds=None` to Normalize,
forcing `learn_bounds=True`. This caused Normalize bounds to be learned from
data instead of fixed to the search space, resulting in bounds that drift
during training and differ between benchmark configs despite identical
search spaces.

Remove the `bounds=None` override so that `_set_default_bounds` provides
the correct search space bounds from the SearchSpaceDigest.

Differential Revision: D100669010
@hvarfner hvarfner force-pushed the export-D101058043 branch from 574f1cf to a376371 Compare April 21, 2026 23:07
hvarfner pushed a commit to hvarfner/Ax that referenced this pull request Apr 21, 2026
…arse (facebook#5185)

Summary:

The LearnedFeatureImputation transform supports constraining imputation
values to a bounded range via sigmoid, but the Ax input transform
argparse dispatcher never passed bounds. This left imputation values
unconstrained, allowing them to drift far outside [0, 1] during MLL
optimization.

Pass bounds=[[0,...,0], [1,...,1]] to constrain imputation values to the
normalized input range, since the preceding Normalize transform maps
features to [0, 1].

Differential Revision: D101058043
…arse (facebook#5185)

Summary:
Pull Request resolved: facebook#5185

The LearnedFeatureImputation transform supports constraining imputation
values to a bounded range via sigmoid, but the Ax input transform
argparse dispatcher never passed bounds. This left imputation values
unconstrained, allowing them to drift far outside [0, 1] during MLL
optimization.

Pass bounds=[[0,...,0], [1,...,1]] to constrain imputation values to the
normalized input range, since the preceding Normalize transform maps
features to [0, 1].

Differential Revision: D101058043
@hvarfner hvarfner force-pushed the export-D101058043 branch from a376371 to d82837d Compare April 21, 2026 23:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed Do not delete this pull request or issue due to inactivity. fb-exported meta-exported

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant