검색
검색
공개 노트 검색
회원가입로그인

파인 튜인을 해보자.

요약
  • 파인 튜닝 과정을 통해 제미나이 및 chat gpt 모델의 성능 개선 방법을 탐색했다.
  • 데이터 수집 및 전처리, 모델 설정 조절이 중요하며, 이 과정이 시간과 비용이 많이 들 수 있다는 것을 발견했다.
  • 실제적인 모델 성능 차이를 확인하기 위해 대량의 데이터가 필요하며, 프롬프트 작성 및 편집 능력이 중요하다는 결론에 도달했다.

파인 튜닝을 해보자.

제미나이

제미나이에서 파인 튜일 하려면 input과 output데이터를 다 낳어주야 됬는데 최근에 모델도 1.5 flash도 추가 되고 메뉴도 바뀌었었으니 한번 알아보자.

  1. 구글 ai studio 사이트에 접속하자.

Untitled prompt | Google AI Studio

  1. 왼쪽 튜닝 모델 메뉴가 있다.

    new tuned model 로 들어가면 된다.

Tune a model | Google AI Studio

파인 튜인을 해보자. image 1

이렇게 나온다.

예전에는 제미나이 1.0 pro만 가능했는데 (성능이 정말 ...) 이제 1.5 flash가 추가 되어서 1.5 pro 만큼은 아니지만 많이 좋아졌다.

예전에는 저 create a structured prompt 로 들어가서 데이터를 일일히 넣어줘야 했다. (어느세월에..)

파인 튜인을 해보자. image 2

총 500개까지 넣을수 있고 넣은 데이터를 불러오거나 뺄수도 있다.

파인 튜인을 해보자. image 3

  1. 데이터 입력

    여기에서 데이터를 넣어줘야된다. 만약 데이터가 없다면 기존에 들어 있는 데이터를 써볼 수도 있다.

파인 튜인을 해보자. image 4

샘플 데이터로는 요약과 신문기사가 있다. 총 50개가 있다. 오른쪽에 import를 누르면 구글 독스에 연결되서 이미 만들어둔 시트를 연결할수 있다.

파인 튜인을 해보자. image 5미리 셀에 input, output을 header를 미리 만들어 주고 해도 되고 그냥 없이 해도 된다. 했다면 각 셀을 input column과 output column으로 assign 해주고 import 해보자.

주의할것은 데이터가 20개 이하면 진행이 안된다. 최소한 20개는 준비해야된다.

학습 데이터 크기

최소 20개의 예로 모델을 세부 조정할 수 있습니다. 추가 데이터 일반적으로 응답의 품질이 향상됩니다. 100개 사이를 타겟팅해야 합니다 애플리케이션에 따라 500개의 예시가 제공됩니다 다음 표에서는 다양한 일반적인 작업에 대한 텍스트 모델을 미세 조정하는 데 권장되는 데이터 세트 크기:

작업데이터 세트에 있는 예의 개수
분류100+
요약100-500+
문서 검색100+

고급 설정은 다음과 같다.

고급 조정 설정

조정 작업을 만들 때 다음과 같은 고급 설정을 지정할 수 있습니다.

  • 에포크: 전체 학습 세트에 대한 전체 학습 단계가 예시가 한 번 처리되었습니다.

  • 배치 크기: 하나의 학습 반복에 사용되는 예시 집합입니다. 이 배치 크기는 배치의 예 수를 결정합니다.

  • 학습률: 학습률이 모델을 반복할 때마다 강력하게 조정해야 합니다 예를 들어 학습률이 0.3이면 가중치와 편향이 3배 더 많이 조정됩니다. 0.1보다 강력합니다. 높은 학습률과 낮은 학습률은 사용 사례에 따라 조정해야 합니다

  • 학습률 배율: 학습률 배율로 모델의 원본 학습률과 일치합니다. 값이 1이면 있습니다. 1보다 큰 값은 학습률과 1 사이의 값을 증가시킵니다. 0은 학습률을 낮춥니다

추천 구성

다음 표에서는 기반 모델:

초매개변수기본값추천 조정
세대55세대 이전에 손실이 고원하기 시작하면 더 작은 값을 사용합니다.손실이 수렴하고 고원처럼 보이지 않으면 더 높은 값을 사용합니다.
배치 크기4
학습률0.001데이터 세트가 작을 경우 더 작은 값을 사용하세요.

