티스토리 뷰

IT/AI

[완독 챌린지] 1주차 - AI 엔지니어링

Hayley Shim 2025. 11. 16. 20:59

안녕하세요, AI 엔지니어링을 학습하기 위해 인프런 AI 엔지니어링 완독챌린지에 참여하며 주차별 이해한 내용을 기록합니다.

 

[월] 1장. AI 엔지니어링의 부상, 파운데이션 모델 활용 사례(p.32 ~ p.61)

1.1 AI 엔지니어링의 부상

더보기

언어 모델 -> 대규모 언어 모델 -> 파운데이션 모델 -> AI 엔지니어링

1.1.1 언어 모델에서 대규모 언어 모델로

언어모델

- 언어모델 : 하나 이상의 언어에 대한 통계 정보를 인코딩. 직관적으로 이 정보는 주어진 컨텍스트에서 어떤 단어가 나타날 것 같은지 알려준다. 

- 토큰 : 언어 모델의 기본 단위. 모델마다 토큰화 방식이 다름(https://oreil.ly/0QI91

- 토큰화 : 원문을 모델이 정한 길이로 나누는 과정. GPT-4 경우 토큰 하나의 평균 길이는 단어의 약 3/4. 

- 어휘 : 모델이 다룰 수 있는 모든 토크의 집합. GPT-4 어휘 크기는 100,256개. 토큰화 방법과 어휘 크기는 모델 개발자가 결정.

- 언어 모델 유형

  1. 마스크 언어 모델(코드디버깅에 유용. 새로운 텍스트를 만들지 않은 유형. 예시: 내가 좋아하는 색상은 ___이다. 일때 언어 모델은 ___ 에 알맞은 답으로 '자동차'보다 '파란색'을 자주 예측)
  2. 자기회귀 언어 모델(이전 토큰들을 보고 시퀀스의 다음을 예측. 예시: 내가 가장 좋아하는 색상은 ____이다)

- 언어 모델의 출력에는 제한이 없음. 언어 모델은 답 없이 개방형 출력을 생성하는 모델을 생성 모델이라 부르고 여기서 '생성형 AI'라는 용어가 유래됨

 

자기 지도 학습

언어 모델링은 수많은 ML 알고리즘 중 하나일뿐. 언어 모델링 외에도 객체 탐지, 토픽 모델링, 추천 시스템 등 모델들도 있음. 언어 모델이 특별한 이유는 다른 모델은 지도 학습(supervised learning)을 필요로 하는 반면, 언어 모델은 자기 지도 학습(self-supervised learning)으로 학습할 수 있음. 지도 학습의 단점인 데이터 레이블링 병목 현상(데이터 레이블링에 많은 비용과 시간이 소요되는 점)을 극복하여 명시적인 레이블이 필요하지 않고 모델이 입력 데이터에서 레이블을 추론할 수 있음.(단, 비지도 학습은 레이블이 전혀 필요하지 않아 입력 데이터에서 레이블을 추론하는 자기 지도 학습과 다름) 

 

1.1.2 대규모 언어 모델에서 파운데이션 모델로

- 파운데이션 모델 : AI가 실제 세상에서 유의미하게 작동하기 위해서는 글자 이상의 데이터를 처리하는 능력이 필요. 이런 이유로 언어 모델은 더 많은 데이터 모달리티를 포함하도록 확장되고 있음. 이를 '파운데이션 모델 '이라 설명하는 것이 적절. 파운데이션이란 단어는 모델들이 AI 애플리케이션에서 갖는 중요성과 다양한 요구사항에 맞게 발전시킬 수 있다는 사실을 의미함. 파운데이션 모델은 특정 작업에 맞춘 모델에서 범용 모델로 전환하는 것을 의미함. 규모와 학습 방식 덕분에 다양한 작업을 수행할 수 있음. 하나의 LLM으로 감정 분석과 번역을 모두 수행할수 있고 특정 작업에 대한 성능을 올리고 싶으면 파인튜닝이 필요.

- 멀티모달 모델 : 둘 이상의 데이터 형태를 처리할 수 있는 모델. 규모를 확장하기 위해 데이터가 필요.  

- 생성형 멀티모달 모델 : 대규모 멀티모델 모델(Large multimodel model, LMM)

 

1.1.3 파운데이션 모델에서 AI 엔지니어링으로

- AI 엔지니어링 : 파운데이션 모델을 기반으로 애플리케이션을 만드는 과정. 전통적인 ML 엔지니어링이 모델 자체를 개발하는 것이라면 AI 엔지니어링은 이미 존재하는 모델을 활용.

1) 범용 AI 능력 : 기존 작업을 더 잘 수행하고 더 많은 작업을 수행하는 등 AI는 더욱 유용해짐

2) AI 투자 증가 

3) AI 애플리케이션 개발에 대한 낮아진 진입 장벽

 

1.2 파운데이션 모델 활용 사례

더보기

- 기업들은 일반적으로 위험도가 낮은 애플리케이션을 선호함. 외부 지향적 애플리케이션(고객 지원 챗봇) 보다 내부 지향적 애플리케이션(사내 지식 관리)을 더 빠르게 도입

 

1.2.1 코딩

- 가장 인기있는 활용 사례. 깃허브 코파일럿. AI는 엔지니어의 생산성을 높일 수 있어 기업은 이제 더 적은 수의 엔지니어로 더 많은 성과를 달성할 수 있음

 

1.2.2 이미지 및 동영상 제작

- 기업의 광고와 마케팅 분야. 

 

1.2.3 글쓰기

- 기업의 영업, 마케팅, 팀 커뮤니케이션에 활용. 실적 보고서 작성 등.

 

1.2.4 교육

- AI를 튜터로 활용해 어떤 기술이든 배울 수 있음.

 

1.2.5 대화형 봇

- 기업의 고객 지원 봇. 

 

1.2.6 정보 집계

- 정보를 수집하고 정제. 

 

1.2.7 데이터 체계화

- 데이터를 체계화하고 검색, 분석하는데 도움.

 

