1. 도입

  • Deep Learning이라는 개념이 폭발하기 시작한지도 한 10년쯤 지난듯 하다. 물론 대중적으로는 알파고의 파급력이 제일 컸겠지만 학술적으로는 2012년에 발표된 AlexNet이 사실 현대 DeepLearning의 시발을 알린 모델이기에 10년이라 표현한것이다.
  • Deep Learning은 기본적으로 좋은 성능을 내도록 훈련시키는데 많은 리소스가 필요하다. 물론 반도체의 눈부신 발전과 더불어 예전에는 상상하지 못했던 계산능력을 한 chip에 넣는게 가능해졌지만 그럼에도 불구하고, 여전히 수많은 컴퓨팅파워가 소모된다.(2008년 세계1위 슈퍼컴퓨터의 계산능력이 1페타플롭스였지만, 현재 AI용 최고위 가속기인 H100의 성능이 1페타플롭스(TF32 텐서코어 성능 기반) 정도 한다.)
  • 요새 가장 핫한 AI분야인 LLM(Large Language Model)은 한번 훈련에 H100이전 버전인 A100을 수천개단위에서 만단위로 사용한다. 기본 모델인 트랜스퍼 모델의 특성상 전체 훈련데이터의 반복횟수를 세는 기준인 epoch이 많지는 않지만 기본적으로 훈련데이터의 크기가 수테라바이트에서 페타바이트까지 가기때문에 훈련시간도 긴편이다.(1주일 가량) 때문에 이과정에서 발생하는 에너지 소모도 어마어마하다. 이러한 LLM을 각 도메인에 맞게 훈련시킬때 매번 새로 훈련시키는 것이 아니라. Fine Tuning이라는 기법을 사용한다. 굳이 해석하면 '미세 조정'쯤으로 생각할 수 있는데, 이렇게 하면 LLM이 가지고있는 수천억개의 매개변수를 비교적 적게 수정하고도 높은 성능을 낼 수 있다고 합니다.
  • 결국 한번 훈련해서 최적화된 모델이 있다면, 이 모델을 어떻게 효율적으로 쓸 것인가에 관한 고민이 두 단어로 표현된다고 보면 될 듯 합니다.

2. 학습된 매개변수를 이용하는 방법

  • 딥러닝을 한문장으로 표현하면 '빅데이터를 입력해서 엄청난 수의 매개변수를 오차역전파라는 방법을 통해 최적화 하는 과정'이라고 표현 할 수 있습니다.
  • 그렇다면 이 학습된 매개변수를 어떻게 이용 할 것인가라는 고민이 트랜스퍼 러닝과 파인튜닝입니다.

1) Transfer Learning

  • 일단 1차 결론부터 말씀드리면, 학습된 매개변수를 이용하는 모든 학습방법을 Transfer Learning이라 하고, 그 중 한 방법이 Fine Tuning이라고 보시면 되겠습니다. 조금 허무하죠? 조금 자세히 알아보겠습니다.

(1) 개와 고양이를 구분하는 AI

  • 자 우리가 개와 고양이를 구분하는 AI를 만든다고 생각해볼까요?
  • 우선 개와 고양이의 사진이 수천 수만단위로 있다면 classification deeplearning model를 구성해서 그냥 훈련을 돌려 버리면 됩니다.
  • 그런데 만약 우리가 개와 고양이 사진이 100개씩 밖에 없다면? 어떻게 해야 할까요? 물론 이경우 data증강(data augmentation) 방법을 사용해서 data의 수를 늘릴수 있겠지만 적은 데이터는 필연적으로 over fitting문제를 일으킬 수 밖에 없습니다. 그런데 개와 고양이 사진은 별로 없지만, 다른 이미지들이 엄청나게 많다면 어떻게 하는 것이 좋을까요? 그럴때 transfer learning이 필요하게 됩니다.
  • 방법은 이렇습니다. 먼저 classification deeplearning model을 구성합니다. classification deeplearning model로 개와 고양이 이미지 말고, 다른 이미지로 classfication 훈련을 진행합니다. 이 모델은 classification 즉 분류에 최적화된 성능을 갖게 됩니다. 이후에 classification deeplearning model에서 fully connected layer를 지우고 개와 고양이를 구분하기 위한 fully connected layer를 새로 만들어 준 뒤에 개와 고양이 사진으로 다시 훈렵합니다.(보통 일반적인 classification deeplearning model은 간단히 말하면, convolution layer와 fully connected layer로 구성됩니다.) 전체 레이어에 대해 훈련을 진행 할 것인지 convolution layer는 기존에 훈련된 상태로 고정해놓고, fully connected layer만 훈련할지는 개와 고양이 이미지의 양에 따라 결정하면 됩니다. 적으면 fully connected layer만 훈련하면 되고, 충분한 데이터가 있다면 전체 layer에 대해 훈련을 진행하면 됩니다.

