안녕하세요. 이번에는 loss와 관련한 논문을 들고와봤습니다. 제가 이번에 진행하는 실험에서 계속 loss가 불안정하다는 것을 발견하고 굉장히 나이브하게 weight를 주는 실험을 진행해봤는데요. 정말 꿈쩍도 안하는 성능이 갑작스럽게 오는 것을 발견하고 이거다 싶어 더 효과적으로 loss를 사용할 수 없을까 싶어서 찾아본 논문입니다. multi-modal 분야 뿐만 아니라 다른 분야에서도 이러한 문제가 있을 듯해 도움이 되면 좋겠습니다. 그럼 리뷰 시작하겠습니다!
<Introduction>
본 논문의 introduction은 다양한 computer vision task에서는 여러 loss 함수의 조합을 많이 사용한다는 것으로 시작합니다. 그리고 여러 loss의 조합은 일반적으로 loss function의 선형 조합으로 가져가게 됩니다.

여기서 α는 weight의 집합을 의미하고, R()은 이러한 weight의 어떠한 regularisation을 의미하는 것입니다.
weight에 따라 모델 성능은 많이 달라질 수 있는데요. 다양한 loss의 weight는 일반적으로 각 loss가 마주한 문제에 동일하게 기여해야 한다는 내재적 가정과 함께 동일한 weight를 기반으로 하거나 loss weight α에 대한 하이퍼파라미터 그리드 서치를 통해서 이뤄집니다. 하지만 어떤 방법론의 경우 loss 함수를 40개 이상 사용하는 등 loss 함수를 많이 사용할수록 α를 설정하는 것은 굉장히 계산 비용이 많이 들게 됩니다.
static loss weight, 즉, 동일한 weight 또는 그리드 서치를 통해 학습을 통해 고정되는 weight는 최적의 학습괴 최적의 성능을 가져오지 못할 수도 있습니다. 예를 들어서 어떤 다른 논문에서는 어려운 학습 task의 경우, 더 어려운 문제를 도입하기 전에 쉬운 문제를 먼저 학습하는 것이 더 성능에 유리하다는 결과도 있는데요. 이 때문에 이상적으로는 weight가 시간이 지남에 따라 조정되는 것이 좋습니다.

본 논문에서는 loss에 내재된 통계를 명시적으로 사용하여 relative weighing를 추정하는 single-task multi-loss weighting scheme를 제안합니다. 이 방법은 평균에 대한 표준 편차의 비율인 coefficient of variantion (COV; 변동 계수)를 기반으로 하며, 관찰된 loss의 평균과 관련하여 관찰된 loss의 변동성 정도를 보여줍니다. Figure 1에는 학습 전반에 걸쳐 CoV weight의 loss weight가 어떻게 발전해 왔는지 나와있습니다.
<Method>
본 논문에서는 objective function가 loss의 선형 조합으로 정의되는 single-task learning problem에 대한 weighting scheme을 소개합니다. 각 loss는 원하는 output 또는 auxiliary objective에 대한 cost를 정량화하는데요. 예를 들어서 reconstruction error를 측정하기 위한 pixel-wise L1 loss, classification을 위한 cross-entropy가 있습니다. 목표는 loss의 조합에 대한 최적의 weight α set을 찾는 것인데요.(수식1 참고)이러한 weight를 찾기 위해 본 논문에서는 다음 가설을 사용합니다.

즉, 이 가설은 일정한 값을 갖는 losss는 더 이상 최적화해서는 안된다는 것입니다. 하지만 loss의 변동성이 상대적으로 적더라도 loss의 평균 크기가 클 수록 분산도 커질 것으로 예상할 수 있기 때문에 분산만으로 이를 판단하는 것은 충분하지 않죠. 따라서 편균과 관련하여 관측된 loss의 변동성을 나타내는 loss $\mathcal{L}$의 변동 계수(coefficient of variation) $c_{\mathcal{L}}$를 사용할 것을 제안합니다.
(loss의 분산이 학습과 무슨 상관일지 잘 이해가 가지 않을 수 있습니다. 설명을 추가로 드리자면 이렇습니다. 일반적으로 모델의 학습이 안정되고 일관된 예측을 하는 것을 바랍니다. 이렇게 되기 위해서는 loss 함수가 여러개 있을 때 이 loss 함수들의 분산이 작다면 각 loss 함수들의 차이가 적다는 것이고 이 때문에 안정적으로 골고루 학습할 수 있습니다. 이 때문에 loss의 분산이 중요하다고 논문에서는 언급한 것입니다.)

