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보다 크면서 가장 큰 확률을 가진 노드를 정답으로 예측하는 방법이다.
위의 예시는 잘 예측한 경우이다.
'딥러닝(deep learning) > 인공신경망(Neural Network)' 카테고리의 다른 글
tensorflow(텐서플로우) reducde_mean 의미 (0) | 2019.08.08 |
---|---|
텐서플로우(tensorflow) 설치 (0) | 2019.08.07 |
real data processing (0) | 2019.08.05 |
sigmoid의 한계 ( vanishing gradient ) (0) | 2019.08.01 |
오차 역전파의 문제 (0) | 2019.07.31 |