본문 바로가기
딥러닝(deep learning)/인공신경망(Neural Network)

one hot encoding

by 바코94 2019. 8. 6.

MNIST 기준으로 설명함. 정답이 0부터 9까지 10개 이기 때문에 10개로 one hot encoding을 구현.

 

8이 정답인 경우 -> [0,0,0,0,0,0,0,0,1,0]

정답이 되는 인덱스만 1로 처리하는 방식이다.

 

실제 구현은 다음과 같이 함.

target_data = np.zeros(o_nodes) + 0.01

target_data[label] = 0.99

 

정답데이터가 확률을 의미하기 때문에 1과 0은 비현실적이다. 1과 0에 근사한 값을 one hot encoding representation에 이용한다. 0.99나 0.9999나 1과 가까운 값을 사용.

cross entropy에서 두 변이 다 남아 있긴 하지만 loss가 크게 달라지진 않기 때문에 위와 같이 0, 1 대신에 근사한 소수값을 사용해도 된다고 한다.

 

 

출력층 노드를 여러개 사용하게 된 배경.

출력층 노드가 1개 일 때에는 시그모이드의 출력값이 0과 1사이기 때문에 확률로 0.5를 기준으로 2가지의 정답을 구분할 수 있었다.

 

정답이 10개가 되었을때 0.1을 기준으로 10개를 구분하면 시그모이드의 확률의 개념이 사라져 버린다.

즉 0.3~0.4은 0이될 확률에 가까운 것인데 이것을 정답이 4라고 하기에는 시그모이드의 사용이 무색해진다.

 

이를 해결하는 방법이 one hot encoding 방식이다.

정답의 개수만큼 출력층에 노드를 두어 시그모이드 출력을 준다. 각 출력층은 독립적임.

 

맞은 경우

정답 [0.01 , 0.99, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01

예측 [0.1,     0.6,  0.4,   0.1,   0.1,  0.3,   0.3,   0.1,   0.1,  0.1

 

출력층 노드에서 0.5보다 크면서 가장 큰 확률을 가진 노드를 정답으로 예측하는 방법이다.

위의 예시는 잘 예측한 경우이다.