tf.fake_quant_with_min_max_vars - это дифференцируемая функция? - PullRequest
0 голосов
/ 15 октября 2018

Схемы квантования обычно недифференцируемы, потому что они проходят через порог, такой как функция округления или знака.Это означает, что мы не можем получить градиент обучаемых переменных из-за природы правила цепочки.

Вместо этого мы можем использовать трюк с именем 'прямой анализ *' 1004 *, который позволяет нам распространять градиент отдельных обучаемых переменных в обратном направлении.

Одна такаяМетод tf.fake_quant_with_min_max_vars . Преимущества этого формата в том, что он может представлять произвольные величины диапазонов, они не должны быть симметричными, он может представлять значения со знаком и без знака, а линейный разброс делает выполнениеумножения просто. Блог , Бумага .

Итак, мой вопрос, можем ли мы дифференцировать функцию fake_quant?И если да, применяется ли эта функция «сквозной оценщик»?

Я сделал это немного с помощью некоторого фрагмента кода

x = tf.cast (np.random.normal (0,1, (10,10), tf.float32)

x_q = tf.fake_quant_with_min_max_vars (x, min = tf.reduce_min (x), max = tf.reduce_max (x), num_bits = 3)

grad = tf.gradients (x_q, x)

В этом случае почти каждый град имеет значение 1 (т. е. градиент 1), что означает, что он проходит через сам градиент.

Однако иногда несколькосэмплы имеют градиент 0 или другую постоянную, например, 2, 3, 4 ...

Я пропустил, что происходит?

...