To implement softmax as a
bijection, the forward transformation appends a value to the input and the
inverse removes this coordinate. The appended coordinate represents a pivot,
e.g., softmax(x) = exp(x-c) / sum(exp(x-c)) where c is the implicit last
coordinate.
Example Use:
bijector.SoftmaxCentered().forward(tf.math.log([2,3,4]))# Result: [0.2, 0.3, 0.4, 0.1]# Extra result: 0.1bijector.SoftmaxCentered().inverse([0.2,0.3,0.4,0.1])# Result: tf.math.log([2, 3, 4])# Extra coordinate removed.
At first blush it may seem like the Invariance of domain theorem implies this
implementation is not a bijection. However, the appended dimension
makes the (forward) image non-open and the theorem does not directly apply.
Attributes
dtype
dtype of Tensors transformable by this distribution.
forward_min_event_ndims
Returns the minimal number of dimensions bijector.forward operates on.
graph_parents
Returns this Bijector's graph_parents as a Python list.
inverse_min_event_ndims
Returns the minimal number of dimensions bijector.inverse operates on.
is_constant_jacobian
Returns true iff the Jacobian matrix is not a function of x.
name
Returns the string name of this Bijector.
validate_args
Returns True if Tensor arguments will be validated.
Tensor. The input to the "forward" Jacobian determinant evaluation.
event_ndims
Number of dimensions in the probabilistic events being
transformed. Must be greater than or equal to
self.forward_min_event_ndims. The result is summed over the final
dimensions to produce a scalar Jacobian determinant for each event,
i.e. it has shape x.shape.ndims - event_ndims dimensions.
name
The name to give this op.
Returns
Tensor, if this bijector is injective.
If not injective this is not implemented.
Raises
TypeError
if self.dtype is specified and y.dtype is not
self.dtype.
NotImplementedError
if neither _forward_log_det_jacobian
nor {_inverse, _inverse_log_det_jacobian} are implemented, or
this is a non-injective bijector.
Note that forward_log_det_jacobian is the negative of this function,
evaluated at g^{-1}(y).
Args
y
Tensor. The input to the "inverse" Jacobian determinant evaluation.
event_ndims
Number of dimensions in the probabilistic events being
transformed. Must be greater than or equal to
self.inverse_min_event_ndims. The result is summed over the final
dimensions to produce a scalar Jacobian determinant for each event,
i.e. it has shape y.shape.ndims - event_ndims dimensions.
name
The name to give this op.
Returns
Tensor, if this bijector is injective.
If not injective, returns the tuple of local log det
Jacobians, log(det(Dg_i^{-1}(y))), where g_i is the restriction
of g to the ith partition Di.
Raises
TypeError
if self.dtype is specified and y.dtype is not
self.dtype.