개요
저번 글인 생성형 AI 소개에 이어 써보겠습니다.
LLM 모델이 기억하는 원리나 각종 파라미터 등에 대해 적어볼겁니다.
상당히 흥미로운 주제이지만 논문 쓰는 것 같고 막 그럽니다.
LLM이 뭔데
LLM(Large Language Model)은 대규모 언어 모델이란 뜻입니다.
말 그대로 진짜 대규모입니다. 엄청나게 거대하고 방대합니다.
지금은 거들떠도 안보는 GPT-3도 1750억개의 파라미터로 이루어져있습니다.
LLM은 이 단어 다음에 올 가장 자연스러운 단어가 무엇인지 추측하는 알고리즘입니다.
그리고 이러한 어마어마한 학습량을 기반으로 더욱 자연스러운 단어를 선별해 내서 훨씬 사람냄새나는 답변을 제공합니다.
자연어 생성(NLP)작업을 통한 딥 러닝 알고리즘이라고도 하는데 잘 모르겠으니 넘어가죠.
작동
방금 위에서 말했듯이 LLM은 이 단어 다음에 올 가장 자연스러운 단어가 무엇인지 추측하는 알고리즘입니다.
작동 원리도 동일하며 이게 다입니다.
모델이 어떤 방식으로 학습하고 어떤 과정을 거쳐 Output을 내는지에 대해선 저도 잘 모릅니다,
그러므로 이번 작동에선 조금 다른 부분을 다뤄볼겁니다.
토큰
AI는 기억할때 무엇을 매개로 사용할까요?
AI는 기억하기 위해 'Token(토큰)'이라고 불리는 것을 사용하는데 이 토큰은 영어 단어 1개를 의미합니다.
한글이나 일본어 같은 언어로 치환할경우 한 글자마자 토큰 1개가 할당되기 때문에 가성비가 떨어지는 편입니다.
아무튼, 이 토큰은 AI의 뇌입니다.
자세히 말하자면 뇌의 기억을 담는 장소인 '해마'라고 할 수 있겠네요.
우리가 평소에 사용하는 AI는 기억할 수 있는 토큰을 정해놓습니다.
제가 조금 구린 AI를 사용해서 기억 할 수 있는 토큰의 한계가 800이라고 칩시다.
그러면 제가 넣은 Input이 전부 저 토큰에 들어갑니다.
저 부분을 컨텍스트(Context) 라고 합니다.
그리고 제가 조금 욕심을 내서 쓰다가 Input을 넣었을때 800을 초과해버렸습니다.
그러면 AI는 제일 먼저 들어온 기억들부터 차례대로 '완전히 소거'합니다.
완벽하게 잊어먹는다는 뜻이죠.
AI는 사람과 비슷하게 말하는 것 같아도 기억의 저장은 사람과 똑같이 하지 않습니다.
사람과 같은 경우 과거에 있던 일을 띄엄띄엄 기억하며 쓸모없는 기억을 지워나가기 때문에 기억이 듬성듬성한 반면
AI들은 특정 구간까지는 완벽히 기억하지만 임계점을 넘어가면 완벽히 잊어버립니다.
ChatGPT 무료버전 사용자들은 GPT와 오래 대화하다보면 얘가 내가 한말을 잊어버린다는 느낌이 들텐데 그 이유입니다.
(사실 이건 토큰 말고도 AI가 특정 구간에서 토큰 반영율이 현저히 떨어지는 현상이 발생해서 그럴겁니다.)
API를 통해 요청할 경우 최대 컨텍스트 크기를 저희가 직접 만질 수 있습니다.
API에 파라미터가 있는건 아니지만 저희가 넣어주는 Input의 양을 조절하면 가능합니다.
돈만 받혀준다면 기억력이 엄청난 AI를 만들 수 있을지도 모릅니다.
프롬프트
GPT와 대화해봤다면 얘가 내가 했던 대화를 기억합니다.
네? 당연한말 아니냐구요?
아닙니다. 저희가 GPT와 대화할때 넣어주는 Input은 저번 대화들에서 기인한 알 수 없는 말 뿐입니다.
예를 들어봅시다.
나 : GPT야. 내가 웹에서 JS로 풀 3D 렌더링 게임을 만들고 싶어.
GPT : 미쳤습니까?
나 : 왜 욕을하고 그래...
GPT :
이런식의 대화가 있을때 GPT에게 들어가는 Input이 "왜 욕을하고 그래..." 하나뿐이라고 해봅시다.
그러면 GPT는 난 아무말도 안했는데 이 인간이 돌았나 대체 뭐라는건지 의문스럽겠죠?
사실 저희가 넣는 Input은 그 전대화가 포함된 채로 AI에게 입력됩니다.
"
<전 대화 내용>
User : GPT야. 내가 웹에서 JS로 풀 3D 렌더링 게임을 만들고 싶어.
GPT : 미쳤습니까?
</전 대화 내용>
User : 왜 욕을하고 그래...
"
이런식으로 말이죠.
그러면 GPT는 전 대화 내용들과 지금 들어온 User의 Input을 통해
GPT: JS로 풀 3D 렌더링 게임이라니 말이 되는 소리를 하십시오.
라는 Output을 낼 수 있게 됩니다.
그리고 저렇게 User의 Input 외의 들어가는 부가적인 요소들을 '프롬프트(Prompt)' 라고 합니다.
이 프롬프트를 잘 사용하면 GPT에게 요구사항을 전달할 수 있습니다.
const completion = await openai.chat.completions.create({
messages: [{ role: "system", content: "공감해줘." },
{
role : "user", content : "집에가고싶다."
}],
model: "gpt-3.5-turbo",
});
OpenAI의 API에게 요청을 넣는 코드 일부분입니다.
role이라는 변수가 있는데 이건 말그대로 무슨 역할로써 지시를 내릴지를 결정하는 겁니다.
"system"이라는 역할은 AI에게 '이러한 지침을 따라라'라고 지시하는 곳입니다.
그리고 "user"는 우리입니다. system에 들어간 지시사항을 기반으로 우리의 input에 답장하는것이 기본적인 프롬프트의 원리입니다.
좋은 프롬프트를 작성하려면 AI에게 글을 좀 잘써보라고 지시를 내려야 합니다.
만약 소설이 작성하고 싶다면 "소설처럼 써라" 라고 간단하게 지시에 적는 것이 아닌
"당신은 소설가 입니다. 소설처럼 장황하고 유려한 문체로 작성하세요. 독자에게 감동을 줄 수 있는 전개로 천천히 빌드업 하세요. 저번에 나왔던 묘사와 설정이 서로 잘 맞물리도록 잘 검토하세요."
라고 AI에게 역할을 부여한 뒤 자세하게 프롬프팅하면 뇌빼고 프롬프팅 한 것 보단 훨씬 Output이 잘나옵니다.
물론 소설을 쓸정도로 컨텍스트가 넘쳐난다면 소설을 써도 됩니다.
각종 파라미터들
제가 LLM은 다음 단어에 올 가장 자연스러운 단어를 뽑는다고 했죠? 이것을 조절하는 것이
'Temperature(온도)' 라고 하는 파라미터입니다.
이 온도라는 것은 0부터 2까지 자유롭게 조절할 수 있는 실수(mistake 아님)입니다.
간단하게 말하자면 온도가 높아질 수록 창의적인 답을, 낮아질 수록 정형화 된 답을 내놓습니다.
조금 복잡하게 말하자면 단어들의 들쭉날쭉한 자연스러움 수치(가중치라고 칭하죠) 를 평탄화 시킨다고 생각하면 됩니다.
그렇기 때문에 조금 덜 중요한 정보도 자연스러운 단어에 들어갈 수 있으며 내가 따로 요청하지 않은 정보가 튀어나오거나 새로운 개념을 만들거나 창의적인 답변을 내놓도록 합니다.
"엥? 그러면 온도가 높은게 무조건 좋은거 아닌가요?"
아닙니다. 제가 가중치를 평탄화 시킨다고 했죠?
과하게 평탄화된 가중치들은 무엇이 자연스러운 단어이고 무엇이 부자연스러운 단어인지의 인식을 해칩니다.
그러므로 온도가 과하게 높은 상태에서 나온 Output들은 알 수 없는 단어들로 점철돼있죠.
실제로 온도가 과하게 높을때 AI가 지원되지 않는 이상한 문자를 적어서 API 요청단계에서 온도를 내리라고 오류메시지가 뜨기도 합니다.
그렇다고 온도를 무작정 0까지 끌어내릴 경우 넣어둔 프롬프트를 그대로 뱉어내거나 완전히 틀에 박힌 답변을 내놓기 때문에 코딩 시키는거 아니면 온도를 끌어내릴 일은 없습니다.
온도를 통해 조절된 가중치들은 'Top P' 라는 값에 의해 걸러집니다.
Top P 는 0부터 1까지 조절 가능한 실수입니다.
이 Top P 는 가중치가 이 Top P 보다 적은 단어들을 선택지에서 제외시킵니다.
이런식으로 "나는" 이라는 단어 뒤에 "학교를" 이라는 단어가 올 확률이 0.8이라고 해봅시다.
그렇다면 여기서 Top P 가 0.8일때 단어가 올 확률이 0.8보다 작은
"집을" , " 너를" , "소세지" 라는 단어 선택지는 사라지는 것입니다.
조금 더 자연스러운 단어 선택을 만들어 낸다고 생각하면 됩니다.
마지막으로 과한 단어의 반복을 줄여줄 수 있는 'Repetition Penalty' 라고 불리는 '반복 패널티' 라고 하는 값이 있습니다.
0부터 2까지 조절 가능한 실수값이고 높으면 높아질수록 단어들이 중복되는지 검사하여 그 단어가 반복되어 나올 확률을 줄여버립니다.
이게 너무 낮으면 다른 Input을 넣었는데 똑같은 Output이 두번 나올 수 있기때문에 적당한 값으로 넣는게 중요합니다.
너무 높으면 사람냄새가 안나거든요.
마치는 말
원래는 'OpenAI의 API에 요청넣어서 고성능 AI에게 답변받기' 라는 글만 쓰려고 했는데 뭔가 이론적인 부분만 잔뜩 다루게 됐네요.
다음글은 진짜로 API 가져오겠습니다. 감사합니다.
'기타 > AI' 카테고리의 다른 글
00. 생성형 AI란? (1) | 2024.04.09 |
---|