앞의 출력 결과에서 볼 수 있듯이 가중치 개수(83개)가 작은 매우 간단한 모델입니다. 출력 크기 [null, 3]은 타깃의 원-핫 인코딩에 해당합니다. 마지막 층에서 사용하는 소프트맥스(softmax) 활성화 함수는 다중 분류 문제를 위한 함수입니다. 소프트맥스의 수학적 정의는 다음과 같은 의사 코드로 쓸 수 있습니다.
softmax([x1, x2, ..., xn]) = [exp(x1) / (exp(x1) + exp(x2) + ... + exp(xn)), exp(x2) / (exp(x1) + exp(x2) + ... + exp(xn)), ..., exp(xn) / (exp(x1) + exp(x2) + ... + exp(xn))]
앞에서 보았던 시그모이드 활성화 함수와 다르게 소프트맥스 활성화 함수는 원소별로 적용되지 않습니다. 입력 벡터의 원소마다 다른 모든 원소에 의존하여 변환되기 때문입니다. 구체적으로 입력의 각 원소는 자연 지수 값으로 변환됩니다(exp 함수는 밑이 e = 2.718인 지수 함수입니다). 그다음, 이 지수 값을 다른 모든 원소의 지수 값의 합으로 나눕니다. 이렇게 하면 어떻게 될까요? 첫째, 모든 숫자를 0과 1 사이의 범위로 만듭니다. 둘째, 출력 벡터의 원소를 모두 더하면 1이 됩니다. 이는 바람직한 성질입니다. 왜냐하면 1) 출력을 클래스에 해당하는 확률 점수로 해석할 수 있고 2) 범주형 크로스 엔트로피(categorical cross entropy) 손실 함수에 사용하기 위해 출력이 이 성질을 만족해야 하기 때문입니다. 셋째, 이 정의는 입력 벡터의 큰 원소를 출력 벡터의 큰 원소로 매핑합니다. 구체적인 예를 들기 위해 다음과 같은 벡터를 생성하는 마지막 밀집 층의 행렬 곱셈과 편향 덧셈을 생각해 보죠.
[-3, 0, -8]