카테고리 없음

스파르타 AI-8기 TIL(11/11) -> 논리적인 추론 강화

kimjunki-8 2024. 11. 11. 21:01
논리적인 추론의 문제
LLM이 논리적 추론 문제를 잘 해결하지 못하는 이유는 언어 모델의 학습 방식과 논리적 사고 능력의 한계에서 비롯됩니다. 현재의 LLM은 방대한 양의 텍스트 데이터를 바탕으로 통계적으로 학습하는 구조인데, 이러한 학습 방식은 주로 패턴 인식에 기반하여 추론을 수행합니다. 하지만 이 방식은 논리적 사고와 체계적 추론을 수행하는 데 한계가 있습니다.
왜 논리적 추론에 어려움을 겪는가?
패턴 학습 기반:
LLM은 방대한 텍스트 데이터에서 단어와 문장 간의 패턴을 학습합니다. 그러나 이는 사전 정의된 규칙이나 논리적 구조를 이해하는 것이 아니라, 단어와 문장 간의 빈도와 상관성을 바탕으로 다음 단어를 예측하는 데 기반합니다.
즉, 논리적인 상황에서의 추론보다는 기존의 유사한 예제에 의존해 답변을 구성하는 경향이 있습니다.

기억력의 한계와 유연한 추론 부족:
모델의 맥락 이해는 제한된 길이의 토큰에 의존하며, 특정 정보가 긴 문서 내에 분산되어 있거나 복잡한 관계로 얽혀 있으면 그 관계를 정확히 파악하기 어렵습니다.
논리적 추론을 위해선 앞뒤 맥락과 다양한 조건을 고려한 판단이 필요한데, LLM은 고정된 맥락 길이 내에서만 정보를 활용하기 때문에 유연한 추론을 지속하기 어렵습니다.

논리 연산과 규칙 기반 추론의 어려움:
논리적 추론을 수행하기 위해선 명시적인 규칙을 사용하거나 수학적 연산을 수행해야 하는데, LLM은 이런 명시적 규칙을 직접적으로 구현하는 데 어려움이 있습니다.
복잡한 수학적 연산이나 조건문을 처리할 때는 논리적인 계산 능력이 필요한데, 언어 모델은 이런 능력보다는 텍스트 생성에 최적화되어 있습니다.
논리적 추론 강화를 위한 접근법

LLM의 논리적 추론 능력을 개선하기 위해 다양한 방법은 다음과 같습니다.
Chain-of-Thought(연쇄 사고) 프롬프팅:
모델이 답변을 단계별로 설명하도록 유도하여 논리적 사고 과정을 강화하는 방법입니다. 문제를 단일 응답으로 해결하기보다는 여러 단계를 거쳐 답변을 구성하도록 유도해, 복잡한 문제를 해결할 때 필요한 논리적 연계성을 높이는 것입니다.
예를 들어, "수학 문제를 단계별로 풀이 과정을 설명해 줘"라는 프롬프트를 사용하여, 각 단계의 논리적 연결을 통해 문제를 해결할 수 있습니다.

ReAct 기법:
추론(Reasoning)과 행동(Action)을 결합하는 방식으로, 모델이 문제를 풀 때 정보의 근거를 설명하도록 유도하는 기법입니다.
이 기법은 모델이 특정 정보에 대해 스스로 논리를 설명하거나 점검하는 역할을 수행하도록 하여, 답변의 정확성과 논리성을 높입니다. 모델이 정보를 활용하면서 논리적으로 답변을 검토하도록 하는 방식으로 논리적 추론을 강화할 수 있습니다.

강화 학습(Instruction-Tuning 포함):
특정한 논리적 능력이나 추론 능력을 강화하기 위해, 강화 학습과 추론 능력에 중점을 둔 데이터 튜닝을 수행할 수 있습니다.
예를 들어, GPT 모델에서 다양한 수학적 문제와 논리적 추론 문제에 대한 학습을 강화하거나, 특정한 상황에서의 논리적 오류를 줄이는 데이터를 추가 학습시켜, 모델의 추론 능력을 보다 정확하고 일관성 있게 개선하는 방식입니다.

