다음을 통해 공유


손실 함수 및 메트릭

CNTK 여러 가지 일반적인 미리 정의된 손실 함수(또는 학습에서 최적화하기 위한 학습 기준) 및 메트릭(또는 성능 추적을 위한 평가 기준)을 포함합니다. 또한 사용자 지정 손실 함수/메트릭을 BrainScript 식으로 정의할 수 있습니다.

CrossEntropy(), CrossEntropyWithSoftmax()

범주 간 엔트로피 손실(또는 두 확률 분포 간의 교차 엔트로피)을 계산합니다.

CrossEntropy (y, p)
CrossEntropyWithSoftmax (y, z)

매개 변수

  • y: 레이블(1 핫) 또는 더 일반적으로 참조 배포입니다. 최대 1을 합산해야 합니다.
  • p (for CrossEntropy()): 참조에 대해 점수를 매기는 후방 확률 분포입니다. 최대 1을 합산해야 합니다.
  • z (for CrossEntropyWithSoftmax()): 참조에 대해 점수를 매기기 위해 후방 확률 분포를 계산하기 위한 Softmax 작업에 입력

반환 값

이 연산은 두 확률 분포와 p다음으로 정의된 엔트로피 간 엔트로피를 계산합니다y.

ce = E_y{-log p} = -sum_i y_i log p_i

i 모든 요소를 y 반복하는 p경우 의 경우 CrossEntropyWithSoftmax()입력 p 매개 변수 z 에서 다음과 같이 계산됩니다.

p = Softmax (z)

Description

이러한 함수는 두 확률 분포의 교차 엔트로피 를 계산합니다. 범주 간 엔트로피는 단일 클래스 분류에 대한 가장 일반적인 학습 기준(손실 함수)이며, 여기서 y 범주 레이블을 원 핫 벡터로 인코딩합니다. 또 다른 사용은 확률 분포 회귀에 대한 손실 함수로, 일치하는 y 대상 분포 p 입니다.

손실 함수로 사용되는 경우 CNTK SGD 프로세스는 미니배치에 있는 모든 개별 샘플의 교차 엔트로피 값을 합산하고 전체 epoch에 대해 이러한 항목을 집계하여 epoch당 손실을 계산합니다. 그러면 샘플당 평균 손실 수와 S 샘플 수가 다음과 L 같은 형식 L * S 으로 보고됩니다. 예를 들어 -1.213 * 3600000평균 -1.213의 엔트로피 간 손실이 평균 3,600,000개 샘플에 비해 평균이 됨을 의미합니다.

CrossEntropyWithSoftmax() 는 특정 형식의 Softmax를 활용하는 범주 간 엔트로피의 가장 일반적인 사용 사례에 대한 최적화입니다. 정규화된 확률 대신, "logit"라고도 하는 정규화되지 않은 버전의 Log Softmax와 동일한 Softmax 연산에 대한 인수를 입력으로 허용합니다. 이는 범주 간 엔트로피 기준을 계산하는 CNTK 권장되는 방법입니다.

범주 간 엔트로피는 1을 포함하는 둘 이상의 위치를 포함하는 다중 클래스 레이블 y 에 적합한 손실 함수가 아닙니다. 이 경우 손실이 있는 Softmax 대신 사용하는 Sigmoid() 것이 Logistic() 좋습니다. 이 문서도 참조하세요.

대체 정의

CrossEntropyWithSoftmax()는 현재 제한 사항이 있는 CNTK 기본 형식입니다. 보다 유연하고 권장되는 대안은 수동으로 다음과 같이 정의하는 것입니다.

CrossEntropyWithSoftmax (y, z) = ReduceLogSum (z) - TransposeTimes (y, z)

스파스 레이블

스파스 레이블(예: 읽기 사용(./Inputs#input)){..., sparse=true}을 사용하여 Input크로스 엔트로피를 계산하려면 위의 대체 양식을 사용해야 합니다.

1위를 차지한>텐서의 소프트맥스

1순위>의 텐서에 적용할 때(예: 2D 그리드에서 위치를 결정하는 작업)를 계산 CrossEntropyWithSoftmax() 하려면 다른 대체 양식을 사용해야 합니다.

CrossEntropyWithSoftmax (y, z, axis=None) = ReduceLogSum (z, axis=axis) - ReduceSum (y .* z, axis=axis)

또한 이 양식을 사용하면 특정 축을 따라 Softmax 연산만 적용할 수 있습니다. 예를 들어 입력 및 레이블에 셰이프 [10 x 20]가 있고 Softmax를 각각 20개의 열에 대해 독립적으로 계산해야 하는 경우 지정 axis=1합니다.

예제

labels = Input {9000}
...
z = W * h + b
ce = CrossEntropyWithSoftmax (labels, z)
criterionNodes = (ce)

스파스 레이블과 동일합니다.

labels = Input {9000, sparse=true}
...
z = W * h + b
ce = ReduceLogSum (z) - TransposeTimes (labels, z)
criterionNodes = (ce)

로지스틱{}, WeightedLogistic{}

로지스틱 손실 함수를 계산합니다.

Logistic (y, p)
WeightedLogistic (y, p, instanceWeight)

매개 변수

  • y: 접지 레이블, 0 또는 1
  • p: 클래스의 후방 확률 1

반환 값

다음과 같이 정의된 (가중치) 로지스틱 손실을 계산합니다.

ll = -sum_i { y_i * log(p_i) + (1-y_i)*log(1-p_i))} * weight 

(여기서 Logistic()무게는 1)입니다.

Description

이 함수는 로지스틱 손실 함수입니다.

Logistic (y, Softmax (z)) 는 2클래스 문제와 동일합니다 CrossEntropyWithSoftmax (y, z) . 여기서 두 가지(보완적인) 지상 진리 레이블 중 하나만 지정 Logistic()됩니다.

다중 클래스 분류자 학습에 대한 이 문서 도 참조하세요.

예제

multiLabels = Input {1000}                     # 0 or 1 for each value
...
p = DenseLayer {1000, activation=Sigmoid} (h)  # element-wise predictor for 1000 values
ll = Logistic (multiLabels, p)
trainingCriterion = (ll)

ClassificationError{}

범주 레이블 예측에 대한 오류 비율을 계산합니다. 이진 레이블의 경우 해밍 손실을 사용할 수 있습니다.

ClassificationError (y, z)

매개 변수

  • y: 원 핫 형식의 범주 레이블
  • z: 예측 점수의 벡터(예: 로그 확률)

반환 값

최대값 z 이 1인 위치에 y 있으면 1이고, 그렇지 않으면 0이면 전체 미니배치를 합산합니다.

Description

이 함수는 각 요소가 클래스 또는 범주의 일치 점수를 나타내는 후방 확률, logits 또는 기타 일치 점수의 벡터를 허용합니다. 이 함수는 가장 높은 점수 매기기 위치가 1을 포함하는지 테스트하여 가장 높은 점수 매기기 클래스가 레이블 입력 y에서 나타내는 클래스와 같은지 여부를 결정합니다.

평가 조건으로 사용되는 경우 SGD 프로세스는 Epoch에 대한 모든 값을 집계하고 평균(예: 오류율)을 보고합니다.

ClassificationError() 스파스 레이블과 함께 사용할 수 없습니다.

참고: 버전 1.7 이전의 CNTK 이 작업을 호출ErrorPrediction()했습니다. 이름은 계속 사용할 수 있지만 더 이상 사용되지 않습니다.

예제

labels = Input {9000}
...
z = W * h + b
errs = ClassificationError (labels, z)
evaluationNodes = (errs)