2021년 9월 26일 일요일

PR402 - 12: Slot Machines: Discovering Winning Combinations of Random Weights in Neural Networks

 오늘 리뷰할 논문은 Slot Machines: Discovering Winning Combinations of Random Weights in Neural Networks (Aladago et al. ICML 2021 accepted) 입니다. 제목이 재미있어 보여서 읽어봤는데, 내용도 정말 쉽고 간단한데 나름 흥미로워서 좋았습니다.

Link - https://arxiv.org/abs/2101.06475


Intro:

아주 예전에 Classification 대회를 나갔을 때 나쁜 마음을 먹었던 적이 있습니다. 자연어 처리 분야였는데 생각보다 제 모델의 성능이 저조해서 직접 라벨링을 고쳐서 리더보드에 올랐던 적이 있습니다. 그 때 들었던 생각이 '본선에 올라간다면, 거꾸로 내가 제출한 답에 계속 피팅을 시킨 다음에 이 모델로 돌려보면 제가 낸 퍼포먼스를 구현할 수 있습니다!' 라고 하면 되지 않나? 라는 생각을 했었습니다. weights의 평균이나 분산을 살펴봐도 그냥 training한 애들하고 큰 차이가 없는 것 같길래 '아 그냥 우연히 나온 것 같다. 계속 submission해보다가 스코어 잘 나오길래 제출했다.'라고 발뺌하면 아무도 모를거라고 생각했습니다. 물론 실제로 본선에 가서는 그냥 양심선언하고 기권했습니다만, 이걸 잡아낼 방법이 있나 하는 생각을 해보고서 나중에 제대로 연구해보고 싶다는 생각을 하긴 했습니다.

오늘 리뷰할 논문에서 위의 내용과 거의 똑같은 내용을 다룹니다. 랜덤하게 weights를 잡아서 성능이 잘 나오는 모델을 만드는 방법론에 관한 내용입니다.


Contents - Basic:

결론부터 말하자면 위의 사기(?)는 실제로 가능합니다. 오히려 정말 우연히 랜덤으로 initialization만 해도 성능이 학습된 모델에 필적하는, 아니 오히려 학습된 모델을 넘는 모델을 얻을 수도 있게 됩니다. 그러나 이럴 확률은 정말 극히 낮습니다. 그래도 이론적으로는 가능은 합니다.

오늘 논문의 논리를 간단하게 요약하면 다음과 같습니다.

기성 모델의 아키텍쳐를 그대로 가져와서 사용합니다. 그런데, 일반적인 뉴럴넷의 경우 한 레이어의 노드에서 다음 레이어의 노드로 연결되는데 곱해지는 weight이 하나인데 반해, 여기서는 여러 개를 번갈아가며 사용합니다. 즉, 모델의 모든 각각의 파라미터마다 K개의 후보군이 존재하므로 가능한 initialization의 조합은 K^(파라미터 수)가 됩니다. 이처럼 많은 조합을 시도해보면 극악의 확률도 뚫을 수 있다는 개념 정도로 이해할 수 있습니다. 


위 그림은 3개의 후보군을 도입했을 때의 내용입니다. 총 3개의 층으로 구성이 되어 있고, bias를 제외하면 weights의 개수는 총 15개(3*3 + 3*2)입니다. 각 weight마다 후보군이 3개이므로 가능한 조합의 개수는 3^15개로 대충 1400만개 정도가 됩니다. 이렇게 간단한 모델에서도 1400만개의 initialization이 나오는데, K를 늘리거나 모델이 복잡해지면 더 엄청난 횟수의 initialization을 해볼 수 있습니다.

사실 문제는 횟수의 문제가 아닙니다. 아무리 길이 많더라도 시간은 제한되어 있으니, 정해진 시간 안에 가볼 수가 없다면 무용지물입니다. 마치 슬롯머신 안에 분명히 잭팟은 들어있지만, 아무리 슬롯을 돌려도 잭팟이 잘 나오지 않는 것과 마찬가지입니다. 여기서도 비슷합니다. 슬롯머신에서는 3개의 그림만 맞추면 되지만, 우리 모델의 경우 파라미터의 개수만큼 맞추면 되는거죠. 그렇기 위해 시도해봐야 할 횟수가 너무 많기 때문에 슬롯을 '잘' 돌려야 합니다. 여기서는 각 후보군마다 점수를 매겨 해당 점수로 어떤 후보군을 쓸지 정하는 방식을 통해 결정합니다.

위 방법론이 작동하는 알고리즘은 다음과 같습니다.

1. 모델의 weights를 각 후보군마다 모두 초기화. (위의 경우에서는 총 15*3 = 45개이고, 이 값들은 training 후에도 절대 바뀌지 않음) & 추가로, 각 후보군마다 score 또한 초기화 (score 초기화는 대충 해도 성능에 영향이 없음)

