AI

pre-training과 fine-tuning 그리고 전이 학습

bbooo 2023. 2. 2. 10:10
728x90

전이학습이란

전이학습은 특정 분야에서 학습된 신경망의 일부 능력을 유사하거나 새로운 분야에서 사용하는 신경망의 학습에 이용하는 방법이다. 이미 잘 훈련된 모델을(학습된 신경망) pretrained model이라고 부르며 대표적으로 ImageNet, ResNet, VGGNet 등이 있다. 대규모의 데이터셋으로 잘 훈련된 pretrained model들을 사용자가 원하는 task(downstream task)에 맞게 모델의 가중치를 약간씩 변화하여 사용한다. 

앞서 만든 모델로 호랑이, 표범을 구분시키게 하기 위해 새로운 데이터셋 (x,y)로 다시 학습시킴. 

 

Pre-training

밑바닥부터 만들었고 이미 학습이 완료되어 output이 도출이 가능한 이 모델을 pre-trained model이라고 부른다. MLP에서 weight와 bias를 잘 초기화 시키는 방법으로 사용되며, 이러한 pre-training을 통해 효과적으로 layer를 쌓아서 여러개의 hidden layer도 효율적으로 훈련할 수 있다. 

개와 고양이를 분류하는 모델을 만들고자 (x,y)쌍을 학습시킴. 

 

Fine-tuning

기존에 학습되어져 있는 모델을 기반으로 아키텍쳐를 새로운 목적에 맞게 변형하고 이미 학습된 모델 weights로부터 학습을 업데이터 하는 방법이다. 기존에 학습이 된 레이어에(사전 학습 모델에) 내 데이터를 추가로 학습시켜 weight를 업데이트 해야만 파인튜닝이라고 할 수 있다. pre-trained model을 사용함으로써 적은 데이터셋으로도 효과적으로 학습을 수행할 수 있게 된다. fine tuning을 하는 방법에는 여러가지가 존재하는데, 해당 글은 참고자료 4를 참고해보자.. 

표범과 호랑이를 구분하는게 아니라 모든 포유류를 분류하고 싶을 때 output layer를 삭제하고 다른 layer들을 붙여서 다시 훈련시킴. 얻고자 하는 결과값이 다르기 때문에 output layer를 삭제시킨다. 

 

Pretext task

pre-training을 하기 위해 이용하는 task

 

Downstream task

구체적으로 풀고 싶은 문제들이며 fine tuning을 위해 이용하는 task

최근 NLP에서 언어 모델을 pretrain 방식을 이용해 학습을 진행하고, 그 후에 원하고자 하는 task를 fine-tuning방식을 통해 모델을 업데이트 하는 방식을 사용하는데, 이 때의 task를 downstream task라 한다.

 

전이학습에서의 evaluation

self-supervised learning에서는 대표적으로 두 가지 방법으로 성능을 측정한다.

1. Linear Evalutation

pretext task 수행을 통해 학습된 파라미터는 freeze 시키고 뒤에 linear classifier를 붙여서 downstream task를 수행한 다음 정확도를 측정한다.

2. Fine tuning

pretext task로 학습된 파라미터를 freeze 시키지 않고 전체에 대해 fine tuning하여 정확도를 측정한다.


참고자료 

[1] The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning) – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)

[2] Pre training & Fine tuning (velog.io)

[3] [ 딥러닝 알아가기 ] Transfer Learning과 Fine Tuning — 글쓰는공대생의 IT블로그 (tistory.com)

[4] [DL] Transfer Learning vs Fine-tuning, 그리고 Pre-training (tistory.com)

[5] Image Feature Learning - Self-Supervised Learning (1) _ Generative, Predictive, Synthetic - ZZEN’s Blog (nuguziii.github.io)

728x90