Intro:
딥러닝이 각종 태스크에서 엄청난 활약을 보여주고 있으나, Black-box이기 때문에 그 속을 들여다 볼 수 없습니다. 어떤 parameter setting에서 잘 작동하고, 어떤 setting에서는 잘 작동하지 않는 이유를 알 수가 없죠. 본 논문에서는 Loss Landscape에 대한 고찰을 통해 더 나은 성능을 보여주는 모델을 '구조적'으로 찾아냅니다. 마치 물 속에 낚싯대를 그냥 던져놓고 기다리는 것이 아니라 초음파로 물고기가 어디 있는지 찾아내서 그 위치에 낚싯대를 던지는 것처럼요.
loss landscape에 대한 지식이 전혀 없는 상태에서는 여러 initial settings에서 학습을 시키고 local minimum들을 찾아내는데 그칩니다. 위 사진에서 가장 왼쪽과 같은 경우죠. 그러나 Garipov (Loss surfaces, mode connectivity, and
fast ensembling of dnns. , NIPS 2018)가 가운데 그림처럼 local minimum들을 잇는 curve가 있다고 주장합니다. 따라서 해당 curve의 parameter들 또한 좋은 성능을 보이는 셈입니다. 오늘 리뷰할 논문에서는 마지막 그림처럼 단지 curve에 지나지 않고, simplical complexes로 확장하여 좋은 성능을 보여주는 weight space의 area를 더 일반화합니다. 해당 알고리즘은 SPRO (Simplicial Pointwise Random Optimization, 위상적 개념이지만 논문의 논리 전개에서 위상을 사용하지는 않습니다.)라고 부릅니다. 더 나아가서, 저렇게 area를 확장하여 ensemble 없이도 간접적으로 ensemble을, 아니 오히려 ensemble을 뛰어넘는 성능을 보여주는 ESPRO (Ensembled SPRO)를 만들어냅니다.
Content:
위상적 개념을 사용하지 않음에도 굳이 simplex로 한정한 이유는 적은 point로 구성이 되어 쉽게 만들 수 있기 때문입니다. SPRO의 개념을 간단하게 요약하면 다음과 같습니다. '낮은 Loss를 보이는 영역을 최대한 넓히자.'
세부적인 내용으로는 몇 개의 initial settings에서 학습을 시킨 후, 최종적으로 도착한 지점(낮은 loss를 가지는 weight point)을 고정합니다. 해당 지점들을 잇는 선과 그 주변 지점들에서 loss를 구해보고, loss가 많이 커지면 버리고 loss가 괜찮다면 차용합니다. 이렇게 몇 개의 point를 생성해가면서 simplex의 order를 높여갑니다. (부피를 늘려간다고 생각해도 유사할 것 같습니다.)
빨간 부분이 Simplexes의 expected loss를 낮게 유지하도록 하는 부분이고, 파란 부분이 simplexes의 부피를 크게 가져가도록 하는 유인을 제공합니다. 이렇게 point들을 찾아나가면 다음 그림과 같이 simplexes들로 확장이 됩니다.
w가 실제 training을 통해 도달한 parameter point, Ө가 guess를 통해 도달한 parameter point입니다. 위의 Ө를 찾는 알고리즘은 SWAG (Maddox et al., Rethinking parameter counting in deep models: Effective dimensionality revisited, 2019)의 방법을 사용합니다.
Experiment:
이렇게 Ө를 찾게 되면 이는 ensemble에도 활용할 수 있는데, 해당 방법으로 ensemble을 적용한 것이 ESPRO입니다. ESPRO를 활용하여 VGG 기반 CIFAR-10과 CIFAR-100 데이터에 대해서 성능을 체크하였습니다. 학습을 하나의 모델로만 하여 도달한 local minimum에서 ESPRO를 통해 확장한 weight space의 point들로 ensemble을 통해 도달한 성능이 3개 모델의 ensemble 성능인 6.2%보다 높은 5.7%를 기록하였습니다. 약간 상대편은 세 명이서 집단지성으로 퀴즈를 푸는데 저는 혼자 퀴즈봇을 만들어 퀴즈를 풀어서 상대편을 이긴 느낌이네요.
뿐만 아니라, ensemble을 활용할 때 얻을 수 있는 부가적 이점 중 하나인 uncertainty에 대한 부분에서도 잘 작동합니다.
위를 보면 uncertainty band를 확인해볼 수 있는데, 실제로는 하나의 모델만 학습시켰음에도 uncertainty band를 어느정도 유사하게 흉내내고 있는 것을 볼 수 있습니다. 물론 튀는 부분이 있는 걸 보면 완벽하지는 않습니다만, 그래도 참고할 정도는 될 것 같고 training해서 얻은 데이터를 좀 더 첨가하면 정말 매력적일 것 같습니다.
Conclusion:
Ө를 찾는 알고리즘이 성능에 많은 영향을 미칠 것 같습니다. 하지만 SWAG으로도 저 정도의 성능을 갖는 것으로 보아 상당히 파급효과가 클 것 같아보입니다. 생각해본 점으로는, SVM에서 kernel을 적용하여 area를 쪼개서 더 높은 성능을 보여주는 것과 유사하게 Simplexes에도 kernel을 적용하여 훨씬 더 높은 성능을 보여주는 모델을 구축할 수 있지 않을까 생각합니다.
댓글 없음:
댓글 쓰기