외부 툴과의 결합:
논리적 추론이나 복잡한 계산이 필요할 때, 모델이 외부 계산 도구나 추론 엔진에 질의를 보내 계산이나 논리를 보강하는 방식으로 접근할 수 있습니다.
예를 들어, 계산 능력이 약한 언어 모델이 필요할 때 계산기를 사용하거나 코드 실행 기능을 통해 답변할 수 있도록 하여, 논리적 오류를 최소화할 수 있습니다.

예를 들어 보겠습니다.

학교에서 총 120명의 학생이 체육 대회에 참가했습니다. 이 중 일부는 축구를 하고, 일부는 농구를 하고, 일부는 두 가지 모두에 참여합니다. 축구에 참가한 학생은 80명, 농구에 참가한 학생은 70명입니다. 두 종목에 모두 참가한 학생은 몇 명일까요?
CoT 적용하여 풀기 
1. 문제 분석
총 학생 수는 120명.
축구에 참가한 학생은 80명.
농구에 참가한 학생은 70명.
두 종목에 모두 참가한 학생 수를 구하는 문제입니다.

2. 필요한 개념 확인
이 문제는 중복 집합(교집합)을 계산하는 문제로, 집합의 포함-배제 원리를 사용하면 쉽게 풀 수 있습니다.
포함-배제 원리: A + B − A ∩ B 

3. 포함-배제 원리 적용
축구에 참가한 학생과 농구에 참가한 학생을 합한 뒤, 두 종목에 모두 참가한 학생을 빼주면 중복 없이 전체 학생 수가 나옵니다.
따라서, 식을 세워보면:
80+70−(두 종목 모두 참가한 학생)=120

4. 연립 방정식 정리 및 풀이
식을 간단히 정리해봅시다:
150−(두 종목 모두 참가한 학생)=120
두 종목 모두 참가한 학생=150−120
두 종목 모두 참가한 학생=30

5. 결론
두 종목에 모두 참가한 학생은 30명입니다.
이렇듯 CoT 방법을 통해 미리 계산되고, 중간 과정을 직접 넣어주니 논리적인 답변을 훨씬 더 세밀하게 유도할 수 있습니다.

대화를 활용한 프롬프트 기법
대화를 활용한 프롬프트 기법의 핵심 요소
연속적인 질문과 요청:
첫 번째 요청에서 나온 모델의 답변을 바탕으로 추가 질문이나 수정 요청을 하여, 점진적으로 답변의 질과 구체성을 높입니다.
예를 들어, 사용자가 "다음 이야기를 해줘"라고 하고, 이후 답변에 따라 세부사항을 추가로 요청하는 방식입니다.

역할 부여:
AI에게 특정 역할을 할당하여 답변의 방향성을 설정할 수 있습니다. 예를 들어, "전문가처럼 설명해줘"나 "초보자도 이해할 수 있게 설명해줘"와 같이 AI가 사용자와 상호작용할 때 취해야 할 태도와 방식에 대한 힌트를 주는 겁니다.

피드백 반영:
모델이 제시한 답변에서 필요한 부분을 더 추가하거나, 잘못된 답변에 대한 피드백을 줘서 다시 답변하도록 할 수 있습니다. 이를 통해 답변의 완성도를 높일 수 있습니다.

추론과 확인:
복잡한 문제에 대해 "이게 맞나요?"와 같이 중간 점검을 통해 논리적 정확성을 높이는 방식입니다. 특정 추론 단계가 맞는지 대화 중간에 확인함으로써 모델이 각 단계에서 올바른 방향으로 문제를 해결하게 합니다.

예시: 대화형 프롬프트 기법을 활용한 스토리 생성
사용자: "판타지 이야기를 만들어줘. 주인공은 용사고, 그의 목표는 공주를 구하는 거야."

모델(AI): "어느 날, 용사 에단은 마을 주민으로부터 용이 공주를 납치해 갔다는 소식을 듣습니다. 용사는 검을 들고 용의 성으로 떠나기로 결심합니다."

