Skip to main content

← HomOps Reference

HomReLU

Apply an encrypted ReLU approximation, element by element.

RePolynomials
RunsServer
Changes shapeNo
Changes scaleYes: through HomSign and multiplication
Levels spentSeveral
RotatesNo
KeysSquare key

What it does​

HomReLU is an encrypted composite, not a cleartext max(0, x) leaf. It computes (approx_sign(x) + 1/2) * x on the domain [-1, 1], using HomSign (scale=0.5) for the sign approximation.
The approximation domain is fixed: left must be -1.0 and right must be 1.0. Because Sign uses polynomial stages and the final operation is a ciphertext multiply, this consumes levels and requires the square key.

Signature​

HomReLU(
    x_accuracy=10,
    y_accuracy=10,
    left=-1.0,               # must be -1.0
    right=1.0,                # must be 1.0
    tol=1e-8,
    rows_budget=None,
)
No set_data. The constructor configures the HomSign approximation used by this composite.

Parameters​

ParameterTypeDefaultDescription
x_accuracyint10Horizontal accuracy used to calibrate the Sign approximation.
y_accuracyfloat10Vertical accuracy for the Sign/minimax approximation.
leftfloat-1.0Required domain left bound; must be -1.0.
rightfloat1.0Required domain right bound; must be 1.0.
tolfloat1e-8Polynomial tolerance forwarded to the Sign stages.
rows_budgetSequence[int] | NoneNoneAbsolute rows available to Sign and polynomial-stage mod-switches.

Requirements​

  • Input in [-1, 1]. The composite enforces left=-1.0 and right=1.0; normalize inputs before it.
  • Square key and level headroom. HomSign and the final encrypted multiply consume the same resources as their constituent operations.

Shape effect - no​

The output shape equals the input shape.

Scale effect - yes​

Scale changes through the HomSign polynomial stages and the final ciphertext multiply. Inspect the compiled pipeline to plan the next operation.

Level budget​

Several. HomSign consumes levels through polynomial evaluation, and the final multiply follows HomMul behavior.

Keys​

Square key. Needed by HomSign and the final ciphertext multiplication.

Example​

An encrypted activation in the hom section, after inputs have been normalized to [-1, 1]:
pipeline.pyPYTHON
from lattica_build.operators import HomLinear, HomReLU
from lattica_build.base_classes.hom_pipeline import HomomorphicPipeline
from lattica_build.operators.composite.sequential import SequentialHomOp

pipeline = HomomorphicPipeline(
    hom=SequentialHomOp(
        HomLinear((64, 128), bias=True),
        HomReLU(x_accuracy=10, y_accuracy=10),   # encrypted via HomSign
        HomLinear((10, 64), bias=True),
    ),
    input_shape=(128,),
)

See also​