AI대학원에서 인턴을 시작하면서 처음으로 논문을 각 잡고 읽어봤는데, 예상했던 것 이상으로 어려웠다. 계속 같은 내용을 읽기만 하는 건 별로 효과가 없을 것 같았고, 이 내용을 직접 나만의 언어로 정리하면 논문을 이해하는 데 도움이 될 것 같다는 생각이 들었다. 그리하여 이렇게 티스토리 계정을 만들어서 처음으로 글을 써보게 되었다. 논문을 읽는 것 자체도 처음이고 리뷰를 하는 것도 처음이기 때문에 틀린 내용이 있을 수도 있다는 점 양해 부탁드린다.
1. Introduction
Deep neural network는 다양한 분야에서 성공적으로 활용되어왔고 최근에는 transformer-based language model (LM)이 좋은 성능을 보여줬다. 이러한 작업이 language-based라면 simple fine-tuning을 통해 적용이 가능하지만, non-language task의 경우 architecture를 변환시키지 않을 경우 제한이 생길 수 있다. 입력 및 출력 형식이 language form이 아니기 때문에 LM을 적용시키기 위해서는 architecture의 변환이 필요해보일 수 있다. 이러한 변환을 만들기 위해서는 LM의 기본 원리를 이해하고 적절한 코드 수정 능력이 필요하다.
이에 발생하는 자연스러운 질문은 이러한 변환이 필요한지에 대한 여부이다. 다시 말하자면, non- language task에 architecture나 loss function의 변환 없이 LM fine-tuning을 적용시킬 수 있는가에 대한 질문이다. 본 연구에서는 그에 대한 답을 하기 위해 simple fine-tuning procedure for LM, Language-Interfaced Fine-Tuning (LIFT)를 개발하였다. 이것은 classification이나 regression task에 사용될 수 있다. LIFT는 2개의 단계로 나뉘어 작동하는데, (1) labeled sample을 문장으로 변환시키고, (2) sentence dataset을 통해 학습된 LM을 architecture나 loss function의 변환 없이 fine-tuning한다.
Fig.1은 LIFT를 사용하여 Iris 분류 작업을 해결하기 위해 GPT를 fine-tune하는 과정을 보여준다. LIFT는 각 레이블이 지정된 샘플을 두 가지 옵션을 갖는 문장으로 변환시킨다. 문장의 형태로 feature name과 task description을 나열하거나, 변수를 활용해 일반적인 sentence template를 활용할 수도 있다. data를 변환시킨 다음에는 architecture나 loss function의 변환 없이 LM을 fine-tuning하고, 그 이후에는 동일한 방법으로 test sample을 문장으로 변환시킨 다음 최종적으로 결과를 예측하는 것이다.
이 연구는 LIFT가 다양한 non-language task에 대해 높은 정확도의 결과값을 도출하는 것을 보여준다. Fig.2는 1000개의 sample에 대해 LIFT로 fine-tuning 과정을 거친 GPT-J model로 학습된 real function의 예시로, 이는 target predictive task가 language task가 아닌 경우에도 architrcture이나 loss function의 변환이 필수적이지 않다는 것을 보여준다. 즉, LIFT는 고도의 프로그래밍 스킬이나 머신러닝 배경지식이 없더라도 data-to-sentence conversion을 통해 결과를 얻을 수 있는 "no-code machine learning" framework이라고 할 수 있다.
본 연구는 LIFT를 사용한 natural language interface의 활용을 제안하고 있으며, 연구의 목표는 최고의 성능을 달성하는 것이 아니라 다음을 철저히 조사하는 것이다. (i) LIFT가 무엇을 할 수 있고 할 수 없는가? (ii) LIFT의 기본 특성과 한계는 무엇인가? (iii) advanced techniques를 이용하여 LIFT를 더욱 발전시킬 수 있는가?
2. Methodology and Experimental Setup
LIFT training: LIFT를 사용하여 pretrained LM을 target supervised learning task에 대해 fine-tuning하기 위해 두 단계를 적용해야 한다. (1) 각 샘플을 fixed template의 문장으로 변환하고, (2) 문장 데이터셋으로 LM을 fine-tuning해야 한다. sample r에 대한 generic template은 다음과 같다.
When we have $x1=r.x1$, $x2=r.x2$, ..., $xp=r.xp$, what should be $y$? ### $y=r.y$ @@@
이때 "###"는 질문과 답변을 분리해주는 기호이고, "@@@"는 생성의 끝을 나타내는 기호이다.
LIFT inference: inference의 경우에는 answer와 end-of-answer part를 제외하고는 동일한 prompt template을 사용한다. fine-tuned LM이 test prompt를 완료하면 task의 종류에 따라 output token을 parsing한다. classification의 경우 생성된 텍스트를 클래스 이름의 문자열 표현과 비교하고, regression의 경우 생성된 문자열을 숫자로 변환한다. 예를 들어, 출력이 "y=10.35@@@extratokens"인 경우 출력 문장을 "@@@"를 기준으로 두 부분으로 나눈 후 첫 번째 부분인 "y=10.35"를 취하여 값 "10.35"를 최종 예측값으로 parsing하는 것이다. 이때 출력값이 invalid할 수 있는데, 이 경우 decoding temperature를 0 (deterministic mode)에서 0.75 (random mode)로 증가시켜 generation randomness를 조절하면 된다. inference의 과정을 최대 5번 반복했는데도 모든 시도가 실패하는 경우에는 training set의 평균값을 반환한다. 이때 invalid output은 대부분의 tested case에 대해 1% 이하로 매우 드물게 발생한다. evaluation metrics로는 classification task의 경우 accuracy를 사용하고, regression task의 경우 RMSE, RAE error를 사용한다.
Pretrained LMs: 본 연구에서는 두 종류의 pretrained LM인 GPT-J와 GPT-3에 LIFT를 적용했다. GPT-J를 fine-tuning하기 위해서는 weight matrix를 low-rank로 업데이트해주는 parameter-efficient method인 LoRA를 사용했다. GPT-J에 대해 실험할 때는 AWS의 p3.8xlarge, p3.2xlarge instance와 로컬 서버의 RTX3090 GPU를 사용했다. GPT-3은 공개적으로 이용 가능하지 않기 때문에, OpenAI에서 제공하는 API를 사용하여 black-box GPT-3 fine-tuning을 수행하였다.
Datasets: LIFT의 동작을 더 잘 이해하기 위해 다양한 데이터셋을 디자인하고 선택하였다. classification에는 세 가지 유형의 non-language data: low-dimensional synthetic datasets, OpenML의 real tabular datasets, 그리고 vision datasets (MNIST, Fashion-MNIST and their permuted variants)를 사용하였다. regression에는 합성 데이터셋과 실제 데이터셋을 함께 사용했다. 합성 데이터셋의 경우, 입력-출력 쌍의 샘플 $(x_i, y_i)$를 $y$ ~ $f(\mathbf{x}) + N(0,\sigma^2)$로 정의했는데, 이때 $\sigma^2\geq0$은 noise level이다. feature $\mathbf{x}$를 일반적으로 hypercube $[L,U]^p$에서 uniformly sampling한 다음, regression task를 위해 다음과 같은 다양한 함수 $f$를 고려하였다. (i) linear function, (ii) quadratic function, (iii) exponential function, (iv) cosine function, (v) l1-norm function, (vi) piece-wise linear function. 이들의 2D visualization은 Fig. 2의 첫 번째 행에 제공되어 있다. 또한 Medical Insurance (Insurance), Combined Cycle Power Plant (CCPP), Servo, Student Performance (Student) 등 4개의 실제 데이터셋을 사용하였다.
Baselines: standard learning algorithm을 사용하였다. classification에는 logistic regression (LogReg), decision tree (DT), k-nearest neighbor (KNN), support vector machine with Gaussian kernel (SVM), a four-layer ReLU neural network (MLP), random forest (RF) 및 XGBoost (XG)를 사용했다. 또한 가장 빈도가 높은 class를 출력하는 majority class classifier (MCC)를 사용했다. regression에는 polynomial regression (PR), kernel ridge regression (KR), k-nearest neighbors (KNN), a three-layer ReLU neural network (MLP), Gradient Boosting Trees (GBT), random forest (RF) 및 Gaussian Process (GP)를 사용하였다. hyperparameter selection을 위해서는 parameter value에 대해 grid search를 적용하고, training set에 대해 교차 검증을 사용했다.