1.2.8 워크플로 자동화

- AI의 궁극적인 목적은 워크플로우를 자동화하는 것. AI Agent.

 

[화] AI 애플리케이션 기획 ~ AI 엔지니어링 스택(p.62 ~ p.83)

1.3 AI 애플리케이션 기획

더보기

이 일을 하려고 하는지, 어떻게 해야 하는지부터 생각해보기

 

1.3.1 활용 사례 평가

기업이 AI 애플리케이션을 만들기로 하는 것은 위험을 피하거나 새로운 기회를 잡기 위해

AI가 비지니스 생존에 결정적인 영향을 미친다면 직접 개발하는 방향으로, 수익과 생산성을 높이려면 기존 솔루션을 활용하는 방향

 

애플리케이션에서 AI와 사람의 역할

- Human in the loop : AI의 의사결정 과정에 사람을 참여시키는 것

- AI 시스템의 품질이 향상되면서 사람의 역할이 달라질 수 있음. AI가 제안한 응답에 대한 수락율이 높을 경우, 중간 매개자(상담원 등)이 없이 고객은 AI와 직접 상호작용할 수 있다. 

 

AI 제품 방어 가능성

- AI 애플리케이션을 독립형 제품으로 판매할 경우 방어 가능성(defensibility)을 고려하는 것이 중요

- AI 분야의 경쟁 우위 : 기술력, 데이터, 유통력(사용자에게 전달하는 능력)

 

1.3.2 기대치 설정

- 성공 측정 시 가장 중요한 지표 : AI 애플리케이션이 비지니스에 어떤 영향을 미치는가(예: 고객 지원 챗봇의 비지니스 지표)

 

1.3.3 마일스톤 계획

- 측정 가능한 목표 설정 후 이를 달성하기 위한 계획 수립 필요.

- 모델의 성능을 평가해 목표가 바뀔 수 있으나 목표한 최소 성능을 달성하는데 드는 자원이 예상 수익보다 더 클 경우 프로젝트를 더 이상 진행하기 않기로 결정할 수 있음

- 초기 좋은 데모가 좋은 제품을 보장하지 않음

 

1.3.4 유지보수

- 제품 기획은 목표 달성뿐만 아닌 제품을 어떻게 유지보수해야할지도 생각해야 함

- AI는 빠른 속도로 변화하기 때문에 유지보수가 어려움. 

- 항상 시장 상황을 예의주시 하면서 기술 투자에 대한 비용-편익 분석이 필요

- 모델 API 교체와 같이 적응하기 쉬운 변화가 있는 반면 규제(GDPR, IP와 AI 사용에 대한 규제 등) 적응하기 어려운 변화도 존재

 

1.4 AI 엔지니어링 스택

더보기

AI 엔지니어링은 ML 엔지니어링에서 발전했다.

AI 애플리케이션 개발 과정의 여러 계층을 분석하여 각 계층이 AI/ML 엔지니어링에서 수행하는 역할 파악

 

1.4.1 AI의 세 가지 계층

- 애플리케이션 개발 : AI 인터페이스, 프롬프트 엔지니어링, 컨텍스트 구성, 평가 -> 비지니스 문제를 해결해야하므로 비지니스 지표와 ML 지표를 상호 연계하는 것이 중요, 체계적인 실험 필요

- 모델 개발 : 추론 최적화, 데이터셋 엔지니어링, 모델링과 학습, 평가

- 인프라 : 컴퓨팅 관리, 데이터 관리, 서빙, 모니터링

 

1.4.2 AI 엔지니어링 대 ML 엔지니어링

- AI 엔지니어링은 모델 개발보다는 모델 조정과 평가에 더 중점을 둔다.

1) 모델 조정 기법 : 모델 가중치를 업데이트해야하는지에 따라 두 가지로 나뉨(X: 프롬프트 기반 기법, O:파인튜닝)

2) AI 애플리케이션 개발 관련 프로세스

  • 모델 개발 : 모델링과 학습, 데이터셋 엔지니어링, 추론 최적화로 구성
    • 모델링과 학습 : 모델 아키텍처 고안, 학습, 파인튜닝하는 과정
    • 데이터셋 엔지니어링 : AI 모델의 학습과 조정에 필요한 데이터를 선별하며 주석을 다는 것. 모델 출력이 미리 정의된 값 중 선택되는 '폐쇄형'인 ML 엔지니어링보다 '개방형'인 파운데이션 모델을 활용하는 AI 엔지니어링에서 데이터셋 엔지니어링은 큰 과제. 모델 자체가 대중화되다보니 데이터 구축 작업이 중요해짐. 조정 기법에 따라 필요한 데이터 양이 달라짐(Pre-train > Fine-tuning > Prompt Engineering)
    • 추론 최적화(Inference optimization) : 모델을 더 빠르고 저렴하게 만드는 것. 파운데이션 모델이 더 높은 추론 비용과 지연 시간을 발생시키게 되며 규모가 커짐에 따라 추론 최적화가 중요해짐. 파운데이션 모델은 종종 자기회귀적(autoregressive)해서 토큰이 순차적으로 생성되며 모델이 토큰 하나를 생성하는데 10ms가 걸리면 100개의 토큰으로 된 출력을 생성하는 데 1초가 걸리며 더 긴 출력에는 더 많은 시간이 걸림. AI 애플리케이션의 지연 시간을 일반적인 인터넷 애플리케이션에 기대되는 100ms까지 낮추는 것이 과제.
  • 애플리케이션 개발 : 많은 팀이 같은 모델을 사용하는 파운데이션 모델의 경우 애플리케이션 개발 과정에서 차별화를 해야함
    • 평가(evaluation) : 위험을 완화하고 기회를 발견하는 과정. 모델을 조정하는 전체 주기에 걸쳐 이뤄져야함. 파운데이션 모델의 경우 '개방성'으로 평가가 더욱 중요해짐.  
    • 프롬프트 엔지니어링 및 컨텍스트 구성 : 모델 가중치를 변경하지 않고 입력만으로 AI 모델에서 원하는 동작을 이끌어 내는 것. 즉, 프롬프트 엔지니어링은 필요한 컨텍스트와 도구를 모델에 제공하는 것. 
    • AI 인터페이스 : 최종 사용자가 AI 애플리케이션과 상호작용할 수 있는 인터페이스를 만드는 것. 사용자 피드백을 수집하고 추출하는 새로운 방법이기도 함.  

