구체적으로 설명하면, 정수 레이블 0인 샘플의 경우 [1, 0, 0] 값을 얻습니다. 정수 레이블이 1인 샘플의 경우 [0, 1, 0] 값을 얻는 식입니다. 간단하고 명확한 원-핫 인코딩의 예시입니다. 원-핫 인코딩은 정수 레이블을 레이블에 해당하는 인덱스 위치가 1이고 나머지는 모두 0인 벡터로 바꿉니다. 벡터의 길이는 가능한 범주 개수와 동일합니다. 이 벡터에는 정확히 하나의 1만 있기 때문에 이 인코딩 방법을 ‘원-핫(one-hot)’이라고 부릅니다.
이 인코딩이 불필요하게 복잡해 보일 수 있습니다. 하나의 숫자가 할 수 있는 범주를 왜 세 개의 숫자로 표현할까요? 간단하고 경제적인 단일 정수 인덱스 인코딩 대신 이런 방식을 선택하는 이유는 무엇일까요? 두 가지 각도에서 이를 이해해 보겠습니다.
첫째, 신경망은 정수 대신 연속적인 실수 값을 출력하는 것이 훨씬 쉽습니다. 하지만 실수 출력에 반올림을 적용하는 것은 어울리지 않습니다.32 훨씬 우아하고 자연스러운 방법은 신경망의 마지막 층이 몇 개의 실수를 출력하는 것입니다. 이진 분류에서 사용했던 시그모이드와 비슷한 활성화 함수를 사용하여 각 실수를 [0 ,1] 사이의 범위를 가지도록 만듭니다. 각 숫자는 입력 샘플이 해당하는 클래스에 속할 확률을 모델이 추정한 값입니다. 이 때문에 원-핫 인코딩을 사용합니다. 이는 이 세 개의 확률 점수에 대한 ‘정답’으로, 모델이 훈련 과정에서 학습할 목표가 됩니다.
둘째, 범주를 정수로 인코딩하면 암묵적으로 클래스 사이에 순서를 매기게 됩니다. 예를 들어 setasa를 0, versicolor를 1, virginica를 2로 레이블할 수 있습니다. 하지만 이런 식의 순서는 인공적이고 정당하지 않습니다. 예를 들어 이런 순서 레이블링은 setosa가 virginica보다 versicolor에 더 가깝다는 것을 의미하지만, 이는 사실이 아닙니다. 신경망은 실수를 다루며 곱셈과 덧셈 같은 수학 연산을 기반으로 합니다. 따라서 숫자의 크기와 순서에 민감합니다. 범주가 하나의 숫자로 인코딩되면 신경망이 학습해야 할 추가적인 비선형 관계가 만들어집니다. 반대로 원-핫 인코딩된 범주는 어떤 순서 정보도 가지고 있지 않으며, 따라서 신경망의 학습 능력에 부담을 주지 않습니다.
9장에서 보겠지만, 원-핫 인코딩은 신경망의 출력 타깃뿐만 아니라 입력에 있는 범주형 특성에도 사용됩니다.