

# Nova 2.0에서 SFT
<a name="nova-hp-rft-nova2"></a>

RFT 훈련 데이터는 OpenAI 대화 형식을 따릅니다. 각 훈련 예제는 메시지, 참조 답변 및 선택적 도구 정의를 포함하는 JSON 객체입니다. 이 섹션에서는 Nova 2.0에서 RFT에 대한 효과적인 훈련 데이터를 준비하는 방법에 대한 지침을 제공합니다.

**Topics**
+ [데이터 형식 및 구조](#nova-hp-rft-data-format)
+ [필드 설명](#nova-hp-rft-field-descriptions)
+ [하이퍼파라미터 지침](#nova-hp-rft-monitoring-hyperparams)
+ [추가 속성](#nova-hp-rft-additional-properties)
+ [데이터세트 크기 권장 사항](#nova-hp-rft-dataset-size)
+ [효과적인 훈련 데이터의 특성](#nova-hp-rft-effective-data)
+ [RFT 훈련 모니터링](nova-hp-rft-monitoring.md)

## 데이터 형식 및 구조
<a name="nova-hp-rft-data-format"></a>

각 훈련 예제는 다음을 포함하는 JSON 객체입니다.
+ **messages**: 시스템, 사용자 및 선택적으로 어시스턴트 역할을 사용하는 대화 턴 배열
+ **reference\_answer**: 보상 계산에 대한 평가 기준 또는 예상 출력
+ **tools**(선택 사항): 모델에서 사용할 수 있는 함수 정의 배열
+ **id**(선택 사항): 추적 및 중복 제거를 위한 고유 식별자

각 예제는 JSONL 파일에서 한 줄에 있어야 하며 한 줄에 하나의 JSON 객체가 있어야 합니다.

### 예제 1: 화학 문제
<a name="nova-hp-rft-example-chemistry"></a>

다음 예제에서는 실측 정보 값을 포함하는 참조 답변을 사용하는 화학 문제를 보여줍니다.

```
{  
  "id": "chem-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful chemistry assistant"  
    },  
    {  
      "role": "user",  
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"  
    }  
  ],  
  "reference_answer": {  
    "donor_bond_counts": 2,  
    "acceptor_bond_counts": 4,  
    "explanation": "Calculated using Lipinski's rule of five: N-H groups (2 donors), N and O atoms with lone pairs (4 acceptors)"  
  }  
}
```

**참고**  
reference\_answer에는 도메인별 규칙을 사용하여 계산된 실측 정보 값이 포함되어 있습니다. 보상 함수는 모델 예측 값을 이러한 참조 값과 비교하여 보상 점수를 계산합니다.

### 예제 2: 수학 문제
<a name="nova-hp-rft-example-math"></a>

다음 예제에서는 해법 단계를 포함하는 수학 문제를 보여줍니다.

```
{  
  "id": "math-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  }  
}
```

### 예제 3: 도구 사용
<a name="nova-hp-rft-example-tool"></a>

다음 예제에서는 예상 동작이 있는 도구 사용을 보여줍니다.

```
{  
  "id": "tool-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful game master assistant"  
    },  
    {  
      "role": "user",  
      "content": "Generate a strength stat for a warrior character. Apply a +2 racial bonus modifier."  
    }  
  ],  
  "tools": [  
    {  
      "type": "function",  
      "function": {  
        "name": "StatRollAPI",  
        "description": "Generates character stats by rolling 4d6, dropping the lowest die result, and applying a modifier.",  
        "parameters": {  
          "type": "object",  
          "properties": {  
            "modifier": {  
              "description": "An integer representing the modifier to apply to the total of the stat roll.",  
              "type": "integer"  
            }  
          },  
          "required": ["modifier"]  
        }  
      }  
    }  
  ],  
  "reference_answer": {  
    "tool_called": "StatRollAPI",  
    "tool_parameters": {  
      "modifier": 2  
    },  
    "expected_behavior": "Call StatRollAPI with modifier=2 and return the calculated stat value"  
  }  
}
```

## 필드 설명
<a name="nova-hp-rft-field-descriptions"></a>


| 필드 | 설명 | 추가 참고 사항 | 필수 | 
| --- |--- |--- |--- |
| id | 이 RFT 예제의 고유 식별자 | 문자열(예: 'sample-001'). 추적 및 중복 제거에 유용합니다. | 아니요 | 
| messages | 프롬프트 및 컨텍스트를 정의하는 채팅 메시지의 정렬된 목록 |  객체의 배열입니다. 모델은 이를 순서대로 확인합니다. 일반적으로 시스템 메시지로 시작한 다음 사용자로 진행합니다. | 예 | 
| messages[].role | 메시지에서 화자 | 공통 값: 'system', 'user'(다른 컨텍스트에서 때때로 'assistant') | 아니요 | 
| messages[].content | 메시지의 텍스트 콘텐츠 | 일반 문자열. 시스템의 경우 지침, 사용자의 경우 태스크 또는 입력에 해당합니다. | 아니요 | 
| 도구 | 이 예제에서 모델에 사용할 수 있는 도구 사양 | 배열. 각 항목은 도구의 인터페이스와 메타데이터를 정의합니다. 유형으로 'function' 또는 'internal'이 포함될 수 있습니다. | 아니요 | 
| reference\_answer | 이 예제의 예상 모델 출력 | 태스크에 따라 문자열 또는 객체에 해당합니다. 평가 또는 훈련의 대상으로 사용됩니다. | 아니요 | 

**참고**  
추가 사용자 지정 필드(예: task\_id, difficulty\_level, context\_data)는 검증되지 않으며 보상 함수에 메타데이터로 전달됩니다.

## 하이퍼파라미터 지침
<a name="nova-hp-rft-monitoring-hyperparams"></a>

훈련 접근 방식을 기반으로 다음과 같은 권장 하이퍼파라미터를 사용합니다.

**일반:**
+ 에포크: 1
+ 학습률(lr): 1e-7
+ 세대 수: 8
+ 최대 새 토큰 수: 8192
+ 배치 크기: 256

**저순위 적응(LoRA)**
+ LoRA 순위: 32

**참고**  
데이터세트 크기 및 검증 성능에 따라 이러한 값을 조정합니다. 훈련 지표를 모니터링하여 과적합을 방지합니다.

## 추가 속성
<a name="nova-hp-rft-additional-properties"></a>

'additionalProperties': true 설정을 사용하면 핵심 스키마 요구 사항 이외의 사용자 지정 필드를 포함할 수 있으므로 적절한 평가를 위해 보상 함수에 필요한 데이터를 유연하게 추가할 수 있습니다.

### 일반적인 추가 필드
<a name="nova-hp-rft-common-fields"></a>

다음과 같은 유형의 추가 필드를 포함할 수 있습니다.

**메타데이터:**
+ task\_id: 추적을 위한 고유 식별자
+ difficulty\_level: 문제 복잡성 지표
+ domain: 주제 영역 또는 카테고리
+ expected\_reasoning\_steps: 해법의 단계 수

**평가 기준:**
+ evaluation\_criteria: 특정 등급 루브릭
+ custom\_scoring\_weights: 여러 측면의 상대적 중요도
+ context\_data: 문제에 대한 배경 정보
+ external\_references: 관련 설명서 또는 리소스에 대한 링크

### 추가 속성이 있는 예제
<a name="nova-hp-rft-additional-example"></a>

다음 예제에는 사용자 지정 메타데이터 필드가 포함되어 있습니다.

```
{  
  "id": "algebra_001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  },  
  "task_id": "algebra_001",  
  "difficulty_level": "easy",  
  "domain": "algebra",  
  "expected_reasoning_steps": 3  
}
```

## 데이터세트 크기 권장 사항
<a name="nova-hp-rft-dataset-size"></a>

### 시작점
<a name="nova-hp-rft-starting-point"></a>

다음과 같은 최소 데이터세트 크기로 시작합니다.
+ 최소 100개의 훈련 예제
+ 최소 100개의 평가 예제

모델 응답에서 일관되게 실행되는 신뢰할 수 있는 보상 함수와 고품질 입력 데이터의 우선순위를 지정합니다.

### 평가 우선 접근 방식
<a name="nova-hp-rft-evaluation-first"></a>

대규모 RFT 훈련에 투자하기 전에 모델의 기준 성능을 평가합니다.
+ **높은 성능(> 95% 보상)**: RFT가 불필요할 수 있음 - 모델이 이미 잘 작동함
+ **매우 낮은 성능(0% 보상)**: 먼저 SFT로 전환하여 기본 기능을 설정함
+ **중간 성능**: RFT가 적절할 가능성이 큼

이 평가 우선 접근 방식은 보상 함수에 버그가 없도록 보장하고 RFT가 사용 사례에 올바른 방법인지를 결정합니다. 소규모로 시작하여 RFT 워크플로에 익숙해지면서, 문제를 조기에 식별 및 수정하고, 스케일 업하기 전에 접근 방식을 검증하며, 보상 함수 신뢰성을 테스트할 수 있습니다. 검증 후에 더 큰 데이터세트로 확장하여 성능을 더욱 개선할 수 있습니다.

## 효과적인 훈련 데이터의 특성
<a name="nova-hp-rft-effective-data"></a>

### 명확성 및 일관성
<a name="nova-hp-rft-clarity"></a>

좋은 RFT 예제에는 여러 모델 출력에서 정확한 보상을 계산할 수 있는 명확하고 모호하지 않은 입력 데이터가 필요합니다. 다음을 포함하여 데이터에서 노이즈를 방지합니다.
+ 일관되지 않은 형식 지정
+ 모순되는 레이블 또는 지침
+ 모호한 프롬프트
+ 참조 답변 충돌

모호할 경우 훈련 프로세스에서 오해가 발생하고 모델이 의도하지 않은 동작을 학습하게 됩니다.

### 다양성
<a name="nova-hp-rft-diversity"></a>

데이터세트는 강력한 실제 성능을 보장하기 위해 프로덕션 사용 사례의 완전한 다양성을 캡처해야 합니다. 포함:
+ 다양한 문제 유형 및 난이도
+ 여러 입력 형식 및 엣지 케이스
+ 모든 예상 시나리오의 대표 샘플

이러한 다양성은 과적합을 방지하는 데 도움이 되고 모델이 익숙하지 않은 입력을 정상적으로 처리하도록 보장합니다.

### 보상 함수 고려 사항
<a name="nova-hp-rft-reward-considerations"></a>

효율적인 훈련을 위해 보상 함수를 설계합니다.
+ 분이 아닌 초 단위 내 실행
+ Lambda를 사용하여 효과적으로 병렬 처리
+ 일관되고 신뢰할 수 있는 점수 반환
+ 여러 유형의 모델 출력을 정상적으로 처리

빠르고 확장 가능한 보상 함수를 사용하면 대규모로 신속한 반복과 비용 효율적인 실험이 가능합니다.