deepdow.nn module

Module containing neural networks.

class BachelierNet(n_input_channels, n_assets, hidden_size=32, max_weight=1, shrinkage_strategy='diagonal', p=0.5)[source]

Bases: torch.nn.modules.module.Module, deepdow.benchmarks.Benchmark

Combination of recurrent neural networks and convex optimization.

Parameters
  • n_input_channels (int) – Number of input channels of the dataset.

  • n_assets (int) – Number of assets in our dataset. Note that this network is shuffle invariant along this dimension.

  • hidden_size (int) – Hidden state size. Alternatively one can see it as number of output channels.

  • max_weight (float) – Maximum weight for a single asset.

  • shrinkage_strategy (str, {'diagonal', 'identity', 'scaled_identity'}) – Strategy of estimating the covariance matrix.

  • p (float) – Dropout rate - probability of an element to be zeroed during dropout.

norm_layer

Instance normalization (per channel).

Type

torch.nn.Module

transform_layer

RNN layer that transforms (n_samples, n_channels, lookback, n_assets) to (n_samples, hidden_size, lookback, n_assets) where the first (sample) and the last dimension (assets) is shuffle invariant.

Type

deepdow.layers.RNN

time_collapse_layer

Attention pooling layer that turns (n_samples, hidden_size, lookback, n_assets) into (n_samples, hidden_size, n_assets) by assigning each timestep in the lookback dimension a weight and then performing a weighted average.

Type

deepdow.layers.AttentionCollapse

dropout_layer

Dropout layer where the probability is controled by the parameter p.

Type

torch.nn.Module

covariance_layer

Estimate square root of a covariance metric for the optimization. Turns (n_samples, lookback, n_assets) to (n_samples, n_assets, n_assets).

Type

deepdow.layers.CovarianceMatrix

channel_collapse_layer

Averaging layer turning (n_samples, hidden_size, n_assets) to (n_samples, n_assets) where the output serves as estimate of expected returns in the optimization.

Type

deepdow.layers.AverageCollapse

gamma

A single learnable parameter that will be used for all samples. It represents the tradoff between risk and return. If equal to zero only expected returns are considered.

Type

torch.nn.Parameter

alpha

A single learnable parameter that will be used for all samples. It represents the regularization strength of portfolio weights. If zero then no effect if high then encourages weights to be closer to zero.

Type

torch.nn.Parameter

portfolio_opt_layer

Markowitz optimizer that inputs expected returns, square root of a covariance matrix and a gamma

Type

deepdow.layers.NumericalMarkowitz

forward(x)[source]

Perform forward pass.

Parameters

x (torch.Tensor) – Of shape (n_samples, n_channels, lookback, n_assets).

Returns

weights – Tensor of shape (n_samples, n_assets).

Return type

torch.Torch

property hparams

Hyperparamters relevant to construction of the model.

class DummyNet(n_channels=1)[source]

Bases: torch.nn.modules.module.Module, deepdow.benchmarks.Benchmark

Minimal trainable network achieving the task.

Parameters

n_channels (int) – Number of input channels. We learn one constant per channel. Therefore n_channels=n_trainable_parameters.

forward(x)[source]

Perform forward pass.

Parameters

x (torch.Tensor) – Of shape (n_samples, n_channels, lookback, n_assets).

Returns

weights – Tensor of shape (n_samples, n_assets).

Return type

torch.Torch

property hparams

Hyperparamters relevant to construction of the model.

class KeynesNet(n_input_channels, hidden_size=32, transform_type='RNN', n_groups=4)[source]

Bases: torch.nn.modules.module.Module, deepdow.benchmarks.Benchmark

Connection of multiple different modules.

Parameters
  • n_input_channels (int) – Number of input channels.

  • hidden_size (int) – Number of features the transform layer will create.

  • transform_type (str, {'RNN', 'Conv'}) – If ‘RNN’ then one directional LSTM that is shared across all assets. If Conv then 1D convolution that is shared among all assets.

  • n_groups (int) – Number of groups to split the hidden_size channels into. This is used in the Group Normalization. Note that hidden_size % n_groups == 0 needs to hold.

