https://arxiv.org/pdf/2106.01751
Abstract:
- 논문에 제목에 있는 "Priming-based Few-Shot Learning" 에 있는 Priming 은 모델의 행동이나 출력을 특정 방향으로 유도하기 위해 사전에 관련 정보나 컨텍스트를 제공하는 기법으로, 간단하게 정리하자면 지시사항 + 예시라고 알면됨.
- 이 논문의 핵심은 예제를 올바른 순서로 구성하는 것이 모델의 작업 일반화에 도움이 된다는 것임. 이걸 PERO (Prompting with Examples in the Right Order) 라고 하는듯.
- 그리고 예제를 분리할 때 새로운 구분자 토큰을 사용하는게 학습에 도움이 된다는 말을 함.
- 맞막으로 10개의 예제만으로도 효율적인 일반화 학습이 가능함을 보여줄 수 있고, 올바른 순서의 두 훈련 예제만으로도 감성 분류와 자연어 추론에서 경쟁력 있는 성능을 달성할 수 있었다고 함.
PERO (Prompting with Examples in the Right Order) 방법:
- 예시의 올바른 순서가 핵심이므로 최적화된 예시 순서를 유전 알고리즘을 사용하여 탐색하는 방법임:
- 유전 알고리즘은 생물의 진화 과정을 모방한 알고리즘임. 복잡한 최적화 문제를 해결하는 데 사용된다.
- PERO 에서는 최적의 예제 순열을 찾는데 사용됨.
- 유전 알고리즘의 주요 단계는 다음과 같음:
- a) 초기화: 무작위로 예제 순열을 만듬
- b) 평가: 각 예제 순열의 성능을 평가해봄
- c) 선택: 성능이 좋은 예제 순열을 선택함.
- d) 교차: 선택된 순열을 조합해서 새로운 순열을 생성함. (교차는 부모에서 일부를 섞는 것 말함.)
- e) 돌연변이: 일부 순열에 무작위로 변화를 줌.
- f) b~e 단계를 반복함.
- 유전 알고리즘을 쓰지 않았더라면 n! 개를 탐색해야함. 이 알고리즘에서는 그렇게 안해도 됨.
- 만약 예시를 동적으로 검색해서 구성한다고 한다면 최적의 예시 순서를 구하기 위해서 매번 유전 알고리즘을 적용하는 건 적합하지 않을듯.
- 10개의 예제만으로도 효율적인 일반화 학습이 가능하다는 걸 발견함
- 예제를 연결할 때 새로운 구분자 토큰을 학습하여 사용하면 성능이 더욱 향상될 수 있다고 함.
- 학습된 레이블 패턴을 사용하여 반복 및 정렬된 두 개의 예제만으로도 기존의 few-shot 기준선(수천 개의 예제 사용)과 비교 가능하거나 더 나은 성능을 제공할 수 있다고 함.
PERO 알고리즘에서 사용되는 유전 알고리즘:
- 우수항 상위 개체 (여기서는 좋은 예시 순서) 를 고르기 위한 Fitness 계산 방법:
- 평균 교차 엔트로피 손실(average cross entropy loss)을 사용함.
- 프롬프트에 해당 에시 순서를 예제로 포함하고 지시사항으로 줬을 때 나오는 예측값과 실제 레이블을 비교해서 손실을 계산함.
- 유전 알고리즘의 선택 (Selection):
- 엘리트 주의라는 방식을 사용: 각 세대에서 상위 성능의 개체들을 유지
- 엘리트가 아닌 나머지 집단은 교차와 돌연변이를 통해 생성.
- 교차 (crossover):
- 단일 지점 교차(Single Point Crossover) 사용:
- 두 부모 순열에서 하나의 교차 지점을 선택
- 교차 지점은 무작위로 j를 [1, k] 범위에서 선택 (k는 순열의 길이)
- 두 부모 순열이 c1, c2 라면 다음과 같이 순열이 생성될 것:
- d1 = (c1의 앞부분 + c2의 뒷부분)
- d2 = (c2의 앞부분 + c1의 뒷부분)
- d3 = (c2의 앞부분 + c1의 뒷부분)
- d4 = (c1의 앞부분 + c2의 뒷부분)
- 단순히 부분을 교환하는 것이 아니라, 중복을 피하기 위한 특별한 연산자도 사용함.
- 단일 지점 교차(Single Point Crossover) 사용:
- 돌연변이(Mutation):
- 각 위치를 돌연변이 확률 pm으로 변경
- 새 인덱스가 이미 존재하는 경우 스왑 방식 사용
- 알고리즘 실행:
- Nepochs 동안 실행
- 검증 세트를 사용하여 각 에폭의 최고 성능 개체 선택
Conclusion:
- 예시가 추가되는 경우에는 최적의 예시를 다시 맞춰야 할거임.
- 예시를 동적으로 검색해서 구성할 떄 유전 알고리즘을 쓰기에는 적합하지 않아보임.
- 예시는 관련성이 있는 걸로 구성해야할텐데 그 부분에 대한 고려는 있는가?
- 간단한 솔루션은 아니다.
'Generative AI > Prompt Engineering' 카테고리의 다른 글
Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? (0) | 2024.10.03 |
---|---|
Learning To Retrieve Prompts for In-Context Learning (0) | 2024.10.02 |
Explanation Selection Using Unlabeled Data for Chain-of-Thought Prompting (0) | 2024.10.02 |
Calibrate Before Use: Improving Few-shot Performance of Language Models (0) | 2024.10.01 |
A Survey on In-context Learning (0) | 2024.09.30 |