얼마전 가트너 사에서 보고서에 따르면 프로그래머 80%가 기술 향상이 필요하다고 함


2027년까지 현존하는 80% 이상이 사실상 AI보다 뒤쳐진다고 내다봤다고 말할 수 있음.


반대로 말하자면 프갤정도되면 대수의 법칙으로따져서 8할이 AI보다 코딩을 못한다 할 수 있음.


근데 나는 오히려 좀 생각을 바꿔서 서비스하는 제품 생산에 주력해서 AI를 적극 활용해서 생산성을 올리자고 방향성을 잡음


그래서 AI 프롬프팅 기법을 찾아보는 중에 최근에 CoT라는게 유행이더라.


CoT(Chain of Thought)에서 파생됨


https://arxiv.org/abs/2201.11903

Chain-of-Thought Prompting Elicits Reasoning in Large Language Models


이 논문의 효과가 뭐냐
사고 체인-> 복잡한 문제를 잘게 쪼개서 단계로 분해->점진적 솔루션을 찾는다는거
인간 사고 체계에서 따왔다고, 인간 사고를 시뮬레이션함

최근에 CoT 논문은 이 CoT로 얼마나 더 큰 효율을 발생시키는가에 대한 논문이던데

기본적인 대전제는 다음과 같음

1. 첫째, 원칙적으로 CoT(사고사슬)을 통해 모델은 다단계 문제를 중간 단계로 분해할 수 있음. 즉 문제를 쪼갤 수 있음.
즉, 더 많은 추론 단계가 필요한 문제에 추가 계산을 할당할 수 있다고 말할 수 있음.

2. 둘째, 사고 사슬은 모델의 행동에 대한 해석 가능한 창을 제공하여 모델이 특정 답변에 어떻게 도달했는지 표시하고 추론 경로가 어디에서 잘못되었는지 디버깅할 수 있는 기회를 제공.

3. 셋째, 사슬 사슬은 수학적 단어 문제, 상식 추론, 상징적 조작 등의 작업에 사용될 수 있으며, 인간이 언어를 통해 해결할 수 있는 모든 작업에 (적어도 원칙적으로) 적용될 수 있음.

4. 마지막으로, 사고 사슬 시퀀스의 예를 소수 단서의 예에 간단히 포함시킴으로써 충분히 큰 기성 언어 모델(LLM)에서 사고 사슬 추론을 쉽게 유도할 수 있음.

여기서 CoT 즉 사고 사슬의 작동방식은 다음의 3가지를 띔

1.2 CoT 작동 방식

CoT 프롬프트의 핵심 아이디어는 소수의 예시에 중간 추론 단계를 추가하는 것
특히 프롬프트의 각 예시에는 세 부분이 포함되어 있음

1. 입력: 문제 설명

2. 사고 사슬: 문제 해결을 위한 중간 추론 단계

3. 출력: 최종 답변

즉 입력->출력에서
입력->사고 사슬->출력 이라는 중간과정을 추가함

CoT는 실험결과는 놀라웠고, GSM8K 수학 문제에서 이전보다 절대 정확도가 57% 향상됨


실제로 이에 대한 이론에 대한 정리는 있는데 내가 이해를 하지 못해서 가져오지 않겠음. 나는 이해 못한 것을 쓰지 않는 주의기때문에


CoT는 정확히 말하자면


올바른 답을 출력할 확률과 연관되어있는데, 정답 확률이 높은 단어와 연관될 경우 CoT의 성능이 크게 향상됨. 따라서 사전 훈련단계에서 학습된 확률 분포에 큰 영향을 받음.


1. 중간 추론 단계가 있을때, 올바른 답을 출력할 확률이 낮을 경우,모델은 더 높은 답변을 생성하기 위해 자체수정함(다만 여전히 불완전함)(


2. 중간 추론 단계가 있을때, 올바른 답을 출력할 확률이 높을 경우, 설정에서는 중간 추론 단계에 오류가 있어도 모델이 올바른 최종답에 도달할 가능성이 더 높음


3. 중간 추론 단계가 있다고 하더라도, 올바른 답을 출력할 확률이 낮을 경우, 여전히 잘못된 최종답변을 생성할 가능성이 더 높음


즉 CoT는 즉 확률의 영향을 받은 일종의 추론 프로세스임.


그리고 이런 CoT의 이론적 프레임 워크는 결국


1.문제 분해-> CoT를 사용하여 복잡한 문제를 일련의 간단한 하위 문제로 분해


2. 재귀 계산: 추론 단계를 반복적으로 생성한 후, 조건을 지정하여 재귀 계산 프로세스를 구현함.


3. 동적 프로그래밍 시뮬레이션: 즉 CoT를 사용하면 모델이 동적 프로그래밍 알고리즘을 시뮬레이션 하고, 하위문제가 겹치는 복잡한 작업을 효과적으로 처리할 수 있음.


즉 CoT 프레임 워크는


1. 모델이 해야할 설명을 좀 더 강화해서 설명하기


2. 다양한 샘플을 제시하기


3. 동적 추론 경로(문제를 쪼개기)


4. 자체 점검 메커니즘을 요구하기


라고 할 수 있음


결국 질문을 할때,


과정을 쪼개고, 예시 샘플을 주고, 문제를 얼마나 잘게 쪼개서 주느냐에 따라서 답변의 질이 달라진다고 하더라.


그래서 요즘은 코드 생성을 하기전에 Git에서 별점 높은 코드를 주면서 샘플을 주면서 요구 사항을 순서로 정해서주는데 이게 상당히 많은 도움이 되는듯.


내가 느끼는게 이제 프로그래밍 연차가 쌓인다는 것은


즉 좋은 데이터들을 '얼마나' 많이 저장해서 GPT에게 샘플을 먹여서 질좋은 답변을 생성시키느냐가 핵심인거 같음.


나는 이때문에 최근에 해외 유수의 알고리즘들 다 저장해두는 중임.


일단 기본적으로 각 언어마다 유명한 알고리즘은 저장해두고 자신만의 깃에 저장해두는게 주요하다는 생각을 많이함.


이제 시대는 개인의 저장소에 얼마나 질좋은 데이터가 들어있느냐로 결과물이 달라지는 시대가 될테니까.