Pre-Trained Model (사전 학습 모델)이란 무엇인가?


여러분은 1편을 통해 GAN의 생성자 (G)와 판별자 (D)에 대해 어느정도 이해를 하고 계십니다.

이 두 녀석들의 학습이 무엇을 의미 하시는지도 알고 계시죠.

고로! 여러분은 사전학습모델이 무엇인지 이미 알고 계신겁니다.


"사전학습을 통해 여러분들은 여러분들 모델에 어느정도 보정치를 받을 수 있게 됩니다. 즉 여러분의 모델의 완성도를 높일 수 있고 적은 에포크의 모델로도 충분히 실사용이 가능한 모델을 생성할 수 있게 됩니다."


이게 대표적으로 우리가 알고 있는 사전모델에 대한 상식입니다.

하지만 과연 그럴까요?


위의 글이 틀린말은 아닙니다. 사전학습모델은 모델 생성에 있어 엄청난 베네핏을 주기 때문이죠.

하지만 사전학습모델을 정확히 알고 나면 오히려 여러분들은 찝찝한 느낌이 드실겁니다. 이유는 사전학습모델 위에 여러분이 생성한 모델이 엄연히 따지면 여러분의 모델이 아닐수도 있기 때문이죠.


사전학습모델을 로드할때, G 생성자와 D 판별자를 로드하신다는 점. 모두들 알고 계실겁니다.

이 말은 "이미 학습된 생성자와 판별자" 를 기반으로 여러분의 모델을 생성하는, 즉 사전학습모델이 여러분의 모델에 개입된다기보다는 여러분의 모델이 사전학습모델에 개입하고 있다는 설명이 더 정답에 가까울 것입니다.


지금부터 재미있는 테스트를 한번 제안해 보도록 하겠습니다.


- 1초짜리 목소리를 녹음합니다.

A : 사전학습 모델을 완전히 제외하고 모델을 생성합니다.

B : 여러분이 자주 사용하는 사전학습 모델을 로드하여 모델을 생성합니다.

- *** 학습은 5 에포크만 합니다. ***

- 해당 모델로 30초 이상의 장문을 추론하고, 여러분이 좋아하는 노래를 추론해 봅니다.


어떤 결과가 나올까요?


자! A를 여러분께서 추론해서 들어보면 도무지 이해할 수 없는 "지이이잉~" 하는 기계음만 들릴 겁니다.

반면 B를 여러분께서 추론해서 들어보시면 놀랍게도 여러분은 학습시키지 않은 영역의 모든 음절과 발음들이 정확히 들릴겁니다.


Fine-Tune 의 개념을 알고 계신 분들께서는 이 이유를 명확하게 알고 계시겠지만 처음 AI 접하시는 분들께서는 왜 이런현상이 생기는지 이해하기 어려우실 겁니다.


이미 사전 학습모델에서는 수십에서 수백명의 목소리가 녹음되어 있습니다. 여러분이 그 모델 위에 여러분의 새로운 데이터를 학습시켜 가중치를 높이게 되면 일반적으로 추론에는 여러분이 학습시킨 데이터셋을 기반으로 한 목소리가 나오겠지만 비어있는 공간은 사전에 학습한 사전학습모델의 소리가 개입을 하게 됩니다.


추론 설정에서 Feature Index의 Value를 1로 설정 (100%)하는 경우 여러분이 학습시킨 모델의 특성 가중치를 높여 사전학습 모델에서 개입하는 개입을 최소화 하며 특히 엑센트나 발음이 순수 모델의 특성을 따르게 됩니다. 이때 아티펙트가 발생하기도 하는데 쉽게 설명하면, 이는 여러분의 모델이 가진 특성을 구현하기 위해 필요한 데이터가 충분하지 않기 때문입니다. 반면 index 값을 0으로 내리면 사전학습모델의 개입이 높아져 아티펙트는 줄어들지만 모델의 특성이 줄어든다는 문제가 발생합니다.

(A와 B로 학습한 결과물을 가지고 Feature Index 값을 조정하며 차이를 알아보도록 합시다!)


즉 묘하게 그 사람의 목소리 같으면서도 그 느낌이 안나는 이유는 여러분이 학습시킨 데이터에 비해 사전학습된 모델의 개입비중이 높아지면 당연히 그런 느낌이 생길 수 밖에 없게 되는 것이죠.


AI 학습과는 별개로 여러분의 흥미를 끌 수 있는 이야기를 하나 더 해드리겠습니다.


성대모사를 잘하는 분들의 특징은 목소리의 소리를 잘 따라한다기 보다는 그 사람의 엑센트나 습관을 잘 따라합니다.