1.4.3 AI 엔지니어링 대 풀스택 엔지니어링

- 애플리케이션 개발, 특히 인터페이스에 대한 강조가 커지면서 AI 엔지니어링은 풀스택 개발에 더 가까워지고있음

- ML 프레임워크들은 대부분 Python API만 지웠했으나 현재 LangChain.js, Transformers.js, 오픈 AI의 Node 라이브러리, Vercel의 AI SDK 등 자바스크립트 API에 대한 지원이 늘어나고 있음

- AI 엔지니어로 웹 개발이나 풀스택 배경을 가진 사람이 늘어나고 있음. 풀스택 엔지니어는 아이디어를 빠르게 데모로 만들고 피드백을 받고 개선할 수 있는 능력이 있음.

- AI 엔지니어링에서는 AI 모델을 쉽게 사용할 수 있어 제품을 먼저 만들고 제품이 가능성이 보일 때 데이터와 모델에 투자가 가능

- AI 엔지니어링의 파운데이션 모델에서는 AI 엔지니어가 제품 개발에 훨씬 더 많이 참여하는 경향이 있음

 

[수] 2장. 파운데이션 모델 이해하기 - 학습 데이터 ~ 모델링(p.86 ~ p.115)

2.1 학습 데이터

더보기

- AI 모델은 학습한 데이터의 특성에 따라 할 수 있는 일이 정해짐. 대규모 모델 학습에 필요한 데이터를 충분히 확보하는 것은 어렵고 비용도 많이 듦. 오픈 AI의 GPT-3와 구글의 제미나이와 같은 대부분의 파운데이션 모델은 커먼 크롤과 같은 구하기 쉬운 데이터를 가공하여 사용함. 

- 원하는 데이터가 아닌 가진 데이터만 사용하는 접근법은 모델이 학습 데이터에 포함된 작업들은 잘 수행하지만 실제로 원하는 작업을 제대로 수행하지 못할 수 있다. 이 문제를 해결하기 위해 특정 요구사항에 맞는 데이터셋을 선별하는 것이 매두 중요하다. 

 

2.1.1 다국어 모델

- 인터넷에서 가장 많이 사용되는 언어는 영어다. 따라서 범용 모델이 다른 언어보다 영어에서 더 좋은 성능을 보이는 것은 당연하다. 성능 저하의 큰 이유는 데이터에 해당 언어가 적게 포함되기 때문이지만 데이터가 적은 것이 성능 저하의 유일한 이유는 아니다. 

- 언어마다 고유한 구조와 문화적 특성이 존재하기 때문에 모델이 이 부분을 학습하기 어려울 수도 있다. 영어가 아닌 언어에서 예상하지 못한 성능 문제가 발생할 수 있다. Chat-GPT에서 영어에 대해서는 거짓 정보를 생성하지 않았지만 중국어 간체와 번체에 대해서는 거짓 정보를 생성했다.

- 품질 문제 외에도 영어가 아닌 언어의 모델이 더 느리고 비용이 많이 들 수 있다. 모델의 추론 지연 시간과 비용은 입력과 응답에 포함된 토큰 수에 비례하며 연구 결과 언어별로 토큰화 효율성에 큰 차이가 있는 것이 밝혀졌다.

 

2.1.2 도메인 특화 모델

- 제미나이, GPT, 라마 같은 범용 모델은 코딩, 법률, 과학, 비지니스, 스포츠, 환경을 포함한 다양한 영역에서 놀라운 성능을 보인다. 범용 파운데이션 모델이 다양한 분야의 일반적인 질문에 답할 수 는 있지만 학습 과정에서 접하지 못한 도메인 특화 작업에서는 좋은 성능을 내기 어렵다. 

- 도메인 특화 작업에서 좋은 성능을 내는 모델을 학습하려면 해당 분야의 전문적인 데이터셋이 필요하다. (예: 딥마인드 알파폴드, 엔비디아의 바이오네모, 구글의 메드팝2)

 

2.2 모델링

더보기

모델을 학습하기 전 개발자는 모델을 어떤 아키텍처를 따를지, 파라미터는 몇 개로 할지 등 어떻게 설계할지 결정해야 함. 이런 결정은 모델의 능력뿐만 아닌 모델을 활용해 만드는 서비스의 사용성에도 영향을 미침. 

 

2.2.1 모델 아키텍처

트랜스포머 아키텍처

- 현재 언어 기반 파운데이션 모델에서 가장 널리 쓰이는 아키텍처는 트랜스모퍼 아키텍처이다. 트랜스포머 아키텍처는 seq2seq 아키텍처의 성공 이후에 퍼졌다. 구글은 seq2seq를 구글 번여겡 도입했고 기계 번역 품질에서 가장 큰 개선을 이뤘다고 주장했다. 이는 텍스트 시퀀스를 다루는 과제에서 널리 쓰이는 아키텍처가 되었다. 

- seq2seq는 입력을 처리하는 인코더와 출력을 생성하는 디코더로 구성된다. 입력과 출력 모두 토큰의 시퀀스이며 seq2seq라는 이름이 여기서 유래되었다. seq2seq는 인코더와 디코더로 RNN을 사용한다. 인코더는 입력 토큰을 순차적으로 처리하여 입력을 표현하는 최종 은닉 상태(hidden state)를 출력한다. 디코더는 이 최종 은닉 상태와 이전에 생성된 토큰을 기반으로 출력 토큰을 순차적으로 생성한다. 