norm_layer_1

Instance normalization layer with learnable parameters (2 per channel). Applied to the input.

Type

torch.nn.InstanceNorm2d

transform_layer

Depends on the transform_type. The goal is two exctract features from the input tensor by considering the time dimension.

Type

torch.nn.Module

norm_layer_2

Group normalization with n_groups groups. It is applied to the features extracted by time_collapse_layer.

Type

torch.nn.GroupNorm

time_collapse_layer, channel_collapse_layer

Removing of respective dimensions by the means of averaging.

Type

deepdow.layers.AverageCollapse

temperature

Learnable parameter representing the temperature for the softmax applied to all inputs.

Type

torch.Tensor

portfolio_opt_layer

Portfolio allocation layer. Uses learned temperature.

Type

deepdow.layers.SoftmaxAllocator

__call__(x)[source]

Perform forward pass.

Parameters

x (torch.Tensor) – Of shape (n_samples, n_channels, lookback, n_assets).

Returns

weights – Tensor of shape (n_samples, n_assets).

Return type

torch.Torch

property hparams

Hyperparamters relevant to construction of the model.

class LinearNet(n_channels, lookback, n_assets, p=0.5)[source]

Bases: torch.nn.modules.module.Module, deepdow.benchmarks.Benchmark

Network with one layer.

Parameters
  • n_channels (int) – Number of channels, needs to be fixed for each input tensor.

  • lookback (int) – Lookback, needs to be fixed for each input tensor.

  • n_assets (int) – Number of assets, needs to be fixed for each input tensor.

  • p (float) – Dropout probability.

norm_layer

Batch normalization with learnable parameters.

Type

torch.nn.BatchNorm1d

dropout_layer

Dropout layer with probability p.

Type

torch.nn.Dropout

linear

One dense layer with n_assets outputs and the flattened input tensor (n_channels, lookback, n_assets).

Type

torch.nn.Linear

temperature

Learnable parameter for representing the final softmax allocator temperature.

Type

torch.Parameter

allocate_layer

Softmax allocator with a per sample temperature.

Type

SoftmaxAllocator

forward(x)[source]

Perform forward pass.

Parameters

x (torch.Tensor) – Of shape (n_samples, n_channels, lookback, n_assets). The last 3 dimensions need to be of the same size as specified in the constructor. They cannot vary.

Returns

weights – Tensor of shape (n_samples, n_assets).

Return type

torch.Torch

property hparams

Hyperparamters relevant to construction of the model.

class ThorpNet(n_assets, max_weight=1, force_symmetric=True)[source]

Bases: torch.nn.modules.module.Module, deepdow.benchmarks.Benchmark

All inputs of convex optimization are learnable but do not depend on the input.

Parameters
  • n_assets (int) – Number of assets in our dataset. Note that this network is shuffle invariant along this dimension.

  • force_symmetric (bool) – If True, then the square root of the covariance matrix will be always by construction symmetric. The resulting array will be \(M^T M\) where \(M\) is the learnable parameter. If False then no guarantee of the matrix being symmetric.

  • max_weight (float) – Maximum weight for a single asset.

matrix

A learnable matrix of shape (n_assets, n_assets).

Type

torch.nn.Parameter

exp_returns

A learnable vector of shape (n_assets,).

Type

torch.nn.Parameter

gamma_sqrt

A single learnable parameter that will be used for all samples. It represents the tradoff between risk and return. If equal to zero only expected returns are considered.

Type

torch.nn.Parameter

alpha

A single learnable parameter that will be used for all samples. It represents the regularization strength of portfolio weights. If zero then no effect if high then encourages weights to be closer to zero.

Type

torch.nn.Parameter

forward(x)[source]

Perform forward pass.

Parameters

x (torch.Tensor) – Of shape (n_samples, n_channels, lookback, n_assets).

Returns

weights – Tensor of shape (n_samples, n_assets).

Return type

torch.Torch

property hparams

Hyperparamters relevant to construction of the model.