Ettin Suite: 최신 상태의 페어 인코더와 디코더
아키텍처 비교: 인코더 vs. 디코더
Ettin은 훈련 레시피와 무관하게 기본적인 아키텍처 차이가 지속됨을 보여줍니다. 주요 차이점은 어텐션 패턴으로, 인코더 모델은 양방향 어텐션(모든 토큰을 볼 수 있음)을 사용하고, 디코더 모델은 인과적 어텐션(토큰이 이전 토큰만 볼 수 있음)을 사용합니다.
Key findings from the controlled comparison include:
- Classification and Retrieval: 인코더 모델이 이 작업들을 지배합니다. 예를 들어, 150M 인코더가 MNLI 분류에서 400M 디코더보다 높은 성능을 보입니다 (89.2 vs 88.2).
- Text Generation: 디코더 모델은 생성 작업에서 일관된 우위를 유지하며, 모델 크기가 커질수록 그 차이는 확대됩니다.
- Scale vs. Architecture: 특정 작업에서는 아키텍처가 크기보다 더 큰 영향을 미칩니다; 400M 인코더가 1B 디코더를 분류 작업에서 이길 수 있고, 400M 디코더가 1B 인코더를 생성 작업에서 앞설 수 있습니다.
학습 레시피 및 데이터
Ettin 모델은 ModernBERT를 기반으로 현대화된 레시피를 사용해 개발되었으며, 최신 디코더 전용 기법을 두 아키텍처에 모두 적용했습니다. Ettin에 사용된 모든 학습 데이터는 공개되어 있으며 재현 가능합니다.
3단계 학습 프로세스
- Pre-training (1.7T 토큰): 다양한 고품질 데이터 혼합을 사용해 짧은 컨텍스트(1024 토큰)에서 초기 학습을 수행합니다.
- Context Extension (250B 토큰): 필터링된 고품질 데이터를 사용해 컨텍스트 길이를 8K 토큰으로 늘려 장문 이해를 향상시킵니다.
- Decay (100B 토큰): 교과서와 과학 논문 등 프리미엄 소스를 사용해 최종 학습을 진행하며, 학습률을 점진적으로 감소시킵니다.
모델 크기
Ettin은 규모 효과를 테스트하기 위해 6가지 페어 크기를 제공합니다:
- 17M, 32M, 68M, 150M, 400M, 그리고 1B 파라미터.
성능 벤치마크
인코더 결과
Ettin 인코더 모델은 완전히 공개된 학습 데이터를 사용하면서도 모든 테스트된 작업 및 모델 크기에서 ModernBERT를 능가합니다. 이는 온디바이스(소형)와 고성능(1B 규모) 애플리케이션 모두를 위한 새로운 고성능 인코더 라인을 제공합니다.
디코더 결과
Ettin 디코더 모델은 Llama 3.2와 SmolLM2와 같은 기존 베이스라인과 동등하거나 능가합니다. 특히 SciQ와 같은 지식 집약적 작업에서 성능 향상이 두드러지며, 이는 고품질 학습 데이터 혼합 덕분입니다.
연구 인사이트 및 모델 행동
교차 목표 학습
Ettin을 사용해 모델을 한 아키텍처의 목표에서 다른 아키텍처의 목표로 전환할 수 있는지 테스트했습니다(예: 디코더를 마스크드 언어 모델링으로 추가 사전학습). 결과는 아키텍처 선택이 근본적임을 보여줍니다:
- Encoder-from-decoder: 일반적으로 분류와 검색에서 원래 인코더보다 뒤처집니다.
- Decoder-from-encoder: 특히 대규모에서 원래 디코더보다 현저히 성능이 떨어집니다.
행동 분석
WinoGender 벤치마크를 사용한 결과, 연구자들은 학습 목표가 모델 편향에 영향을 미친다는 것을 발견했습니다. 인코더 모델은 디코더에 비해 성 중립 대명사를 더 많이 선호합니다(60% 이상 vs 30% 이상), 하지만 두 아키텍처 모두 남성 편향을 보입니다.
구현 및 사용
Ettin 모델은 Hugging Face Hub를 통해 제공됩니다. 인코더는 분류 및 검색 작업에 권장되며, 디코더는 텍스트 생성에 사용됩니다.
인코더 예시
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("jhu-clsp/ettin-encoder-150m")
model = AutoModel.from_pretrained("jhu-clsp/ettin-encoder-150m")
디코더 예시
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("jhu-clsp/ettin-decoder-150m")
model = AutoModelForCausalLM.from_pretrained("jhu-clsp/ettin-decoder-150m")