- seq2seq의 문제점은 1. 기본적인 seq2seq 디코더는 입력의 최종 은닉 상태만 사용해 출력 토큰을 생성한다. 책 요약본만 가지고 응답을 만드는 것과 비슷하다. 이렇게 생성되는 출력물은 품질이 떨어진다. 2. RNN 인코더와 디코더는 입력 처리와 출력 생성이 모두 순차적으로 이루어져야 하므로 롱 시쿼스를 다룰 때 속도가 느려진다. 입력이 200개 토큰으로 이뤄져있다면 seq2seq는 다음으로 넘어가기 전에 각 입력 토큰의 처리가 끝낼 때까지 기다려야한다. 

- 트랜스포머 아키텍처는 어텐션 메커니즘으로 두 문제를 해결했다. 어텐션 메커니즘을 통해 모델은 각 출력 토큰을 생성할 때 서로 다른 입력 토큰의 중요도에 가중치를 둘 수 있다. 트랜스포머 아키텍처는 RNN을 사용하지 않고 설계되었다. 트랜스포머에서는 입력 토큰을 병렬로 처리할 수 있어 입력 처리 속도가 크게 향상되었다. 순차적 입력의 병목 현상을 제거했지만 트랜스포머 기반의 자기 회귀 언어 모델은 여전히 순차적 출력의 병목 현상이 남아있다.

- 1. 프리필 : 모델이 입력 토큰을 병렬로 처리한다. 이 단계는 첫 번째 출력 토큰을 생성하는데 필요한 중간 상태를 만든다. 각 입력 토큰의 키 벡터와 값 벡터가 중간 상태에 저장된다.

- 2. 디코드 : 모델이 출력 토큰을 한 번에 하나씩 생성한다.

 

어텐션 메커니즘

- 트랜스포머 아키텍처의 핵심은 어텐션 메커니즘이다. 어텐션 메커니즘은 내부적으로 key, vaule, query vector를 사용한다.

- 1. 쿼리 벡터는 각 코딩 단계에서 디코더의 현재 상태를 나타낸다. 책 요약 예시를 떠올리면 이 쿼리 벡터는 요약을 만들기 위해 정보를 찾는 사람으로 생각할 수 있다.

- 2. 각 키 벡터는 이전 토큰을 나타낸다. 각 이전 토큰을 책의 페이지라고 생각하면 각 키 벡터는 페이지 번호와 같다. 특정 디코딩 단계에서 디전 토큰에서 입력 토큰과 이미 생성된 토큰이 모두 포함된다는 점을 주목해야 한다.

- 3. 각 값 벡터는 모델이 학습한 이전 토큰의 실제 값을 나타낸다. 각 값 벡터는 페이지의 내용과 같다.

- 어텐션 메커니즘은 쿼리 벡터와 키 벡터 간의 내적(dot product)을 통해 각 입력 토큰에 얼마나 주목할지 계산한다. 점수가 높을수록 모델이 책 요약을 생성할 때 해당 페이지의 내용(값 벡터)을 더 높은 비중으로 반영한다는 의미다. 이전 토큰마다 키 벡터와 값 벡터가 있기 때문에 시퀀스가 길어질수록 더 많은 키 벡터와 값 벡터를 계산하고 저장해야 한다. 이것이 트랜스포머 모델의 컨텍스트 길이를 늘리기 어려운 이유 중 하나다. 

- 어텐션 함수는 입력 x가 주어지면, 키(K), 값(V), 쿼리 행렬(Q)을 입력에 적용해 키, 값, 쿼리 벡터를 계산한다. Wk, Wv, Wq를 각각 키, 값, 쿼리 행렬이라고 하면 K=xWk, V=xWv, Q=xWq 이다.

- 쿼리, 키, 값 행렬의 차원은 모델의 은닉 차원에 해당한다. 예를 들어 라마 2-7B에서는 모델의 은닉 차원 크기가 4096이므로 각 행렬의 크기는 4096 * 4096이다. 이렇게 생성되는 K,V,Q 벡터는 각각 4096 차원을 가진다.

- 어텐션 메커니즘은 대부분 멀티헤드로 구현된다. 멀티헤드를 사용하면 모델이 서로 다른 이전 토큰 그룹들을 동시에 주목할 수 있다. 멀티헤드 어텐션은 쿼리, 키, 값 벡터가 더 작은 벡터들로 나뉘어 각각 하나의 어텐션 헤드에 할당된다. 라마 2-7B의 경우 32개의 어텐션 헤드가 있으므로 각 K, V ,Q 벡터는 128차원을 가진 32개의 벡터로 나뉜다. 4096을 32로 나누면 128이 되기 때문이다. 모든 어텐션 헤드의 출력은 이어 붙여진다. 이렇게 이어 붙인 결과는 출력 투영 행렬을 통과한 뒤 다음 연산 단계로 넘어간다. 출력 투영 행렬은 모델의 은닉 차원과 같은 크기를 가진다.

 

트랜스포머 블록

- 트랜스포머 아키텍처는 여러 개의 트랜스포머 블록으로 구성된다. 블록의 정확한 내용은 모델마다 다르지만 일반적으로 각 트랜스포머 블록은 어텐션 모듈과 다층 퍼셉트론(MLP) 모듈을 포함한다. 

- 어텐션 모듈 : 각 어텐션 모듈은 쿼리, 키, 값 출력 투영이라는 네 개의 가중치 행렬로 구성된다.

- MLP 모듈 : MLP 모듈은 비선형 활성화 함수로 구분된 선형 레이어들로 구성된다. 각 선형 레이어는 선형 변환에 사용되는 가중치 행렬이며 활성화 함수는 선형 레이어가 비선형 패턴을 학습할 수 있게 해준다. 선형 레이어는 피드포워드 레이어라고도 부른다. 

- 일반적으로 비선형 함수로는 ReLU와 GPT-2와 GPT-3에서 사용된 GELU가 있다. 활성화 함수는 단순하다. 트랜스포머 모델의 트랜스포머 모델의 트랜스포머 블록 수는 흔히 해당 모델의 레이어 수라고 한다. 트랜스포머 기반 언어 모델은 또한 모든 트랜스포머 블록 전후에 모듈을 갖추고 있다.