여기서 $µ_{\mathcal{L}}$와 $σ_{\mathcal{L}}$은 loss $\mathcal{L}$의 평균과 표준 편차를 나타냅니다. 여기서 변동 계수는 상대 표준 편차(relative standard deviation)라고 하며 규모/크기에 관계없이 값이 독립적이라는 장점이 있습니다. 이는 서로 다른 loss가 서른 다른 scale로 작용한다는 것을 알고 있다는 점을 고려할 때 적절한데요. 변동 계수는 loss 크기와 가중치를 분리하기 때문에 복잡하고 변수가 많은 경우 loss 크기가 작은 loss가 상대적으로 큰 영향을 미칠 수도 있고 training example에서 거의 가치가 없는 큰 losss는 가중치가 적게 할당될 수 있습니다.
<Loss Ratios for Coefficient of Variation>
변동 계수를 올바르게 계산하기 위한 요건은 관측치가 ratio-scale에서 파생되어야 한다는 것입니다. 즉, 임의의 0이 아닌 고유한 값으로 도출되어야 한다는 것입니다. 그래야 크기가 서로 다른 일련의 측정값 간의 불확실성을 공정하게 비교할 수 있습니다.
물론 모든 loss 함수가 이러한 ratio-scale로 측정되는 것은 아닙니다. 따라서 논문의 저자는 loss 값 자체 대신 loss-ratio ℓ를 측정값으로 사용할 것을 제안합니다.

여기서 $\mathcal{L}_t$는 time step t에서 관찰된 loss 값이고, $µ_{\mathcal{L_{t-1}}}$은 time t-1까지 관찰된 loss의 평균입니다. loss-ratio는 multi-task weighting setting에서도 사용되어왔는데요. 여러 논문에서 $\frac{\mathcal{L_t}}{\mathcal{L_0}}, \frac{\mathcal{L}_t}{\mathcal{L}_{t-1}}$와 같이 사용되었는데요. 본 논문에서는 모든 관측값에 대한 평균 대신 decay mean을 사용할 때의 효과를 확인해보고자 합니다.
loss ratio ℓ는 서로 다른 loss 함수에서 동일한 의미의 영점을 갖는데요.(즉, $\mathcal{L_t}$가 0일 때 $ℓ_t=0$을 의미) 또한 loss ratio ℓ는 loss 통계의 두 측정값을 상대 비교한 것입니다. weight $\alpha_{it}$는 time step t에서 loss $\mathcal{L_i}$에 대한 loss-ratio ℓ의 변동 계수를 기반으로 합니다.

여기서 $\mathcal{z}_t$는 i에 독립적인 normalising constant입니다. ($z_t=\sum_ic_{ℓ_{it}}$) 이렇게 하면 $\sum_i\alpha_{it}=1$이 되며, 이는 learning rate에서 loss weighting을 분리하는데 중요합니다.
loss weight의 값을 동시에 결정하는 두가지 요소가 있는데요. 아래와 같습니다.
- loss weight는 loss ratio $ℓ_{it}$가 감소할 때, 즉 loss $\mathcal{L}_{it}$가 평균 loss $µ_{\mathcal{L}_i}$보다 낮을 때 증가합니다. 이렇게 하면 빠르게 학습하는 loss를 장려하고 loss 크기에 대한 높은 outlier에 대한 영향을 완화할 수 있습니다.
- loss weight는 loss ratio의 history에 대한 표쥰 편차 $\sigma_{ℓ_{it}}$가 증가하면 증가합니다. 이렇게 하면 loss ratio이 더 다양하게 변할 때 더 많은 학습이 이뤄집니다. 즉, 특정 objective가 더 challenging했던 경우 cost function을 더 강하게 만듭니다.
<Robust Estimation>
CoV-weighting를 사용한 loss weighting은 측정된 loss 값의 history에서 직접 추론합니다. loss ratio와 변동 계수를 강하게 추정하기 위해서 본 논문에서는 online 추정치인, Welfrod’s algorithm을 사용하여 다음과 같은 업데이트 규칙을 사용하여 $\mathcal{L}$의 평균과 ℓ의 평균 및 표준 편차를 추적합니다.

여기서 표준 편차는 $\sigma_{ℓ_t}=\sqrt{M_{ℓ_t}}$로 주어집니다. 수렴하는 loss와 충분한 training iteration을 가정하면 online 평균과 표준 편차는 data에 대해 관찰된 loss의 실제 평균 및 표준 편차에 수렴합니다.
이 접근법의 단점이 있다면 loss의 시간 경과에 따라 분산이 평활화된다는 것인데요. 따라서 본 논문에서는 online 추정치의 decay를 실험한 다음 t를 fixed factor(예를 들어 20 또는 100)로 설정하여 집계된 이전 관측값과 현재 관측값에 가중치를 부여합니다.
<Relation to Other Methods>
이 파트에서는 CoV-weighting를 세 가지의 muti-task loss weighting 방법론과 비교하는데요. 계속 multimodal 분야를 하게 되면서 여러가지 loss 다루게 될 텐데 한번쯤은 정리해두면 좋을 것 같아 정리해보았습니다.

