3P by GN⁺ 14일전 | ★ favorite | 댓글 1개
  • BERT와 RoBERTa와 같은 마스크드 언어 모델도 텍스트 디퓨전 모델 개념으로 해석 가능함
  • 기존 Auto-regressive(예: GPT)와 달리, 블록 단위 생성 및 점진적 복원 방식 적용 가능성 입증됨
  • 마스킹 비율을 단계별로 조절하며 훈련하면 RoBERTa도 자연스러운 텍스트 생성이 가능함을 실험으로 확인함
  • 기존 구조 변화 없이 훈련 목표만 조정해도 생성 능력 확보 가능함
  • GPT-2와 비교시, RoBERTa 기반 디퓨전 모델도 일정 수준 일관된 텍스트 생성 결과 도출함

개요

Google DeepMind에서 공개한 Gemini Diffusion는 기존의 GPT 계열과 달리 텍스트를 한 번에 블록 단위로 생성하는 디퓨전 기반 언어 모델임. 이 방식은 점진적으로 랜덤 노이즈를 정제해 텍스트를 만드는 접근임. 관련 논문(Large Language Diffusion Models)을 살펴본 결과, 이산적 언어 디퓨전은 마스크드 언어 모델링(MLM) 의 일반화라는 사실을 확인함. 즉, 이러한 아이디어를 이용해 BERT 계열 모델에서도 텍스트 생성이 가능할지 실험적으로 탐구하였음.

참고: 이후 DiffusionBERT 논문은 유사한 아이디어에 대해 더 엄격하게 검증함.

트랜스포머 간단 역사

2017년 처음 제안된 Transformer는 인코더-디코더 구조였음. 2018년에는 인코더(BERT: bidirectional, 마스크드 복원 중심)와 디코더(GPT: autoregressive, 순차 예측 중심)가 분리되어 각각 특화 모델군이 등장함.

  • 인코더 전용(BERT 계열)
    • 전체 문맥을 입력받아 특정 부분을 <MASK>로 가리고 나머지로 복원
    • 문장 표현, 분류 등에서 성능 강점
  • 디코더 전용(GPT 계열)
    • 주어진 순서에서 다음 토큰을 예측
    • 생성, 요약, 번역 등에서 두각

BERT는 분류 등에 바로 활용되었지만, 이후 GPT 계열이 생성 능력 향상으로 더욱 다양한 사용처를 확보함.

이산적 언어 디퓨전 모델

디퓨전 모델은 원래 이미지 생성에서 대중화됨.
이미지의 경우:

  • 순방향 프로세스: 깨끗한 이미지에 점차 가우시안 노이즈 추가해 순수 노이즈 상태 도달
  • 역방향 프로세스: 딥러닝 모델로 점진적 디노이즈 반복, 원본 데이터 복원

텍스트에 적용 시, 가장 단순한 방법은 마스킹 기반 노이즈 과정임.

  • 순방향(마스킹)
    • t=0에서 원본 텍스트, 단계가 증가할수록 일부 토큰을 <MASK>로 무작위 대체
    • 최종 단계에서는 전부 <MASK>로 채움
  • 역방향(디노이즈)
    • 트랜스포머 인코더가 주어진 마스킹 설정에서 원본 토큰 복원 학습
    • 낮은 마스킹 비율이면 쉽고 비율이 커질수록 어려운 복원
    • 높은 마스킹 비율부터 낮은 비율 순으로 반복해 전체 시퀀스 생성 가능

이런 디퓨전 프레임워크에서 모델은 다양한 마스킹 비율 단계별로 디노이즈 손실을 합산해 학습함. BERT의 마스킹 복원 목표는 사실상 텍스트 디퓨전의 일부임. 마스킹 비율 스케줄과 반복 디노이즈를 조합하면 BERT의 목표를 자연어 생성 프로시저로 확장할 수 있음.

RoBERTa Diffusion 실험

RoBERTa는 2019년에 발표된 BERT의 하이퍼파라미터 및 데이터 확장, 좀 더 단순한 학습 목적(MLM Only)이 특징임.
실험에서는 HuggingFace transformers, datasets 라이브러리를 이용해 RoBERTa 기본 가중치, 토크나이저, Trainer를 사용.
WikiText 데이터셋을 기반으로 아래와 같은 과정으로 파인튜닝 진행:

  • 10단계 디퓨전 스케줄(mask_probs: 1.0~0.1) 중 하나를 각 배치마다 샘플링하여 마스킹
  • 커스텀 diffusion_collator로 마스킹 확률 선정 후, 각 토큰마다 확률적으로 <MASK> 적용
  • 프롬프트 컨텍스트 유지를 위해 처음 16개 토큰은 항상 보존

데이터 마스킹(커스텀 collator):

  • 각 예제 토큰 묶음을 패딩 후, 마스킹 확률 무작위 선택
  • 처음 16개 토큰을 제외한 나머지에 확률적으로 <MASK> 적용
  • 마스킹된 데이터와 정답 레이블 세트 반환

