Wavelet Regularization Package
Submodules
Wavelet Regularization Module
- class wbi.wavelet_regularization.wavelet_regularization.WaveletRegularization1D(mesh, orientation='x', wav='db1', **kwargs)[source]
Bases:
BaseRegularizationWavelet-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.