Hayden's Archive

[AI/딥러닝] Image Processing / Softmax Function / Loss Function 본문

Study/AI & Math

[AI/딥러닝] Image Processing / Softmax Function / Loss Function

_hayden 2020. 7. 28. 11:09

CIFAR-10는 5만개의 Training Image가 있고 만개의 Test Image가 있음. 각각의 이미지는 32×32×3

* 32×32×3의 의미
 32X32 => 이미지 세로와 가로(보통 정사각형으로 주어짐)
 3 => 채널 수. (흑백은 채널이 1개, 칼라는 채널이 3개, RGB)

입력값인 X로 이미지가 들어옴.

 

MNIST - 28X28X1
(0~9 손글씨 숫자. 검정색 바탕에 흰색글씨)
10개의 카테고리
랜덤함수 돌리면 10%의 확률 정답이 나오겠지만 
딥러닝 알고리즘 돌리면 정확도 99.8%(사람보다 더 잘 맞힘)
MNIST-Fashion
CIFAR10 - 32X32X3 -- 정확도 99.3%
10개의 카테고리
MNIST보다 정보량이 더 많다.(=복잡한 입력이다)
CIFAR100 - 정확도 93%
100개의 카테고리
카테고리 수가 많을수록 정확도가 떨어짐
이미지넷 정확도 88%
1000개의 카테고리
카테고리 수가 많을수록 정확도가 급격히 떨어짐

 

따라서 카테고리(=라벨, 클래스)는 보통 50개를 넘지 않도록 한다.

실제로 클래스 카테고리가 10개라 하더라도 정확도 99% 안 나옴.
트레이닝 하고자 하는 데이터들은 Toy DataSet -> 낮은 해상도, 낮은 사이즈로 함. 실제 데이터는 해상도도 높고, 사이즈도 큼. 그래서 정보량이 더 많고 실제 데이터 가지고 하면 정확도 99% 안 나오고 정확도 떨어지게 됨.

보통 학술적으로 연구할 때 92%~95%(학사 수준) 이 정도 나오면 잘 나온 것.
하지만 99%대(박사수준)로 올리는 것은 10배 더 어렵다. 비용적인 측면에서도 100배 더 든다.
정확도 올리는 데 가성비를 따져야 함.

50%에서 1% 올리는 건 쉬움.
90%에서 1% 올리는 건 정말 어려움.

 


 

32x32x3의 고양이 사진을 입력하려고 할 때 원본이미지가 3차원짜리인데 컴퓨터가 통으로 못 받음. Flattening 해야 함.(평평하게 펴야 함. 1차원으로.)

x는 입력값(이미지), Y는 출력값(라벨) 
Y = f(x, W) = Wx+b

 

위의 그림은 W는 3행 4열, x는 4행 1열, b는 3행 1열. Wx+b를 행렬연산한 것.

(0.2×56 + (-0.5)×231 + 0.1×24 + 2.0×2) + 1.1 = -96.8 이 됨. 아래 값들도 마찬가지.

위에서는 고양이를 개로 잘못 예측함.
Wx+b가 하나의 레고블럭이고 이러한 연산이 계속해서 쌓임.

예측값 -96.8, 437.9, 61.95을 보면 내가 모르는 의미없는 값이라서 파악이 힘듦. 이것을 해결하는 것이 Softmax Function

 


Softmax Function

Exponential(지수로 나타낸 => 값을 극대화) - 드라마틱하게 값을 벌려준다. 지수함수는 x값이 커질수록 y값이 드라마틱하게 커짐 



Normalize(정규화) -  예측 값들을 0~1사이의 값으로 모두 정규화하며 예측 값들의 총합은 항상 1이 됨

 

Hinge Function은 Softmax Function 나오기 전에 썼던 것.

Softmax FunctionNormalize, Exponential 해서 나타냄
정규화하는데 약간의 트릭을 줌. 지수부에 e를 다 붙여주고(지수부 e는 π처럼 상수값.) 정규화함.

 

이렇게 나온 확률은 예측에 대한 평가가 아님. 예측값을 구한거지 실질적인 loss를 구한 건 아님. 예측값보기 좋게 0에서 1 사이의 값(다 합쳐서 1)으로 정규화한 것.

값을 예측할 때는 정확한 예측으로 안 느껴짐. 내가 얼마나 잘못한 값인지 알려면 softmax가 돌아가야 함.

 

Softmax Function 식 정리

 


Loss Function 

위에서 예측한 값 0.13, 0.87, 0.00를 통해 그 때의 고도(loss)를 구한다. 

x값 -> 예측한 값.
y값 -> 그 때의 고도(loss)

 





L(w)
Wx+b에 대한, 모델 전체에 대한 loss를 평가한 값

모델에 대한 loss

f(xi, w) => 예측값
y => 정답

예측값이 나오면 정답과 비교해서 loss function할 수 있다.
이미지 5만개 입력했으니 예측값 5만개 나올 거고,
총 5만개의 loss가 나올 거고, 그 loss들의 평균이 전체 Model의 loss값
모든 loss에 대한 평균값을 최종적인 loss.
=> 여기서는 트레이닝 데이터의 loss

 


Regularization & Full Loss Function



파란색이 트레이닝 데이터, 초록색이 테스트 데이터 => overfitting 

 

Weight와 Bias에 대한, 수정치에 대한 값도 같이 구할 수 있음...
loss function을 할 때 람다(λ)라는 상수(hyperparameter임)를 앞에 붙이면 Regularization에 의해 값을 죽여주는 역할을 함. 파란색 곡선을 깎아서 초록색 선과 비슷하게 만들어줌.
람다는 overfitting을 줄여주는 역할. 널뛰는 값을 깎아서 줄여줌. 람다의 역할 => 분산의 값을 낮춰줌
Full Loss Function에는 람다까지 들어감.



 




W1 * x + b1 + W2 * x + b2 + W3 * x + b3 + W4 * x + b4
w 값이 작으면 굴곡이 완만해진다..

 

W(Weight) 값이 크면 클수록 파란색 그래프가 만들어진다. (= 데이터들의 분포가 산만하다, 안정적이지 않다, 분산이 크다 = overfitting)

W(Weight) 값이 작아질수록 연두색 그래프가 만들어진다. 훨씬 안정적인 그래프를 그림

loss function에서 λR(w) 이 부분은 weight의 크기를 줄여주는 역할을 한다.

그렇기 때문에 Regularization을 써야 weight의 값을 안정적으로 만들어주고 overfitting을 막을 수 있다. 

--> 이게 Full Loss Function

 

 

출처 : http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture3.pdf

참고 : https://dongminlee.tistory.com/19