Main Content

crossentropy

설명

예제

perf = crossentropy(net,targets,outputs,perfWeights)는 주어진 목표값과 출력값, 그리고 선택적으로 지정하는 성능 가중치와 기타 파라미터를 사용하여 신경망 성능을 계산합니다. 이 함수는 극도로 부정확한 출력값(y값이 1-t에 가까운 경우)에 높은 벌점을 적용하고 상당히 정확한 분류(y값이 t에 가까운 경우)에 매우 작은 벌점을 적용하여 결과를 반환합니다. 교차 엔트로피를 최소화하면 분류기의 성능이 좋아집니다.

각 출력값-목표값 요소 쌍의 교차 엔트로피는 ce = -t .* log(y)로 계산됩니다.

개별 값의 평균, 즉 perf = sum(ce(:))/numel(ce)는 집계 교차 엔트로피 성능의 총합입니다.

특수한 경우(N = 1): 출력값이 오직 1개의 요소로만 이루어진 경우, 출력값과 목표값은 이진 인코딩으로 해석됩니다. 즉, 1-of-N 인코딩에서는 클래스가 2개 이상이 되는 반면 이진 인코딩에서는 목표값이 0과 1인 2개의 클래스만 있습니다. 이진 교차 엔트로피의 표현식은 ce = -t .* log(y) - (1-t) .* log(1-y) 입니다.

perf = crossentropy(___,Name,Value)는 지정된 이름-값 쌍 인수에 따른 사용자 지정을 지원합니다.

예제

모두 축소

이 예제에서는 교차 엔트로피와 0.1 정규화를 사용하여 분류 신경망을 설계하고 전체 데이터셋에 대한 성능을 계산하는 방법을 보여줍니다.

[x,t] = iris_dataset;
net = patternnet(10);
net.performParam.regularization = 0.1;
net = train(net,x,t);

{"String":"Figure Neural Network Training (24-Jul-2022 21:27:51) contains an object of type uigridlayout.","Tex":[],"LaTex":[]}

y = net(x);
perf = crossentropy(net,t,y,{1},'regularization',0.1)
perf = 0.0278

이 예제에서는 신경망이 훈련 중에 crossentropy를 사용하도록 설정하는 방법을 보여줍니다.

net = feedforwardnet(10);
net.performFcn = 'crossentropy';
net.performParam.regularization = 0.1;
net.performParam.normalization = 'none';

입력 인수

모두 축소

신경망으로, network 객체로 지정됩니다.

예: net = feedforwardnet(10);

신경망 목표값으로, 숫자형 값으로 구성된 행렬 또는 셀형 배열로 지정됩니다. 신경망 목표값은 원하는 출력값을 정의하며, 요소가 N개인 벡터 Q개로 구성된 N×Q 행렬, 또는 각 요소가 Ni×Q 행렬인 M×TS 셀형 배열로 지정될 수 있습니다. 각각의 경우에서 N 또는 Ni는 벡터 길이를, Q는 샘플 개수를, M은 여러 개의 출력값을 갖는 신경망의 신호 개수를, TS는 시계열 데이터의 시간 스텝 개수를 나타냅니다. targetsoutputs와 차원이 같아야 합니다.

