이때, 255로 나누는 이유는 정규화를 위해서인데, X와 y사이의 "Loss map"을 simple하게 유도하여 조금만 변화시켜줘도 되기 때문에 사용한다!!
🤔[Loss Map...?]
Loss map이란??
Loss map은 input image의 각 pixel에 대한 Loss값을 나타내는 map이다. 이를 통해 predict와 target값 간의 차이를 시각화 할 수 있다.
일반적으로는 predict와 target간의 차이를 계산하기 위해 Loss function이 사용된다. Loss function으로 pixel별 Loss를 얻은 후 이를 시각화하면 Loss map을 얻을 수 있다.
이런 Loss map은 아래와 같은 특징을 갖는다.
1. Loss map은 쉽게 쌓을수록 좋다. 2. ReLU는 Loss map을 쉽게 쌓을 수 있다! 3. Layer를 깊게 쌓을수록 Loss map이 복잡해져 X와 y사이의 복잡한 문제를 해결할 수 있다!
[Loss function]
기울기 그래프를 수렴속도 그래프라 생각해보자!
MSE (Mean Squared Error) MAE는 L1 Norm을 사용한 Loss function이다. MAE = (1/n) * ∑|yᵢ - ȳ| 로 표현되며, 쉽게 말하자면 |x|형태이다.
- 절댓값의 합을 평균으로 계산하기에 이상치(outlier)에 더 강인한 성질을 갖는다. 즉, 이상치에 큰 영향을 받지 않고 전체적인 오차를 잘 반영한다. MSE와 달리 local minima 탈출은 쉬우나 과하다는 점...
- 수렴속도의 관점에서, x=1을 기점으로x>1에서는 수렴속도가 너무 느리고x<1에서는 너무 빠르다. 따라서 data 집단이 1~100사이의 값을 다룰 때 사용이 용이하다.
MSE (Mean Squared Error) MSE는 L2 Norm을 사용한 Loss function이다. MSE = (1/n) * ∑(yᵢ - ȳ)² 로 표현되며, 쉽게 말하자면 x²형태이다.
- 예측값과 실제값의 차이를 제곱하여 계산하기에 이상치(outlier)에 민감하게 반응할 수 있다. 또한, 오차값이 커질수록 제곱으로 인해 더 큰 가중치를 부여할 수 있다.
- 수렴속도 관점에서, 2차함수 형태이기에 극점에 가까워질수록 속도가 느려진다. x=1을 기점으로 x>1에서는 속도가 빠르고 x<1에서는 속도가 느리다. 다만, 어느기점(x<1)에서 갖혀버리는, local minima문제가 발생할 수 있다. 즉, local minima에 빠질 가능성이 높다.
RMSE (Root Mean Squared Error) - RMSE는 √(MSE)로 다변량함수이며, MAE와 달리 0에서 미분가능하다는 장점이 존재한다! - 즉, MAE의 대체라는 느낌이라 생각하면 좋을 것 같다.
보통 MSE, MAE의 경우, 기울기기반 최적화와 사용시 일부출력이 포화하면서 기울기가 아주 작아진다.
→ 따라서 보통 Cross Entropy를 많이 사용한다.
Cross Entropy. &. Categorical Cross Entropy - Cross Entropy, CE 및 CCE는 확률값을 평가(loss) 시 사용된다. (0≤y≤1의 값이 분포) CCE = -yᵢ * Σlog(ȳ)) 으로 yᵢ 즉, 참값에 대한 결과를 반영가능하다! => 따라서 softmax와 같은 multi activation function output, multinoulli Distribution과 연관된다. => 쉽게 말하자면, 0~1사이일 때, softmax output일 때 사용가능하다.
Binary Cross Entropy - Binary Cross Entropy, BCE는 이진문제에 적용하는 Cross Entropy 방식이다. BCE = -yᵢ * log(ȳ) - (1-yᵢ) * log(1-ȳ) - yᵢ와 (1-yᵢ)가 곱해짐을 통해 update시 정답과 오답을 모두 사용한다. - 유의할 점은 softmax를 사용하면 편향이 되서 sigmoid output 즉, 독립적인 활성화 함수의 output일 때 사용한다. - 문제점: softmax output을 사용하게 되면, 정답을 맞추기 위해 update되는 것이 아닌, 오답을 피하기 위해서 학습이 되어 버린다.
[Activation function]
cf. Distribution에 따른 Activation function 사용법
1. Gaussian Distribution: affine transform에 기초한 "linear" unit
softmax는 총 클래스의 확률값의 합이 1인 다변량함수로 변수하나가 바뀌면 동시에 나머지도 변하기에
하나라도 모델이 맞히게 된다면 전체적으로 학습의 정확도가 올라갈 가능성이 높다.
만약 MSE와 사용하면 부정확한 예측을 크게 확신해도 출력변경이 불가능하기 때문이다.
→exp는 Maximum Likelihood를 이용해 y출력에 도움을 준다.
→ log(softmax) = z - log∑exp(z)
이를 해석하면,
i) z로 인해 기울기기반알고리즘은 z를 높이는 방향으로 학습하며
ii) log∑exp(z)로 인해 z 전체값이 작아지는 방향으로도 학습된다.
ReLU - hidden layer에서 사용이 용이 - hidden layer의 activation은 0또는 1에 분포할 확률이 높아야 한다.
Sigmoid - 요즘은 거의 output layer에서 특히나 확률분포(Probabiliy)의 문제에서 사용한다. - 특히나, 0과 1의 분포가 많은 확률분포문제에 좋다. (즉, 두개의 군집으로 구분되는 경우.) - 분포가 균등할 때는 linear를 통해 mse를 사용한다.
tanh - 사실상 (0,0)을 지나는 sigmoid식이라 볼 수 있다. - correlation과 같은 경우에서, 2개의 군집같은 문제에서 많이 사용
Leaky ReLU - backpropagation시 음수부분을 살리고자 사용. - 확률적으로 전체적으로 왼쪽(x<0)으로 치우치게 될 가능성이 높다. - 오히려 방해가 되어 ReLU보다 성능이 안나올 가능성이 높다.
ReLU6 - f(x) = clip(x, 0, 6) - 데이터가 많을 수록 좋은 함수 - 기울기가 1인 폭이 좁아서 데이터가 적으면 0으로 모두 죽어버릴 수 있다.
Hard-sigmoid - f(x) = ReLU6 / 6 - 0.5 및 스케일링 - f(x) = max(0, min(1, (x+1)/2)) - 분포가 0~1로 되며, 데이터가 많을 수록 좋은 함수
Swish - x*sigmoid(x) - 1차 미분이 sigmoid와 거의 비슷.(continuous) - 1차미분 = 속도로 생각해보면, 음수부분과 양수부분 모두 속도가 비슷하기에 쉽게 update가능 - 2차미분식이 Gaussian과 비슷 - 2차미분 = 가속도라 생각하면 2차미분의 대칭성으로 인해 살아날 가능성이 높다.
Hard-Swish - x * hard_sigmoid(x) - swish와 거의 비슷하지만 연산속도가 빠르다.
Smooth L1 - x < 1에서 (1/2)*(y-ȳ)² - x ≥ 1에서 |y-ȳ| - (1/2)