(2) pre-training과 fine tuning

  • 위의 예에서 일반이미지로 훈련하는 것을 pre-training이라고 합니다. 그리고 이후에 개와 고양이 사진으로 훈련 하는 것으 fine tuning이라고 합니다. 즉 목표한 task에 맞게 '미세조정'하는 것을 fine tuning이라고 보시면 되겠습니다. 이미지 분류를 잘 하도록 훈련시킨뒤에 개와 고양이만 잘 분류하도록 다시 훈련시키는 것 이라고 이해하시면 되겠습니다.
  • 단순히 개와 고양이만 분류하도록 훈련시키는 것 보다 이미지 분류를 먼저 아주 잘 하도록 훈련시킨뒤에 개와 고양이를 잘 분류하도록 훈련시키는 것이 더욱 성능이 높을 것입니다. 위의 개와 고양이 분류 task에서 개와 고양이 데이터가 수만장이 있다고 하더라도, 단독 훈련보다는 기본 일반 이미지로 잘 훈련된 분류모델을 transfer 해와서 개와 고양이 데이터로 fine tuning하게 되면 개와고양이 이미지로 단독 훈련 했을 때 보다 더욱 성능이 높을 것입니다.
  • 그래서 CV(Computer Vision) task에서 backbone network라는 용어가 생겨났습니다. 많은 deeplearning framework가 잘 훈련된 기본 모델(VGG, RESNET, efficientNet 등등)을 지원합니다. 잘 훈련된 모델 매개변수를 가지고 다른 여러 모델을 만들 수 있도록 말이죠.
  • 결국 transfer learning이 되려면 pre-training하는 모델의 low level feature가 fine tuning하려는 데이터와 연관이 있어야 하는 것입니다. 음성인식하는 모델의 매개변수를 transfer해서 개와고양이를 분류하는 모델을 만드는데 쓸 수 없다는 이야기 입니다.
  • 요새 너무나도 핫한 AI인 chatGPT의 경우 사전 훈련된 GPT-3.5모델을 chatbot에 맞도록 fine tuning해서 서비스하는 모델입니다. 물론 이 짧은 문장안에 수많은 방법론과 데이터가 있지만 매우 간단히 이야기 하면 그렇다는 것입니다.

2) fine tuning이 아닌 transfer learning

  • 그렇다면 fine tuning이 아닌 transfer learning이 있을까요? 네 있습니다.
  • 가장먼저 deep learning을 2 stage로 구성할 경우입니다. 하나의 예를 들어보고 싶습니다. 이미지에서 특정 object를 인식해서 bounding box를 치는 것은 object detection task라고 합니다. 이 경우 예전에는 2stage로 구성해서 작동하는 모델을 많이 연구했습니다. 지금에는 YOLO라는 매우 획기적인 1 stage모델이 주류로 쓰이고 있지만, 여전히 특정분야에서는 아직도 2 stage 모델이 쓰이기도 합니다. 이것 또한 간단히 설명하면 첫번째 stage에서는 이미지를 인식하고 분류하는 classification 모델이 작동하고, 그 결과물을 받아 bounding box를 그리기 위한 network를 작동시키게 됩니다. 이 경우 잘 훈련된 imgae classification 모델의 마지막 layer를 제거하고, bounding box 좌표를 위한 새로운 layer구성해서 결합시킨 뒤에 바운딩 박스가 쳐져있는 데이터로 훈련하면, 이미지에서 object를 인식해서 bounding box를 그리는 object detection 모델을 만들 수가있습니다.
  • 두번째로 NLP task에서 LSTM이나 RNN같은 순환신경망을 이용하는 경우에 word embedding layer를 기존에 훈련된 word embedding layer에서 가져오는 방법도 있습니다.

3. 결론

  • 딥러닝에서 훈련된 매개변수를 이용하는 모든 방법을 transfer learning이라 할 수 있습니다.
  • fine tuning은 transfer learning의 한 종류이며, 훈련된 모델을 좀더 specific하게 만드는 경우 필요합니다.
  • fine tuning할 경우 일부 레이어만 훈련 다시 훈련할 수 있고, 전체 레이어에 대해 다시 훈련 할 수 있습니다. 이것은 기본 모델과 fine tuning하려는 데이터 간의 연관성과 데이터의 양에 따라 유동적으로 선택이 필요합니다.
  • fine tuning이 아닌 transfer learning도 존재합니다. 성격이 다른 두가지 deep learning모델을 결합하거나, NLP task에서 word embedding layer를 훈련된 레이어로 가져올 때 쓰입니다.

4. 출처

profile
AI Developer를 꿈꾸는 늦깎이 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN