2017-11-29 19 views
2

잡음 대조 계산을 이해하면 단어 삽입 (음수 샘플)에서 일부 벡터를 샘플링 한 다음 각각의 로그 가능성을 계산할 수 있습니다. 그런 다음 목표 단어의 확률과 음의 샘플 단어 각각의 로그 가능성 사이의 차이를 최대화하고 싶습니다 (따라서이 문제에 대해 정확하다면 손실 함수를 최적화하여 가능한 한 1).nce_loss()의 Tensorflow num_classes 매개 변수

내 질문은 이것이다 :

nce_loss 함수에 num_classes 매개 변수의 목적은 무엇인가

? 가장 좋은 추측은 Tensorflow가 음수 샘플을 그린 분포를 알 수 있도록 클래스 수를 전달하지만 변수 자체에서 분포의 크기를 추론 할 수 있으므로 의미가 없습니다. . 그렇지 않으면 언어 모델이 k + 1 예측 (대상 단어에 대해 음수 샘플 크기 +1) 만 출력하는 경우 특히 가능한 총 클래스 수를 알아야하는 이유를 생각할 수 없습니다.

답변

0

맞춰보세요. num_classes 인수는 로그 균일 (Zipfian) 분포에서 음수 레이블을 샘플링하는 데 사용됩니다.

여기에 link to the source code 같습니다

# Sample the negative labels. 
# sampled shape: [num_sampled] tensor 
# true_expected_count shape = [batch_size, 1] tensor 
# sampled_expected_count shape = [num_sampled] tensor 
if sampled_values is None: 
    sampled_values = candidate_sampling_ops.log_uniform_candidate_sampler(
     true_classes=labels, 
     num_true=num_true, 
     num_sampled=num_sampled, 
     unique=True, 
     range_max=num_classes) 

range_max=num_classes 인수는 기본적으로 또한이 분포의 형상 및 상기 샘플링 값의 범위를 정의 - [0, range_max)한다. 이 범위 은 레이블에서 정확히을 추론 할 수 없습니다. 특정 미니 배치는 작은 단어 ID 만 가질 수 있기 때문에 배포를 크게 왜곡 할 수 있습니다.