일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- DynamicProgramming
- Deep learning
- 백준
- 정렬
- 알고리즘
- 강의정리
- 강의자료
- Natural Language Processing with PyTorch
- rnn
- AI
- classifier
- Hypothesis
- 딥러닝
- Softmax
- loss
- 머신러닝 기초
- pytorch
- 파이토치
- 머신러닝
- 파이썬
- Python
- BAEKJOON
- machine learning
- 홍콩과기대김성훈교수
- DP
- 스택
- 자연어처리
- tensorflow
- MSE
- Cross entropy
- Today
- Total
개발자의시작
[Pytorch] 06-1 Softmax Classification 본문
이 글은 모두를위한딥러닝 시즌2 https://github.com/deeplearningzerotoall/PyTorch 을 정리한 글입니다.
GitHub - deeplearningzerotoall/PyTorch: Deep Learning Zero to All - Pytorch
Deep Learning Zero to All - Pytorch. Contribute to deeplearningzerotoall/PyTorch development by creating an account on GitHub.
github.com
( http://hunkim.github.io/ml/ 참고)
모두를 위한 머신러닝/딥러닝 강의
hunkim.github.io
여러 개의 클래스가 있을 때 이것을 예측하는 Multinomial Classification, 그중에서도 가장 많이 사용하는 Softmax Classification에 대해 알아본다.
이전에 Logistic Regression이라는 것을 공부하였는데, 기본적으로 출발은 H(X) = WX와 같이 Linear 한 Hypothesis를 가지고 시작되었다. 하지만 이와 같은 형태는 리턴하는 값이 어떤 실수의 형태가 되기 때문에 두 개 중에 하나를 고르는 Binary Classificaion, Logistic Classification 등에 적합하지 않았음. 그래서 생각해 낸 방법이 H(X)를 하나의 Z로 놓고, g(Z)라는 함수가 있고 이 함수가 큰 값을 압축하여 0이나 1 사이의 값으로 나올 수 있도록 하는 방법을 생각한다. Sigmoid 함수를 사용해서 1과 0 사이로 압축을 하고 최종 Hypothesis는 g(H(X))와 같이 나타낸다.
Logistic regression이 하는 일을 직관적으로 살펴보기 위해 x1, x2의 값을 가지고 있는 데이터들이 네모와 엑스표로 구분되어 있는 데이터가 있다고 가정하자. "W를 학습한다" 또는 "Logistic Classification 학습시킨다"는 것은 두 가지(네모, 엑스)를 구분하는 선을 찾아내는 것이다.
같은 아이디어로 Multinomial classification에 적용할 수 있다. Multinomial이라는 것은 여러 개의 클래스(class)가 있다는 뜻이다. 위의 데이터처럼 데이터가 주어지고 학점을 부여할 때 레이블이 세 가지 이상 주어지는 경우이고 이를 그래프로 나타내면 우측과 같다.
Binary Clasification 즉 두 개의 클래스만 분류하는 모델을 가지고도 Multinomial Classification의 구현이 가능하다. 위의 그림처럼 "A 이거나 아니거나", "B 이거나 아니거나", "C 이거나 아니거나"를 각각 구분하는 모델들을 학습시켜서 충분히 구현이 가능하다.
아래와 같이 똑같은 모델이지만 다른 역할을 하는 세 개의 Classifier를 통해 구현할 수 있다.
각각의 Classifier들을 살펴보면 다음과 같이 행렬로 나타낼 수 있다. 세 개의 독립된 형태의 벡터를 가지고 계산을 해서 예측을 할 수 있다.
하지만, 독립적으로 구현 및 계산하는 것은 복잡하다. 그래서 이것을 하나로 합치고 다음과 같은 형태로 나타 낼 수 있다. 구분을 하기 위해서 W를 WA, WB, WC와 같이 나타내고 계산하면 위의 그림과 나타낼 수 있다. 연산의 결과로 우리가 원하는 가설 HA(X), HB(X), HC(X)를 각각 독립된 형태로 얻을 수 있다. 이전 그림에서는 Sigmoid를 처리해야 하는데, 각각의 가설에 Sigmoid를 적용하면 되는데 이와 같은 방식보다 더 효율적으로 처리할 수 있는 방법이 있다.
X를 입력으로 주면 A가 될 확률의 값, B가 될 확률의 값, C가 될 확률의 값을 각각 출력하게 될 것이다. 위의 예를 보면 A라고 예측한 값이 2.0으로 가장 큰 값을 가지기 때문에 답은 A에 해당하지만, 우리가 원하는 형태는 Sigmoid를 써서 0~1 사이의 값으로 나타내는 것이다.
정리를 해보면 Logistic Classifier를 통해 계산을 하게 되면 어떤 입력값에 대해 벡터(Y)를 얻게 된다. 우리가 원하는 것은 0과 1 사이의 값으로 나타내는 것이고, 모두를 더하면 1이 되는 값을 얻게 된다면 매우 좋을 것이다.
이것이 바로 Softmax라는 함수이다. 위의 그림과 같이 세 개 또는 n개의 값을 softmax에 넣게 되면 다음과 같은 특징을 갖는다. 첫 번째로 0~1 사이의 값을 얻을 수 있다. 두 번째로 모든 값을 합하면 1이 된다. 즉, 각각을 확률로 볼 수 있다.
0.7, 0.2 0.1과 같은 값을 얻을 수 있고 이를 각각의 확률로 볼 수 있다. 즉, A가 나올 확률은 0.7, B가 나올 확률은 0.2, C가 나올 확률은 0.1이라고 할 수 있다. 그리고 그중 하나만 골라서 출력하기를 원한다면 제일 큰 값은 1로 하고 나머지는 0으로 표현함으로써 가능하고, argmax 함수를 통해 처리할 수 있다. 여기까지 예측하는 모델 Hypothesis는 완성이 된다.
다음으로 예측한 값과 실제 값이 얼마나 차이가 나는지를 계산하는 Cost function을 설계해야 한다. 궁극적으로 Cost function을 최소화 함으로써 학습을 완성하게 된다. Cross-entropy라는 것을 쓰는데, 실제 값과 예측값 사이의 차이가 얼마나 나는지 우측 식과 같이 나타낸다.
식을 살펴보면 왼쪽의 식을 우측의 식으로 바꿔 쓸 수 있다. 우측의 -log( )로 쌓여있는 부분은 logistic regression에서 살펴본 바와 같이 우측의 그래프로 나타낼 수 있다. log 안의 값은 softmax를 통과한 값이기 때문에 항상 0~1 사이의 값을 갖는다. 따라서 -log( )는 우측의 그래프를 갖는다.
간단히 표현하기 위해서 시스템은 두 가지 레이블 A, B가 있다고 가정한다. 시스템을 통해 예측을 하게 되면 벡터를 돌려주게 되는데, 첫 번째가 A에 해당하는 값, 두 번째가 B에 해당하는 값이 된다. 위의 L(실제 값)은 레이블 B를 나타낸다. 첫 번째 예측(초록색)은 B를 예측했기 때문에 올바르게 예측한 것이고 두 번째 예측(보라색)은 A를 예측했기 때문에 틀리게 예측한 것이다. Cost function이라는 것은 궁극적으로 예측이 맞을 경우 값을 줄이고 예측이 틀릴 경우 그 값을 크게 하는 것이다. 각각을 위의 수식에 대입해서 계산 값으로 나타내면, 첫 번째 예측의 cost는 최종적으로 0을 갖게 된다. 반면 두 번째 예측의 cost는 매우 큰 값을 갖게 되고, 예측이 틀렸을 때 매우 큰 값을 주는 Cost function의 제 기능을 올바르게 수행해 낸다.
반대의 경우(실제 값이 A인 경우)도 마찬가지이다.
이전에 logistic regression에서 cost function을 위의 식과 같이 나타냈다. 사실은 그 자체가 Cross entropy에 해당한다.
이전까지는 하나의 값에 대해서 구체적으로 살펴봤고, 여러 개의 training set이 있을 경우 전체의 거리(차이)를 구하고 평균을 계산하여 전체의 loss, cost를 구할 수 있다.
마지막 단계는 cost funciton이 주어지면, cost를 최소화하는 값 즉, W 벡터를 찾아내면 된다. 이전과 마찬가지로 Gradient descent 알고리즘을 사용하게 되고, 밥그릇 형태와 같은 Loss function(또는 Cost function)을 사용할 경우 어떤 점에서 시작해도 경사면을 따라가면 최소 지점을 찾을 수 있다.
'머신러닝(machine learning)' 카테고리의 다른 글
[Pytorch] 07-1 Tips (0) | 2021.12.30 |
---|---|
[Pytorch] 06-2 Softmax Classification Pytorch (0) | 2021.12.29 |
[Pytorch] 05-2 Logistic Regression 2 (0) | 2021.12.23 |
[Pytorch] 05-1 Logistic Regression (0) | 2021.12.08 |
[Pytorch] 04-2 Loading Data (0) | 2021.11.30 |