Wavelet Regularization Package

Submodules

Wavelet Regularization Module

class wbi.wavelet_regularization.wavelet_regularization.WaveletRegularization1D(mesh, orientation='x', wav='db1', **kwargs)[source]

Bases: BaseRegularization

Wavelet-based Regularization. This class regularizes the inverse problem by minimizing the complexity in the wavelet domain via a sparsity constraint (see Deleersnyder et al., 2021).

This class fits within the modular SimPEG framework. For more information, see - https://simpeg.xyz/ - Cockett, R., Kang, S., Heagy, L. J., Pidlisecky, A., & Oldenburg, D. W. (2015). SimPEG: An open source framework for simulation and gradient based parameter estimation in geophysical applications. Computers & Geosciences, 85, 142-154.

Optional Inputs

Parameters:
  • mesh (discretize.base.BaseMesh) – SimPEG mesh

  • nP (int) – number of parameters

  • mapping (IdentityMap) – regularization mapping, takes the model from model space to the space you want to regularize in

  • mref (numpy.ndarray) – reference model - our method does not support reference models

  • indActive (numpy.ndarray) – active cell indices for reducing the size of differential operators in the definition of a regularization mesh

__call__(m)[source]

We use a $ell_1$ perturbed Ekblom measure as differentiable sparsity measure.

\[r(m) = \sum_{i,j} R_{ij}\sqrt{ \left(X_{ij}\right)^2 + \epsilon}\]
__init__(mesh, orientation='x', wav='db1', **kwargs)[source]

Regularization for the 1D wavelet transform. :param mesh: SimPEG mesh :param orientation: orientation of the regularization :param wav: wavelet type (default db1, which is blocky)

_generate_scale_dependency_vector(wavelet)[source]

Generate the scale-dependent-weights for each coefficient in X.

Parameters:

wavelet

wavelet object Wavelet-coefficients corresponding to small-scale effects of the model are penalized more heavily. The scaling coefficient is never zero, so no regularization on the scaling coefficients.

\[x = [v_{0,0}, w_{0,0}, w_{1,0},w_{1,1}, w_{2,1},w_{2,1}, \cdots, w_{n,k}, \cdots ] \phi_m(x) = \frac{1}{E} \sum_{n}^{N} 2^n\sum_k \mu(w_n,k)\]

:param wavelet:contains info about the specific wavelet-transform

property _multiplier_pair
_regularization_matrix()[source]

Generate the regularization matrix. This maps the scale-dependency on each element in the wavelet domain matrix X.

deriv(m)[source]

Derivative of the measure.

Parameters:

m – model

The regularization in wavelet domain is:

\[R(x) = \sum_j \sqrt{x_j^2 + \epsilon}\]

So the derivative is straightforward:

\[\frac{\partial R(x)}{\partial x_j} = \sum_j \frac{x_j}{\sqrt{x_j^2 + \epsilon}}\]

And using the chain rule to model space:

\[\frac{\partial R(m)}{\partial m_j} = \frac{\partial R(m)}{\partial x_i}\frac{\partial x_i}{\partial m_j} with \frac{\partial x}{\partial m} = W\]
deriv2(m, v=None)[source]

Second derivative of the measure.

Parameters:
  • m (numpy.ndarray) – geophysical model

  • v (numpy.ndarray) – vector to multiply

Return type:

scipy.sparse.csr_matrix

Returns:

WtW, or if v is supplied WtW*v (numpy.ndarray)q

The second derivative of the perturbed Ekblom measure is highly unstable for small epsilon. Most methods do not use Hessian information, except for preconditioning (see e.g., optimization -> InexactGaussNewton) . Therefore, the unit matrix is used as Hessian. This results in a more stable optimization routine.

Module contents