목록인공지능/실험 해보기 (9)
걍블로그

비밀 프로젝트 관련해서 LLM(LLAMA)를 fine-tuning 하던중 문제(?)가 발생하였다. 기존 설계에 대한 가설 : 기존에는 실험적으로 LLAMA는 fine-tuning해도 기존에 가지고 있던 상식을 어느 정도 유지했기 때문에, 우리가 원하는 방식의 질문에 대한 대답을 잘 해줄 수 있을것이다. 문제 : 원래 LLAMA를 fine-tuning해도 기존에 가지고 있던 상식(?)을 유지한채 대답을 잘 해주는 결과가 나타났는데, 이번에 그렇지 못했다!(O,X 문제를 물었는데 그냥 다 O로 보내버렸다....!) 문제 원인 추정 : 문제의 복잡도가 다소 높아서, fine-tuning을 할 때 적절한 근거에 대한 상식적 추론을 잘 못해서 그냥 외워버린게 아닐가 생각함! 대응 : grokking을 시도해 보려..
- 1차 실험에서 관찰한 결과 : 문법 교정의 성능은 다소 떨어짐. 하지만, 이유를 추론하는 부분은 괜찮은 성능아 보임!? - 피드백 : 납득이 좀 어려운 결과 였다. 왜냐하면 수정한 결과를 보는것보다 이유를 설명하는 Task가 더 어려운 부분일텐데.....(일단 생성해야 하는 문장의 길이부터가 차이가 꽤 크다!) 일단 그래도 다행이라고 느낀것은 대략적인 결과물들을 보았을 때, 모델이 기존의 사전 지식을 잃지 않았다는 것이다(사실 6천개의 데이터로 LLM을 학습한다는 것은 말도 안되는 수치이다. 만약 6천개 데이터를 기억하기 위해 기존의 학습 정보가 사라지게 된다면 모델의 성능은 최악으로 떨어질 것이다. 하지만, 여기서 이유를 추론하는 부분을 보면 알수 있듯이 모델이 글자에 대한 이해와 분석을 잘 하는 ..

- 배치 적용 결과 : 그래프가 꽤 마음에 든다! 나름 잘 나온듯함! -> 그렇다면 이전에 세웠던 가설인 일정 부분 loss가 커지는 부분에 의해서 학습이 이상하게 되었다는 가설이 가능성이 있고, 이를 해결하기 위해서 배치를 사용할 수 있다는 것도 타당한 접근이 될 수 있다고 본다! - 복원이 됐는지 검증 : 원래 값으로 복원이 잘 되는가?(validation dataset 기반으로 test 진행함), 전체적으로 나쁘지 않지만 - loss : 0.3인 부분과 해당 결과가 유사한지? 파이토치의 CROSSENTROPYLOSS의 수식은 아래와 같이 나타난다. 쉽게 -log(x) 그래프를 기반으로 생각해보자, 거의 해당 label에 대해서 x =1이 되어야 할 때, 평균적으로 x = 0.5 정도로 추론을 한다...

- 1차 수정에 대한 결과 그래프(아래)를 보면서, 두가지 의미를 생각했다. 1. Train Data도 Validation으로 가치가 있다 : 왜냐면 그래프를 봤을 때, 데이터를 외웠다고 볼수 없다. 애초에 에폭 단위로 찍은게 아니라 Unseen Train Data이기도 해서 문제가 없다는 가정을 어느정도 뒷받침 해줄 수 있어 보임. 2. 그래프는 10000번의 iteraion 마다 그래프를 업데이트 하고 있다. 아래 그래프 상으로 12만번 학습한 결과로 loss가 증가한 것을 볼 수 있는데, 이는 model이 학습을 못했다고 볼 수 있는데 학습률이 커서 생긴 문제로 추정을 했기 때문에 학습률을 낮출 필요가 있다(물론 validation은 학습을 하면서 loss가 증가 될 수 있는것은 일부 사실이지만, ..

해야될 실험을 못하고 요즘 다른 작업들에 정신이 팔려서.... 다시 원래의 실험에 돌아왔다! 학습의 효율성을 더 높일 수 있는 방법!?을 고민해 보다가 몇가지 생각이 들었고 이것을 기반으로 작업 방향을 수정 하고자함. - 고민 사항 : 1. LM-Head 부분을 발견 했는데 내가 굳이 이부분을 재학습할 필요가 있나? 기존 Pre-trained 모델이 훨씬 더 잘 학습 했을텐데?? -> 실제로 해보니까 원본 데이터를 잘 복원함 2. Decoder 부분의 Layer가 굳이 깊을 필요가 있나? 기존의 방법들도 Decoder 부분이 Transformer처럼 다른 도메인을 다루는 경우가 아니라 단순하기 Sequence의 의미를 해석할 때는 그렇게 깊게 하지는 않았음. 그래서 아키텍처를 조금 수정해볼 필요가 있을것..

이전 시간에 구성한 Pre-Trained 모델 만들기 구성 아키텍쳐 초기 모델 구성 : BERT(https://huggingface.co/bert-base-uncased) + Vector Quantization(https://github.com/lucidrains/vector-quantize-pytorch) 학습 1차 : 진행중 - Endoer(BERT의 절반)는 학습을 하지 않고 고정함 - Quantization + Decoder(BERT의 나머지 절반) + lm_head(Text로 변환하기 위한 layer, ouput_dim이 Vocab과 동일해지도록 수정) 부분을 학습에 진행함 기대하는 출력 : 입력 문장과 동일한 문장이 출력으로 나오도록 기대중 작업중이 코드 https://github.com/je..

기존의 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을 기반으로 한 Diffu..

- 데이터 셋 모으기 1. 오픈된 데이터셋 사이트에서 문법 교정 데이터를 수집함 : https://huggingface.co/datasets/Owishiboo/grammar-correction 16bit로 변경함 변경 방법에서 fp16과 bf16 두가지 방법이 존재한다. fp16에서는 오류가 났고, bf16은 문제가 없었다. 이둘의 차이 는 숫자를 표현하는 방식에 있는데 bf16가 더 큰 숫자를 표현 가능하기 때문에 오류가 나타나지 않았다고 생각한다. (2) 모델을 학습 결과 모델의 학습이 처음부터 잘 되는 경우는 많지가 않다고 생각한다. 그래서 개인적으로 자주 적용하는 모델 학습 방식은 모델을 먼저 오퍼피팅 시키고, 모델이 충분히 데이터를 표현할만한 능력이 있다고 판단이 되면 적절한 학습 방법을 고민해..