여기에 답은 없습니다 ㅠㅅㅠ..
Multi-class classification에서는 binary classification을 사용하여 해결할 수 있다.
예를 들어 A, B, C 로 분류할 때 A or not / B or not / C or not 3개의 Linear function 로 분류 가능하다.
Linear Regression 을 사용하여 Binary Classification을 구할 때
H(x) = Wx+b 에서 함수 값을 0 <= H(x) <= 1 로 정규화시키기 위해서
활성함수인 Sigmoid Function을 사용한다.
- 활성함수
어떠한 전기 신호를 일정 기준 이상이면 1, 이하면 0으로 판단하여 보내주는 것, 즉 그 신호를 결정해주는 역할을 한다.
- Sigmoid Function
단일 퍼셉트론에서 사용했던 활성함수이다. 입력을 0과1 사이로 정규화해준다. backpropagation에서 NN layer를 거칠 때마다 작은 미분값이 곱해져서, Gradient Vanishing을 야기한다. 여러 개의 layer를 쌓으면 신경망 학습이 잘 되지 않는 원인이 되기 때문에 Deep layer에서는 활성함수로 사용을 권하지 않는다.
Binary Classification과 마찬가지로 Multi-class classification에서도 마찬가지로 sigmoid를 사용할 수 있다.
아래와 같이 예측된 값이 a->2.0, b->1.0, c->0.1이 나온다면 a로 분류해주어야 한다.
하지만 sigmoid를 태우면 a와 b 모두 1이 나오게 되어서 분류가 실패하게 된다.
따라서 sigmoid 대신 Softmax function을 사용하게 된다.
softmax function은 모든 값이 0~1사이이고 전체 합이 1로써 확률 정규화를 시켜준다.
그리고 softmax function을 통과한 값이 가장 큰 것만을 1로 만드는 one-hot encoding을 해준다.
이런 과정을 통해 a로 분류하게 된다.
차근차근 순서대로 따라왔을 때는 이 과정이 이해가 되었다.
그런데 문득 이런 생각이 들었다.
softmax function을 통과하지 않아도 a의 예측값인 2가 가장 크다.
softmax function을 통과시키지 않은 이전의 예측값에서 one-hot encoding을 했어도 동일하게 a를 예측할 수 있다.
그럼 왜 굳이 softmax function을 통과시킨 다음에 one-hot encoding을 하는 것일까 ?
아주 살짝쿵 이해한 바로는 softmax는 아까 말했듯이 전체 합이 1로써 확률 정규화를 시켜준다.
학습을 시킬 때 Loss function을 통해 오차를 구하고 Gradient Descent를 이용해 오차가 Global minima에 도달할 수 있는 방향으로 학습시킨다.
따라서 맞은 값은 오차를 작게 만들고 틀린 값은 오차를 크게 만들어서 학습을 더 잘할 수 있도록 도와준다.
라고 생각했는데 쓰다가 잘 모르겠어서 9월에 임시저장시켜뒀던 글.........아직도 잘 모르겠다...............
다음기회에 좀더 생각해보고 글을 수정해봐야지......................
'study > 시행착오' 카테고리의 다른 글
[Node.js] npm run start 시 EACCES 오류 해결 (0) | 2023.12.09 |
---|---|
bazel 설치 - Installing Bazel on Windows(bazel version) (0) | 2021.05.10 |
jetson nano - balenaEtcher 오류 (4) | 2021.01.11 |
[unity] Button Onclick() No Function 문제 (0) | 2020.08.22 |