본문 바로가기

공부노트

12/18, 열여덟 번째 날의 TIL(Medium - LLM 성능 높이기)

어제에 이어서 Redis를 이용한 채팅을 웹으로 구현하려고 Websocket과 FastAPI를 공부해보고 있지만 아직 많이 부족하기에 ㅠㅠ 내일 마무리한 다음 올려야겠다. Medium에서 LLM의 성능을 높일 수 있는 트릭에 대한 아티클을 읽어보았다.


1Medium - LLM 성능 높이는 트릭

글의 작성자는 LLM의 출력이 종종 기대에 미치지 못하거나 불필요한 정보로 가득 찬 경우를 해결하기 위해 방법을 고안했는데, 출력의 일관성과 정확성을 높이는 데 중점을 두었다. 문제점은 크게 두 가지였는데

  1. 왜곡된 출력: 모델이 생성하는 텍스트가 초기 프롬프트와 관련이 없거나 일관성이 떨어지는 경우
  2. 컨텍스트 부족: LLM은 특정한 확률로 다음 단어를 생성하는데, 낮은 확률로 선택된 단어가 결과의 품질 저하

이 두 가지였다. 따라서 이 점을 해결하기 위해서 낮은 확률로 선택되는 단어가 없도록 필터링 하는 방법을 시도했다고 한다.

1. 로짓(logit) 조작

  • LLM은 다음 단어를 생성하기 위해 "로짓"이라는 숫자 값을 계산. 이 값은 각 단어의 선택 가능성을 나타낸다.
  • 낮은 확률을 가진 단어의 로짓 값을 -무한대로 설정하여 해당 단어가 출력에 포함되지 않도록 한다.

2. 임계값 설정

  • 단순히 확률 값이 일정 기준(예: 0.1)보다 낮은 단어를 필터링하는 대신, 가장 가능성이 높은 단어와의 비율을 기준으로 필터링
    • 예: 가장 높은 확률이 0.9라면, 0.9의 20%에 해당하는 0.18보다 낮은 확률을 가진 단어를 제거.
  • 이 접근법은 고정된 임계값보다 더 유연하게 작동하며, 다양한 프롬프트에도 잘 대응했다.

이 방법을 적용한 결과 출력 품질이 향상되어 불필요한 단어나 비정상적인 결과가 크게 줄어들었고, 복잡한 알고리즘 변결 없이도 쉽게 구현이 가능했다. 그리고 초반에 고려한 대로 출력이 프롬프트와 더욱 관련성을 가지게 되었다고 한다.

하지만 이 방법도 항상 좋은 것은 아닌데,

필터링 기준이 프롬프트에 따라 달라지므로 일반화에는 어려움이 있고 너무 과도한 필터링은 창의성을 제한하거나 결과가 지나치게 반복적이거나 단조롭게 보일 위험이 있다.

 

결론적으로 간단한 확률 기반 필터링 기법으로도 LLM 출력 품질을 극적으로 향상시킬 수 있었으며, 이는 LLM 을 활용하는 실질적인 가치를 제공하고 애플리케이션 개발이나 사용자 경험 개선에서 중요한 역할을 할 수 있다고 한다.


이 글을 보고, 정말 큰 방법이 아니더라도 여러가지 방법을 통해 모델의 성능을 높일 수 있다는 것을 알게 되었다. 아직 LLM에 대해서는 잘 알지 못하지만 다음에 모델을 학습시킬 때 이 방법을 적용해보고, 이와 비슷한 다른 간단한 방법도 여러가지 찾아서 시도해볼 예정이다.

내일도 화이팅해야지