본문 바로가기
TechStudy/LLM

[펌] LLM 학습의 어려움

출처: https://arca.live/b/alpaca/123646567?p=1

 

 

1. 

언어모델의 파인튜닝 학습은 주로 axolotl 이나 unsloth 를 써서 합니다. alpaca 소스코드들은 나온지 오래되고 위에겪으신 것처럼 문제들이 많은 편입니다. 

모델과 lora 의 병합과 응용에 관련해서 제가 썼던글들 중 참고될 만한 것이 있을겁니다.

https://axolotl-ai-cloud.github.io/axolotl/

https://unsloth.ai/blog/contpretraining

https://arca.live/b/alpaca/118261066 [LoRA와 MergeKit 을 이용해서 망각증상 없이 파인튜닝 시키기]

 

2.

대규모 지식을 넣는 것은 간단한 일은 아닙니다. 왜냐하면 언어모델은 기본적으로 확률분포를 모델링한 것인데, 한 쪽의 분포에 대해 학습을 계속 할수록 분포에 편향이 누적되면서 성능이 저하됩니다. 기존의 지식을 까먹기도 하고, 좀 더 심하게는 논리적 추론능력 자체가 저하되기도 합니다. 간단한 단답형 정보나 스타일을 변화시키는 정도는 lora 파인튜닝으로 할만하지만, 많은 양의 학습을 편향된 자료를 대상으로 학습하게 되면 문제가 누적됩니다.

 (머신러닝 모델을 학습시킬 때 순서는 중요합니다. 그래서 거의 예외없이 데이타셋을 랜덤하게 섞어주고나서 학습을 시킵니다. 사람의 경우에도 비슷합니다. 어떤 사상을 가끔씩 접하는 정도로는 사람의 인성이 크게 변하지 않지만, 다른 정보에 완전차단된 상태로 한가지 정보만 집중적으로 입력받게 되면 회복이 어려운 정신적 트라우마를 겪게 됩니다. 예로 종교집단에서의 가스라이팅, 전쟁터에서의 체험 등을 들 수 있습니다)

강화학습을 할 때도 온라인 트레이닝을 가급적 피하는 이유가 temporal corellation 문제 때문입니다. A3C 같은 학습 알고리즘은 비동기적으로 데이타를 여러 머신에서 모아놓고 그 데이타를 섞어서 학습시킨 다음에 다시 다른 머신들에 나눠줘서 업데이트하는 식으로 성능을 비약적으로 향상시켰습니다.

 

언어모델에서의 해결책은 프리트레이닝의 데이타와 파인튜닝데이타를 혼합해서 파인튜닝 도메인 외에 대해서도 지속적으로 학습시켜주는 것입니다. 프리트레이닝 데이타는 규모가 크고 일반인이 쉽게 구하기 어려웠지만 요즘 들어서 FineWeb 등 공개 데이타셋이 발표되고는 있습니다... 만 한국어 데이타셋은 찾기 어렵거나 품질이 나쁜 편입니다. 그나마 구할 수 있는 것들은 aihub 에서 찾아볼 수 있는 것들이 있고, fineweb2 에 kor_hang 서브셋이 있습니다 (품질은 살펴보지 못했습니다)

https://huggingface.co/datasets/HuggingFaceFW/fineweb-2/tree/main/data/kor_Hang

 

한편, 모델의 차이 부분을 구한 다음 병합으로 정보를 이식하는 방법도 존재하니 참고하시기 바랍니다. 

https://arca.live/b/alpaca/104827551 [1-딸깍 is all you need. 컨텍 확장, 채팅 모델 제작을 단 한번의 클릭으로]

 

4.

또한 대화형 모델을 만든다고 할 때, 그냥 raw text 를 학습시켜서는 문답형 포맷을 까먹는 경향이 생깁니다. 가장 좋은건 raw text 를 문답형으로 가공시켜준다음에 그걸 파인튜닝시켜주는건데, 역시 만만한 작업이 아닙니다. 언어모델은 어순에 대한 편향이 있기 때문에 단순히 정보를 단답형으로 바꾼다고 해서 그 주제에 대해 논리력을 저절로 획득하지는 못합니다. 예를 들어 홍길동은 홍판서의 아들이다. 라는 문장을 학습시킨 다음에 '홍판서는 누구의 아버지인가?' 같은 것을 물어봐도 대답 못하는 경우가 생길 수 있습니다. 이런 부분들을 고려해서 제대로된 추론능력을 확보할 수 있는 형태가 되려면 정보들의 관계에 대해 순열을 섞어주는 식의 증강작업이 필요합니다.

