ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발자의 프롬프트 엔지니어링 - 프롬프트 엔지니어링 독서 후기
    독서 및 기타 활동 2024. 5. 21. 01:01

     

    『프롬프트 엔지니어링』 반병현 지음

     
    ChatGPT의 등장과 뤼튼테크놀로지의 연봉 1억 프롬프트 엔지니어 채용 공고로 프롬프트 엔지니어링에 대한 관심이 점차 높아지고 있는데요. 특히 올해 Large Language Model(이하:LLM)을 활용한 애플리케이션들과 서비스들이 쏟아지면서 점점 더 높은 주목을 받기 시작한 것 같습니다.
     
    최근에 프롬프트 엔지니어』라는 책을 읽었는데 그동안 막연하게만 알고 있었던 프롬프트 엔지니어링의 정의를 바로잡고 어떻게 활용해야 하는지, 일반적인 AI 소프트웨어 개발자가 어느 지식수준까지 알아야 하는지 스스로 정리할 수 있는 시간을 가질 수 있었습니다.
     
    이 책을 읽고 좋았던 점은 "무조건 특정 프롬프트를 사용해야 답변이 잘 나온다". 이런 가이드가 아닌 개발자의 관점에서 LLM의 구조를 이해하고, 이를 바탕으로 프롬프트를 어떻게 구성하면 좋을지에 대한 가이드를 제공하고 있어서 프롬프트 엔지니어링이란 기술에 대해 조금 더 신뢰성 있고 안정감 있는 정보를 얻을 수 있었습니다.
     
    이번 포스팅에서는 프롬프트 엔지니어링』이라는 책을 읽고 제가 느낀 점들에 대해 공유드리도록 하겠습니다.
     


     

    🐣 프롬프트 엔지니어링의 정의 및 탄생배경

    먼저 책의 첫 번째 장에서는 프롬프트 엔지니어링에 대한 명확한 의미에 대해서 소개합니다. 저도 여태 프롬프트 엔지니어링이라는 용어를 여러 뉴스나 기사로만 접했을 때는 챗지피티한테 질문을 잘하는 방법, 질문을 잘해서 좋은 결과를 가져오는 것 정도로 이해를 했었는데요.
     
    프롬프트 엔지니어링의 본래 목적은 사람이 AI에게 질문 잘하는 방법을 찾는 게 아니라 AI가 목적에 맞는 답변을 도출해 낼 수 있도록 문구를 설계하는 작업이라고 합니다.
     

    질문이냐 답변이냐.. 닭이 먼저냐 알이 먼저냐...

     
    이를 조금 더 자세히 이해하려면 프롬프트 엔지니어링의 탄생 배경을 알아야 하는데요. 프롬프트라는 용어는 2019년 OpenAI에서 GPT-2를 발표하면서 제로 샷 러닝(zero-shot learning)이라는 사용 사례가 소개되면서부터 탄생하게 되었습니다.
     
    일반적으로 모델을 학습한다고 하면 이는 AI의 두뇌를 직접 수정하는 작업으로써 학습 양에 따라 풀샷(full-shot), 퓨샷(few-shot)이라고 부르는데 제로 샷(zero-shot)은 말 그대로 실제로 학습이 전혀 일어나지 않지만 마치 AI가 새로운 학습을 수행한 것처럼 만드는 것을 의미합니다.
     
    그래서 학습을 하지 않고도 AI의 답변을 변경할 수 있게 되었다 해서 제로 샷 러닝(zero-shot learning)이라는 개념이 생겨났고 이것이 바로 프롬프트의 시초가 되었습니다. 특히 GPT-2 발표 당시 번역을 지시하는 과정에서 프롬프트라는 용어를 사용하게 되면서 사람들에게 널리 퍼지게 되었습니다.
     
    그러나 이 프롬프트라는 용어가 잘못 확장되면서 많은 사람들이 오해를 하고 있는 부분이 프롬프트를 그저 AI와 대화할 때 사용하는 채팅 메시지 정도로 생각하고 있기 때문에 프롬프트 엔지니어링을 ChatGPT한테 질문 잘하는 방법으로 오인하게 되었습니다.
     
    저도 처음에는 프롬프트 엔지니어링에 대한 개념을 잘 못 이해하여 ChatGPT에게 질문 잘하는 방법들을 찾아보다가 너무 많아서 이걸 언제 다 외우지? 하는 생각이 들었었는데요. 프롬프트의 본래 목적을 알고 나니 제가 프롬프트 엔지니어링에 대한 접근 방법이 잘못되었다는 사실을 깨닫게 되었습니다. 
     


     

    🪄 프롬프트 엔지니어링의 본체는 바로 “어텐션”

    최근 아랍 에미리트 소재 ‘모하메드 빈 자예드 AI 대학교’에서 발간된 Principled Instructions Are All You Need for Questioning LLAMA-1/2, GPT-3.5/4 』라는 제목의 논문에서 프롬프트 엔지니어링에 대한 26가지 원칙을 발표해서 화제가 되었었는데요.
     
    많은 분들께서 논문리뷰를 적어주셨는데 아래는 그중 잘 정리된 블로그 하나를 소개해드립니다.

     

    [논문리뷰] Principled Instructions Are All You Need for Questioning LLaMA-1/2, GPT-3.5/4 (2024)

    📚 효과적인 프롬프트 엔지니어링의 26가지 원칙 최근 발표된 프롬프트 엔지니어링 관련 논문 'Principled Instructions Are All You Need for Questioning LLaMA-1/2, GPT-3.5/4'에 대하여 리뷰해보면서, 논문에서 제

    gagadi.tistory.com

     
    저는 사실 이 26가지를 전부 외우려고 하니까 도저히 자신이 없어서 미루고 있었는데 이 책을 읽고 나서 LLM 구조를 파악하고 어떻게 프롬프트 엔지니어링이 가능해졌는지 그 원리를 이해하니까 그 제서야 조금씩 프롬프트 엔지니어링 기법들이 눈에 들어오기 시작했습니다.
     
    프롬프트 엔지니어링의 본체는 바로 ‘어텐션’이라는 기능이었습니다.
     

    어텐션...?

     
    LLM은 일반적으로 트랜스포머 구조로 이루어져 있고 트랜스포머는 어텐션이라는 기능으로 이루어져 있습니다. 아래 이미지는 2017년에 구글브레인에서 발표한 Attention Is All You Need 』라는 논문에서 발췌한 트랜스포머 모델 아키텍처입니다.
     

    『 Attention Is All You Need 』 트랜스포머 모델 아키텍처

     
    많은 분들이 알고 계시는 챗지피티, 바드, 코파일럿, 라마 등등 거의 대부분의 모델들이 위의 구조처럼 인코더-디코더 형태로 되어있으며 내부적으로는 어텐션을 탑재하고 있습니다. 바로 이러한 구조를 바탕으로 각각 입맛에 맞게 인코더에 몰빵 한다던가(ex. BERT) 디코더에 몰빵 한다던가(ex. GPT) 이리저리 튜닝하여 제각각의 LLM을 만들 수 있습니다.
     
    복잡해 보이지만 단순하게 접근하자면 LLM은 사용자의 질문을 받아서 인코더를 통해 문장을 이해하고 디코더를 통해 문장을 표현합니다. 따라서 인코더가 많으면 많을수록 그만큼 이해력이 풍부해지고 디코더가 많으면 표현력이 풍부해집니다. 그리고 인코더와 디코더마다 어텐션이라는 기능이 탑재되어 있는데 프롬프트 엔지니어링에서 중요한 것이 바로 이 어텐션입니다.
     
    어텐션은 비유하자면 수능지문 읽기로 비유할 수 있습니다. 저희는 수능지문을 읽을 때 모든 지문을 다 읽지 않습니다. 중요한 부분만 빠르게 캐치해서 동그라미도 치고 밑줄 그으면서 읽는데 이러한 과정이 바로 어텐션입니다. 책에도 비유를 할 수 있는데요. 저희가 보통 책을 읽을 때 중요한 부분만 밑줄 그어놓으면 나중에 필요할 때는 다 읽어볼 필요 없이 밑줄 친 부분만 읽으면 됩니다.
     

    어텐션은 필요한 정보만 빠르게 캐치하는 기능

     
    바로 어텐션이 이러한 역할을 하기 때문에 굉장히 짧은 시간에 대량의 정보를 정리하면서도, 질문을 받았을 때 빠르고 정확한 답변을 제공할 수 있습니다. 물론 다 저장하면 좋겠지만 한정된 공간 안에 모든 정보를 저장하는 것은 불가능하기 때문에 어텐션을 통한 데이터 손실압축이 진행됩니다.
     
    하지만 전부 저장하는 것이 아니기 때문에 100% 정확한 답변을 제공하지는 않습니다. 그렇기 때문에 할루시네이션 현상(거짓된 답변을 진실인 것처럼 꾸며내는 현상)이 발생하기도 합니다.
     
    그래서 프롬프트 엔지니어링이 중요합니다. 수능 지문에서 특정 수학문제를 풀라고 하면 수학 문제를 잘 풀 수 있도록 프롬프트를 만들 수 있고 언어 영역에서 시, 소설, 수필, 비문학 등 각각의 영역에서 문제를 잘 해결할 수 있도록 특화된 프롬프트를 만들 수도 있죠.
     
    프롬프트 엔지니어링은 이처럼 LLM의 본질을 이해하고 어텐션에 휘둘리는 AI의 특성을 집요하게 활용하여 보다 더 나은 결과를 만들어내는 AI 활용 방법입니다.
     


     

    🪄 프롬프트의 다양한 활용 방법

    책에서는 다양한 프롬프트 활용 방법이 나와있는데 여기서는 간단하게 소개해드리도록 하겠습니다. 먼저 평문형 프롬프트 vs 하이퍼파라미터형 프롬프트입니다. 이 둘의 차이점은 프롬프트를 앞에 붙일지 뒤에 붙일지를 선택하는 것인데요. 어떤 게 더 효율적인 프롬프트 작성 방법일까요? 앞서 본 LLM 트랜스포머 구조에서 어텐션의 관점에서 한번 생각해 보시면 좋을 것 같습니다.
     
    평문형 프롬프트

    외계공룡

    영어로 번역해 줘.

     
    하이퍼파라미터형 프롬프트

    업무: 번역 (Korean -> English)

    외계공룡

     
    관점에 따라 다를 수도 있지만 저는 하이퍼파라미터형 프롬프트를 사용했을 때 제가 좀 더 원하는 결과를 얻을 수 있었습니다.
    .

    ChatGPT로 실험해 본 평문형 프롬프트 vs 하이퍼파라미터형 프롬프트

     
    이러한 현상도 어텐션으로 인해 나타났다고 볼 수 있습니다. 하이퍼파라미터형 프롬프트 사용 시 LLM에 내장된 어텐션이 먼저 맨 첫 번째 줄을 읽고, 임무를 파악한 뒤, 나머지 내용을 읽고 임무를 수행한 모습을 볼 수 있습니다.
     
    번역을 예시로 들었는데 이 외에도 프롬프트 엔지니어링을 통해 LLM을 분류, 감정분석 등 다양한 임무에 사용할 수 있습니다. 앞서 본 LLM 구조를 통해 어텐션의 본업은 요약이고 디코더의 본업은 확장이라는 사실을 추론해 볼 수 있는데요. 이 사실을 통해 LLM에게 문장요약이나 핵심문장추출, 문장 늘려 쓰기 같은 임무를 지시하면 훨씬 효과적으로 처리한다는 사실도 알 수 있게 됩니다.
     
    물론 프롬프트 엔지니어링만으로 해결할 수 없는 문제들도 있습니다. 당연한 얘기지만 "외계공룡이 누구야?"라고 LLM에게 물었을 때 대부분의 모델은 외계인에 대해서 설명할 것으로 예상이 됩니다. 만약 "외계공룡이 누구야?"라고 물었을 때 "IT 개발블로그를 운영하는 사람입니다." 라고 답변하도록 만들고 싶다면 이 부분에 대해서는 학습으로 해결해야 합니다.
     
    다행히 학습 데이터 양을 늘리면 어텐션들도 학습한 정보로 인식하여 원하는 방향으로 답변을 바꿀 수 있게 됩니다. 다만, 정보가 너무 편향되지 않도록 학습하여 답변이 일반화가 되지 않도록 막는 것이 좋은데 이를 일반적으로 과적합(overfitting)이라고 부릅니다. 어텐션의 이러한 과적합 현상을 이용해서 특정 캐릭터의 말투를 훈련시켜 사용하기도 합니다.
     

    과적합 현상을 활용해서 특정 캐릭터의 말투를 흉내낼 수 있다.

     


     

    🌠 프롬프트 엔지니어링의 미래

    요즘 채용 공고나 커뮤니티를 보면 프롬프트 엔지니어링이라는 분야가 점차 질의응답 기법을 고민하는 인문학도의 영역에서 개발자의 영역으로 확장되어가고 있는 것 같습니다. 이에 따라서 AI 업계에서 일하고 있는 저 역시도 프롬프트 엔지니어링 역량을 키워야겠다는 생각을 하는데요.
     
    저자는 앞으로 프롬프트 해킹과 보안 기술이 머지않아 새롭게 급 부상할 것이라고 전망하고 있습니다. 책에서도 프롬프트 인젝션 공격이나 프롬프트 탈취에 대한 소개 및 대처방법 등을 소개하고 있으므로 한번 읽어보셔도 좋을 것 같습니다.
     
    책을 구입하자마자 이틀 동안 4~5시간 만에 몰입해서 재밌게 읽었었는데요. 그만큼 가볍고 어렵지 않은 책이므로 평소에 프롬프트 엔지니어링에 관심이 많으셨던 분들이나 LLM Application 개발 중이신 분들께서 읽어보시면 좋을 것 같다는 생각이 듭니다.
     

     
    제목 : 프롬프트 엔지니어링
    지은이 : 반병현
    출판사 : 생능북스

    댓글

Designed by Tistory.