걍블로그
Text 생성을 위한 Diffusion 모델 구조에 대한 고민 본문
기존의 Text 생성을 위한 Diffusion 방식과 관련 논문들의 방법들은 아래와 같은 방법들이 존재한다.
1. Text를 Embedding Layer를 통과 시켜서 연속적인 데이터로 만들어서 Diffusion을 수행함
- Diffusion-LM Improves Controllable Text Generation
- DiffuSeq: Sequence to Sequence Text Generation with Diffusion Models
2. 이산적인 Diffusion을 별도로 정의함
- DiffusionBERT: Improving Generative Masked Language Models with Diffusion Models
3. 기존에 Pre-Trained 된 Model을 기반으로 한 Diffusion 재정의
- Text Generation with Diffusion Language Models: A Pre-training Approach with Continuous Paragraph Denois
이러한 방법들을 다음과 같은 문제들이 존재하였다.
1. 의 방식은 기존에 Pre-Train이 우수한 모델을 사용할 수가 없다.
2. 의 방식은 별도의 Diffusion을 정의했기 때문에 일반화된 방법론이라고 볼 수 없을것 이다.
3. 의 방식은 Pre-Train을 새롭게 정의하기 때문에 별도의 시간이 많이 소요되고, 기존 Pre-Train 모델들의 리소스를 충분히 활용하기 어렵다는 문제가 있다.
이전에 회사에서 Text 생성을 위한 Diffusion 실험을 했었고 나름대로 그럴싸한 결과를 얻었지만..... 3번 방식과 비슷한 접근으로 한 부분과 여러가지 사유로 인해서 실험이 중단 되었었다.
그래서 새로운 방식의 다시 도전 해보고 싶어서 고민을 하게 되었다.
두가지 부분을 나누어서 생각해 봤다.
1. 기존 아이디어를 그대로 가져와야할 부분
- 모델이 예측하고자 하는 대상이 X(0)다. 즉, f(X(t)) = X(0)를 학습하도록 하는 접근이다.
기존의 DDPM의 접근과의 차이는?
- 원래는 데이터를 추정하는 문제가 아닌 데이터에 포함된 노이즈를 추정하는 문제였다. 노이즈를 추론하는 문제가 원래 데이터를 찾는 문제와 사실은 동치이다(왜냐면 데이터에 노이즈를 추가하여서 X(t)를 얻었기 때문에 노이즈를 찾는것과 원본 데이터를 찾는 것은 동치의 의미긴하다.).
- (개인적인 생각임) 동치임에도 원본을 추정하는 이유? 수학적으로는 동치이지만, 모델 입장에서는 원본을 추정하는것이 쉬운 문제라는 생각을 했음. 왜냐면 조건부 Diffusion을 가정해보자. 즉, 챗봇처럼 특정 입력에 대한 대답을 Diffusion으로 만든다면 원본 데이터를 추론하는것은 특정 입력 데이터에 대해서 적절한 대답을 찾는 문제가 된다. 반면에 타겟이 노이즈라면, 입력 데이터와 출력 데이터와의 관계를 찾기가 좀 더 어려울 것이라는 생각이 들었다. 그리고 이러한 이유인지는 알수 없지만, 실험적으로 X(0)를 타겟으로 하여 성능이 개선된 경우가 많이 존재한다.
- 이산데이터를 연속으로 변경하여 처리하기
원래는 별도의 아키텍처를 만들어보고 싶었다..... 하지만! 그러면 Pre-Train이 잘된 모델을 사용하지 못하는 문제가 존재하고, 조금 이해는 안되는 부분이지만 데이터에 적은 크기의 노이즈를 부여 하더라도 계속해서 정규분포가 유지되는 가정이 강력하다는 생각이 있다. 이 두가지 부분을 포기하기는 너무 아깝기 때문에 그냥 연속 데이터로 바꾸어 접근할 것이다.
- 기본 수식 구조
Diffusion 방식이기 때문에 약간의 차이가 존재하더라도 기본적인 Loss를 설계하는 틀은 비슷하게 전개 된다. 즉,
형태가 기본적인 Loss의 구조가 된다. (원본 데이터와 model이 예측한 데이터 사이의 차이가 없어지도록....)
여기서 Text 생성을 위한 Diffusion 방식은 2가지 테크닉이 추가로 적용된다.
(1) 데이터가 정규분포임을 감안 : KL-divergence를 L2 Loss로 접근이 가능해짐 (log로 인해서 분수가 뺄셈으로 바뀌고, log와 exp가 상쇄, 상수 부분을 제외)
(2) X(t-1)은 X(t)와 X(0)의 조합으로 만들수 있음. 따라서, X(t-1) 대신해서 X(0)를 예측함
2. 새롭게 고민할 부분
- 아키텍쳐 : 접근방향은 정했는데, 어떤식으로 아키텍쳐를 구성해야 원하는 조건을 전부 만족 시킬수 있을지 고민중
- Loss 설계 : 아키텍쳐 구성이 완료되면, Loss를 수학적으로 엄밀하게 구성할 필요가 있음
그래서 구성한 설계
1 단계 검증 -> 원래 데이터로 복원 되는지
결국에 최종적으로 선택한 설계가 2-1 구조로 진행할 것 같음!
타겟 데이터 : 이것저것 둘러본 결과 https://huggingface.co/datasets/allenai/soda 가 제일 무난해 보임!
'인공지능 > 실험 해보기' 카테고리의 다른 글
Diffusion 기반의 Text 생성 실험2차 수정 (0) | 2023.06.11 |
---|---|
Diffusion 기반의 Text 생성 실험1차 수정 (0) | 2023.06.09 |
Diffusion 기반의 Text 생성 실험1차 (0) | 2023.06.05 |
LLAMA 모델을 활용한 문법 교정 모델 만들기 실험 1차 시도 (0) | 2023.06.01 |
하고 싶은 실험 정하기 (1) | 2023.05.30 |