여러분이 각기 다른 연예인의 목소리를 학습하시고 그 목소리를 제 3자의 목소리로 추론한 후 feature Index 값을 0으로 맞추면 대부분의 목소리가 비슷하게 들리는 것을 알 수 있습니다. 이유는 대부분의 사람들의 말 "소리"는 비슷한 구조로 되어 있기 때문에 이 특징을 없애면 모든 소리가 다 같은 소리로 들리게 되는 셈입니다.


때론 많은 분들이 "얼마나 짧은 데이터셋"을 가지고 "얼마나 짧은 에포크"로 모델을 만들 수 있는지를 꽤나 신기해 하시는 분들이 많습니다. 하지만 이런식으로 학습된 대부분의 모델들은 본인이 학습한 모델의 느낌보다는 모두 정형화된 사전학습 모델의 소리가 개입하게 되는 것이므로 그렇게 신기해 할만한 부분은 아닐것입니다.


대부분의 사전학습모델은 최소 100에포크 / 1,000,000 steps는 기본이고 많게는 2~3백만 스텝스 이상의 학습이 진행된 모델들을 기반으로 두고 있기 때문이죠.


사전학습모델의 종류 :


1. Fine-Tune Model

2. From Scratch

3. Model to Model


사전학습 모델도 포크의 개념이 있습니다. 일본 음악 Cover 모델을 제작하시는 분들이 많이 사용하시는 Rin 모델의 포크를 살펴보면 기존 Rin 모델을 사용하여 그 위에 새로운 언어와 엑센트들을 포함시켜 다양한 베리에이션을 가진 모델들을 생성하고 있습니다. 여러분이 Original pre trained model 또는 Titan, Rin, KLM, Ov2와 같은 기존 사전학습모델에 여러분의 데이터셋을 추가로 학습시켜 사전학습 모델을 생성하는 것을 Fine Tune 사전학습모델이라고 합니다.


이러한 파인튜닝을 기반에 둔 모델들은 여러분들이 특정하고 싶은 특징들을 살리되 좀 더 적은 커버리지를 가진 소규모의 데이터셋을 가지고 사전학습 모델을 만들때 좋습니다. 특히 개인의 경우 큰 장비에 대한 부담이나 비용의 발생 없이 이러한 방식으로 사전학습 모델을 만들어 본인만의 특징을 가진 사전모델을 공유하거나 그것을 이용해 적은 준비로 꾸준한 컨텐츠 생성이 가능해집니다.


반면 아무런 사전학습 모델이 없이 순수하게 백지화 상태에서 학습 모델을 생성하려면 엄청난 규모의 데이터셋이 필요합니다. 파인튜닝의 개념과는 다르게 백지에서부터 모든 데이터를 채워가야 하기 때문에 이런 사전학습 모델을 생성하기 까지는 엄청나게 긴 시간과 준비가 필요할 것입니다. 단 이 경우 다른 모델들과는 다르게 "특성"을 타지 않습니다. 완벽히 고유한 데이터로만 구성이 되어 있기 때문입니다. 이는 마치 스테이블 디퓨전의 체크포인트를 순수 자신이 가지고 있는 데이터셋으로만 생성하는 것과도 마찬가지이므로 개인이 하기에는 다소 어려움이 따를 수 있습니다. 또한 데이터셋이 짧은 경우 생성 모델의 일반화에 부정적인 영향을 미칠 수도 있습니다.


M2M 방식의 생성은 보이스 모델을 다수 제작하시는 분들에게 좋은 방법이 될 수도 있습니다. 물론 문제점도 존재합니다. M2M이란 Fine Tune 모델을 기반으로 매번 새로운 모델을 만들때 마다 '기존에 학습했던 모델들을 사전학습모델'로 이용하는 방법입니다. 모델의 생성수에 따라 점차 데이터가 쌓여가는 방식이지만 여기에는 한계가 있습니다. 위에도 설명을 드렸지만 사전모델은 이미 학습이 되어 있는 데이터를 기반에 두고 있습니다. 이 데이터를 이용해 학습을 시키면 여러분의 터미널에서는 0 에포크 / 0 Step에서 시작하지만 실제 G/D 데이터는 기존의 데이터를 그대로 이용하는 셈입니다. 고로 데이터가 계속 중첩되다보면 예측하기 어려운 문제가 발생할 수 있습니다. 고로 동일한 인물의 모델을 지속적으로 업데이트 하여 사용하시는 분들에게는 어느정도 도움이 될 수 있지만 본격적인 사전학습모델을 만드는 방식으로는 추천하지 않습니다.


** 이러한 파인튠 기반의 사전학습을 만들때에는 해당 사전학습모델들의 특성을 표현하기 위해 "베이스 사전학습모델명" - "본인의 모델명"을 함께 기제하는 것이 좋습니다. **


다음회에 계속 !

감사합니다.