Table 1을 통해서 multi-task loss의 3가지 방법론과 CoV-Weighting의 주요 key point를 확인할 수 있습니다. 그럼 설명 시작하겠습니다.
<Uncertainty Weighting>
Uncertainty Weigthing은 multi-task setting에서 homoscedastic aleatoric uncertainty(동적 확룔론적 불확실성)를 모델링하는데요.(여기서 aleatoric uncertainty에 대해서 조금 더 찾아봤는데요 데이터에 포함된 고유 노이즈로 발생하는 불확실성이라고 합니다) 그런데 homoscedastic noise 입력 데이터에 의존하지는 않지만 task에 따라 달라질 수 있는데요. 본 방법론에서는 관찰된 task loss $\mathcal{L}_i$는 Gaussian distribution $\mathcal{N}(\mathcal{L_i};\sigma_i)$에서 관찰된 것으로 간주합니다. 최종 objective는 이러한 Gaussian distribution의 확률을 최소화 하는 것입니다.

여기서 $\sigma^2_i$는 모델 파라미터와 함께 학습됩니다. 그러나 위의 식을 보시면 최적의 분산을 사용할 수 있는 경우, uncertainty loss를 사용하면 파라미터의 log loss가 줄어드는 것을 알 수 있습니다. ($\sum_i\log(\mathcal{L_i})$) 즉, 가장 작은 loss가 gradient에 가장 큰 영향을 미칠 수 있다는 것입니다.
uncertainty weighting은 homoscedastic (data independent)한 노이즈를 사용하는데, single-task multi-loss setting에서는 동일한 output에 대한 관측 노이즈를 다른 loss weight에 사용할 수 없기 떄문에 적합하지 않을 수 있습니다.
<GradNorm>
GradNorm에서는 선택한 layer W에서 각 training iteration step에서 각 task의 gradient norm의 균형을 맞추기 위해 gradient normalization(gradient 정규화)을 제안합니다. 이 layer는 다른 task간에 마지막으로 공유되는 layer를 말할 수 있는데요. GradNorm 논문의 저자들은 이 공유 layer에서 gradient가 이상적으로 균형을 이룬다고 합니다. single-task multi-loss setting에서는 모든 layer가 공유되므로 GradNorm이 output layer에서 계산됩니다.

여기서 $g_i(t)$는 공유 layer에서의 loss $\mathcal{L}_i$에 대한 파라미터의 gradient norm을 나타내기 때문에 GradNorm이라는 이름이 붙었습니다. 즉, time t의 loss와 time 0의 첫 번째 loss 사이의 loss ratio를 현재 gradient norm으로 나눈 값입니다. single-task multi-loss learning의 경우, loss ratio가 반비례하므로 값이 작을 수록 loss이 더 잘 학습된다는 점에서 직관적이지 않습니다. 따라서 성능이 좋은 loss는 gradient norm이 동일한 경우 어려운 loss(여기서는 $\mathcal{L}(t)≈\mathcal{L}(0)$를 의미합니다)에 비해 학습 중에 속도가 느려집니다.
<Multi-Objective Optimisation>
Multi-Objective Optimisation의 논문 저자들은 일반적으로 multi-task learning이 모든 task에 유익할 수는 있지만, 일부 개별적인 tasks는 모델 용량을 놓고 경쟁할 수 있다고 말합니다. 즉, 이말은 정리하면 shared encoding이 모든 task에 대해 똑같이 유익하지 않을 수 있다는 말인데요. 따라서 저자들은 Frank Wolve algorithm을 사용하여 task에 대한 최적의 solution을 찾고자 했습니다.
<Experiments>
본 논문에서는 KITTI와 CitySpaces를 이용한 Depth estimation과 PASCAL Context dataset을 이용한 semantic segmentation을 가지고 실험을 진행하였습니다. 실험의 목적은 두 가지인데요. 첫 번째로, 제안된 dynamic weight를 static weight (equal weighting 또는 hand-tuned) 와 비교하기. 두 번쨰로, 세 가지 multi-task loss weight 방식과 비교하기 입니다.
<Depth Estimation>
이 실험에서는 추정된 disparity map을 사용하여 photo-metic reconstruction을 통해 left/right image pair로부터 depth를 추정하는 방법을 학습하고, camera intrinsics를 사용하여 disparity map을 warping하여 depth를 유추할 수 있습니다. 본 논문에서는 [13]의 네트워크 구조와 objective function을 따릅니다. [13]에서 objective function는 L1 loss, disparity gradient loss (SSIM), left-right consistency loss (LR), disparity gradient loss (DISP)를 결합하여 single network를 학습시킵니다. hand-tuned weight는 아래와 같습니다.

4가지 loss function 외에도, disparity map은 4가지 scale에서 regression되는데요. 각 scale에서 모든 loss 함수는 left, right disparity map 모두에 대해 평가됩니다. 전체 objective는 4가지 scale s 모두에서 loss를 결합합니다.

여기서 각 α는 loss weight 중 하나를 사용하여 자동으로 weight를 부여해야 하는 loss weight입니다. 총 32개의 loss가 network 학습에 사용됩니다.

이 실험에서는 single-loss (예를 들어서 SSID, L1)를 사용하여 학습된 모델과 동등하게 hand-tuned로 조정된 loss weight 조합으로 학습된 모델을 대상으로 Cov-Weighting을 비교해보려고 합니다. 사용한 데이터셋은 CitySpaces 입니다. 그 결과는 Table 3을 통해 확인할 수 있는데요. Cov-Weighting의 성능을 보면 대부분의 성능 지표에서 weight를 직접 튜닝한 것과 비슷한 성능을 보이거나, RMSE log를 보면 더 우수한 성능도 보이기도 합니다.

이번에는 KITTI 데이터셋에 대해서 성능을 확인해보고자 합니다. Table 4를 통해서 확인 가능합니다. CoV-Weighting은 Dynamic Weight에 속해 있는 방법론인데, Table 4를 보시면 Dynamic weights에 있는 방법론 앞에 두개의 성능이 좋지 않은 것을 볼 수 있습니다. Multi-objectives 방법론도 마찬가지 입니다. 마지막으로 CoV-Weighting은 7개 metric 중 에서 5개 metric에서 가장 성능이 우수함을 보였습니다.
<Semantic Segmentation>
semantic segmentation task에서도 방법론을 검증하기 위해서 실험을 수행하였는데요. 모든 loss weighting 방법론은 Context Encoding Network (EncNet)와 함께 구현됩니다. 총 objective function은 standard Cross-Entropy loss(CE), Semantic Encoding loss(SE)와 별도의 Fully Convolutional (FCN) head의 auxiliary CrossEntropy loss(AUX)로 구성됩니다. hand-tuned parameter의 경우 아래와 같습니다.


Table 6을 통해서 PASCAL Context에서의 실험 결과를 확인할 수 있습니다. Cov-Weighting을 확인해보면 다른 방법론에 비해서 높은 성능이 나온 것을 알 수 있습니다. 이를 통해서 이 방법론이 얼만큼 강력한 방법론인지 확인할 수 있을 것 같습니다.
이렇게 리뷰를 마쳐봤는데요. 저는 이제까지 loss를 어떻게 가져가는지에 대해서 생각보다 그리 고민하지 않은 부분이 있었던 것 같아 살짝 반성이 되는데요. 앞으로는 이러한 논문을 팔로업하면서 loss가 중요한 부분이라는 것을 계속 생각해야겠습니다. (ps. 제가 진행하는 실험이 있는데요. 정말 나이브하게 loss에 weight를 주었더니 성능 향상을 크게 보인 경우가 있었습니다. 이 방법론은 얼마나 올려줄 수 있을지 입맛이 도네요. (물론 내려갈수도 있지만ㅜ)) 그럼 리뷰를 마루리하도록 하겠습니다! 읽어주셔서 감사합니다!
[13] Clément Godard, Oisin Mac Aodha, and Gabriel J Brostow. Unsupervised monocular depth estimation with left-right consistency. In CVPR, 2017.
[40] Hang Zhang, Kristin Dana, Jianping Shi, Zhongyue Zhang, Xiaogang Wang, Ambrish Tyagi, and Amit Agrawal. Context encoding for semantic segmentation. In CVPR, 2018.
안녕하세요 김주연 연구원님 좋은 리뷰 감사합니다.
해당 방법론은 여러 개의 loss가 linear하게 결합되어 있을 때 각 loss의 가중치를 learnable 하게 변동하는 방법론으로 이해하였습니다. 이때 COV를 활용하여 scale 값에 상관없이 변동성이 큰 loss에 큰 가중치를 할당할 수 있도록 하는 것이 인상적이었습니다.
리뷰를 읽고 궁금한 점이 있는데요, [수식 4]에서 \alpha를 구할 때 c_{l_{it}}값이 사용되는데, 이는 전체 loss의 일부에 해당하는 loss_i의 변동 계수로 이해하였습니다. 그렇다면 부분 loss의 평균과 표준 편차는 어떻게 구하는지 설명해주실 수 있나요? 1~(i-1)까지의 값에 대한 평균과 표준 편차로 이해하면 되는 지 궁금합니다.
depth estimation에서 single loss와 multi loss 실험간의 비교를 진행하였는데 해당 실험은 동일 모델의 loss만 바꿔가며 실험한 결과인가요? single과 multi loss를 사용하기 위해서는 모델 구조 자체가 달라져야 할 것 같은데 성능만으로 동등한 비교가 가능한지도 궁금합니다.