머신 러닝 모델을 만들 때, 가장 쉽게 성능을 끌어올리는 방법 중 하나가 바로 ‘Ensemble’ 입니다. 동일한 모델 구조에서 initialization을 다르게 해서 여러 번 학습하거나, 다른 구조의 neural network를 여러 개 만든 뒤, 이들로부터 나오는 결과를 평균을 내거나 여러가지 방법으로 합치는 방법을 뜻하는데요. 각각의 모델이 가지는 training error가 비슷하더라도, ensemble된 결과는 보통 하나의 모델을 사용하는 것 보다 더 낮은 test error를 보여줍니다. 즉, generalization 능력이 더 향상된다고 볼 수도 있겠습니다. 특히 최근 개최된 ImageNet Challenge나 Microsoft COCO, Kaggle과 같은 여러 machine learning competition들은 최종 성능으로 우위를 정하기 때문에, 시간과 컴퓨팅 파워가 받쳐준다면 더 deep한 모델과 이러한 모델들을 여러 개 만들어 ensemble 하는 방법은 성능을 끌어올리기에 쉬우면서도 효과적이기 때문에 많이 사용되는 모습을 볼 수 있습니다.

[20180322] Research seminar - Google Slides 2018-03-22 17-35-24
Deeper model과 ensemble의 조합은 성능을 끌어올리기엔 가장 쉬우면서도 효과적인 방법이죠 !

최종 성능을 끌어올리기에는 쉬우면서도 좋은 방법이지만, 우리가 실제로 ensemble된 모델을 사용하기에는 소모되는 컴퓨팅 파워와 메모리 공간 대비 얻어지는 성능의 효율은 무척이나 떨어집니다. 큰 연구소나 회사와 같이 고성능의 컴퓨팅 자원을 가진 곳이야 상관 없을수도 있겠지만, 보통은 제한된 컴퓨팅 자원에서 최대한 효율적인 모델을 구축해야 합니다.

[20180322] Research seminar - Google Slides 2018-03-22 16-32-35
거대한 ensembled neural network가 가진 knowledge를 추출해 single neural network에게 전달하는 방법이 있을까?

모델 ensemble을 통해 얻을 수 있는, 성능을 높여줄 수 있는 generalization 능력을 상대적으로 작은 규모의 single neural network가 전달(transfer)받을 수 있다면 유용하지 않을까요? Bigger ensembled neural network가 지닌 knowledge를 smaller single neural network로 전달해줄 수 있는 방법 중 하나로 knowledge distillation 이라는 방법을 본 논문에서 소개하고 있습니다.

Distilling the Ensemble Knowledge

Distillation

 

Distillation (증류) 는 불순물이 섞여 있는 혼합물에서 원하는 특정 성분을 분리시키는 방법을 말합니다. 본 논문에서 말하는 neural network에서의 knowledge distillation은 불필요하게 많은 parameter가 사용되는 (불순물이 많이 섞인) ensemble model로부터, generalization 성능을 기존 대비 향상시킬 수 있는 knowledge들을 분리해 내는 방법을 말합니다.

[20180322] Research seminar - Google Slides 2018-03-22 16-37-51.png
Softmax output from the model ensembles

보통 image recognition task에서 모델이 주는 최종 output은 여러 카테고리에 대한 합이 1이 되는 확률을 주는 softmax output을 주로 사용하는데요. 본 논문에서는 이 softmax 결과가 모델이 지니고 있는 knowledge를 함축해서 담고 있다고 봅니다. Ensemble 모델의 softmax 결과를 새로운 neural network가 잘 전달받을 수 있다면 기존 거대한 ensemble 모델이 지니고 있던 knowledge들을 상대적으로 작은 크기의 single neural network가 학습에 활용하여 기존과 비슷한 성능을 지닐 수 있습니다.

Softmax Output = Knowledge = Soft Label

[20180322] Research seminar - Google Slides 2018-03-22 16-41-24
Comparison with the ‘hard label’ and the ‘soft label’

우리가 일반적으로 여러 개의 카테고리가 존재하는 image recognition task를 풀기 위해 neural network를 학습하는 방법은, input data에 대한 softmax output이 정답(label)과 최대한 비슷해지도록 softmax cross-entropy loss를 최소화하는 방식이 주로 사용됩니다. 이렇게 학습된 neural network로부터 얻을 수 있는 softmax output에는 생각보다 많은 knowledge가 담겨 있습니다. 위의 예시와 함께 설명을 하면 좀 더 쉽게 이해에 도움이 될 것 같네요.

위 예시에는 강아지이긴 한데 뭔가 고양이와도 많이 닮은 강아지가 있네요. 학습을 위해 본 이미지의 정답은 “강아지”로 기록되어 있습니다. 주어진 정답으로 학습을 하게 되면, 본 이미지로부터 얻어낼 수 있는 knowledge는 이 이미지는 강아지다 라는 정보밖에 없습니다.

