구글의 연구원들은 2017년 논문에서 시퀀스 모델링(sequene modeling)을 위한 새로운 신경망(neural network) 아키텍처를 제안했다.
트랜스포머라는 이름의 이 아키텍처는 기계 번역 작업의 품질과 훈련 비용 면에서 RNN을 크게 능가했으며, 효율적인 전이 학습(transfer learning) 방법인 ULMFiT가 매우 적은 양의 레이블링된 데이터로 최고 수준의 텍스트 분류 모델을 만들어냄을 입증했다.
이는 현재 가장 유명한 두 트랜스포머, GPT와 BERT의 촉매가 되었다.
이들은 트랜스포머 아키텍처와 비지도 학습(unsupervised learning)을 결합해 밑바닥부터 훈련할 필요를 없애고 거의 모든 NLP 벤치마크에서 큰 차이로 기록을 경신했다.
트랜스포머 모델을 이해하기 위해, 다음의 내용을 먼저 다루어보겠다.
트랜스포머가 등장하기 전, NLP에서는 LSTM과 같은 RNN 구조가 최선이었다.
시간 축을 따라 펼친 RNNRNN은 입력을 받아 네트워크를 통과시킨 후 은닉 상태(hidden state)를 출력하고, 피드백 루프로 보내 자기 자신에게 다시 입력함으로써 출력한 정보의 일부를 다음 스텝에 사용한다. 이러한 구조는 NLP 작업, 음성 처리, 시계열 작업에 널리 사용되고 있다.
RNN은 단어 시퀀스를 한 언어에서 다른 언어로 매핑하는 기계 번역 시스템을 개발할 때 중요한 역할을 했으며, 이는 인코더-디코더(encoder-decoder) 또는 시퀀스-투-시퀀스(seq2seq) 구조로 처리하며 입력과 출력이 임의의 길이를 가진 시퀀스일 때 잘 맞는다.
인코더는 입력 시퀀스의 정보를 마지막 은닉 상태(last hidden state)라고도 부르는 수치 표현으로 인코딩하고, 이 상태가 디코더로 전달돼 출력 시퀀스가 생성된다.
한 쌍의 RNN으로 구성된 인코더-디코더 구조이러한 구조는 간결하지만, 인코더의 마지막 은닉 상태가 정보 병목(information bottleneck)이 된다는 약점이 있다. 디코더는 인코더의 마지막 은닉 상태만을 참조해 출력을 만들므로 전체 입력 시퀀스의 의미가 담겨야 하기 때문이다.
다행히 디코더가 인코더의 모든 은닉 상태에 접근해 이 병목을 제거하고, 이러한 메커니즘을 어텐션(attention) 이라고 한다.
어텐션은 입력 시퀀스에서 은닉 상태를 만들지 않고 스텝마다 인코더에서 디코더가 참고할 은닉 상태(hidden state)를 출력한다는 주요 개념에 기초한다.
하지만 모든 상태를 동시에 사용하려면 디코더에 많은 입력이 발생하므로, 어떤 상태를 먼저 사용할지 우선순위를 정하는 메커니즘인 어텐션(attention)이 필요하다. 디코더는 모든 타임스텝마다 인코더의 각 상태에 다른 가중치, '어텐션'을 할당한다.
한 쌍의 RNN과 어텐션 메커니즘으로 구성된 인코더-디코더 구조그러나 어텐션만으로는 순환 모델의 단점을 완벽히 해결할 수는 없다. 계산이 순차적으로 수행되며 입력 시퀀스 전체에 걸쳐 병렬화할 수 없기 때문이다.
이에 트랜스포머는 순환을 모두 없애고 셀프 어텐션(self-attention)을 사용해 모델링 패러다임을 바꿨다.
원본 트랜스포머의 인코더-디코더 구조트랜스포머 논문에서는 대규모 말뭉치에서 번역 모델을 훈련했으나, 많은 실용적인 NLP 애플리케이션은 모델 훈련에 사용할 레이블링된 대규모 텍스트 데이터를 구하기 때문에 전이 학습을 필요로 하게 되었다.
구조적으로 볼 때 모델은 바디(body)와 헤드(head)로 나뉜다.
바디의 가중치는 훈련하는 동안 원래 도메인에서 다양한 특성을 학습하고, 이 가중치를 사용해 새로운 작업을 위한 모델을 초기화한다. 전이 학습은 일반적으로 다양한 작업에서 적은 양의 레이블 데이터로 훨씬 효과적으로 훈련하는 높은 품질의 모델을 만든다.
전통적인 지도 학습(왼쪽)과 전이 학습(오른쪽)의 비교컴퓨터 비전과 달리, NLP에서는 전이 학습과 유사한 사전 훈련 과정이 무엇인지 수년간 특정하지 못했다.
그러다 2017년과 2018년, 몇몇 연구 단체가 NLP에서 전이 학습을 수행하는 새 방식을 제안했고,
그 뒤를 이어 범용적인 프레임워크 ULMFiT가 등장했다.
ULMFiT는 다양한 작업에 사전 훈련된 LSTM 모델을 적용하며, 세 개의 주요 단계로 구성된다.
ULMFiT 프로세스2018년, 셀프 어텐션과 전이 학습의 결합으로 두 개의 트랜스포머 모델이 출시되었다.
새로운 머신러닝 아키텍처를 새로운 작업에 적용하는 일은 일반적으로 다음 단계를 거친다.
1. 모델 아키텍처를 코드로 구현
2. (가능하다면) 서버로부터 사전 훈련된 가중치를 로드
3. 입력을 전처리하고 모델에 전달. 이후 해당 작업에 맞는 사후 처리 수행
4. 데이터로더(dataloader)를 구현하고 모델 훈련을 위해 손실 함수, 옵티마이저 정의
여기에서 실습해볼 수 있다.
허깅페이스 생태계는 크게 라이브러리와 허브로 구성된다.
사전 훈련 (Pretraining)
미세 튜닝 (Fine Tuning)
추상화 (Abstraction)
파이프라인 (Pipeline)
오버라이드 (Override)