I am developing an application using the CKKS scheme for complex computations, but I am encountering issues with accuracy during iterative bootstrapping.
Problem Description
My workflow involves 128 iterative bootstrappings, interleaved with complex calculations that require 25 multiplicative levels and numerous rotations. The input message is always downscaled to [-1, 1].
To diagnose the issue, I compared the data directly before and after each bootstrapping operation. Initially, the results seem accurate, with an L_\infty error of about 10^{-12} to 10^{-11} after each bootstrapping.
However, as the number of bootstrappings increases, the error grows significantly. By the 128th bootstrapping, the error reaches approximately 10^{-3}, which is too high for my application.
This behavior is puzzling because I observe the error increasing for every distinct bootstrapping operation, even though the operations are independent. While some accumulation of error across iterations is expected, the increasing error for each bootstrapping in isolation seems strange.
Observations and Challenges
- Single bootstrapping crashes when approximation errors become too high.
- I considered using 128-bit native size, but the combination of the required 25 multiplicative levels and the increased scaling modulus size (that is the matter of using 128-bit) would violate the 128-bit security level (with OpenFHE’s limit of ring dimension 2^{17}).
Parameters Used
- Secret Key Distribution:
SPARSE_TERNARY
- Security Level:
- Testing:
HEStd_NotSet
- Production:
HEStd_128_classic
- Testing:
- Ring Dimension:
- Testing: 2^7
- Production: 2^{17}
- Number of Slots: 2^6
- Rescale Technique:
FLEXIBLEAUTO
- Scaling Mod Size: 59
- First Mod Size: 60
- Bootstrapping Level Budget: [2, 2]
- Approximate Precision of Single Bootstrapping: 19 bits
Questions
- Could someone help explain why accuracy degrades for each distinct bootstrapping operation, as observed in direct comparisons before and after each bootstrapping?
- Are there any techniques or parameter adjustments that could help improve the accuracy of iterative bootstrapping while maintaining the required security level?
Any ideas or insights would be greatly appreciated!