생성(inference):

  • 256 토큰 길이 시퀀스 입력, 처음 16 토큰은 프롬프트, 나머지는 <MASK>
  • 각 단계별로 모델이 예측한 토큰을 샘플링하여 채우고, 또 일정 비율은 다시 리마스킹
  • 점차 마스킹 비율 줄여가며 반복, 마지막엔 전체가 복원됨

예시 생성 결과:

  • 프롬프트와 자연스러운 후속 텍스트를 포함해, 실제로 꽤 일관성 있는 텍스트가 생성됨
  • 몇몇 특이점은 WikiText 데이터 전처리 형식(예: @-@ 하이픈) 때문임

GPT-2와 비교

  • GPT-2가 약간 더 빠르고 일관성도 높지만, RoBERTa Diffusion도 기대 이상 성능 보임(증분적 개선 가능성 높음)
  • 새로운 AR-Diffusion, Skip-Step Diffusion 방식 및 최적화로 품질/속도 향상 가능

결론

  • RoBERTa처럼 설계된 마스크드 언어 모델도, 마스킹 비율을 조절해가며 훈련하면 자연어 생성 엔진이 될 수 있음
  • <MASK> 토큰으로 텍스트를 점진적 손상/복원하는 학습 방식만으로도 완전히 생성적 모델로 변환 가능성 확인
  • 구조 자체를 바꾸지 않고, 훈련 목표의 변형만으로 생성 능력 확보 가능함
  • 결국 BERT 계열 모델 또한, 본질적으로는 하나의 텍스트 디퓨전 모델과 일치함
