StopGradient

공개 최종 클래스 StopGradient

그라데이션 계산을 중지합니다.

그래프에서 실행될 때 이 작업은 입력 텐서를 있는 그대로 출력합니다.

경사도를 계산하기 위한 연산을 구축할 때 이 연산은 입력의 기여도를 고려하지 못하게 합니다. 일반적으로 그래디언트 생성기는 계산에 기여한 입력을 재귀적으로 찾아 특정 '손실'의 도함수를 계산하기 위해 그래프에 연산을 추가합니다. 그래프에 이 작업을 삽입하면 입력이 그래디언트 생성기에서 마스크됩니다. 경사도 계산에는 고려되지 않습니다.

이는 TensorFlow로 값을 계산하려고 하지만 값이 상수인 척해야 할 때마다 유용합니다. 예를 들어 벡터 x에 대한 소프트맥스 함수는

def softmax(x):
     numerator = tf.exp(x)
     denominator = tf.reduce_sum(numerator)
     return numerator / denominator
 
로 작성할 수 있습니다. 그러나 x의 값이 클 경우 오버플로가 발생할 수 있습니다. 보다 안정적인 대안적인 방법은 각 값에서 x의 최대값을 빼는 것입니다.
def stable_softmax(x):
     z = x - tf.reduce_max(x)
     numerator = tf.exp(z)
     denominator = tf.reduce_sum(numerator)
     return numerator / denominator
 
그러나 소프트맥스를 통해 x로 역전파할 때 tf.reduce_max(x) (최대 값이 고유하지 않으면 그래디언트가 잘못된 입력으로 흐를 수 있음) 계산을 통해 역전파하고 싶지 않으며 이를 다음과 같이 처리합니다. 상수. 따라서 이를
def stable_softmax(x):
     z = x - tf.stop_gradient(tf.reduce_max(x))
     numerator = tf.exp(z)
     denominator = tf.reduce_sum(numerator)
     return numerator / denominator
 
으로 작성해야 합니다. 다른 예는 다음과 같습니다.
  • M-단계E-단계 의 출력을 통한 역전파를 포함해서는 안 되는 EM 알고리즘입니다.
  • 에너지 함수를 차별화할 때 훈련이 모델에서 샘플을 생성한 그래프를 통해 역전파되어서는 안 되는 볼츠만 기계의 대조 발산 훈련입니다.
  • 적대적 예제 생성 프로세스를 통해 역전파가 발생하지 않는 적대적 훈련입니다.

공개 방법

출력 <T>
출력 ()
텐서의 기호 핸들을 반환합니다.
정적 <T> 정지 그래디언트 <T>
생성 ( 범위 범위, 피연산자 <T> 입력)
새로운 StopGradient 작업을 래핑하는 클래스를 생성하는 팩토리 메서드입니다.
출력 <T>
출력 ()

상속된 메서드

공개 방법

공개 출력 <T> asOutput ()

텐서의 기호 핸들을 반환합니다.

TensorFlow 작업에 대한 입력은 다른 TensorFlow 작업의 출력입니다. 이 메서드는 입력 계산을 나타내는 기호 핸들을 얻는 데 사용됩니다.

공개 정적 StopGradient <T> 생성 ( 범위 범위, 피연산자 <T> 입력)

새로운 StopGradient 작업을 래핑하는 클래스를 생성하는 팩토리 메서드입니다.

매개변수
범위 현재 범위
보고
  • StopGradient의 새 인스턴스

공개 출력 <T> 출력 ()