Эксперимент на тему обучения нейронок в 1.58 бит. Веса модели представляются в тернарном виде (т.е. каждый вес преобразуется в значение {-1,0,1}) и так используются для обучения. Генерим много случайных разряженных тернарных шумовых векторов v_i (в них много нулей). С ними вычисляем якобиан-векторное произведение и получаем проекцию градиента на шумовой вектор, от которого нам нужен только знак (лежит шумовой вектор по градиенту (1) или против него (-1), или ортогонально (0)). И градиент оценивается через сумму шумовых векторов умноженных на знак проекции. Веса и градиент у нас тернарные и это должно сильно экономить память. Параметры алгоритма: сколько случайных векторов используем и их разреженность. Шумовые вектора (v_i) генерятся псевдослучайно из сида и нам не нужно их хранить (можно из сида восстановить, это может пригодиться при распределенном обучении). Для хорошего обучения важен большой батч и много шагов оптимизации. Так понял. Автор добавил ноутбук с трейном MLPшки распознавать MNIST, вроде обучается. noise_step: Training in 1.58b With No Gradient Memory Код и статья тут: https://github.com/wbrickner/noise_step/tree/main