하지만 우리가 generalization 성능이 좋은 잘 학습된 neural network를 가지고 있다면, 위 이미지를 입력으로 넣어서 얻을 수 있는 softmax 결과는 두 번째 줄 (p=[10^{-6}, 0.9, 0.1, 10^{-9}])과 비슷하게 나올 수 있을 겁니다. 이는 기존에 제공되는 정답 (p=[0, 1, 0, 0]) 보다 훨씬 많은 정보를 담고 있습니다. Softmax output으로 모델이 배울 수 있는 정보를 유추해보자면 위 이미지가 강아지를 90% 정도 닮은 것 같은데, 10% 정도는 저게 고양이같이 생기기도 하고, 0.000001% 확률로 뭔가 이미지에 보이는 털이 일반적인 소가 가지고 있는 털과 좀 유사한거 같기도 하고, 0.000000001% 엄청 작은 확률이지만 뭔가 자동차 이미지들에서 자주 나오는 직선적인 느낌과 질감이 그림 뒤에 있는 듯 한?! 이런 학습에 도움이 될 수 있는 추가적인 knowledge들을 담고 있다고 볼 수 있습니다.

이처럼 기존의 거대한 neural network가 가지고 있는 knowledge를 또 다른 보다 작은 neural network에 효율적으로 전달(transfer) 할 수 있는 knowledge를 추출(distillation) 해 낼 수 있는 방법 중 하나가 바로 입력 데이터로부터 얻어낼 수 있는 softmax output이 되는 겁니다.

여기서, 입력 데이터들이 바로 knowledge를 전달하기 위한 “매개체” 역할을 한다고 볼 수 있겠는데요. 이 매개체는 원래 모델의 학습에 사용되었던 original training data가 될 수도 있겠고, 또는 학습에 전혀 사용되지 않았던 external unlabeled data가 될 수도 있습니다. 이 둘의 차이점은 전자는 데이터에 대한 정답이 주어져 있고, 후자는 없다는 것이죠. 논문에서는 original training data로 knowledge distillation을 수행하는 것이 효과가 더 좋았다고 합니다. 하지만 그냥 효과가 더 좋은 건 아니고, 기존 학습에 사용된 original training data는 정답이 주어져 있기 때문에 학습 시에 기존의 정답 (hard label)과 모델이 유추해낸 softmax output (soft label) 을 둘 다 사용할 수 있기 때문입니다.

Softer Softmax

[20180322] Research seminar - Google Slides 2018-03-22 17-24-15
Softmax with temperature T

Softmax output으로부터 모델을 학습할 때, 더 많은 knowledge들을 전달하기 위한 방법을 논문에서 소개하는데요. 기존 softmax function에서 temperature라는 파라미터 T 를 추가하여, T가 높을수록 기존보다 더 soft한 probability distribution을 얻을 수 있도록 만들었습니다. Temperature라고 파라미터 이름을 지은 게 굉장히 은유적인 표현인 듯 합니다. 증류를 할 때 불순물을 가열해서 물질을 추출해내게 되는데, 이 때 가열하는 온도(temperature)를 잘 조절 해 주면 증류가 더 잘 될 수 있겠죠? 아까 위에서 살펴본 강아지의 예시처럼, 일부 클래스들에 대한 probability는 거의 0에 가까워서 학습 시에 정보가 잘 전달되지 않을 수 있으므로 이를 좀 더 soft하게 만들어 학습에 잘 반영될 수 있도록 만드는 역할을 합니다. 논문에서는 실험적으로 T가 2~4 정도일 때 distillation이 효과적으로 적용되었다고 기술되어 있습니다. T가 1이 되면 기존에 사용되는 softmax function과 동일해집니다.

Experiments on MNIST

 

[20180322] Research seminar - Google Slides 2018-03-22 17-47-06
MNIST set

 

본 논문에서는 우선 실험을 MNIST dataset에서 진행하였습니다. MNIST는 손으로 쓴 0~9 까지의 글자로 이루어져 있고, 학습 데이터 6만장과 테스트 데이터 1만장이 주어진 셋입니다.

우선 가장 기본적인 baseline을 만들기 위해 784 → 800 → 800 → 10 구조의 간단한 net A를 구성하여 학습하였고, 146 test error를 보였습니다.

baseline보다 높은 성능의 neural network를 만들기 위해 파라미터 수를 보다 늘리고, dropout과 input jittering을 추가한 784 → 1200 → 1200 → 10 net B 를 학습하여 67 test error를 얻었습니다. 앞서 설명한 ensembled network의 간소화 버전(?) 이라고 볼 수도 있겠네요.

이제, knowledge distillation을 적용해보기 위해 학습된 net B로 original training data에 soft label을 생성하고, 원래의 hard label과 soft label을 둘 다 활용하여, net A와 구조가 동일한 784 → 800 → 800 → 10 구조의 net C 를 학습하였더니, 기존 net A 보다 훨씬 성능이 좋은 74 test error를 지니는 모델이 학습됨을 볼 수 있었습니다. 즉, net B가 가진 knowledge들이 soft label에 들어 있고, 이를 net C가 잘 전달받아 기존 net A와 동일한 구조이지만 더 좋은 성능을 가지게 되었다고 볼 수 있습니다.