Hacker News 의견
  • BERT가 처음 등장했을 때 모두가 텍스트 생성을 시도했지만, 대체로 잘 되지 않았음에 대한 참고 논문은 이곳임. DeepMind의 Savinov 등이 훈련 중 두 단계만 적용하고 마스킹 확률을 랜덤화하면 꽤 쓸만하게 동작할 수 있음을 밝혔음

    • 내가 지난주에 BERT로 대화하게 만들려 여러 시도한 후 이 글을 통해 이런 내용을 배우게 됨. 아직 더 시도해보고 싶은 아이디어가 있어서 계속 재미있게 실험 중임 관련 블로그

    • 나는 BERT를 텍스트 생성이 아닌 순수 인코더, 예를 들어 의미 유사도 측정 및 분류에만 쓸 수 있다고 여긴 대규모 집단 소속이었음

  • 2021년 이 논문 (5페이지)에서 최초로 이 연결고리를 지적한 것으로 알고 있음. 텍스트 디퓨전에서 단어를 의미적으로 유사한 다른 단어로 오염시키는 접근을 시도했으나, 모델이 마스킹된 단어를 찾게 하는 쪽이 더 쉬웠음. 이런 접근의 역사는 그보다 훨씬 이전 이 논문까지 거슬러 올라가며, 디퓨전 수학으로 설명하지 않고 생성형 MLM을 만든 바 있음

    • 그보다 더 오래된 것임. 2014년 Li Yao 등이 이 논문에서 오토리그레시브(다음 토큰 예측) 모델과 생성형 스토캐스틱 네트워크(디노이징 오토인코더, 디퓨전 모델의 선구자)의 동등성을 밝혔음. 병렬 샘플링이 순차적 샘플링을 잘 근사한다고 주장했고, 2016년 내 연구(Counterpoint by Convolution, 링크)에서도 이 방법을 적용해 오히려 더 나은 성능을 얻는다고 설명했음. 안타깝게도 응용 논문이라 디퓨전 인용을 많이 얻지 못함. 이보다 더 오래된 뿌리도 있을 거라 생각함

    • 나도 그 논문이 처음 공식적으로 다룬 레퍼런스로 기억함(BERT를 본 뒤 NLP 연구자들이 디퓨전 개념을 떠올릴 듯함). 3년 전 모아둔 텍스트 디퓨전 초기 레퍼런스 모음이 여기에 있음

    • 참고로 관련 논문은 이곳에서도 확인 가능함

  • 디퓨전 기반 접근법이 동물의 두뇌에서 일어나는 일과 더 비슷하게 느껴짐. 나는 말을 할 때 이전에 한 단어에 기반해 하나씩 단어를 만들어내는 게 아니라, 머릿속에 흐릿하게 전반적인 아이디어가 먼저 잡히고 이를 언어로 정리하는 과정이 더 크다고 느낌

    • 오토리그레시브 LLM도 실제로는 그렇게 단순하게 다음 단어만 예측하는 게 아님. 한 번의 포워드 패스에서 한 토큰씩 나오긴 하지만, 잠재 공간에서는 장기적인 계획과 추론이 명확하게 나타남. 우리가 실제 말할 때도 머릿속에서 전반적인 그림을 그리고 순차적으로 말하는 것으로 디퓨전 방식이 우리와 더 닮았다고 볼 수 없음

    • 개인적으로 디퓨전을 일종의 "스펙트럴 오토리그레션"으로 설명한 블로그 글이 마음에 들었음. 디퓨전은 저주파 특징을 먼저 예측하고 고주파 특징을 나중에 예측하는 경향이 있음

    • 슬랙에서 메시지를 5번쯤 수정할 때마다 스스로가 디퓨전 모델이라고 느끼는 경우가 많음

    • 말이나 글을 적을 때 실제로는 단어를 순차적으로 내뱉음. 하지만 문장을 시작하기 전에 머릿속에서 이미 대략적인 요지를 먼저 생각함. LLM도 토큰을 내보내기 전에 잠재 공간에서 전체 방향을 먼저 계획하는 것과 유사함

    • 오토리그레시브 LLM도 미리 어떤 내용을 말할지 내부적으로 계획함이 해석 연구에서 밝혀짐

  • 개인적으로는 마스킹과 채우기만 허용하는 것보다 Levenshtein 스타일의 삽입/삭제식 편집을 지원하는 게 더 자연스럽다고 느낌. 예를 들어 마지막 단계에서 더 긴 동의어로 단어를 교체하려고 하면 오른쪽으로 이동이 불가능해 이런 디퓨전 구조에서는 쉽지 않음

    • 이에 대한 진전이 있음. expand/delete 토큰을 추가하는 시도가 DreamOn 등에서 나오고 있음
  • 이런 간단한 실험은 빠르게 원리를 파악할 수 있어 흥미로움. 텍스트 디퓨저 모델에서 아쉬운 점은 토큰을 연속값이 아니라 이산값으로 다뤄야 한다는 점임. 이미지의 경우 픽셀이 연속적이라 자연스럽게 노이즈를 줄 수 있지만, 텍스트 토큰은 그렇지 않음. 대체로 전체 교체로 처리하게 되는데, 그나마 임베딩 공간에서 노이즈를 추가하거나 직접 임베딩을 학습시키는 여러 접근이 있으나 모두 이미지 디퓨전보다 복잡함

  • 나는 이 논문 같은 접근에 더 기대를 가지고 있음. 연속적인 잠재 디퓨전과 오토리그레시브 트랜스포머 기반 텍스트 생성을 결합하고 있음. 오토인코더와 트랜스포머를 동시(혹은 독립적으로) 학습시킬 수 있음

  • 텍스트 디퓨전 모델을 처음 접했을 때, “이거 그냥 MLM아냐?”라는 생각이 들었음. 내가 주목했던 점은 MaskGIT임. 이 방식이 정말 디퓨전이라 부를 만한 건, 모델이 잘못된 토큰을 올바른 토큰으로 교체하도록 학습한다면일텐데, 연속 디퓨전의 강점이 잡음 저항성이기 때문임. 하지만 실제로 잘못된 토큰을 생성하는 아이디어는 만들기 쉽지 않아서 아직 많이 시도된 적이 없는 것 같음

    • 나는 UTF8 바이트 단위에서 MLM을 실험하며 비정형 번역 모델을 시도해봤음. 커리큘럼 러닝과 점진적인 랜덤 오염 방식 사용. 단순히 노이즈 추가가 목적이라면 랜덤 인덱스를 랜덤 바이트 값으로 대체하면 충분함. 예를 들어 아래 패턴을 입력시킴

      [Source UTF8 bytes] => [Corrupted Target UTF8 bytes]
      

      전체 타깃 시퀀스를 반복적으로 평가해, 난이도 단계가 커질 때마다 학습 도메인에서 불연속적인 변화가 생기지 않게 함. 결과적으로 용어나 분류에 신경 쓰지 않게 됐고, ‘이게 디퓨전인가’가 중요한 게 아니라 ‘과연 잘 동작하는가’만 신경 쓰게 됨

  • electra와의 비교가 어떻게 될지도 궁금함

    • deberta와도 비교해볼 만함. 여튼 매우 흥미로움
  • 인라인 코드 완성 모델을 파인튜닝해서 cursor와 비슷한 성능이 나오는지 실험해보고 싶었음(실제로는 힘들겠지만 재밌을 듯). 하지만 기반으로 쓸 만한 오픈 디퓨전 모델 자체가 아직 없어서 기대하고 있음

  • 이미지 디퓨전 모델이 매력적인 부분은 무작위 노이즈에서 이미지를 만들어내는 점이었음. 그런데 텍스트 디퓨전 모델은 왜 랜덤 토큰이 아니라 모두 마스킹된 빈 토큰들에서 시작하는지 궁금함

    • 원하는 작업에 따라 다름. 단순 텍스트 완성이라면 입력 문장을 마스킹 없이 주고, 이어지는 마스킹 토큰을 모델이 채우게 함. 코드 편집 등을 원한다면 편집할 부분만 마스킹해 순차적으로 채우게 할 수 있음. 텍스트 디퓨전 모델의 강점은 코드 편집 등 실질적인 편집 수행 능력임(오토리그레시브 LLM은 명령어로 편집하는 별도 시스템이 필요함). 아주 적합한 코드 편집 헤드로 모델을 학습시키면 많은 코딩 업무의 속도와 효율을 높일 수 있음. 앞으로 GPT Codex 같은 곳에 이런 기능이 자연스럽게 통합될 것 같음

    • 모두가 빈 토큰으로 시작하는 방식만 쓰는 것은 아님. 일부는 랜덤 토큰, 일부는 마스크, 일부는 임베딩 벡터에서 시작하는 다양한 시도가 있음