Ceres Solver Framework (еще один проект Google с открытым исходным кодом), который предназначен для решения больших нелинейных наименьших квадратов, имеет функцию, позволяющую создать «локальную параметризацию» и перегрузить оператор «плюс», который управляет каждым шаг обновления оптимизатора.
Например, сфера в трех измерениях является двумерной
многообразие, встроенное в трехмерное пространство. В каждой точке
сфера, касательная к ней плоскость определяет двухмерную касательную
пространство. Для функции стоимости, определенной в этой сфере, с учетом точки х,
движение в направлении, нормальном к сфере в этой точке не
полезно. Таким образом, лучший способ параметризации точки на сфере - это
оптимизировать по двумерному вектору delta_x в касательном пространстве в
точка на сфере сфера, а затем «двигаться» в точку х + delta_x,
где операция перемещения включает в себя проецирование обратно на сферу.
Это удаляет избыточное измерение из оптимизации, делая
это численно более надежно и эффективно.
http://ceres -solver.org / nnls_modeling.html # localparameterization
Это также полезно при оптимизации задач, в которых могут быть скачкообразные скачки на определенных границах.
При использовании чего-то вроде ADAM для оптимизации функции затрат в TF возможно сделать что-то подобное?