https://physics.allen-zhu.com/ [LLM의 추론 구조에 대한 기반 설명]

 

5.

즉, 데이타의 규모, 한국어 데이터의 희소함, raw text 를 고품질의 instruct 형태로 만드는 것의 난점 등이 언어모델의 개발의 어려움이라고 할 수 있습니다. 그래서 인력, 연구기술수준, 자본, 시간이 상당히 필요한 분야이며, 대중적으로 알려진 소규모 연구실급에서 연구하는 언어모델 파인튜닝의 경우 gpt 나 claude 같은 기성모델에서 추론되어 나온 데이타를 활용해서 그걸 로컬모델에 학습시키는 경우가 대부분입니다.

이런 난점을 극복하고서도 많은 시간과 노력을 투자해서 언어모델 개발과 연구에 도전해볼 생각이 있다면 가치있는 도전이긴 합니다. 굉장히 공부해야 할 것도 많고 실험을 해야 할 것도 많습니다. 

 

6.

그렇다면 현실적으로 개인이 LLM 을 이용해서 특화된 작업은 없는 것일까요? 그렇진 않습니다. RAG 를 활용하면 모델을 건드리지 않고 원하는 주제를 가지고 LLM 을 활용한 작업들을 할 수 있습니다. 기반모델이 강력할 수록, 데이타를 많이 모아놓을 수록 RAG의 능력은 강력해집니다. 가장 좋은 점은 데이타가 늘어나도 모델을 재학습시킬 필요가 없다는 점입니다. 벡터 임베딩만 잘해놓으면 됩니다. 

다만 이제는 임베딩모델을 뭘 쓰냐, 또 긴 문장을 어떻게 청크 단위로 나누느냐 또다른 문제가 됩니다. 단순 주제 검색용으로  검색하는 것이 아니라, 문제에 답하는 식의 검색을 하려면 리랭커 모델도 써야 합니다. 그리고 여기서 또 양질의 한국어 임베딩 모델이라는 걸림돌이 등장합니다. 저는 개인적으로 bge-m3 모델을 쓰고 있긴 한데 성능은 좀 아리까리 합니다. 

 

7. 

멀티모달도 빼놓을 수 없는 주제입니다. CLIP 기반 모델을 활용하면 텍스트에 대해서도 임베딩을 얻을 수 있고, 이미지에 대해서도 임베딩을 얻을 수 있기 때문에 자연어로 이미지를 검색한다던가 하는 응용이 가능해집니다. 이걸 RAG와 결합해서 추가적인 응용도 할 수 있습니다. 어떤 이미지 작업을 하려고 할 때 그냥 텍스트만으로 하기보다는 멀티모달RAG로 참조할만한 이미지를 찾아서 그걸 추가해서 RAG를 수행한다던가 하는 방법들이 있습니다.

여기서도 또또또 나오는 문제는 말귀를 잘 알아먹는 모델, 특히 한국어 말귀를 잘 알아먹는 모델이 없으면 작업이 어렵다는것입니다.  CLIP 모델은 이미지와 텍스트의 대조라는 방법으로만 학습을 한 모델이다보니 미묘한 언어간의 차이는 잘 구분하지 못하는 단점이 있는데, 최근에 llama같은 언어모델을 베이스로 놓고 개조해서 clip 모델로 만든 LLM2CLIP 이라는 모델이 나왔습니다. 기본이 되는 llama 모델이 어느정도 한국어가 되는 모델이다보니 llm2clip 모델도 한국어가 먹고 그냥 openclip 보다 훨씬 성능이 좋습니다

https://microsoft.github.io/LLM2CLIP/

 

8. 추가적으로 추천하는 연구 목록

https://huggingface.co/learn/cookbook/index

https://github.com/mlabonne/llm-course

 

 

 

https://arca.live/b/alpaca/123613364?p=1





추가: 멀티모달 스터디 링크

https://huggingface.co/learn/cookbook/index

 

Open-Source AI Cookbook - Hugging Face Open-Source AI Cookbook

 

huggingface.co

 

728x90
반응형