인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

송정준님의 프로필 이미지

작성한 질문수

모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 1 - Llama 2 Fine-Tuning 해보기

Llama 2 Fine-Tuning을 위한 형태로 KorQuad 데이터셋 정제하기

데이터셋을 파인튜닝 하는 것과 반대로 필요없는 데이터를 제거하는 방법도 있나요?

작성

·

142

0

지금 fine tuning 단계에서 어떤 데이터셋을 기존의 Llama에 학습을 추가로 시켜서 정보를 더 추가하는 방법 부분을 학습하고 있습니다.

혹시 이 반대와 같은 경우가 가능할까요? 예를들어서 Llama모델에서 한국어로 이루어진 모든 데이터를 전부 제거한다. 이런식의 define tuning이 되는 방법이 있는지 궁금합니다.

답변 2

0

송정준님의 프로필 이미지
송정준
질문자

감사합니다! 그럼 제거가 애초에 불가능에 가깝다면, Monolingual 이 정말 뛰어난 언어 모델이 있을까요? 대규모 언어 모델들이 Multilingual 인데, Llama3 의 성능을 유지하는 Monolingual 언어 모델이 있는가 해서요.

AISchool님의 프로필 이미지
AISchool
지식공유자

안녕하세요~. 반갑습니다.

말씀해주신 내용만으로는 정확히 어떤 활용사례가 필요하신건지 정확히는 잘 모르겠지만

Llama 3의 성능을 유지하는 대표적인 Monolingual 언어 모델에 대해서는 딱히 들어본적이 없는 것 같습니다.

혹시 영어말고 무조건 한국어로 답변 생성결과를 얻어보고 싶으신 것이라면 Llama2만 해도 한국어 능력이 거의없었지만 Llama 3부터 한국어 관련 능력이 대폭 향상되어서 영어말고 한국어 답변만 생성하고 싶으시다면 "무조건 영어말고 한국어로 답변을 생성해줘."와 같은 시스템 프롬프트를 이용해서 우회적으로 Llama 3에게 영어말고 한국어 답변생성을 강제할 수 있습니다.

시스템 프롬프트를 통한 우회뿐만 아니라 한국어 성능을 더 향상시키고 싶으시다면 대량의 한국어 데이터셋을 모아서 Llama 3를 한국어 데이터셋으로 Fine-Tuning 하는 방법을 생각해 볼 수 있습니다. (Fine-Tuning을 진행할때 영어데이터는 전혀포함시키지 않고 한국어 데이터셋만 이용하면 Fine-Tuning 진행할수록 Llama 3가 영어를 점차적으로 잊어버리면서 100%는 아니더라도 Monolingual과 비슷한 형태의 모델이 남게 될것입니다.)


좋은 하루되세요.

감사합니다.

0

AISchool님의 프로필 이미지
AISchool
지식공유자

안녕하세요~. 반갑습니다.

먼저 답변이 늦어서 죄송합니다.

말씀해주신 형태의 작업 방식에 대해서는 저는 관련 정보를 들어본적이 없는 것 같습니다. 관련해서 ChatGPT에게 질문해보니 아래와 같이 답변해주었습니다.

 

 

 

LLM에서 특정 데이터를 제거하거나 "잊게" 만드는 방법은 일반적인 파인튜닝과는 다릅니다. 데이터 추가는 비교적 쉽지만, 데이터를 제거하는 것은 기술적으로 더 복잡한 작업이며, 다음과 같은 방법으로 접근할 수 있습니다.


1. Fine-Tuning으로 '덮어쓰기'

기존의 모델이 특정 데이터를 "잊게" 만드는 대신, 해당 데이터를 더 이상 사용하지 못하도록 새로운 데이터를 통해 덮어쓰는 방법입니다.

  • 방법:

    • 특정 데이터를 제거하고 싶은 주제나 언어에 대한 반대되는 정보를 포함한 데이터를 준비합니다.

    • 기존 데이터보다 더 강한 가중치를 부여하면서 해당 데이터로 Fine-Tuning을 수행합니다.

  • 예시:

    • 한국어 데이터를 제거하고 싶다면, 한국어 데이터와 반대되는 데이터(예: "한국어 텍스트는 존재하지 않는다" 같은 내용)를 학습시켜 결과를 무력화시킵니다.

  • 한계:

    • 기존 데이터가 완전히 삭제되지는 않고, 모델이 새로운 데이터에 의해 상쇄되는 방식입니다.

    • 큰 모델일수록 학습 데이터의 양이 매우 많아야 효과가 큽니다.


