(* DeepLearning from scratch2 서적을 학습한 후 정리한 내용임 )

 

일반적으로 학습단계의 특정 시점에서 신경망의 성능을 나타내는 척도로 손실(loss)을 사용한다.

손실은 학습시 주어진 정답 데이터와 신경망이 예측한 결과를 비교하여 예측이 얼마나 나쁜가를 산출한 단일값이다.

 

다중 클래스 분류 신경망에서는 손실을 구하는 함수로 교차 엔트로피 오차(Cross Entropy Error)를 이용한다

앞 절에서 이야기 된 TwoLayerNet 모델에 SoftMax계층(SoftMax함수처리계층)과 Cross EntropyError계층(SoftMax처리결과와 정답데이터를 이용해 Cross Entropy Error를 계산하는 계층)을 추가한다.

 

추가된 계층을 포함한 구조도는 아래와 같다.

X는 입력 데이터, t는 정답 레이블, L은 손실을 의미한다.

 

소프트맥스 함수 공식은 다음과 같다.

위 식은 출력이 총 n개일 때, k번째 출력 Sk를 구하는 식이다. 즉, Sk는 k번째 클래스에 해당하는 소프트맥스 함수의 출력이다.

소프트맥스 함수 결과는 0.0이상 1.0 이하의 값을 가지는 실수이며 모든 출력들 n개의 S값을 합하면 1.0이 된다. 따라서 소프트맥스 함수 결과값을 확률로 해석할 수 있다.

 

손실값을 얻기 위해서는 소프트맥스 함수의 결과값을 입력으로 하여  Cross Entropy Error 함수 계산을 해야 한다.

공식은 아래와 같다.

여기서 tk는 k번째 클래스에 해당하는 정답레이블이다. log는 e를 밑으로 하는 로그이다.

또한 정답레이블은 t = [0, 0, 1]과 같은 원핫 벡터로 표기한다.

 

원핫벡터란 단 하나의 원소만 1이고 나머지 원소들은 모두 0인 벡터를 의미한다.

보통 신경망이 추론 결과가 숫자가 아닌 경우 결과로 나올 수 있는 모든 경우의 결과 개수만큼을 원소 개수로 가지는 벡터를 구성하고 각 경우의 결과와 매칭하여 원소 하나만 1로 하고 나머지는 0으로 하는 벡터를 구성한다. 이런 방식으로 구성된 벡터를 원핫벡터라고 한다. 예를 들면 결과값이 a, e, g, z 알파벳 4개 중 하나를 추론 해야 하는 신경망을 구성한다고 할 경우 결과 개수는 4개 (클래스 개수가 4개) 이므로 원소 개수가 4인 벡터를 구성하되 각 알파벳과 매칭되는 벡터들을 구성한다.

즉,

a = [1, 0, 0, 0]

e = [0, 1, 0, 0]

g = [0, 0, 1, 0]

z = [0, 0, 0, 1]

이렇게 구성된 벡터들을 원핫벡터(one hot vector)라고 하고 이런 처리 방식을 원핫 인코딩(one hot encoding) 이라고 한다

위의 Cross Entropy Error 공식을 입력 데이터가 N개 인 경우로 확장시키면 아래의 공식으로 구성할 수 있다.

여기서 tnk는 n번째 입력데이터에 대한 k번째 클래스 정답 원핫벡터를 의미한다

ynk는 n번째 입력데이터를 이용해 신경망 학습한 결과로 SoftMax 함수계산과정을 거쳐 나온 결과의 k번째 결과이다

 

N개의 입력데이터를 이용한 Cross Entropy Error 공식은 결국 각각의 입력 데이터에 대한 손실함수 결과를 N개만큼 합산하여 N으로 나눠 평균낸 것이다.

 

이 과정을 파이썬으로 구현할 때 Softmax with Loss 계층 하나로 구현한다.

 

+ Recent posts