손실 곡선은 모델의 예측이 이상적인 예측에서 얼마나 벗어나는지 보여줍니다. 예측을 수행하는 방법을 보여줍니다. 이상적으로는 곡선의 최저점에서 학습을 진행함을 의미합니다. 예를 들어 아래 그래프는 에포크 4~6에서의 손실 곡선 정체를 보여줍니다. Epoch 매개변수를 4로 설정해도 동일한 성능을 얻을 수 있습니다.

  1. 튜닝결과

오랜 시간 기다리면 오른쪽 모델에 파인 튜인해둔 모델이 추가 된다.

파인 튜인을 해보자. image 6

들어 가보면 tuning 상황을 알수 있다.

epoch 5, batch size 4, learng rate:0.001 로 했고, 2시간 37분후에 훈련이 끝났다. 그래프를 보니 epoch를 더 늘려야 할듯

다되면 왼쪽 모델에 튜닝된 모델이 추가 된다. 테스트를 해보고 사용해 볼수도 있다.

  1. 기타 방법

미세 조정 튜토리얼  |  Gemini API  |  Google AI for Developers

여기에 가면 파이썬 코드로 코랩등에서 직접 돌려 볼수 있다. 직접 조절이 더 가능 하다는건 장점 이지만, 중간에 데이터를 직접 넣어 주는건 조금 귀찮은 일이 될수도 있다.

import time

base_model = "models/gemini-1.5-flash-001-tuning"
training_data = [
    {"text_input": "1", "output": "2"},
    # ... more examples ...
    # ...
    {"text_input": "seven", "output": "eight"},
]

이렇게 1에는 input을 2에는 output을 넣어 주면 된다.

chatgpt

chat gpt의 fine tuning은 다음 페이지에서 조절할수 있다.

https://platform.openai.com/docs/guides/fine-tuning

  1. 데이터 준비

In this example, our goal is to create a chatbot that occasionally gives sarcastic responses, these are three training examples (conversations) we could create for a dataset:

1{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
2{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
3{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}

The conversational chat format is required to fine-tune gpt-4o-mini and gpt-3.5-turbo. For babbage-002 and davinci-002, you can follow the prompt completion pair format as shown below.

1{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
2{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
3{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

Multi-turn chat examples

Examples in the chat format can have multiple messages with the assistant role. The default behavior during fine-tuning is to train on all assistant messages within a single example. To skip fine-tuning on specific assistant messages, a weight key can be added disable fine-tuning on that message, allowing you to control which assistant messages are learned. The allowed values for weight are currently 0 or 1. Some examples using weight for the chat format are below.

1{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
2{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
3{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

이렇게 데이터를 준비하라고 되어있다. 데이터를 보면 알겠지만 json 포맷인데 실제 넣는건 jsonl로 확장자를 변환해 줘야 한다. 실제로 이런 데이터를 일일이 하는건 어렵고, 엑셀로 준비했다가. gpt를 시켜셔 변환하는데 더 빠른 방법을 보인다.

  1. 사이트 접속

데이터를 준비해쓰면 사이트에 접속하자.

https://platform.openai.com/finetune

파인 튜인을 해보자. image 7

create 를 눌러서 작업을 추가 해보자.

파인 튜인을 해보자. image 8

모델을 gpt 4o로 하고 데이터를 넣어주고 설정을 해주면 된다. 한달동안 gpt 4.o 의 파인 튜닝 비용은 무료라고 하지만 무료 계정으로는 되지 않는다. 그래서 gpt는 하지 않았다.

결론

이렇게 파인 튜닝을 찍먹해봤다.

다른 사람들의 말이 다 맞았다.

  1. 데이터 전처리며 데이터 수집및 가공에 정말 시간이 많이 걸린다. 있는 문서 데이터를 가공하면 좀 빠르게 되겠지만, 이제부터 데이터를 수집한다면 정말 시간이 많이 걸린다.

  2. 데이터 만큼 훈련 파라미터등 조절해 볼게 있다. 다만 훈련에 시간이 많이 걸리기때문에 그 만큼의 미세 조정은 그만큼의 시간이 든다. (제미나이 제외하고는 돈도 들것이다. 직접 하면 전기 요금 정도?)

  3. 100여개의 데이터로는 차이를 알기 쉽지 않다. 더 많아지만 가능할지도 모르겠지만, 내가 있는 도메인에서 데이터를 그렇게 모을수 있을지 모르겠다.

차라리, 프롬프트를 잘 짜고, 편집을 더 잘하자. 끄읕

공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기
조회수 : 774
heart
T
페이지 기반 대답
AI Chat