2. Selective Unlearning (선택적 학습 제거)

일부 연구에서는 특정 데이터를 모델이 "잊게" 만드는 기술을 제안하고 있습니다. 이를 Unlearning이라고 하며, 다음과 같은 방식으로 구현될 수 있습니다.

방법 1: Fine-Tuning을 통해 특정 매개변수 조정

  • 모델이 특정 데이터를 사용하는 방식에서 파생된 가중치를 계산한 후, 이 영향을 줄이는 방식으로 Fine-Tuning을 수행합니다.

  • 이러한 방식은 모델이 특정 데이터에 대한 학습 결과를 "무효화"하도록 학습을 재구성하는 것입니다.

방법 2: Diff-Pruning (차별적 가중치 제거)

  • 모델의 특정 데이터에 민감하게 반응하는 매개변수를 파악하여 해당 매개변수에만 변화나 제약을 가하는 방식입니다.

  • 이를 통해 특정 주제나 언어의 데이터를 무력화시킬 수 있습니다.

방법 3: Data Attribution 기반 Re-training

  • 특정 데이터의 영향을 추적하고, 해당 데이터를 사용하는 매개변수 또는 피처만 수정하여 재학습합니다.

  • 예시:

    • 한국어 텍스트가 학습된 데이터가 모델의 특정 레이어에 주로 영향을 미쳤다면, 해당 레이어의 학습을 역전시키거나 중립적인 데이터로 재학습합니다.


3. 모델 재구축 (From Scratch 또는 Pretraining 수정)

가장 확실한 방법은 모델을 재구축하는 것입니다.

  • 방법:

    • 한국어 데이터를 포함하지 않은 새로운 데이터셋으로 모델을 처음부터 다시 학습(Pretraining)합니다.

    • 기존 모델의 일부를 사용하되, 특정 언어와 관련된 데이터만 필터링한 데이터셋으로 재학습합니다.

  • 장점:

    • 데이터 제거가 확실하게 이루어짐.

  • 단점:

    • 시간과 계산 비용이 매우 큼.


4. 필터링된 모델 생성 (Filtered Distillation)

모델 압축과 Distillation 기술을 활용하여 특정 데이터를 필터링할 수 있습니다.

  • 방법:

    • 원래 모델의 출력을 기반으로 하되, 특정 데이터가 포함된 결과는 무효화하거나 삭제하여 Distilled Model을 생성합니다.

    • 예를 들어, 한국어 데이터에 기반한 응답을 차단하도록 설계된 Distillation 모델을 생성할 수 있습니다.

  • 장점:

    • 원본 모델을 수정하지 않고도 특정 데이터를 효과적으로 제거할 수 있음.

  • 단점:

    • 원본 모델의 기능을 일부 상실할 가능성 있음.


실제 구현의 어려움

  • 데이터 제거는 데이터 추가보다 훨씬 까다롭습니다. 이유는 기존 학습 결과가 모델의 수많은 매개변수에 얽혀 있어, 특정 데이터가 영향을 미친 부분만을 정확히 찾아 제거하기가 어렵기 때문입니다.

  • 특히 대규모 언어 모델(LLM)에서는 언어별 데이터, 주제별 데이터를 구체적으로 분리해 제거하는 데 많은 연구와 계산 비용이 필요합니다.


결론

  • 현재로선 데이터 제거보다는 새로운 데이터를 통해 기존 데이터를 "덮어쓰기"하는 방식이 더 현실적입니다.

  • 완전한 제거를 위해서는 모델의 재학습이나 선택적 Unlearning 기법이 필요합니다.

  • 연구 단계에서 Selective UnlearningFiltered Distillation 기법이 발전하고 있으므로 이를 참고해보는 것도 추천합니다.

 

 

 

 

요약하면 말씀해주신 형태로 작업을 진행하는 것(선택적으로 정보를 제거하는 것)은 fine-tuning을 하는 것보다 훨씬 어렵고 가장 확실한 방법은 제거하고 싶은 정보가 삭제된 데이터로 처음부터 다시 학습시키는 것입니다.

다만 Selective Unlearning, Filtered Distillation 라는 키워드로 검색해보시면 관련 작업에 대한 연구결과를 찾아보실 수 있을 것 같습니다.

 

좋은 하루되세요.

감사합니다.