2. 학습 단계 : 각 후보군 중에서 하나씩을 골라 Loss 확인 (마치 initialization 한번을 하고 성능을 확인하는 것과 같음) - Loss를 반영하여 해당 후보군들의 score를 update (이 score는 다음에 이 후보군이 선택될 확률에 영향을 미침 / weight의 값을 변동시키는게 아니라, score만 update)

3. 최종적으로, training이 모두 끝난 후 score가 가장 높은 애들을 후보군들을 골라 모델의 최종 weights로 삼음

정도입니다. 사실 제가 쓴 걸 이해하는 것보다 논문을 직접 읽으시는게 더 이해가 빠르고 잘 될지도 모르겠네요... 아무튼! 여기서 신기한 점은 최종으로 선택된 weights들도 update를 통해 도착한 지점이 아니라 처음에 그냥 정해놓은 값들 중에서 임의로 선택된 값들이라는 점입니다. 느낌 상으로는 원래의 방법론이 유도 미사일이라면, 위 논문에서 제시하는 방법론은 미사일을 아무데나 10000발 정도 쏴서 그 중에 하나는 맞춘다는 느낌이네요. 


Contents - Detail: 

좀 더 자세히는 다음의 두 가지로 나뉘어집니다. 첫째는 greedy, 둘째는 probabilistic한 방법입니다. greedy는 후보군을 선택하는 과정에서 항상 score가 제일 높은 녀석을 선택하는 방법이고, probabilistic한 방법은 아래 그림처럼 score를 softmax를 통과시켜서 나온 확률에 따라 multinomial로 선택하는 방식입니다.

(s는 각각 스코어를 말합니다.) 

결과론적으로는 greedy로 선택하는게 더 성능이 좋다고 합니다. 거의 당연하게도, greedy는 무조건 높은 녀석만 고르기 때문에 weight이 바뀔 확률이 낮고, 이에 따라 어느 정도 고정된 녀석들이 생기면 얘들한테 다른 애들이 맞춰지면 되기 때문에 더 높게 나올 수 밖에 없다고 생각합니다. (저자들도 그렇게 report하고 있습니다.)

아무튼! score 업데이트는 그냥 자연스럽게 다음과 같이 이루어집니다.


어차피 dropout처럼 선택되지 않은 후보군에 대해서는 gradient가 0이라 update되지 않기 때문에 사실상 전체 모든 후보군에 대해서 update해도 됩니다. 위와 같은 방식으로 score를 update해주면서 training을 거치다 보면 성능이 잘 나오도록 추려지더라! 같은 내용입니다.

각설하고 실험 결과를 볼까요?

Experiments:

위는 Lenet 모델에 대해서, 그냥 random initialize를 한 경우와 본 논문의 방법론을 사용해 MNIST 데이터셋에 대해서 test accuracy를 나타낸 것입니다. 그럼 이제 전통적인 방법으로 training한 녀석과 위 방법론으로 training(사실은 selection에 훨씬 가깝습니다)한 녀석의 성능을 보겠습니다.

MNIST에 대해서는 Learned보다도 더 높은 성능을, CIFAR-10에 대해서는 더 못할때도, 더 나을때도 있습니다. 다만 흥미로운 점은 후보군의 개수가 늘어날수록 성능이 높아지는게 아니라, 너무 늘어나게 되면 오히려 성능이 줄어든다는 점입니다. 아마 너무 길이 많아져서 후보군을 선택하는데 지장을 줘서 그런 것으로 보입니다. 아무튼 Learned의 성능과 Slot을 미친듯이 많이 돌려서 건진 녀석하고 어느정도 비빌 수는 있다는 것 자체가 신기하긴 합니다.


Conclusion:

들 수 있는 의문점: training하는 것보다 오히려 자원을 많이 사용하는데 성능도 잘 나오는 것도 아니고, 왜 쓰는거지?

-> 본 논문의 목적은 사실 앞으로 이런 방법론을 사용하자! 라는 것이 아닙니다. training을 하지 않아도, 우리가 사용하는 initialization의 범주 안에도 잭팟은 숨어있었다는 점을 인지하고, 이를 바탕으로 차후에 initialization에서 사용할 직관을 이끌어내자! 입니다. 

개인적인 관점:

아이디어는 좋은데 future works에 서술한 걸 보아도 그렇고 너무 이 직관의 활용 방안을 initialization에 국한시키고 있다는 느낌이 듭니다. 제가 예전에 서술했던 그 SWAG을 통한 Simplex 논문에서도 그렇고, 저는 뭐랄까 좀 '구조적으로' weight space에서의 정답을 찾는 방법론으로 나아가야 한다고 생각하는데 그런 시도는 아닌 것 같아 아쉽습니다. 충분히 그런 내용으로 나아갈 수 있었다고 생각하는데 생각보다 어렵나봅니다. 저도 시간 날 때 종종 생각해봐야겠네요.

오늘 리뷰는 여기서 마치겠습니다!

읽어주셔서 감사합니다.

댓글 없음:

댓글 쓰기