A very Surprising Result on MNIST

 

[20180322] Research seminar - Google Slides 2018-03-22 18-01-50
MNIST without “3”

 

이번엔 조금 더 재미있는 실험을 진행했는데요. 잘 학습된 모델이 주는 softmax output이 많은 knowledge를 가지고 있다면, 과연 학습 데이터에서 한 category를 전부 보여주지 않고, soft label을 통해 보여주지 않은 category를 유추할 수 있지 않을까요?

MNIST dataset에서 숫자 “3”에 해당하는 모든 데이터를 일체 보여주지 않고 neural network를 knowledge distillation을 통해 학습시키게 되면, 결과가 놀랍게도 109 test error를 보여주고 심지어는 test set에 “3”이 1010개 존재하는 데 그 중 14개 (98.6% accuracy) 만 틀렸다고 하네요!

즉, 학습하는 모델이 학습 도중에 “3” 이라는 숫자를 단 한번도 본 적이 없지만, soft label을 통해 “3”과 비슷하게 생긴 다른 숫자들을 통해 유추해내는 거죠. 마치 이 숫자 “9”는 뭔가 “3”이랑 10.2% 비슷하게 생겼네, 이 숫자 “2”는 “3”이랑 5.82% 비슷하게 생겼어, 이런 식으로 상상하며 배운 “3” 이라는 카테고리가, 실제로 “3”이 나타났을 때 아! 저게 내가 상상하던 “3”이 분명하구나! 라고 맞출 수 있게 모델이 학습할 수 있었던겁니다.

An Even More Surprising Result on MNIST

 

[20180322] Research seminar - Google Slides 2018-03-22 18-18-28
MNIST with only “7” and “8”

 

아까 실험에 이어서, 하나의 카테고리가 없어도 학습이 잘 된다면, 아예 대부분의 카테고리를 없애버리고 학습해보면 어떨까?! 라고 생각했는지, MNIST에 존재하는 모든 숫자중에 “7”과 “8”만을 남기고 나머지 숫자들을 모두 보여주지 않고 knowledge distillation을 진행해 보았습니다. 이번엔 더 놀랍게도, “7”과 “8”만을 보고 학습했음에도 불구하고 모든 카테고리에 대해 87% test accuracy 를 보여줬다고 하네요! 논문에서 주장한 대로, softmax output에 많은 knowledge가 담겨 있어 이를 잘 전달받을 수 있다면, 학습을 진행하는 student network가 원래 학습 데이터의 전체를 보지 않고 일부분만을 활용하더라도 대부분의 정보를 학습할 수 있는 것으로 보여집니다. 물론 실험에 사용된 네트워크의 크기도 작고, MNIST dataset은 비교적 쉬운 task에 속하기 때문에, 실제 다른 deep network가 필요한 복잡한 문제에서도 잘 작동할지는 의문입니다.

논문에서는 speech recognition, 그리고 JFT dataset 에서 추가적인 실험을 진행하였지만, 본 포스트에서 해당 내용은 생략하였습니다.

Conclusion

거대한 ensembled model이 가지고 있는 좋은 knowledge를 비교적 간단하게 해당 모델의 softmax output을 활용해서 small single network에 전달해 줄 수 있는 knowledge distillation 방법은 꽤나 좋은 아이디어이고, 활용도도 높을 거라고 예상됩니다.

하지만 이러한 방법이 MNIST라는 작은 데이터에서 실험을 진행해서 검증을 하였고, 추후에 나온 여러 논문들에서 더욱 복잡한 문제와 deeper network 환경에서는 softmax output만으로 knowledge를 전달하기에는 무리가 있다는 의견도 있습니다.

최근에는 본 논문처럼 단순히 bigger model의 정보를 smaller model로 전달하는 방법 뿐만 아니라, 약간의 변형으로 기존에 학습된 정보를 그대로 유지하면서도 추가적인 데이터로부터 학습을 진행하기 위한 learning without forgetting [1], model ensemble 대신 data transformation 으로부터 knowledge를 추출해 전달하는 data distillation [2] 과 같은 본 논문에 기반한 여러 후속 연구들이 나오고 있으므로 이러한 후속 연구들을 같이 살펴보는 것도 괜찮을 것 같습니다.

 

본 포스트 작성을 위해 아래 자료들을 참고하였습니다.

 

[1] Z. Li, D. Hoiem. Learning without Forgetting. ECCV 2016.

[2] I. Radosavovic, P. Dollar, R. Girshick, G. Gkioxari, K. He. Data Distillation: Towards Omni-Supervised Learning. CVPR 2018.

 

 

 

 

 

Posted by:Byungjae Lee

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s