[모두를 위한 딥러닝] Lab-06. Softmax Classification
discrete Probability distribution 이산적 확률 분포
- 정수의 값
- 예: 주사위(uniform ditrinution: 확률 동일) , 가위를 냈을 때 상대방이 다음 뭐낼지(동일분포가 아닐 수도 있음
-
- 정규분포(pdf): 면적이 확률의 값. 어떠한 값의 확률은 알 수 없다.
- 이산형 같은 경우에는 각 값의 확률을 알 수 있다.
- softmax 함수 적용: 예전에 철수가 가위를 냈을 때 다음 주먹이 올 확률(랜덤, 사람마다 일정한 패턴 존재)
- p(주먹|가위) / p(가위|가위) / p(보|가위) 이런 확률 분포를 근사할 때 뉴런 네트워크 등 이용
- softmax: max 값을 뽑는데 soft하게 뽑아줌
- 기존 max를 뽑는 방법
- softmax: 합이 1이 되도록
Cross Entropy
- 2개의 확률분포(P,Q)가 주어졌을 때 얼마나 서로 비슷한지 나타내는 수치
- p가 철수가 가위를 냈을 때 다음에 무엇을 낼 지에 대한 확률분포라 가정했을 때, cross entropy를 최소화하도록 하면
q2>q1 >p로 점점 p에 근사하게 될 것
- cross entropy loss
- z: uniform distribution
- dim=1: 두 번째 디멘젼에 대한 softmax 수행
- tensor([0,2,1]): 각 샘플의 인덱스값 나타냄. 해당하는 값(0.2645,0.2322,0.1986)을 지칭
- discrete 확률 분포: one-hot vector로 나타낼 수 있음
- hypothesis =z 은 원핫벡터 만들어 줌
- scatter_: scatter inplace
- y.unsqueeze: (3,) > (3,1)로
pytorch에서 torch.log> F.log_softmax >F.nll loss >F.cross_entropy (모두 동일, 필요에 따라)
실습
- 4차원의 벡터를 받아서 어떤 클래스인지 예측하려고 할 때
- y_train: one hot vector로 나타냈을 때 1이 있는 위치의 인덱스 값(이산형> longtensor로 변환)
F.cross_entropy: scatter필요없고 원핫벡터 만드는 과정 생략
더 간단하게
binary classification > sigmoid function 사용
cross entropy > softmax function 사용