Sinkhorn DRO¶
- exception dro.neural_model.sinkhorn_nn.SinkhornNNDROError¶
Bases:
DROErrorException class for errors in Sinkhorn NN DRO model.
- class dro.neural_model.sinkhorn_nn.SinkhornNNDRO(input_dim, num_classes, task_type='classification', model_type='mlp', reg_param=0.001, lambda_param=100.0, k_sample_max=5, optimization_type='SG', device=device(type='cpu'))¶
Bases:
BaseNNDROSinkhorn Distributionally Robust Optimization with Neural Networks.
Implements the Sinkhorn DRO objective for deep learning models:
\[\min_{\theta} \sup_{Q \in \mathcal{B}_{\epsilon,\varepsilon}(P)} \mathbb{E}_Q[\ell(f_\theta(X), y)]\]where the ambiguity set \(\mathcal{B}_{\epsilon,\varepsilon}(P)\) is defined using the entropic-regularized (Sinkhorn) Wasserstein distance.
The Sinkhorn DRO loss for a mini-batch is computed as:
\[\hat{R}(\theta) = \lambda \varepsilon \cdot \frac{1}{N} \sum_{i=1}^{N} \log \left( \frac{1}{m} \sum_{j=1}^{m} \exp\left( \frac{\ell(f_\theta(x_i + \sigma_j), y_i)}{\lambda \varepsilon} \right)\right)\]where \(\sigma_j \sim \mathcal{N}(0, \varepsilon I)\) are Gaussian perturbations.
Three stochastic optimization methods are supported:
SG (Stochastic Gradient): Uses a fixed number of Monte Carlo samples \(m = 2^{K_{max}}\)
MLMC (Multilevel Monte Carlo): Uses a hierarchy of sample levels for variance reduction
RTMLMC (Randomized Truncated MLMC): Randomly selects a single level per iteration for further variance reduction
Reference: Sinkhorn Distributionally Robust Optimization
Initialize Sinkhorn DRO neural model.
- Parameters:
input_dim (int) – Input feature dimension \(d \geq 1\)
num_classes (int) –
Output dimension:
Classification: \(K \geq 2\) (number of classes)
Regression: Automatically set to 1
task_type (str) –
Learning task type. Supported:
'classification': Cross-entropy loss'regression': MSE loss
model_type (str) –
Neural architecture type. Supported:
'mlp': Multi-Layer Perceptron (default)'linear''resnet''alexnet'
reg_param (float) – Entropic regularization strength \(\varepsilon > 0\) controlling transport smoothness. Must be > 0. Defaults to 1e-3.
lambda_param (float) – Loss scaling factor \(\lambda > 0\) balancing Wasserstein distance and loss. Must be > 0. Defaults to 1e2.
k_sample_max (int) – Maximum level for Monte Carlo / MLMC sampling. The number of noise samples is \(2^{k\_sample\_max}\). Higher values improve accuracy but increase computation. Defaults to 5.
optimization_type (str) –
Stochastic optimization algorithm. Supported:
'SG': Standard Stochastic Gradient (baseline)'MLMC': Multilevel Monte Carlo acceleration'RTMLMC': Randomized Truncated MLMC
device (torch.device) – Target computation device, defaults to CPU
- Raises:
If reg_param ≤ 0
If lambda_param ≤ 0
If k_sample_max < 1
If optimization_type not in {‘SG’, ‘MLMC’, ‘RTMLMC’}
Example:
>>> model = SinkhornNNDRO( ... input_dim=784, ... num_classes=10, ... reg_param=0.01, ... lambda_param=50.0, ... optimization_type='SG' ... )
- update(config)¶
Update hyperparameters for Sinkhorn NN DRO.
- Parameters:
config (dict) –
Dictionary containing parameter updates. Valid keys:
'reg': Entropic regularization strength (ε > 0)'lambda': Loss scaling factor (λ > 0)'k_sample_max': Maximum MLMC sampling level (int ≥ 1)'optimization_type': Optimization algorithm (‘SG’, ‘MLMC’, ‘RTMLMC’)'lr': Learning rate'batch_size': Training batch size'train_epochs': Number of training epochs'layer_num': Number of MLP layers'hidden_size': Hidden layer size for MLP'dropout_ratio': Dropout rate for MLP
- Raises:
ValueError – If any parameter value violates constraints.
- Return type:
Example:
>>> model.update({ ... 'reg': 0.01, ... 'lambda': 50.0, ... 'k_sample_max': 3, ... 'optimization_type': 'MLMC' ... })