Loss function을 설명하기에 앞서 input과 ground truth ( target )부터 보겠습니다.
Mnist와 같은 CV classification task를 예로 들자면 Input은 image이고 target은 label입니다. 그럼 classification model은 input을 넣어주면 적절한 연산을 통하여 target과 최대한 비슷한 output값을 산출 하게끔 학습되어야 합니다. ( 같은 값을 갖는것은 불가능. )
이때 Loss function을 알고 있어야 합니다. 간략하게 설명하면 model을 학습시키고자 하는 방향을 정해주는 역할을합니다.
Loss function의 input은 크게 model outpu과 ground truth ( target )이 있습니다. 따라서 Loss(output,target) 보통 이런식으로 coding됩니다.
이때 output은 model output으로 output=model(input)입니다. 또한 model에는 parameter가 있습니다. 이 parameter가 input을 넣어주어 target과 가까운 output을 산출하게 하는 가중치라고 보면 됩니다.
즉, output=paramter⋆input입니다. ( ⋆ denotes calculation in model )
따라서 Lossvalue=floss(paramter⋆input,target)입니다.
이때 paramater는 variable이고 input,target은 constant 라는 것을 알고 있어야 합니다.
( TMI : torch.auto_grad 개념이고 이걸 알아야 custom loss를 만들 수 있습니다. 원래 Variable이라는 개념이 있었는데 이는 2018년 이후로 사라졌습니다. )
이는 당연한건데 input과 target은 변할 수 없습니다. 즉, 변하는 것은 parameter이고 이를 input과 연산을 통해 target과 가장 비슷한 output을 만들어 주는 최적의 paramter를 찾는 것이 optimization입니다.
이때 기준이 Loss입니다. 즉, 대부분 Loss를 최소화 해주는 방향으로 학습을 진행합니다. ( parameter를 update합니다. )
이때 paramter가 variable이므로 미분가능합니다. 이를 이용합니다.
정리하자면 findargminparameter(Loss(output,target)), 즉, minimizer를 찾으면 됩니다.
위의 설명을 보면 output이 target과 유사하게 나오게끔 parameter를 update해야 한다고 했습니다. 근데 갑자기 Loss를 최소화 해주면 된다고 하였습니다. 즉, Loss가 그렇게 설계됩니다. Loss가 작아지면 target과 output이 가까워 지는 겁니다. 이는 아래에 자세하게 설명 됩니다.
즉, L2 ( MSE )를 Loss로 하여 이를 최소화 시키는 방향으로 parameter를 update ( train )하는 것은 MLE방법과 같다. 또한 위의 링크에 설명 되어 있을텐데 MLE방법은 sampling data를 이용하여 모집단의 분포 즉, parameter를 추정하는 좋은 방법이므로 L2 Loss의 정당성을 얻을 수 있다.
마찬가지로 CEE의 정당성도 확인 가능합니다.
CEE는 범주형 즉, 이산형일때 사용하는 Loss입니다.
따라서 위에서 분포가정을 Gaussian→Bernoulli 로 바꾸어봅시다. lety^=softmax(f(x∣θ))thenitmeansprobability lett∼Ber(y^) thenpdfoft:ft(t∣y^)=(y^)x(1−y^)1−x usinggivendatasetD={(x1,t1),(x2,t2),…(xN,tN)}wecanmakelikelthoodfunctions.t. L(θ∣D)=i=1∏N{(yi^)ti(1−yi^)1−ti} letnumberoftarget==1MthenL(θ∣D)=i=1∏M{yi^ti} ∴negativelog=−i=1∑Mtilog(yi^)
이는 CEE이다.
따라서 CEE에 대한 통계적 정당성도 확보된다.
MAE
MLE는 가능도함수를 최대화 시키는 방법입니다. MAE는 Posterior를 최대화 시키는 방법입니다. ( 베이즈에서 다시 정리 )
Posterior를 최대화 하는 이유는 식을 보면 알지만 data가 주어졌을때의 parameter의 확률(분포)입니다. 당연히 최대화 시켜야 합니다. Posterior=P(w∣D)=∫P(D∣w)P(w)dwP(D∣w)P(w) letρ=∫P(D∣w)P(w)dw1thenP(w∣D)=ρP(D∣w)P(w)
여기서 우리는 한가지 사실을 알고 있습니다.
model의 overfitting을 방지하기 위해서는 parameter인 w의 크기 ( abs or square )를 제한해야 합니다.
따라서 prior로 이 논리를 사용합니다.
크기를 감소시키기 위해서는 w의 값들을 0에 많이 분포시키도록 학습하면 됩니다.
앞에서 학습하는 방향은 Loss가 정해준하고 하였습니다. 즉, w를 0쪽에 많이 분포시키는 것을 Loss에 적용하면 됩니다. w를 0쪽에 많이 분포시키는 방법으로는 w∼N(0,σw2)를 prior로 주는 방법을 사용합니다.
즉, p(w)=σw2π1exp{−2σw2w2} 입니다.
다시한번 생각해 보면 어째든 목표는 poterior를 최대화 하는 parameter w를 찾는 것이다.
따라서 W=argmaxw{log(P(w∣D))}=argmaxw{log(ρP(D∣w)P(w))} =argmaxw{log(ρ)+log(D∣w)+log(P(w))} log(D∣w)를 최대화 하기 위해서는 Loss=i=1∑N((ti−f(xi∣θ))2)을 최소화 하면 된다고 위에서 다루었습니다.
따라서 마지막항을 p(w)=σw2π1exp{−2σw2w2}임을 이용하여 전개하면 다음과 같습니다. W=argmaxw{log(ρ)−i=1∑N((ti−f(xi∣θ))2)−log(σw2π)−2σw2w2} 이제 contant를 제거하면. W=argmaxw{−i=1∑N((ti−f(xi∣θ))2)−2σw2w2} 이므로 Loss={i=1∑N((ti−f(xi∣θ))2)+2σw2w2} 가 됩니다.
따라서 MAP에 의해 posterior를 최대화 하는 것은 위의 Loss를 최소화 하는 것과 같습니다.
Gradient descent
생략 나중에 시간되면 정리 예정
정리할 내용 -
Local, global minimum정리
gradient의미 정리.
lr정리
constant와 variable구분
convex정리
Batch Learning & Epoch & Iteration 용어정리
GPU는 CPU와 다르게 병렬연산이 가능합니다.
여기서 주의할점은 현재에 오면서 Batch와 Mini-batch가 혼용해서 쓰인다는 것입니다. 대부분의 논문에서도 mini-batch를 그냥 batch라고 씁니다. 또한 아래에서 설명하지만 MSGD ( MSG )도 그냥 SGD라고 사용합니다.
Epoch이란 전체 데이터를 한번 학습하는 것을 1 epoch이라고 합니다.
Iteration이란 mini-batch단위에 학습할때 전체 데이터를 한번 도는데 사용되는 mini-batch의 개수입니다.
예를들어 500개의 Input이 있고 mini-batch size를 20으로 설정하면 1 epoch당 25번의 Iteration이 필요합니다. 이러한 epoch을 적절한 획수만큼 반복하여 train합니다. ( 너무 많으면 overfitting )
Batch Gradient Descent - BGD
여기서 Batch는 mini-batch가 아닙니다. 그냥 생략하고 보는게 편합니다. Loss, Gradient Descent, Optimization을 공부할때 대부분 이걸 먼저 배웁니다. BGD는 Input으로 전체 데이터를 넣어 줍니다. 즉, 이는 mini-batch size == Input data 입니다. 따라서 Interation이 곧 epoch이 됩니다.
Stochstic Gradient Descent - SGD
Stochstic 통계적 확률적이라는 뜻입니다. 이는 mini-batch를 1개로 정한다고 이해하는 것이 좋습니다. 즉, BGD는 1-epoch당 1번의 loss를 계산하여 update 하였다면 SGD는 1-iteration당 update를 진행합니다.
Mini-Batch Gradient Descent - MSGD or MGD
이거 요즘에는 그냥 SGD라고 사용합니다. 굳이 이유를 설명하자면 BGD, SGD를 절충한 것이 MGD인데 Stochstic이라는 성질이 들어가 있고 요즘에는BGD, SGD를 사용하지 않습니다. 따라서 자연스레 SGD라고 사용합니다.
이는 mini-batch size를 적절하게 주는 것입니다.