단순한 이진 분류아닌 class가 여러개인 분류를 다중분류라고 한다.
이때 class 개수와 경계 직선의 개수는 같아야 한다.
가령 분류영역이 3개면 각 꼭지점이 만나는 채로 직선이 3개 있어야한다..
꼭짓점은 왜 만나야 할까?
3개의 꼭짓점이 만나지 않으면 위의 이미지 처럼 분류를 할 수 없는 영역이 발생한다.
그래서 다중 class 분류에 기본 계산은..
분류 class가 3개여서 3개의 예측 직선을 가지고 있다면,.
해당 분류 직선에 데이터를 집어넣은 값이
나머지 분류 직선에 넣은 값보다 항상 크다면..
이 데이터는 k번째 class에 속한다고 판단한다.
이처럼 다중 class 분류에서는 여러 개의 분류 직선을 판단해야 하므로
다음과 같은 행렬이 필요하다.
첫 번째 행렬에는 각 행에 회귀 직선의 모수가 입력되어 있고
두 번째 행렬에는 입력할 data가 1열로 있어야 한다.
이 행렬을 다음과 같이 표현한다.
예시를 들어보자
예측해야 할 class의 종류가 4개라 하자
4개의 회귀 직선에 하나의 데이터를 각각 입력하여 열 벡터를 만든다
결과로 열벡터에는 3번 class 분류기에 집어넣은 값(20)이 가장 크기 때문에
해당 데이터는 3번 class에 속한다고 예측할 수 있게 되는 것이다.
현재 데이터의 분류 결과 정답 class역시 3번 class 였다면,
정답 값으로 3번 class를 어떻게 표현할 것인가?
3번 class는 이처럼 표현하면 된다!
이러한 방식으로 클래스를 표현하는 방식이 원 핫 인코딩
원 핫 인코딩방식은 class를 이런 식으로 표현하면 된다..
그래서 학습은 어떻게 진행하나?
여기서부터는 로지스틱 회귀와 방법과 같다.
로지스틱 회귀에서는 어떻게 했었나?
0.5를 기준으로 그 값이 컸으면 1번 class로 예측 작으면 0번 class로 예측하고
정답 값과 비교했었는데..
한 번만 예측에 실패하면 목적함수인 크로스 엔트로피는 무한대로 가고
유의미한 학습 이 불가능 해졌었다.
구체적인 학습 진행 방식을 살펴보자
이 값을 계단 함수에 의해 0과 1로 인코딩 한다 생각해보자.
이렇게 회귀 직선에 넣은 값을 1과 0사이 범위로 인코딩하는 함수들을
활성화 함수라 부른다.
이제 이런 계단함수를 활성화 함수로 매핑하면
예측결과를 다음과 같이 쓸 수 있게 된다.
(19,20,3은 0보다 커서 1, -4는 0)
이 벡터를 정답 class인 아래 벡터와 비교하면 ..
0인 부분을 1로 예측하는 순간 오차는 과장되고
한 번만 예측에 실패하면 목적함수인 크로스 엔트로피는 무한대로 가고
이러한 크로스 엔트로피를 최소화하는 학습을 유의미하게 진행할 수 없게 된다..
따라서 확률로 매핑하는 과정이 필요한데 ..
활성화 함수로 시그모이드 함수를 활용할 때..
그 결과로 다음과 같은 결과가 출력된다 가정해보자
이때 여전히 정답 class(3번 class)가 아래 벡터와 같다하면
3번 class에 해당하는 예측 값(0.9)이 더욱이 1과 가깝게 하는 방향으로 모델학습이 이루어질 것이다.
그런데 문제는 학습된 후 모델이 출력하는 예측결과가 다른 class에 대한 확률도 높게 출력할 수 있다.
가령
이런식으로 나오게 학습이 되었다고 가정했을때..
분명 정답 class (3번 class)와는 오차가 (1-0.9) 0.1인데
1번 class일 확률도 무려0.9다.
즉 정답 class에 대해 0이었던 부분은 학습이 이루어지지 않는다.
새로운 활성화 함수
그래서 다중 class에서는 활성화함수로 softmax함수를 사용합니다.
쉽게 말해 0~1사이의 확률 값으로 매핑하되
최고값에 가장 큰 값을 매핑하고 작은값은 작게 매핑하는 함수,,
그래서 데이터를 각각의 분류직선에 넣어 나온값을 softmax함수에 집어 넣으면
정답 class에서는 1에 가깝게 나머지 class에서는 0에 가까운 확률로 매핑하게 된다.
이 매핑된 값은 확률 이므로 이제
목적함수인 크로스엔트로피(cross-entropy)를
LSM(Least square method ) 하는 방식으로 학습 할 수 있게 된다.