- 트랜스포머 블록 이전의 임베딩 모듈 : 이 모듈은 토큰을 임베딩 벡터로 변환하는 임베딩 행렬과 토큰의 위치를 임베딩 벡터로 변환하는 위치 임베딩 행렬로 구성되며 최종적으로 이 두 벡터를 합산한다. 단순하게 보면 위치 색인의 수가 모델의 최대 컨텍스트 길이를 결정한다. 예를 들어, 모델이 2048개의 위치를 추적한다면 최대 컨텍스트 길이는 2048이다. 하지만 위치 색인의 수를 늘리지 않고도 모델의 컨텍스트 길이를 늘릴 수 있는 기법들이 있다.

- 트랜스포머 블록 이후의 출력 레이어 : 이 모듈은 출력 벡터를 모델 출력을 샘플링하는 데 사용되는 토큰 확률로 매핑한다. 이 모듈은 일반적으로 unembedding 레이어라고 하는 하나의 행렬로 구성된다. 일부는 출력 생성 전 모델의 마지막 레이어이므로 출력 레이어를 모델 헤드라고 부른다.

 

다른 모델의 아키텍처

- 이전 아키텍처들(알렉스넷, seq2seq, GAN 등)과 비교하면 트랜스포머는 2017년부터 지금까지 오래 유행하고 있다. 트랜스포머는 2017년 이후 계속해서 최적화되었다. 트랜스포머를 대체할 새로운 아키텍처는 사람들이 사용하는 하드웨어에서 현실적으로 활용 가능한 수준의 성능을 보여줘야한다. 

- RWKV와 같은 아키텍처는 병렬로 학습을 할 수 있는 RNN 기반 모델이다. RNN 특성상 이론적으로는 트랜스포머 기반 모델이 가진 컨텍스트 길이 제한이 없다. 하지만 실제로는 컨텍스트 길이 제한이 없다고 해서 롱 컨텍스트에서 좋은 성능이 보장되지 않는다. 

- 롱 시퀀스를 모델링하는 것은 LLM을 개발할 때 핵심적인 과제로 남아있다. 

 

2.2.2 모델 크기

- 최근 AI 발전은 모델 크기가 커진 덕분이다. 파운데이션 모델을 설명할 때 파라미터 수가 중요한데 보통 모델 이름 뒤에 표시된다. 모델의 파라미터 수가 늘어나면 학습 용량이 커져서 성능이 향상된다. 파라미터 수는 이 모델을 학습하고 실행하는 데 필요한 컴퓨팅 자원을 추정하는 데 도움이 된다. 최근 인기를 얻은 희소 모델의 한 종류로 전문가 혼합(MoE)가 있다. MoE 모델은 여러 파라미터 그룹으로 나누고 각 그룹이 특정 작업에 특화된 전문가 역할을 담당한다. 토큰을 처리할 때는 이전의 전문가들 중 일부만 활성화된다. 

- 더 큰 모델이라도 충분한 데이터를 학습하지 않으면 더 작은 모델보다 성능이 떨어질 수 있다. 모델 크기를 논할 때 학습에 사용된 데이터의 크기도 고려하는 것이 중요하다. 대부분의 모델은 데이터셋 크기를 학습 데이터 개수로 측정한다. 언어 모델을 학습할 때 데이터셋에 포함된 토큰의 개수를 세는 것이 더 좋은 측정 방법이다. 모델이 실제로 토큰 단위로 작동하기 때문이다. 

- 현재 LLM은 조 단위의 토큰을 가진 데이터셋으로 학습된다. 데이터셋의 토큰 수와 학습 토큰 수는 다르다. 대규모 모델을 사전 학습할 때는 많은 컴퓨팅 자원이 필요하다. 모델의 컴퓨팅 요구사항을 나타내는 더 표준화된 단위는 부동소수점 연산(FLOP)이다. FLOP는 특정 작업을 수행하는 데 필요한 부동소수점 연산의 개수를 의미한다. FLOPs는 작업에 필요한 전체 연산량을 측정하고 FLOP/s는 기계의 최대 처리 성능을 측정한다. 

- 모델의 규모를 나타내는 세 가지 숫자 : 파라미터 수(학습 용량을 나타내는 지표), 모델이 학습한 토큰 수(모델이 얼마나 많이 학습했는지), FLOPs(학습 비용을 나타내는 지표)

 

스케일링의 법칙 : 컴퓨팅 자원 최적 모델 만들기

 

스케일링 외삽

 

스케일링 병목 현상 

 

[목] 사후 학습 ~ 샘플링 전략(p.116 ~ p.133)

더보기

2.3 사후 학습

일반적으로 두 단계로 구성된다. 사전 학습을 지식 습득을 위한 독서, 사후 학습을 그 지식을 사용하는 법을 배우는 것에 비유.

1. 지도 파인튜닝(SFT): 완성이 아닌 대화를 위해 모델을 최적화하기 위해 고품질 지시 데이터로 사전 학습된 모델을 파인튜닝함

2. 선호도 파인튜닝 : 사람의 선호도에 맞는 응답을 출력하도록 모델을 더 파인튜닝함. 일반적으로 강화 학습으로 수행됨. 

 

2.3.1 지도 파인튜닝

- 사전 학습된 모델은 대화보다 완성에 최적화되어 있을 가능성이 높다. 모델이 적절한 응답을 생성하도록 유도하려면 적절한 응답의 예시를 보여주면 된다. 이런 예시는 시연 데이터라고 부른다. AI 가 지능적인 대화를 하는 방법을 배울 때도 좋은 레이블러가 중요하다. 롱 컨텍스트가 포함된 작업은 하나의 (프롬프트, 응답) 쌍을 생성하는 데 최대 30분까지 걸릴 수 있고 비용도 많이 든다. 

