Greedy Search
Greedy Search는 텍스트 생성 과정에서 가장 높은 확률을 가진 토큰을 선택하는 간단하고 직관적인 방법입니다. 이 방식은 매우 빠르고 계산이 효율적이지만, 몇 가지 한계도 가지고 있습니다.
주요 특징:
- 높은 확률 토큰 선택: 각 단계에서 가장 높은 확률을 가진 토큰을 선택합니다. 이 방법은 직관적으로 최선의 선택처럼 보이지만, 전체 문장을 고려했을 때 최적의 결과를 보장하지 못할 수 있습니다.
- 동어 반복 문제: Greedy Search는 종종 동일한 단어 또는 구문이 반복되는 동어 반복 문제를 일으킬 수 있습니다. 이는 모델이 높은 확률의 단어를 반복적으로 선택하기 때문입니다.
한계:
- 전략적 한계: Greedy Search는 매 단계마다 최적의 선택을 한다고 가정하지만, 이는 전체 문장 차원에서 최적의 결과로 이어지지 않을 수 있습니다. 예를 들어, 앞부분에서 좋은 선택을 했더라도, 이후의 선택들이 이 조합을 최적이 아닌 방향으로 이끌 수 있습니다.
- 최적의 문장 보장 실패: Greedy Search는 전체적으로 최적의 문장을 생성하지 못할 수 있습니다. 즉, 매 순간 최선의 선택을 한다고 해서, 그 결과가 최종적으로 최적의 문장을 보장하는 것은 아닙니다.
예시:
- The nice woman: 각 단어를 선택할 때의 확률이 각각 0.5, 0.4라고 가정하면, 전체 확률은 0.2(0.5 * 0.4)입니다.
- The dog has: 확률이 각각 0.4, 0.9라면, 전체 확률은 0.36(0.4 * 0.9)입니다. 이 경우, "The dog has"가 더 높은 확률을 가지지만, Greedy Search는 매 단계에서 높은 확률의 단어만을 선택하므로, 종합적으로 더 좋은 문장을 놓칠 수 있습니다.
쉽게 말하면: Greedy Search는 가장 간단하게 텍스트를 생성하는 방법으로, 각 단계에서 가장 높은 확률의 단어를 선택합니다. 하지만 이 방법은 반복적인 문장을 만들거나, 최종적으로는 최적의 문장을 생성하지 못할 수 있는 한계를 가지고 있습니다.
Beam Search
Beam Search는 텍스트 생성 과정에서 Greedy Search의 한계를 보완하기 위해 고안된 방법입니다. 이 방법은 각 스텝에서 가장 가능성 있는 n개의 토큰 시퀀스를 유지하면서, 최종적으로 가장 높은 확률을 가진 시퀀스를 선택하는 방식입니다.
주요 특징:
- 다중 시퀀스 유지: Beam Search는 각 스텝에서 가장 높은 확률을 가진 여러 시퀀스(예: n개)를 유지합니다. 예를 들어, 첫 번째 스텝에서 "The nice"와 "The dog" 두 가지 시퀀스가 선택될 수 있습니다. 이렇게 하면 Greedy Search에서 놓쳤을 수 있는 가능성을 포착할 수 있습니다.
- Greedy Search보다 합리적: Greedy Search는 각 단계에서 가장 높은 확률의 단어만을 선택하는 반면, Beam Search는 여러 가능성을 고려하므로, 더 합리적인 선택을 할 수 있습니다. 하지만, Beam Search도 최선의 결과를 항상 보장하지는 않습니다.
한계:
- 최선의 아웃풋 보장 실패: Beam Search는 Greedy Search보다는 더 합리적이지만, 여전히 모든 가능성을 고려하지 않기 때문에 최선의 결과를 보장하지는 않습니다. 선택된 n개의 시퀀스가 최적의 시퀀스를 포함하지 않을 수 있습니다.
예시:
- Num beams가 2일 때:
- 1 스텝: "The" 다음에 올 단어로 "nice"와 "dog"가 높은 확률을 가진다고 가정합니다. 이 경우, Beam Search는 이 두 시퀀스를 모두 유지합니다.
- 2 스텝: 두 번째 스텝에서 "The nice"와 "The dog" 시퀀스가 각각 "woman"과 "has"로 확장될 수 있습니다. 이 단계에서는 "The nice woman"과 "The dog has"라는 두 가지 시퀀스를 고려하게 됩니다. 이 과정에서, Greedy Search보다는 높은 확률의 시퀀스가 선택될 가능성이 높아집니다.
추가 기능:
- No-repeat ngram size 설정: Beam Search는 no-repeat ngram size와 같은 설정을 통해 동어 반복을 피할 수 있습니다. 이 설정은 모델이 같은 n-gram(예: 동일한 단어나 구)이 반복되지 않도록 패널티를 부과하여, 더 다양한 표현을 생성하게 도와줍니다.
쉽게 말하면: Beam Search는 텍스트 생성 시 Greedy Search의 한계를 극복하기 위해, 각 단계에서 여러 개의 가능성 있는 시퀀스를 유지하며 최적의 결과를 찾으려 합니다. 이를 통해 더 합리적이고 자연스러운 텍스트 생성을 도울 수 있지만, 여전히 모든 가능성을 다 고려하지 않기 때문에 최선의 결과를 보장하지는 못합니다. 동어 반복 문제도 설정을 통해 해결할 수 있습니다.
Sampling
Sampling은 텍스트 생성 과정에서 모델이 예측한 확률 분포에 따라 토큰을 선택하는 방식입니다. 이 방법은 확률에 기반해 다양한 단어를 선택할 수 있어, Greedy Search나 Beam Search보다 더 창의적이고 다양한 문장 구조와 어휘를 생성할 수 있습니다.
주요 특징:
- 확률 분포에 따른 샘플링: Sampling은 각 스텝에서 모델이 예측한 토큰의 확률 분포를 사용하여, 그 확률에 따라 토큰을 샘플링합니다. 이를 통해, 가장 높은 확률의 토큰만 선택하는 것이 아니라, 다양한 가능성을 반영한 시퀀스를 생성할 수 있습니다.
- Temperature 조절: Sampling에서 temperature 파라미터를 사용하여 확률 분포의 평탄함을 조절할 수 있습니다. Temperature는 확률 분포의 집중도에 영향을 주어, 모델이 얼마나 다양하게 단어를 선택할지 결정합니다.
- Temperature가 0에 가까워지면: 확률 분포가 매우 좁아져, 가장 높은 확률의 토큰만 선택하게 되어 Greedy Search와 유사한 결과를 낳습니다.
- Temperature가 1에 가까워지면: 확률 분포가 평탄해져, 낮은 확률의 토큰도 선택될 가능성이 높아집니다. 이로 인해, 더 다양한 단어와 문장 구조가 생성될 수 있습니다.
장점:
- 다양성: Sampling은 Greedy Search나 Beam Search보다 다양한 문장 구조와 어휘를 생성할 수 있습니다. 이는 특히 창의적인 텍스트 생성이나 다양한 응답이 필요한 대화 모델에서 유리합니다.
- 자연스러운 시퀀스 생성: Temperature 조절을 통해 텍스트 생성의 무작위성을 조절할 수 있으므로, 자연스러운 시퀀스를 생성하는 데 유용합니다. 적절한 temperature 값을 설정하면, 확률이 높은 선택을 유지하면서도 예측 불가능한 요소를 도입할 수 있습니다.
쉽게 말하면: Sampling은 모델이 예측한 확률에 따라 단어를 선택하여, 더 다양하고 창의적인 문장을 생성하는 방법입니다. Temperature 파라미터를 조절하면, 모델이 얼마나 다양한 단어를 선택할지 결정할 수 있어, 텍스트 생성의 무작위성을 조절할 수 있습니다. 이를 통해 Greedy Search보다 더 다양한 결과를 얻을 수 있지만, 적절한 균형을 맞추는 것이 중요합니다.
Top-k Sampling
Top-k Sampling은 텍스트 생성에서 가장 확률이 높은 상위 K개의 토큰만을 고려하여 샘플링하는 방법입니다. 이 방법은 확률이 낮은, 즉 비정상적이거나 이상한 토큰이 선택되는 것을 방지하면서도, 모델이 예측할 수 있는 다양한 선택지를 제공합니다.
주요 특징:
- 상위 K개의 토큰만 고려: 모델이 예측한 확률 분포에서 가장 높은 확률을 가진 상위 K개의 토큰만 선택의 대상으로 삼습니다. 이로 인해, 확률이 너무 낮은 토큰은 샘플링 과정에서 제외되어, 이상한 단어나 문장이 생성되는 것을 방지할 수 있습니다.
- GPT-2에서 사용된 전략: Top-k Sampling은 특히 GPT-2와 같은 모델에서 선택된 전략으로, 텍스트 생성의 품질을 높이면서도 불필요한 무작위성을 줄이는 데 사용됩니다.
- 남은 확률 질량 부여: 선택된 K개의 토큰 중 하나가 선택되면, 그 선택된 토큰의 확률 질량은 다음 스텝으로 넘어가도록 하여, 문장이 자연스럽게 이어지도록 합니다.
장점:
- 이상한 토큰 방지: 확률이 매우 낮아 비정상적이거나 문맥에 맞지 않는 토큰이 선택되는 것을 방지할 수 있어, 더 자연스럽고 일관된 텍스트를 생성할 수 있습니다.
- 코드 구현의 간략화: Top-k Sampling은 상대적으로 구현이 간단하며, 적은 수의 선택지만 고려하기 때문에 연산도 효율적입니다.
한계:
- 모델의 창의성 제한: 상위 K개의 토큰만을 고려하기 때문에, 모델이 생성할 수 있는 단어의 범위가 제한될 수 있습니다. 이는 모델의 창의성을 어느 정도 제한할 수 있으며, 너무 보수적인 결과를 초래할 수 있습니다.
쉽게 말하면: Top-k Sampling은 텍스트 생성 시 가장 높은 확률을 가진 상위 K개의 단어만을 선택 대상으로 삼아, 이상한 단어나 문장이 생성되는 것을 방지하는 방법입니다. 이 방법은 GPT-2에서도 사용되어 자연스럽고 일관된 텍스트 생성을 도우며, 코드 구현도 간단합니다. 그러나, 선택의 범위를 좁히기 때문에 모델의 창의성이 다소 제한될 수 있습니다.
Top-p Sampling (Nucleus Sampling)
Top-p Sampling, 또는 Nucleus Sampling은 텍스트 생성에서 확률 분포의 누적 확률이 특정 값 p에 도달할 때까지 토큰을 샘플링하는 방법입니다. 이 방법은 Top-k Sampling보다 더 유연하며, 모델이 이상한 토큰을 선택할 확률을 줄이면서도 다양한 선택지를 고려할 수 있습니다.
주요 특징:
- 누적 확률 기반 선택: Top-p Sampling은 토큰의 확률 분포를 계산한 후, 누적 확률이 p에 도달할 때까지 토큰들을 선택합니다. 즉, 확률이 높은 토큰들만 포함하면서도, 상황에 따라 k개의 토큰보다 더 많은(혹은 적은) 선택지를 고려할 수 있습니다.
- Top-k보다 더 유연: Top-p Sampling은 확률이 낮은 이상한 토큰이 선택되는 확률을 줄이면서도, 상황에 맞게 더 다양한 단어들을 고려할 수 있습니다. 이로 인해 더 자연스럽고 유연한 텍스트 생성을 가능하게 합니다.
- p 값 설정: p의 값은 0에서 1 사이의 값으로 설정되며, p가 작을수록 모델은 상위 몇 개의 확률 높은 토큰만 선택하게 됩니다. p가 1에 가까울수록 더 많은 토큰을 고려하게 되지만, 그만큼 무작위성이 증가할 수 있습니다.
추가 기능:
- Top-k와 함께 사용: Top-p Sampling은 Top-k와 함께 혼합하여 사용할 수 있습니다. 이 경우, Top-k의 장점인 특정 범위 내에서 확률 높은 단어 선택과 Top-p의 유연성이 결합되어, 더 균형 잡힌 샘플링을 제공할 수 있습니다.
한계:
- 동어 반복 가능성: 비록 Top-p Sampling이 유연하고 자연스러운 텍스트 생성을 도와주지만, 여전히 동어 반복 문제가 발생할 수 있습니다. 따라서, 추가적인 전략(예: n-gram 패널티)을 병행하여 사용하는 것이 좋습니다.
- 다양한 방법 테스트: 텍스트 생성 작업에서는 다양한 샘플링 방법을 테스트하고, 그 중에서 가장 적합한 방법을 선택하는 것이 중요합니다. 이는 각 작업의 목표와 데이터의 특성에 따라 달라질 수 있습니다.
쉽게 말하면: Top-p Sampling은 확률이 높은 단어들을 우선적으로 고려하면서, 누적 확률이 설정한 p 값에 도달할 때까지 토큰을 선택하는 방법입니다. 이 방식은 Top-k보다 더 유연하고 자연스러운 결과를 낳을 수 있으며, 필요에 따라 두 방법을 함께 사용하여 균형 잡힌 샘플링을 구현할 수 있습니다. 다만, 여전히 동어 반복이 발생할 수 있으므로, 다양한 방법을 테스트해보는 것이 중요합니다.
'langchain 공부' 카테고리의 다른 글
서버 없는 초 저비용 rag 인프라 구상 (0) | 2024.09.26 |
---|---|
임베딩과 차원의 의미 (0) | 2024.09.10 |
langchain 주요 컴포넌트 설명 (2) | 2024.09.02 |
Tokenizer와 embedding(LLM 역사와 발전4) (0) | 2024.09.02 |
생성의 의미, 인코더 디코더 모델(LLM 역사와 발전3) (1) | 2024.09.01 |