Reference
https://iai.postech.ac.kr/teaching/machine-learning
https://iai.postech.ac.kr/teaching/deep-learning
위 링크의 강의 내용에 기반하여 중요하거나 이해가 어려웠던 부분들을 정리하여 작성하였고,
모든 강의 슬라이드의 인용은 저작권자의 허가를 받았습니다.
또한, 모든 내용은 아래 Notion에서 더 편하게 확인하실 수 있습니다.
>>노션 링크<<
Keywords
- Pre-trained Models
- Transfer Learning
Transfer Learning (전이학습)
모델을 완전 처음에서부터 학습시키는 일은, 때로는 몇 시간, 몇 일, 나아가 몇 주가 걸리는 경우도 허다하다.
다행히도 많은 이미 학습된 모델들이 사용할 수 있도록 공개되어 있다. 이를 이용해 보자는 것이 전이학습(Transfer Learning)이다.
CNN을 예로 들어 생각해 보자. (ImageNet의 VGG-16, VGG-19와 같은 모델을 생각하면 좋을 것.)
우리가 학습하였던 CNN에서 거의 마지막 Layer만이 Classification을 수행하고, 앞의 나머지 Layer들(Convolutional Layer)은 Feature extract를 수행했다.
그렇기 때문에 그 마지막 Layer만 제거하면, 앞의 Network는 일반적인 이미지에 대한, general한 feature extractor로써 사용할 수 있다.
내부적으로 edge, texture, shape, object composition과 같은 feature에 대한 extract를 general하게 수행할 것이라 기대하며 이용한다는 것.
물론 동일한 domain 내에서 전이학습을 수행하였을 때가 훨씬 좋은 성능을 낳는다. (ex. 이미지로 학습하였으면 이미지를 분류도록 전이학습을 수행해야. 또는 이미지와 비슷한 종류의 domain.)
그럼 이 앞의 Network는 그대로 이용하고, 뒤에 우리가 원하는 새로운 task(data)에 대한 classification을 수행하는 Layer만 붙여 학습하면 된다는 것이다.
사과를 깎을 줄 아는 사람에게 배를 깎으라고 시킬 때, 처음부터 배를 깎는 연습을 시킬 필요가 없다는 예시가 제일 이해하기 쉬운 것 같다. 듣고 너무 웃겼음.
그래서 다시 말하자면, 전이 학습의 아이디어는,
이미 학습된 모델은 그 모델이 학습한 dataset에 대한 정보를 이미 알고 있고, 그 정보를 이용하여 우리가 원하는 target dataset을 분석하는 데에도 그대로 적용이 가능할 것이라는 생각에서 나온 것이다.
Output Layer에 대한 것은 처음부터 새로 training해야 하지만(classification을 하는 끝부분), 나머지 Layer의 parameter들에 대해서는 이미 학습되어 있는 모델의 것을 그대로 사용하거나, fine tuning을 수행하여 사용할 수 있다. 또는 모든 parameter에 대해 이미 학습된 모델의 것으로 초기화시켜 target data로 학습하면, 더 빠른 수렴을 기대할 수 있다.
- 앞의 Layer를 그대로 이용
- Fine tuning하여 이용
- 이미 학습된 값으로 초기화시킨 후 학습시키기
위는 VGG16을 이용해 transfer learning을 하는 예시이다.
위와 같이 앞쪽 부분은 모두 그대로 두고, 마지막 부분만 새로 학습시키겠다는 것.