- 많은 팀이 고품질 사람 주석 데이터에 대한 의존도를 줄이기 위해 AI 생성 데이터로 눈을 돌리고 있다. 기술적으로는 사전 학습된 모델을 파인튜닝하는 대신 시연 데이터만 사용해 모델을 처음부터 학습시킬 수 있다. 이렇게 하면 자기 지도 학습을 통핸 사전 학습 단계를 아예 건너뛸 수 있지만 사전 학습 방식이 더 좋은 결과를 보여주는 경우가 많다. 

 

2.3.2 선호도 파인튜닝

선호도 파인튜닝의 목표는 AI 모델이 사람의 선호에 따라 행동하도록 만드는 것이다. 선호도 파인튜닝 분야에서 지금도 널리 쓰이는 알고리즘은 RLHF이다. RLHF는 두 부분으로 구성된다.

1. 파운데이션 모델의 출력에 점수를 매기는 보상 모델을 학습한다.

2. 보상 모델이 최대 점수를 줄 응답을 생성하도록 파운데이션 모델을 최적화한다. 

 

보상 모델

- RHLF는 보상 모델을 기반으로 작동한다. 보상 모델은 (프롬프트, 응답) 쌍이 주어지면 그 응답이 얼마나 좋은지 점수를 매긴다. RHLF도 신뢰할 수 있는 데이터를 얻는 것이 관건이다. 각 레이블러에게 각 응답에 점수를 매기라고 하면 점수가 들쭉날쭉이다. 각 샘플을 독립적으로 평가하는 것을 포인트와이즈 평가라고 한다. 보상 모델을 학습시킬 때는 점수를 사용하지 않고 순위 정보만 사용한다. 비교 데이터만 가지고 모델이 구체적인 점수를 매기도록 학습하려면 알맞은 목적 함수만 설계해 주면 원하는 작업을 수행하도록 만들 수 있다. 자주 사용되는 함수는 선호 응답과 비선호 응답의 출력 점수 차이를 나타내는 것이다. 

- 보상 모델은 처음부터 학습하거나 사전 학습 또는 SFT 모델과 같은 다른 모델 위에서 파인튜닝할 수 있다. 

 

보상 모델을 사용한 파인튜닝

- 학습된 보상 모델을 가지고 SFT 모델을 추가로 학습시켜 보상 모델이 높은 점수를 줄 수 있는 응답을 생성하도록 만든다. 실제 SFT만 사용할 때보다 RLHF나 DPO를 사용할 때 성능이 더 좋아진다. 

 

2.4 샘플링

모델은 샘플링이라는 과정을 통해 출력을 생성한다. 다양한 샘플릭 전략과 변수를 살펴보고 여러 출력을 샘플링해서 모델으 ㅣ성능을 향상시키는 방법을 알아본다. 

 

2.4.1  샘플링의 기초

- 입력이 주어지면 신경망은 잠재적인 결과들의 확률을 먼저 계산해 출력을 생성한다. 분류 모델의 잠재적인 출력은 모델이 분류할 수 있는 클래스다. 

- 언어 모델은 다음 토큰을 생성하기 위해 먼저 어휘들의 모든 토큰에 대한 확률 분포를 계산한다. 잠재적인 결과들의 확률이 서로 다를 때 흔히 사용하는 전략은 가장 높은 확률을 가진 결과를 선택하는 것이다. 항상 가장 가능성이 높은 결과를 선택하는 것을 그리디 샘플링이라고 한다. 

- 모델은 가능한 모든 값에 대한 확률 분포에 따라 다음 토큰을 샘플링할 수 있다. 입력이 주어지면 신경망은 로짓 벡터를 출력한다. 각 로짓은 하나의 잠재적인 값에 나타낸다. 언어 모델에서는 각 로짓은 모델 어휘집에 있는 하나의 토큰을 나타낸다. 로짓 벳터의 크기는 어휘집의 크기와 같다. 더  큰 로짓이 더 높은 확률에 대응하지만 로짓은 확률을 나타내지 않는다. 즉, 로짓의 합은 1이 되지 않는다. 확률은 음수가 될 수 없는 반면 로짓은 음수가 될 수도 있다. 

 

2.4.2 샘플링 전략

적절한 샘플링 전략을 사용하면 모델이 애플리케이션에 더 적합한 응답을 생성하도록 만들 수 있다. 

 

온도

- 가능한 값들의 확률을 재분배하기 위해 온도를 사용해 샘플링할 수 있다. 직관적으로 더 높은 온도는 흔한 토큰의 확률을 줄임으로써 결과적으로 희귀한 토큰의 확률을 증가시킨다. 

- 온도가 높을수록 모델이 가장 명백한 값(가장 높은 로짓을 가진 값)을 선택할 가능성이 낮아져서 모델의 출력이 더 창의적이지만 일관성은 떨어질 수 있다. 온도가 낮을수록 모델이 가장 명백한 값을 선택할 가능성이 높아지므로 모델의 출력이 더 일관적이지만 더 지루해질 수 있다. 

- 모델의 출력을 일관되게 만들기 위해 온도를 0으로 설정하는 것이 일반적이다. 기술적으로 로짓은 0으로 나눌 수 없기 때문에 온도 값은 절대 0이 될 수 없다. 실제로는 온도를 0으로 설정할 때 모델은 로짓 조정과 소프트맥스 계산을 하지 않고 가장 큰 로짓을 가진 토큰을 선택한다. 

- 많은 모델 제공업체는 모델이 생성한 확률을 로그프롭(logprob)으로 제공한다. 로그프롭은 log probability의 줄임말로 로그 스케일로 표현된 확률이다. 신경망의 확률을 다룰 때는 언더플로 문제를 줄이는 데 도움이 되기 때문에 로그 스케일이 선호된다. 로그프롭은 애플리케이션 개발(특히 분류), 애플리케이션 평가, 모델이 내부적으로 어떻게 작동하는지 이해하는데 유용하다. 많은 모델 제공자는 자신들의 모델의 로그프롭을 노출하지 않거나 노출하더라도 로그프롭 API가 제한적이다. 모델의 로그프롭이 노출되면 다른 사람이 모델을 쉽게 복제할 수 있기 때문에 보안상의 이유로 로그프롭 API를 제한한다. 

 