사용자: "그 용사는 어떤 성격을 가지고 있어?"

모델: "용사 에단은 용감하면서도 마음이 따뜻한 인물입니다. 항상 약자를 돕고, 정의를 실현하려는 강한 의지를 지니고 있어요."

사용자: "공주와 어떻게 만나는지 더 자세히 설명해줘."

이렇게 대화를 통해 이야기의 방향을 조금씩 구체화하면서도 새로운 세부사항을 추가하는 방식으로 AI의 답변을 유도할 수 있습니다.

대화형 프롬프트 기법의 장점 복잡한 문제를 단계적으로 해결할 수 있습니다. 사용자가 원하는 정보나 세부사항을 점진적으로 추가할 수 있어 더욱 정확하고 사용자 맞춤형 답변을 얻을 수 있습니다. 모델의 오류나 불확실한 답변을 대화 중에 바로 확인하고 수정할 수 있는 피드백을 주기 쉽습니다. 모델의 답변을 발전시키며 창의적인 작업에도 유리합니다. 이 기법은 사용자와 AI 간의 자연스러운 대화를 통해 복잡한 요청을 해결하고, 다양한 방향성을 시도하는 데 유용한 접근법입니다. 

즉, 대화를 하면서 계속해서 user가 답에 가깝도록 계속 유도를 하는것입니다.

그런데 대화의 개선에는 두가지 방법이 있습니다.
먼저, 정보제공 입니다. 그냥 지금까지 배웠던 그대로 사전에 assistant나 system에 특정 정보를 넣어서 유도를 하거나, 두번쨰로는 위에서 나온 대화를 하면서 계속해서 개선 할 점을 말해주는 겁니다.

형식 지정 기법
형식 지정 기법은 정보를 특정 구조나 양식에 맞춰 정리해 AI 모델이 그 형식을 따르도록 유도하는 기법입니다. 이를 통해 AI가 단순 답변을 넘어 사용자에게 적합한 방식으로 체계적이고 일관성 있는 정보를 전달할 수 있습니다. 다양한 형식 지정 방식을 활용하면 답변의 가독성과 전달력을 높이는 데 효과적입니다.
다양한 형식 지정 방식
1. 목록 형식 (List Format)
목록 형식은 항목을 나열하거나 단계적으로 정보를 제공할 때 유용합니다. 정보의 주요 항목이나 체크리스트 형태로 제공하고자 할 때 자주 사용됩니다.

순서형 목록: 숫자나 번호를 붙여 단계적으로 정리된 항목을 표시합니다. 예를 들어, "1단계, 2단계, 3단계"와 같이 순서가 중요할 때 적합합니다.
비순서형 목록: 점이나 대시를 사용하여 순서와 관계없이 항목들을 나열합니다. 예를 들어, "특징", "장점", "단점"을 나열할 때 주로 사용됩니다.
예시
순서형 목록
이메일 제목을 작성한다.
내용을 작성한다.
첨부 파일을 확인하고 전송한다.

비순서형 목록
속도가 빠르다.
사용하기 쉽다.
유지 보수가 간단하다.

2. 표 형식 (Table Format)
표 형식은 여러 항목을 비교하거나 체계적으로 나열할 때 유용합니다. 다양한 요소를 동시에 나열하고 비교할 때, 한눈에 볼 수 있어 정보 전달에 효율적입니다.
예시
국가  인구(백만) 면적(km²)  주요 산업
미국 331 9,833,520 기술, 금융, 제조
일본 126 377,975 자동차, 전자

3. 단계별 지시 형식 (Step-by-Step Instructions)
특정 작업이나 절차를 단계적으로 설명할 때 사용합니다. 이 형식은 각 단계에 세부적인 설명과 주의사항을 덧붙일 수 있어, 사용자가 따라하기 쉬운 형태로 정보를 전달할 수 있습니다.
예시
재료 준비: 먼저 필요한 재료를 모두 준비합니다.
혼합하기: 재료를 볼에 넣고 골고루 섞습니다.
굽기: 예열한 오븐에 넣고 20분간 굽습니다.
마무리: 다 구워진 빵을 꺼내서 식힙니다.