목표 행렬의 열은 해당 열 벡터가 나타내는 클래스의 위치만 1이고 나머지는 0으로 구성됩니다. N = 1인 경우에는 이진 인코딩을 위한 교차 엔트로피가 사용되고, 그 밖의 경우에는 1-of-N 인코딩을 위한 교차 엔트로피가 사용됩니다. NaN 값을 사용하여 알 수 없거나 무관한(don't-care) 출력값을 나타낼 수 있습니다. NaN 목표값의 성능은 무시됩니다.

데이터형: double | cell

신경망 출력값으로, 숫자형 값으로 구성된 행렬 또는 셀형 배열로 지정됩니다. 신경망 출력값은 요소가 N개인 벡터 Q개로 구성된 N×Q 행렬, 또는 각 요소가 Ni×Q 행렬인 M×TS 셀형 배열로 지정될 수 있습니다. 각각의 경우에서 N 또는 Ni는 벡터 길이를, Q는 샘플 개수를, M은 여러 개의 출력값을 갖는 신경망의 신호 개수를, TS는 시계열 데이터의 시간 스텝 개수를 나타냅니다. outputstargets와 차원이 같아야 합니다.

알 수 없는 출력값을 표시하기 위해 출력값에 NaN이 포함될 수 있습니다. 이는 입력값에(마찬가지로 알 수 없거나 무관한(don't-care) 값을 나타내는) NaN이 있어 생기는 결과일 것입니다. NaN 출력값의 성능은 무시됩니다.

일반적인 경우(N>=2): 출력 행렬의 열은 클래스 소속 여부에 대한 추정값을 나타내며, 총합은 1이 되어야 합니다. softmax 전달 함수를 사용하여 이러한 출력값을 생성할 수 있습니다. patternnet을 사용하면 소프트맥스 출력 계층에 교차 엔트로피 성능을 사용하도록 이미 설정된 신경망을 만들 수 있습니다.

데이터형: double | cell

성능 가중치로, 벡터 또는 숫자형 값으로 구성된 셀형 배열로 지정됩니다. 성능 가중치는 0과 1 사이의 값을 사용하여 각 목표값에 연결된 각 성능 값의 중요도를 정의하는 선택적 인수입니다. 성능 값 0은 무시해야 하는 목표값을 나타내고, 1은 보통의 중요도로 취급해야 하는 목표값을 나타냅니다. 0과 1 사이의 값을 사용하여 목표값에 대한 상대적인 중요도로 취급할 수 있습니다.

성능 가중치는 다양한 용도로 사용됩니다. 분류 문제에서는 어떤 분류 또는 오분류가 상대적으로 더 큰 이익(또는 비용)을 야기하는지 나타낼 수 있어 유용합니다. 또한, 다른 시간 스텝에 비해 특정 시간 스텝(예: 마지막 시간 스텝)에서 올바른 출력값을 얻는 것이 더 중요한 시계열 문제에서도 유용할 수 있습니다. 성능 가중치는 신경망에서 목표값이 가장 정확하게 알려진 샘플을 최적의 방법으로 피팅하고 덜 정확하다고 알려진 목표값에는 상대적으로 적은 중요도를 부여하는 용도로도 사용할 수 있습니다.

perfWeightstargetsoutputs와 같은 차원을 가질 수 있습니다. 또는 성능 가중치의 각 차원은 targetsoutputs의 차원과 일치할 수도 있고, 1이 될 수도 있습니다. 예를 들어, targets가 요소가 N개인 벡터의 샘플 Q개를 정의하는 N×Q 행렬인 경우, 성능 가중치는 각 목표값마다 서로 중요도가 다름을 나타내는 N×Q가 될 수도 있고, 목표의 행마다 서로 중요도가 다름을 정의하는 N×1이 될 수도 있습니다. 또는 각 샘플마다 서로 중요도가 다름을 나타내는 1×Q가 될 수도 있고, 모든 목표값의 중요도가 동일함을 나타내는 스칼라 1(즉, 1×1)이 될 수도 있습니다.

마찬가지로, outputstargets가 행렬로 구성된 셀형 배열인 경우, perfWeights는 동일한 크기를 갖는 셀형 배열, 각 시간 스텝의 상대적 중요도를 나타내는 행 셀형 배열, 각 신경망 출력값의 상대적 중요도를 나타내는 열 셀형 배열, 단일 행렬로 구성된 셀형 배열, 또는 행렬일 수 있습니다. 마지막 2가지 경우에는 모든 행렬이 동일한 중요도 값을 갖습니다.

모든 문제에서, perfWeights 값이 {1}(디폴트 값) 또는 스칼라 1이면 성능이 모두 동일한 중요도를 가짐을 나타냅니다.

데이터형: double | cell

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'normalization','standard'는 입력값과 목표값이 (-1,+1) 범위로 정규화되도록 지정합니다.

가중치/편향 값에 기인한 성능의 비율로, 0(디폴트 값)과 1 사이의 double형으로 지정됩니다. 값이 클수록 가중치가 큰 신경망에 벌점이 적용되며 신경망 함수에 과적합이 발생하지 않을 확률이 커집니다.

예: 'regularization',0

데이터형: single | double

출력값, 목표값 및 오차에 대한 정규화 모드로, 'none', 'standard' 또는 'percent'로 지정됩니다. 'none'을 지정하면 정규화가 수행되지 않습니다. 'standard'를 지정하면 출력값과 목표값이 (-1, +1)로 정규화되고, 이에 따라 오차가 (-2, +2) 범위로 정규화됩니다.'percent'를 지정하면 출력값과 목표값이 (-0.5, 0.5)로, 오차가 (-1, 1)로 정규화됩니다.

예: 'normalization','standard'

데이터형: char

출력 인수

모두 축소

신경망 성능으로, (0,1) 범위의 double형으로 반환됩니다.

버전 내역

R2013b에 개발됨

참고 항목

| | | | |