top-k

- 모델의 응답 다양성을 너무 희생하지 않으면서 계산 작업량을 줄이기 위한 샘플링 전략이다. 소프트맥스 레이어는 모든 후보 값의 확률 분포를 계산하는 데 사용된다. 소프트맥스는 모든 후보 값에 대해  두 번의 연산을 수행하는데 큰 어휘를 가진 언어 모델의 경우 이 과정은 계산 비용이 매우 높다. 이 문제를 피하기 위해 모델이 로짓을 계산한 후 상위 k개의 로짓을 선택하고 이 상위 k개의 로짓에 대해서만 소프트맥스를 수행한다. 애플리케이션이 얼마나 다양한 응답을 원하는지에 따라 k는 50-500 사이일 수 있으며 이는 모델의 어휘 크기보다 훨씬 작은 수치이다. 그런 다음 모델은 이런 상위 값들에서 샘플링한다. 

 

top-p

샘플링할 값을 더 동적으로 선택할 수 있게 해준다. top-p 샘플링에서 모델은 가장 가능성이 높은 다음 값의 확률을 내림차순으로 합산하고 합이 p에 도달하면 중단한다. 이렇게 계산된 누적 확률에 포함된 단어들만 다음 단어 후보로 고려된다. 언어 모델에서 top-p(뉴클리어스) 샘플링의 일반적ㅇ니 값은 보통 0.9에서 0.95사이다.  top-p는 소프트맥스 계산 부하를 반드시 줄여주지는 않는다. top-p의 이점은 컨텍스트와 관련이 높은 단어들만 후보로 삼기 때문에 컨텍스트에 적절한 문장을 생성할 수 있다는 것이다. 관련 샘플링 전략으로 mini-p가 있는데 샘플링 중 고려 대상이 큰 토큰의 최소 확률을 설정한다.

 

중단조건

- 자기회귀 언어 모델은 토큰을 하나씩 생성하면서 토큰 시퀀스를 생성한다. 긴 출력 시퀀스는 더 많은 시간이 걸리고 더 많은 돈이 들기 때문에 시퀀스 생성을 중단하는 조건을 설정하고 싶을 때 중단 토큰이나 중단 단어를 사용할 수 있다. 모델이 특정 형식으로 출력을 생성하기를 원하는 경우 조기 중단으로 인해 출력 형식이 잘못될 수 있다. 

 

[금] 테스트 시점 연산 ~ AI의 확률적 특성(p.134 ~ p.153)

더보기

2.4.3 테스트 시점 연산

이전에는 모델이 다음 토큰을 어떻게 샘플링할 수 있는지 다뤘다. 이번에는 모델이 전체 출력을 어떻게 샘플링할 수 있는지 논의한다. 모델의 응답 품질을 향상시키는 간단한 방법은 테스트 시점 연산을 사용하는 것이다. 질의당 하나의 응답만 생성하는 대신 좋은 응답이 나올 확률을 높이기 위해 여러 응답을 생성한다. 테스트 시점 연산을 수행하는 한 방법은 best of N 기법이다. 

- best of N 기법 : 무작위로 여러 출력을 생성하고 가장 적합한 출력을 선택

- 테스트 시점 연산의 효과를 높이는 간단한 전략은 출력의 다양성을 높이는 것이다. 더 다양한 옵션 집합이 더 나은 후보를 산출할 가능성이 높기 때문이다. 동일한 모델을 사용해 다른 옵션을 생성한다면 출력의 다양성을 높이기 위해 모델의 샘플링 변수를 변경하는 것이 좋은 방법이다. 

- 최고의 출력을 선택하기 위해 사용자에게 여러 출력을 보여주고 가장 마음에 드는 것을 고르도록 하거나 자동으로 가장 좋은 출력을 선택하는 방법을 개발할 수 있다. 자동 선택의 한 가지 방법은 확률이 가장 높은 출력을 고르는 것이다. 언어 모델의 출력은 토큰의 시퀀스고 각 토큰은 모델이 계산한 확률을 가진다. 출력의 확률은 그 출력에 있는 모든 토큰의 확률을 곱한 값이다. 합계를 구할 때 롱 시퀀스는 총 로그프롭이 더 낮을 가능성이 있다. 여러 출력을 샘플링한 후 평균 로그프롭이 가장 높은 것을 서택한다.(Open AI API가 사용하는 방식)

- 보상 모델을 사용해 각 출력의 점수를 매기는 방식도 있다. 

- 딥마인드는 테스트 시점 연산의 가치를 추가로 입증하면서 테스트 시점 연산을 확장하는 것이 모델 파라미터를 확장하는 것보다 더 효율적이라고 주장한다.

- 애플리케이션별 휴리스틱을 사용해 가장 좋은 응답을 선택할 수도 있다. 

- 테스트 시점 연산은 지연 시간 문제를 극복하는 것이 필요하다. 생각의 사슬(chain of thought) 질의는 모델이 응답을 완료하는 데 오랜 시간이 걸릴 수 있다. 

- 정확한 답을 요구하는 작업에서는 여러 출력 중에서 가장 많이 나온 결과를 고르는 것이 유용할 수 있다. 

- 입력이 조금 달라져도 출력이 크게 바뀌지 않으면 그 모델은 견고하다고 본다. 모델이 덜 견고할수록 여러 출력을 샘플링하는 게 더 유리하다. 

 

2.4.4 구조화된 출력

- 실제 서비스에서는 모델이 특정 형식을 따르는 출력을 생성해야 하는 경우도 있다. 구조화된 출력을 지원하는 프레임워크에는 가이던스, 아웃라인, 인스트럭터, llama.cpp가 있다. 오픈 AI는 텍스트 생성 API에서 JSON 모드를 도입한 최초의 모델 제공업체였다. 