4. Q&A 형식 (Question & Answer Format)
질문과 답변 형식으로 정보를 전달하여 대화형으로 답변할 수 있습니다. 주로 FAQ 형식이나 인터뷰 형식으로 사용되며, 사용자가 궁금해할 법한 질문과 그에 대한 답변을 나열할 때 유용합니다.
예시
Q: AI가 어떻게 학습하나요?
A: AI는 데이터와 알고리즘을 통해 학습하며, 주어진 데이터에서 패턴을 학습해 새로운 데이터에 대한 예측을 수행합니다.
Q: AI 모델의 정확도는 어떻게 평가하나요?
A: 정확도는 일반적으로 테스트 데이터를 통해 예측 결과와 실제 결과를 비교하여 평가합니다.

5. 요약 형식 (Summary Format)
복잡한 정보를 간략하게 요약하여 전달할 때 유용합니다. 전체적인 개요를 빠르게 전달하고자 할 때 사용됩니다.
예시
프로젝트 요약:
목표: 사용자 맞춤형 추천 시스템 개발
기간: 6개월
주요 단계: 데이터 수집, 모델 학습, 테스트, 배포

6. 예시 포함 형식 (With Examples Format)
특정 개념이나 절차를 설명하면서 구체적인 예시를 포함하는 형식입니다. 예시는 추상적인 개념을 구체화해 독자가 이해하기 쉽게 만듭니다.
예시
기계 학습 모델 유형:
지도 학습: 정답이 있는 데이터를 기반으로 학습 (예: 이미지에 라벨이 있는 데이터셋으로 고양이, 개 분류하기)
비지도 학습: 정답이 없는 데이터를 기반으로 패턴을 찾음 (예: 고객 군집화)

7. Markdown 형식
Markdown은 텍스트를 문서화할 때 제목, 리스트, 코드 블록 등을 시각적으로 강조해 구조를 제공하는 포맷입니다. 프롬프트에서 특정 요소를 굵게 표시하거나, 코드 형식으로 제공하여 명확성을 높이는 데 효과적입니다.

예시
# 주요 단계
1. **데이터 수집**: 데이터를 모아 분석 준비를 합니다.
2. **모델 학습**: 수집된 데이터로 AI 모델을 학습시킵니다.
3. **결과 평가**: 모델 성능을 평가하고 필요한 조정을 진행합니다.​

-헤더: `#`을 사용해 제목과 섹션을 나눌 수 있어요.
-리스트:  - 로 항목을 나열할 수 있어요.
-표: `|`와 `--`를 사용해 표를 만들 수 있어요.


8. JSON 형식
JSON (JavaScript Object Notation)은 주로 데이터를 교환할 때 사용하는 형식입니다. 키-값 쌍을 통해 구조화된 데이터를 전달하며, AI와 API가 데이터를 교환하거나 프로그램 간 정보를 전달할 때 사용됩니다.

{
  "프로젝트": "추천 시스템 개발",
  "기간": "6개월",
  "단계": [
    {"이름": "데이터 수집", "설명": "데이터를 모아 준비"},
    {"이름": "모델 학습", "설명": "모델을 학습시키기"},
    {"이름": "결과 평가", "설명": "성능을 평가하고 조정"}
  ]
}​

9. 기호(Symbol)
형식 기호 형식은 간단하게 강조하거나 상태를 빠르게 표시할 때 유용합니다. 예를 들어, ✅, ❌ 등의 기호로 상태나 조건을 직관적으로 전달할 수 있습니다.

예시

✅ 데이터 수집 완료
❌ 모델 학습 미완료
🔄 평가 진행 중


형식 지정 기법의 장점
다양한 형식 지정 기법을 통해 원하는 방식으로 정보를 전달할 수 있습니다. 이를 통해 정보를 체계적으로 구성하고, 사용자 맞춤형 답변을 생성할 수 있어 가독성과 전달력이 향상됩니다.