언어화된 신뢰도(Verbalized confidence): LLM이 자신의 확신 정도를 말하게 하고, 90%가 정말 90%를 의미하는지 확인하기
요약
LLM이 자신의 답변에 대한 확신 정도를 수치로 표현하게 하는 '언어화된 신뢰도(Verbalized confidence)' 개념과 그 보정(Calibration) 방법을 다룹니다. 모델이 과도하게 확신하는 경향을 분석하고, ECE(Expected Calibration Error)를 통해 신뢰도의 정확성을 측정하는 기술적 접근법을 제시합니다.
핵심 포인트
- 언어화된 신뢰도는 모델의 답변을 게이팅이나 라우팅의 신호로 활용 가능하게 함
- 시스템 프롬프트를 통해 정답 확률 요청 및 낮은 수치를 말할 권한 부여 가능
- 신뢰도가 실제 정확도와 일치하는지 확인하기 위해 보정(Calibration) 과정이 필수적임
- ECE(기대 보정 오차)를 사용하여 신뢰도 도표의 정확성을 정량적으로 측정함
- RLHF 과정에서 모델이 자신감 있는 답변에 보상을 받으며 과잉 확신하는 경향이 발생함
모델에게 질문을 던지면, 모델은 호주의 수도를 알고 있든 동전 던지기로 찍고 있든 똑같이 평이한 확신을 가지고 답변합니다. 언어화된 신뢰도(Verbalized confidence)는 이 문제의 절반을 해결합니다. 즉, 모델에게 명시적인 자기 추정치를 붙이도록 요청하는 것입니다 — "답변: 캔버라, 신뢰도: 90%." 이 한 줄의 추가 정보만으로 불투명한 추측이 게이팅(gate), 라우팅(route) 또는 답변 거부(abstain)를 할 수 있는 신호로 변합니다. 나머지 절반 — 모두가 건너뛰는 부분 — 은 그 숫자가 정직한지 확인하는 것입니다.
숫자를 이끌어내는 것은 하나의 시스템 지침(system instruction)입니다
이 전체 동작은 세 가지 역할을 수행하는 시스템 프롬프트(system prompt)에 담겨 있습니다: (단순한 느낌이 아닌) 정답일 확률을 요청하고, 모델이 확신하는 것처럼 들리도록 강요받지 않도록 낮은 숫자를 말할 수 있는 명시적인 권한을 부여하며, 파싱 가능한(parseable) 출력 형태를 고정하는 것입니다. 바로 복사해서 사용할 수 있는 템플릿은 다음과 같습니다:
당신은 신중한 어시스턴트입니다. 질문에 답한 후,
당신의 답변이 정답이라고 확신하는 정도를
0에서 100 사이의 백분율로 명시하세요.
...
이를 다시 파싱하는 것은 클램프(clamp)와 합리적인 기본값을 사용하는 몇 개의 정규 표현식(regex)을 사용하는 것이므로, 형식이 어긋나더라도 파이프라인이 절대 중단되지 않습니다.
명시된 신뢰도는 보정(calibrated)되어야만 가치가 있습니다
명시된 90%는 "내가 이만큼 확신했던 100개의 질문 중 약 90개를 맞힐 것이다"라는
세상에 대한 예측입니다. 보정(Calibration)은 이 예측이 실제로 유지되는지 여부입니다. 이를 테스트하려면 라벨링된 평가 세트(labelled eval set)가 필요하며, 그다음 명시된 신뢰도에 따라 예측값을 빈(bin)으로 나누고 각 빈에서 실제로 관찰된 정확도를 측정해야 합니다.
function binByConfidence(preds, width = 10) {
const nb = Math.round(100 / width);
const bins = Array.from({ length: nb }, (_, i) => (
...
각 빈을 y = x 대각선에 대해 (평균 명시 신뢰도, 경험적 정확도)로 그래프로 그리면 **신뢰도 도표(reliability diagram)**를 얻을 수 있습니다. 도표 전체를 하나의 스칼라(scalar) 값으로 압축하면 **기대 보정 오차(Expected Calibration Error, ECE)**를 얻게 됩니다. 이는 대각선으로부터의 거리의 개수 가중 평균입니다:
function expectedCalibrationError(preds, width = 10) {
const N = preds.length;
const bins = binByConfidence(preds, width);
...
왜 LLM은 과도하게 확신하는 경향이 있는가 — 그리고 어떻게 대처해야 하는가
이러한 실패 모드(failure mode)는 학습 과정에 내재되어 있습니다. 사전 학습 (Pretraining)은 유창하고 확신에 찬 문장 이어쓰기에 보상을 주며, 데이터 내에서 확답을 피하는 표현 (hedging)은 드뭅니다. 이후 RLHF (인간 피드백을 통한 강화학습)는 인간이 좋아하는 답변에 보상을 주는데, 인간은 자신감 있고 단호한 답변에 보상을 주는 경향이 있습니다. 따라서 모델은 확신에 찬 것처럼 들리는 것이 높은 점수를 받는 반면, 솔직하게 "아마도 55%"라고 말하는 것은 점수를 얻지 못한다는 것을 학습합니다. 그 결과: 언어화된 수치들은 높고 평평하게 군집하며, 곡선은 상위 빈(bin)에서 대각선 아래로 처지게 됩니다.
당신은 세 가지 측면에서 이에 대응할 수 있습니다. 프롬프트 측면 (Prompt-side): 정답일 확률을 요청하고, 낮은 수치를 허용하며, 척도 (scale)를 고정하십시오. 샘플링 측면 (Sampling-side): N개의 답변을 추출하고 그들의 _일치도 (agreement)_를 경험적 신뢰도 (self-consistency, 자기 일관성)로 사용하십시오. 이는 모델의 자기 보고 (self-report)보다 종종 더 잘 보정(calibrated)되어 있습니다. 그리고 측정 측면 (measurement): 레이블 (label)에 대해 점수를 매겨본 적이 없는 신뢰도는 믿을 수 없습니다. 일단 보정(calibrated)되고 나면, 그 수치는 실제 제어 레버가 됩니다. 즉, 신뢰도가 낮을 때마다 답변을 거부하거나, 인간에게 에스컬레이션하거나, 더 큰 모델로 경로를 지정할 수 있습니다.
과도하게 확신하는 모델과 보정된 모델을 대조하여 신뢰도 곡선이 휘어지는 것을 확인해 보세요. 실시간 확인: https://dev48v.infy.uk/prompt/day54-verbalized-confidence.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기