- AI 스택의 다양한 계층에서 모델이 구조화된 출력을 생성하도록 유도할 수 있다. 프롬프팅, 후처리, 테스트 시점 연산, 제약 샘플링, 파인튜닝에서 앞의 세 가지는 임시방편에 가깝고 이는 이미 구조화된 출력을 잘 생성하고 있지만 약간의 개선만 필요한 모델에서 잘 작동한다. 집중적인 처리가 필요한 경우는 제약 샘플링과 파인 튜닝을 써야한다. 

 

프롬프팅

- 모델에게 어떤 형식으로든 출력을 생성하도록 지시할 수 있다. 모델이 지시를 따르는 능력은 점점 좋아지고 있지만 항상 지시를 따른다는 보장은 없다. 유효한 출력의 비율을 높이기 위해 일부 사람들은 원래 프롬프트의 출력을 검증하거나 수정하기 위해 AI를 사용한다. 

 

후처리

- 모델은 여러 질의에서 비슷한 실수를 반복하는 경향이 있다. 따라서 모델이 자주 하는 실수를 파악하면 이를 수정하는 스크립트를 작성해 오류를 고칠 수 있다. 단, 후처리는 수정하기 쉬운 실수에만 효과가 있다. 이런 상황은 보통 모델의 출력은 올바른 형식을 갖추고 작은 오류가 포함되는 경우 발생한다.

 

제약 샘플링

- 특정 제약 조건에 맞게 텍스트 생성을 유도하는 기법이다. 주로 구조화된 출력 도구와 함께 사용된다. 제약 조건을 만족하는 값들 중에서 토큰을 샘플링하는 방식이다. 토큰을 생성할 때 모델은 먼저 로짓 벡터를 출력하는데 각 로짓은 가능한 토큰 하나와 대응된다. 제약 샘플링은 이 로짓 벡터에서 제약 조건을 만족하는 토큰만 걸러내고 걸러진 토큰들 중 하나를 뽑는다. JSON, YAML, 정규식, CSV 등과 같은 각 출력 형식에는 고유한 문법이 필요하기 때문에 제약 샘플링은 일반화하기 어렵다. 따라서 제약 샘플링은 외부 도구에서 지원하거나 팀에서 자체적으로 개발한 문법이 있는 형식에만 사용할 수 있다. 또한 문법 검증은 생성 지연 시간을 증가시킬 수 있다. 

 

파인튜닝

- 원하는 형식에 맞는 예시로 모델을 학습시키는 것인데 이 형식대로 출력을 생성하게 만드는 가장 효과적이고 일반적인 방법이다. 특정 작업의 경우 파인튜닝 전에 모델의 아키텍처를 수정하여 출력 형식을 보장할 수 있다. 파인튜닝할 때  모델 전체를 처음부터 끝까지 재학습할 수도 있고 분류기 헤드처럼 일부만 학습할 수 있다. 전체를 학습하면 더 많은 리소스가 필요하지만 성능은 더 좋아진다. 

 

2.4.5 AI의 확률적 특성

- AI 모델이 응답을 샘플링하는 방식은 확률적이다. 이런 확률적 특성 때문에 일관성이 떨어지고 환각 현상이 ㅐㅅㅇ긴다. 

 

비일관성

- 같은 입력인데 다른 출력이 나오는 문제는 여러 방법으로 해결할 수 있다. 같은 질의가 들어왔을 때 같은 응답을 하도록 응답을 캐시에 저장할 수 있다. 온도, top-k, top-p 값과 같은 모델의 샘플링 변수를 고정할 수도 있다. 토큰 샘플링에 사용되는 난수 생성기의 초기값인 시드 변수도 고정할 수 있다. 하지만 이런 변수들을 모두 고정해도 모델이 100% 일관된 결과를 낸다고 보장할 수는 없다. 

- 입력이 조금만 달라져도 출력이 크게 달라지는 상황의 경우 모델의 출력 생성 변수를 고정하는 것은 여전히 좋은 방법이지만 서로 다른 입력에 대해 같은 출력을 생성하도록 강제할 순 없다. 

 

환각

- 환각은 LLM의 등장과 함께 주목받기 시작했지만 파운데이션 모델이나 트랜스포머가 나오기 전부터 생성 모델에서는 흔한 현상이었다. 

- 언어 모델이 주어진 데이터와 자신이 생성한 데이터를 구분하지 못해서 환각이 발생한다는 자기 기만 가설과 모델의 내부 지식과 레이블러의 내부 지식이 일치하지 않아서 환각이 일어난다는 내부 지식 불일치 가설이 있다. 

 

1주차 독후감

인프런 AI 엔지니어링 챌린지 1주차 학습을 통해 파운데이션 모델(FM)의 근간부터 애플리케이션 개발 방법론까지 폭넓게 이해할 수 있었습니다.

 

FM의 발전은 지도 학습의 한계를 넘어선 자기 지도 학습 기반의 LLM에서 시작하여 다양한 모달리티를 포괄하는 FM으로 확장되었고 이는 AI 엔지니어링이라는 새로운 패러다임(기존 모델 활용)을 낳았습니다. 기획 단계에서는 비즈니스 영향을 최우선 지표로 삼아야 하며 프롬프트 엔지니어링과 파인튜닝을 통한 모델 조정이 중요함을 인지했습니다.

 

특히, 트랜스포머 아키텍처와 어텐션 메커니즘의 상세한 설명을 통해 모델 작동 원리를 이해할 수 있었고 SFT/RLHF를 통한 사후 학습과 샘플링 전략(온도, top-k, top-p)을 통해 모델의 출력(일관성/창의성)을 제어하는 실질적인 방법을 배웠습니다.

 

또한, 테스트 시점 연산과 제약 샘플링/파인튜닝을 활용한 구조화된 출력 생성, 그리고 환각 현상에 대한 이해는 신뢰도 높은 AI 서비스를 위한 필수 지식임을 깨닫게 했습니다.

 

개인적으로 AI 엔지니어가 모델 활용부터 제품화까지 아우르는 풀스택 역할을 수행해야 함을 알 수 있는 유익한 학습이었습니다.

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함