쉽고 빠르게 익히는 실전 LLM
OpenAI의 ChatGPT의 열풍과 AI 높은 관심으로 인해 LLM이 무엇인지를 궁금해하는 사람들에게 도움이 되도록 기본적인 내용부터 활용까지를 설명해주는 도서입니다. ChatGPT 활용, LLM 임베딩, 프롬프트 엔지니어링에 대한 지식을 제공해주고 있으며, 다양한 실전 예제와 해결방법을 통해 더 나은 LLM 프로그래밍을 지원합니다.
LLM은 대규모 언어 모델로 자연어 처리(NLP) 중 언어 모델 중심으로 많은 사람들이 자신의 업무 영역에 사용을 하고자 합니다. LLM은 확률 모델을 사용하여 연속적인 토큰을 예측할 뿐이지만, 사람들은 이미 이것을 AI(인공지능)으로 인식하고 있습니다.
자연어 내에서 LLM의 위치는 어디쯤인지와 트랜스포머와 인코더, 전이학습, 파인튜닝, 임베딩, 어텐션, 토큰화 등을 설명해줍니다. 이 책에는 이해하기 쉽고 무엇이 수행되고 있는지를 보여주는 파이썬 코드들이 있습니다. 이 책의 프롬프트 엔지니어링에 대한 내용은 LLM으로부터 훨씬 나은 결과를 얻는 방법도 알려줍니다.
이 책의 목표는 모델 선택, 데이터 형식, 파인튜닝 파라미터, 그리고 더 많은 것에 가장 좋은 선택을 내릴 수 있도록 모델의 내부 작동 원리에 대한 충분한 통찰력을 제공하는 동시에, 모든 종류의 LLM을 실용적인 애플리케이션을 위해 어떻게 사용하고 훈련하며 최적화할지에 대한 방법을 안내하는 것입니다.
도서 목차
1부 : LLM 소개
1장 : LLM
2장 : LLM을 이용한 의미 기반 검색
3장 : 프롬프트 엔지니어링의 첫 번째 단계
2부 : LLM 활용법
4장 : 맞춤형 파인튜닝으로 LLM 최적화하기
5장 : 고급 프롬프트 엔지니어링
6장 : 임베디와 모델 아키텍처 맞춤화
3부 : 고급 LLM 사용법
7장 : 파운데이션 모델을 넘어서
8장 : 고급 오픈 소스 LLM 파인튜닝
9장 : LLM을 프로덕션 환경에서 사용하기
PART 1. LLM 소개
1장 : LLM
LLM(Large Language Model) 대규모 언어 모델은 대부분 트랜스포머 아키텍처에서 파생된 AI 모델로, 사람의 언어, 코드 등을 이해하고 생성하기 위해 설계되었습니다. 이러한 모델은 방대한 양의 텍스트 데이터로 학습되어, 사람 언어의 복잡성과 뉘앙스를 포착할 수 있습니다. LLM은 간단한 텍스트 분류부터 텍스트 생성에 이르기까지 언어 관련 작업을 넓은 범위에서 높은 정확도로 유창하고 유려하게 수행할 수 있습니다. LLM의 다양성과 뛰어난 성능 때문에 트랜스포머 기반의 LLM은 다양한 산업과 응용 분야에서 점점 더 가치있는 자산이 되고 있습니다.
트랜스포머 아키텍처 자체는 매우 인상적입니다. 이전 NLP 모델보다 훨씬 병렬화 및 확장을 할 수 있어 이전 NLP 모델로 가능하지 않던 훨씬 큰 데이터셋과 훈련 시간을 지원할 수 있습니다. 트랜스포머는 시퀀스 내 각 단어가 다른 모든 단어에 ‘주의를 기울이게’ 하여 단어 간의 장거리 종속성과 문맥 관계를 포착할 수 있게 하는 셀프 어텐션을 사용합니다. 물론 어떤 아키텍처도 완벽하지 않듯이 트랜스포머 아키텍처도 여전히 한번에 처리할 수 있는 텍스트의 최대 길이를 나타내는 입력 문맥 윈도우에 제한되어 있습니다.
자기회귀 언어모델은 문장에서 이전 토큰만을 기반으로 다음 토큰을 예측하도록 훈련합니다. 이러한 모델은 트랜스포머의 디코더 부분에 해당하며, 어텐션 헤드가 앞서 온 토큰만 볼 수 있도록 전체 문장에 마스크가 적용되어 있습니다. 자기 회귀 모델은 텍스트 생성에 이상적이며, 좋은 예로는 GPT입니다.
자동 인코딩 언어 모델은 손상된 버전의 입력 내용으로부터 기존 문장을 재구성하도록 훈련합니다. 이러한 모델은 트랜스포머의 인코더 부분에 해당하며, 마스크 없이 전체 입력에 접근할 수 있습니다. 자동 인코딩 모델은 전체 문장의 양방향 표현을 생성합니다. 텍스트 생성과 같은 다양한 작업에 파인튜닝될 수 있지만 주요 애플리케이션은 문장 분류 또는 토큰 분류입입니다. 좋은 예로는 BERT입니다.
LLM 작동원리
사전 훈련
모든 LLM은 대량의 텍스트 데이터로 특정 언어 모델링 관련 작업에 대해 사전훈련을 합니다. 사전훈련 중에 LLM은 일반적인 언어와 단어 간의 관계를 배우고 이해하려고 합니다. 모든 LLM은 서로 다른 말뭉치와 서로 다른 작업에 대해서 훈련되었습니다.
• 마스크된 언어 모델링 작업(자동 인코딩 작업) : BERT가 하나의 문장안에서 토큰의 상호작용을 인식하도록 도와줌
• 다음 문장 예측(NSP) 작업 : BERT가 문장들 사이에서 토큰이 서로 어떻게 상호작용하는지 이해하도록 도와줌
전이학습
전이학습은 머신러닝에서 한 작업에서 얻은 지식을 활용하여 다른 관련 작업의 성능을 향상시키는 기술입니다. LLM에 대한 전이학습은 텍스트 데이터의 한 말뭉치에서 사전 훈련된 LLM을 가져옵니다. 그리고 텍스트 분류나 텍스트 생성과 같은 특정한 ‘실제’작업을 위해 작업 특정 데이터로 모델의 파라미터를 업데이트함으로써 모델을 파인튜닝하는 것을 포함합니다.
파인튜닝
사전 훈련된 LLM은 특정 작업을 위해 파인튜닝될 수 있습니다. 파인튜닝은 LLM을 작업에 특화된 상대적으로 작은 크기의 데이터셋에서 훈련시켜, 특정 작업을 위한 파라미터를 조정하는 것을 의미합니다. 이를 통해 LLM은 사전 훈련된 언어에 대한 지식을 활용하여 특정 작업의 정확도를 향상시킬 수 있습니다.
어텐션
어텐션은 트랜스포머만이 아니라 다양한 가중치를 입력의 다른 부분에 할당하는 딥러닝 모델에서 사용되는 메커니즘입니다. 이를 통해 모델은 번역이나 요약과 같은 작업을 수행하면서 가장 중요한 정보를 우선시하고 강조할 수 있습니다. 본질적으로 어텐션은 모델이 동적으로 입력의 다른 부분에 ‘집중’할 수 있게 하여, 성능 향상과 더 정확한 결과를 이끌어냅니다. 어텐션은 트랜스포머 기반 LLM의 핵심 구성요소이며, 훈련 과정과 대상 작업 사이의 정보를 효과적으로 유지하면서 긴 텍스트 부분을 쉽게 처리할 수 있게 합니다.
임베딩
임베딩은 고차원 공간에서의 단어, 구절, 또는 토큰의 수학적 표현입니다. 자연어 처리에서 임베딩은 다른 단어와의 의미와 관계를 포착하는 방식으로 단어, 구절, 또는 토큰을 나타냅니다. 여러 종류의 임베딩이 가능하며, 이 중 위치 임베딩은 문장에서 토큰의 위치를 인코딩하며, 토큰 임베딩은 토큰의 의미를 임베딩합니다.
토큰화
토큰화는 텍스트를 가장 작은 이해 단위인 토큰으로 분해하는 과정입니다. 이 토큰들은 의미를 내포한 정보 조각이며, 어텐션 계산에 입력으로 사용되어 LLM이 실제로 학습하고 작동하게 됩니다. 토큰은 LLM의 정적 어휘를 구성하며, 항상 전체 단어를 나타내는 것이 아닙니다.
현재 많이 사용되는 LLM
• BERT : 구글에서 만든 것으로 문장의 양방향 표현을 구성하기 위해 어텐션 메커니즘을 사용하는 자동 인코딩 모델입니다. 이 접근법은 문장 분류와 토큰 분류 작업에 이상적입니다.
• GPT : OpenAI에서 만든 것으로 어텐션 메커니즘을 사용하여 이전 토큰을 기반으로 시퀀스에서 다음 토큰을 예측하는 자기회귀 모델입니다. 주로 텍스트 생성에서 사용되며, 사람이 쓴 것처럼 자연스러운 텍스트를 생성할 수 있는 능력으로 알려져 있습니다.
• T5 : 구굴에서 만든 것으로 텍스트 분류, 요약, 생성에 이르기까지 여러 NLP 작업을 수행하기 위해 설계된 순수한 인코더/디코더 트랜스포머 모델입니다. 실제로 이러한 성능을 체감할 수 있었던 최초의 인기 있는 모델 중 하나입니다.
2장 : LLM을 이용한 의미 기반 검색
텍스트 임베딩은 단어나 구문을 그들의 맥락적 의미를 기반으로 다차원 공간에서 기계가 읽을 수 있는 수치 벡터로 표현하는 방법입니다. LLM을 활용한 텍스트 임베딩을 통해 단어와 문구의 표면적인 구문이나 철자를 넘어서는 의미를 포착할 수 있습니다. 이러한 텍스트 임베딩을 이용하면 언어 사용에 관한 풍부한 정보를 활용하여 LLM의 사전 훈련과 파인튜닝이 기반이 되는 애플리케이션을 거의 무한하게 구축할 수 있습니다.
비대칭적 의미 기반 검색
의미 기반 검색 시스템은 사용자 쿼리의 의미와 맥락을 이해하고, 이를 검색 가능한 문서의 의미 및 맥락과 대조할 수 있습니다. 이러한 시스템은 정확한 키워드나 n-gram 일치에 의존하지 않고도 데이터베이스에서 관련된 결과를 찾아낼 수 있으며, 사전 훈련된 LLM을 이용하여 쿼리와 문서/정보의 뉘앙스를 이해합니다.
텍스트 유사도
텍스트를 벡터로 변환하면, 텍스트 조각끼리 서로 ‘유사’한지 여부를 파악하기 위해 수학적으로 표현해야 합니다. 코사인 유사도는 두 벡터가 얼마나 유사한지를 측정하는 방법입니다. 이것은 두 벡터 사이의 각도를 살펴보고, 방향이 얼마나 가까운지에 따라 점수를 매깁니다. 같은 방향이면 1이고, 수직이면 0, 다른 방향이면 -1입니다.
3장 : 프롬프트 엔지니어링의 첫 번째 단계
프롬프트 엔지니어링은 효과적으로 작업을 전달하여 정확하고 유용한 출력을 반환하도록 유도하는 LLM에 대한 입력(프롬프트)을 만드는 것입니다. 프롬프트 엔지니어링은 언어의 뉘앙스, 작업 중인 특정 도메인, 그리고 사용 중인 LLM의 능력과 한계를 이해하는 기술이 필요합니다.
언어 모델에서 정렬
프롬프트 엔지니어링이 LLM 애플리케이션 개발에 중요한 이유를 이해하려면 LLM이 어떻게 훈련되는지 뿐만 아니라 언어 모델이 어떻게 사람의 입력에 정렬되는지를 이해해야 합니다. 언어 모델에서의 정렬이란 모델이 사용자가 예상한 것과 ‘일치하는’ 방식으로 입력 프롬프트를 이해하고 답변하는 것입니다.
직접 요청하기
명령어 정렬 언어 모델을 위한 프롬프트 엔지니어링의 첫 번째이자 가장 중요한 규칙은 요청하는 내용이 최대한 명확하고 직접적이어야 한다는 것입니다. LLM에 작업을 요청할 때, 그 작업을 가능한 한 명확하게 전달하는 게 중요합니다. 더 명확한 LLM의 답변을 위해, 접두사를 추가함으로써 작업에 대한 입력과 출력을 명확하게 표시할 수 있습니다.
퓨샷 학습
퓨샷 학습은 LLM에 작업의 몇 가지 예제를 제공하여 문제의 맥락과 애매한 차이를 이해하는 데 도움을 주는 강력한 기술입니다. 퓨샷 학습은 특정한 어조, 구문 또는 스타일이 필요한 작업과 특정 도메인에 특화된 언어를 다룰 때 특히 유용합니다.
프롬프트 엔지니어링은 언어 모델의 성능을 향상시키는데 중요한 과정입니다. 프롬프트를 설계학고 최적화하면 언어 모델이 사용자의 입력을 더 잘 이해하고 이에 정확한 답을 하도록 만들 수 있습니다.
PART 2. LLM 활용법
4장 : 맞춤형 파인튜닝으로 LLM을 최적화하기
파인튜닝은 이미 만들어진 모델을 업데이트해서 더 높은 품질의 결과를 만듭니다. 사용하는 토큰을 절약하고, 더 빠른 답변을 만들 수 있습니다. GPT와 같은 광범위한 텍스트 데이터로 사전 훈련된 LLM들은 훌륭한 퓨샷 학습 능력을 갖고 있지만, 수 많은 예제를 통해 모델을 미세하게 조정하는 파인튜닝으로 한 단계 더 발전해 다양한 작업에서 뛰어난 성능을 발휘할 수 있습니다.
파인튜닝은 전이학습을 기반으로 합니다. 전이학습은 사전 훈련된 모델을 활용해 새로운 작업이나 분야에 기존 지식을 적용하는 기술입니다. 파인튜닝은 사전 훈련된 파라미터들을 ‘최종’목표 작업에 더 잘 맞게 조정하는 전이학습의 특별한 형태입니다. 파인튜닝을 통해 LLM은 맞춤화된 예시를 학습하여 관련성이 높고 정확한 답변을 더욱 효율적으로 생성할 수 있습니다.
딥러닝 주요 용어
• 훈련셋(Training Set) : 모델을 훈련시키기 위해 사용되는 레이블이 달린 예시의 모음입니다. 모델은 훈련 예시를 기반으로 조정하여 데이터의 패턴과 관계를 인식하게 됩니다.
• 검증셋(Validation Set) : 훈련셋과 별개로 훈련 중 모델의 성능을 평가하기 위해 사용되는 레이블이 달린 예시의 모음입니다.
• 테스트셋(Test Set) : 훈련셋과 검증셋 모두와 별개인 레이블이 지정된 세 번째 예시 모음입니다. 이는 훈련과 파인튜닝 과정이 완료된 후 모델의 최종 성능을 평가하는 데 사용하거나 처음 접하는 새로운 데이터를 일반화하는 모델의 능력이 편향되어 있지 않은지 최종 평가하는데 사용합니다.
• 손실 함수(Loss Fucntion) : 모델의 예측 값과 실제 목표 값 사이의 차이를 정량화하는 함수입니다. 이것은 모델의 성능을 평가하고 최적화 과정을 안내하는 오차의 지표 역할을 합니다. 손실 함수를 최소화해 더 나은 예측을 달성하는 것이 모델을 훈련하는 목표입니다.
파인튜닝 과정
1. 레이블이 지정된 데이터 수집
2. 하이퍼파라미터 선택
3. 모델 적응
4. 평가와 반복
5. 모델 구현 및 추가 학습
파인튜닝 데이터를 선택할 때 고려해야할 사항
• 데이터 품질 : 파인튜닝에 사용되는 데이터가 고품질이어야 하며, 노이즈가 없어야 하고, 대상 도메인이나 작업을 정확하게 대표해야 합니다.
• 데이터 다양성 : 데이터셋이 다양하게 구성되어야 하며, 다양한 시나리오를 포괄하여 모델이 다른 상황에서도 잘 일반화될 수 있어야 합니다.
• 데이터 균형 : 다양한 작업과 도메인 간의 예제 분포를 균형 있게 유지하면 모델의 성능에서 과적합과 편향을 방지할 수 있습니다. 이는 다수 클래스의 샘플링을 줄이고, 소수 클래스의 샘플링을 늘리고, 합성 데이터를 추가함으로써 불균형 데이터셋에서도 달성할 수 있습니다.
• 데이터 양 : 모델을 파인튜닝하기 위해 필요한 데이터의 총량을 결정합니다. 일반적으로 LLM과 같은 대규모 언어 모델은 다양한 패턴을 효과적으로 파악하고 학습하기 위해 더 광범위한 데이터를 요구하지만, LLM이 유사한 데이터에 대해 사전 훈련되었다면 더 작은 데이터셋으로도 충분할 수 있습니다. 필요한 데이터의 정확한 양은 수행 중인 작업의 복잡성에 따라 달라질 수 있습니다. 대량의 훈련 데이터를 사용하면 모델 성능을 향상시킬 수 있지만, 모델 훈련과 파인튜닝에 필요한 컴퓨팅 자원도 증가합니다.
파인튜닝 사전 작업
• 중복 제거 : 최고 데이터 품질을 보장하기 위해, 데이터셋에서 중복된 데이터를 제거합니다.
• 데이터 분할 : 데이터셋을 훈련, 검증, 테스트셋으로 나누어, 각 셋에 예제의 무작위 분포를 유지합니다.
• 훈련 데이터 섞기 : 파인튜닝 전에 훈련 데이터를 섞는 것은 모델이 예제를 무작위 순서로 만나게 하여 훈련 과정에서의 편향을 피하는 데 도움이 됩니다.
하이퍼파라미터 최적화
• 학습률(Learning Rate) : 학습률은 모델이 최적화하는 동안 수행하는 단계의 크기를 결정합니다. 학습률이 작을수록 수렴 속도는 느려지지만 정확도가 잠재적으로 올라갈 수 있습니다. 학습률이 클수록 학습 속도는 빨라지지만 모델이 최적의 솔루션을 오버슈팅할 수 있습니다.
• 배치 크기(Batch Size) : 배치 크기는 모델 업데이트의 단일 반복에서 사용된 훈련 예제의 수를 나타냅니다. 배치 크기가 클수록 더 안정적인 기울기와 더 빠른 학습 속도를 얻을 수 있습니다. 반면 배치 크기가 작을수록 모델은 더 정확해지지만, 수렴 속도는 더 느려질 수 있습니다.
• 훈련 에포크(Training Epoch) : 한 번의 에포크는 전체 훈련 데이터셋을 완전히 한 번 통과하는 것입니다. 훈련 에포크의 수는 모델이 데이터를 반복해서 학습하고 파라미터를 파인튜닝하는 횟수를 결정합니다.
5장 : 고급 프롬프트 엔지니어링
프롬프트를 향상시키고, 성능을 최적화하며, LLM 기반 애플리케이션의 보안을 강화하는 것이 목표입니다.
프롬프트 인젝션 공격
프롬프트 인젝션 공격은 공격자가 LLM에 제공된 프롬프트를 조작하여 편향된 또는 악의적인 결과를 생성하려고 할 때 사용하는 공격 유형입니다. 이는 민감하거나 고위험 애플리케이션에서 사용되는 LLM에 중대한 문제가 될 수 있으며, 잘못된 정보의 확산이나 편향된 컨텐츠의 생성으로 이어질 수 있습니다.
입력/출력 유효성 검사
LLM을 보호하고 정확한 결과를 보장하려면 입력 데이터 정제 및 데이터 유효성 검사 과정을 구현하여 잠재적으로 해롭거나 위험한 내용을 필터링하는 것이 좋습니다.
배치 프롬프팅
배치 프롬프팅은 파인 튜닝 모델에서 했던 것처럼 한 번에 한 샘플씩 실행하는 대신에, LLM이 일괄적으로 추론을 실행할 수 있습니다. 이 기술은 다양한 작업에서 성능을 유지하거나 경우에 따라 향상시키면서 토큰 및 시간 비용을 크게 줄입니다.
프롬프트 체이닝
프롬프트 체이닝은 더 복잡하거나 여러 단계의 작업을 완료하기 위해 하나의 LLM 출력을 다른 LLM의 입력으로 사용하는 것을 의미합니다. 이는 여러 LLM의 능력을 활용하고 단일 모델로는 얻을 수 없는 결과를 달성하기 위한 강력한 방법이 될 수 있습니다.
연쇄적 사고 프롬프트
연쇄적 사고 프롬프트는 LLM에 일련의 단계를 통해 추론하도록 하여 보다 구조화되고 투명하며 정확한 출력을 생성하는 방법입니다. 목표는 복잡한 작업을 더 작고 상호 연결된 하위 작업으로 세분화하여 LLM이 각 하위 작업을 단계별로 처리하도록 하는 것입니다. 이 방법은 모델이 문제의 특정한 측면에 ‘집중’할 수 있도록 할 뿐만 아니라 중간 결과물을 생성하여 잠재적인 문제를 식별하고 디버깅하기 쉽습니다.
6장 : 임베딩과 모델 아키텍처 맞춤화
LLM 구현에서 더 큰 잠재력을 발휘하기 위해서는 임베딩 모델을 파인튜닝하고 사전 훈련된 LLM 모델 아키텍처를 맞춤화하는 세계로 뛰어들 것입니다. 파운데이션 모델은 그 자체로 인상적이지만 아키텍처를 작은 규모부터 큰 규모까지 조정하면 다양한 작업에 맞게 적용하고 최적호할 수 있습니다. 이러한 맞춤화를 통해 고유한 문제를 더 잘 해결하고 LLM을 특정 비즈니스 요구에 맞게 조정할 수 있습니다.
추천 시스템 만들기
추천 시스템은 개인화된 추천을 생성하기 위해 사용자 특성과 아이템 특성을 모두 고려해야 합니다. 사용자 특성에는 연령, 검색 기록 및 과거 아이템 상호작용과 같은 인구통계학적 정보가 포함될 수 있으며, 아이템 특성에는 장르, 가격, 인기도와 같은 특성이 포함될 수 있습니다.
추천 시스템에서 탐색과 패턴 활용 사이의 적절한 균형을 찾는 것도 중요합니다. 패턴 활용이란 시스템이 사용자의 과거 선호도를 바탕으로 사용자가 좋아할 것이라고 확신하는 아이템을 추천하거나, 단순히 사용자가 이전에 상호작용한 아이템과 유사한 아이템을 추천하는 것을 말합니다. 반면에 탐색은 사용자가 이전에 전혀 고려하지 않았을 수 있는 아이템을 제안하며, 특히 추천이 과거에 그들이 좋아했던 것과 정확이 유사하지 않은 경우에 그렇습니다. 이러한 균형을 맞추는 것은 사용자가 계속해서 새로운 컨텐츠를 발견하는 동시에 관심사에 맞는 추천을 받을 수 있게 해줍니다.
컨텐츠 기반 추천 VS 협업 필터링
추천 엔진은 크게 두 가지 주요 접근 방식인 컨텐츠 기반 추천과 협업 필터링으로 나눌수 있습니다. 컨텐츠 기반 추천은 추천되는 아이템의 특성에 초첨을 맞추며, 이를 활용하여 사용자의 과거 상호작용을 기반으로 비슷한 컨텐츠를 추천합니다. 반면에, 협업 필터링은 사용자의 선호도와 행동을 활용하여 유사한 관심사나 취향을 가진 사용자 간의 패턴을 식별하여 추천을 생성합니다.
추천 기술 측면에서 볼 때, 컨텐츠 기반 추천과 협업 필터링 추천의 요소를 모두 결합한 접근 방식을 사용하는 것이 좋습니다. 각 애니메이션의 특성을 바이-인코더의 입력으로 사용하여 컨텐츠 기반 측면을 활용합니다. 동시에 사용자의 선호도와 행동을 기반으로 나온 자카드 점수를 고려하여 협업 필터링을 통합합니다.
PART 3. 고급 LLM 사용법
7장 : 파운데이션 모델은 넘어서
기존 모델들을 결합하여 새로운 LLM 아키텍처를 구축하는 개념으로 다양한 모델을 결합함으로써, 그들의 강점을 활용하여 개별 모델보다 더 잘 수행하거나 이전에는 불가능했던 작업을 수행할 수 있는 하이브리드 아키텍처를 만들수 있습니다. 예를 들어 시각적 추론 작업을 해결하기 위해 BERT의 텍스트 처리 기능, 비전 트랜스포머의 이미지 처리 기능, 그리고 오픈 소스 GPT-2의 텍스트 생성 기능을 결합한 멀티모달 시각화 질문-답변 시스템을 구축할 것입니다. 또한 강화 학습 분야를 탐구하고 이것이 사전 훈련된 LLM을 파인튜닝하는데 어떻게 사용될 수 있는지 살펴볼 것입니다.
사례 연구 : 시각적 질문-답변(VAQ)
시각적 질문-답변은 이미지와 자연어 모두에 대한 이해와 추론이 필요한 어려운 작업입니다. 이 작업은 주어진 이미지와 관련된 자연어로 된 질문에 올바르게 답하는 텍스트 답변을 생성하는 것이 목표입니다.
여기서 구축할 멀티모달 시스템에서는 세 가지 기초 모델인 ViT, GPT-2, DistilBERT를 소개합니다. 텍스트 프로세서인 DistilBERT는 속도와 메모리 효율성을 위해 최적화된 인기 있는 BERT 모델의 증류 버전입니다. 이 사전 훈련된 지식 증류를 사용하여 더 큰 BERT 모델에서 더 작고 효율적인 모델로 지식을 전달할 것입니다. 이미지 프로세서인 ViT는 이미지 이해를 위해 특별히 설계된 트랜스포머 기반 아키텍처입니다. 이 모델은 이미지에서 관련된 특징을 추출하기 위해 셀프 어텐션 메커니즘을 사용합니다. 텍스트 인코더인 GPT-2는 대량의 텍스트 데이터에 대해 사전 훈련된 오픈 소스 생성 언어 모델입니다. GPT-2는 약 40GB의 데이터에 대해 사전 훈련되었으므로, 이 또한 전이학습 덕분에 훈련 중에 도움이 될 단어에 대한 사전 지식을 가지고 있습니다.
은닉 상태 투영과 융합
텍스트와 이미지 입력을 각각의 모델(DistillBERT와 ViT)에 넣으면, 이들은 입력의 유용한 특징 표현을 포함하는 출력 텐서를 생성합니다. 그러나 이러한 특징이 반드시 같은 형식으로 되지는 않으며, 차원 수가 다를 수가 있습니다. 이러한 불일치를 해결하기 위해, 선형 투영 계층을 사용하여 텍스트와 이미지 모델의 출력 텐서를 공유 차원 공간에 투영합니다. 이를 통해 텍스트와 이미지 입력에서 추출된 특징들을 효과적으로 결합할 수 있습니다. 그리고 이를 디코더(GPT-2)에 입력하여 일관되고 관련 있는 텍스트 답변을 생성합니다.
크로스-어텐션
크로스-어텐션은 멀티모달 시스템이 텍스트와 이미지 입력 사이의 상호작용 및 생성하고자 하는 출력 텍스트를 학습할 수 있게 해 주는 메커니즘입니다. 이는 기본 트랜스포머 아키텍처의 핵심 구성 요소로, 입력에서 출력으로 정보를 효과적으로 통합할 수 있게 해 줍니다.
사례 연구 : 피드백 기반 강화 학습
사람으로부터 또는 자동화된 실시간 피드백을 사용하여 생성된 텍스트를 성능 측정으로, 또는 모델을 최적화하기 위한 손실 함수로 사용할 수 있다면 어떨까? 바로 피드백 기반 강화 학습(RLF), AI 피드백 기반 강화 학습이 등장합니다. 강화 학습 방법을 사용하면 실시간 피드백을 사용하여 언어 모델을 직접 최적화할 수 있습니다.
훈련 과정은 총 3가지 핵심 단계로 나뉩니다.
1. 언어 모델의 사전 훈련
2. 보상 모델 정의(잠재적 훈련)
3. 강화 학습으로 언어 모델을 파인튜닝하기
8장 : 고급 오픈 소스 LLM 파인튜닝
이 책의 목적 중 LLM에 대해 소개해 주는 부분 이외에도 작은 오픈 소스 모델들도 적절한 데이터와 파인튜닝을 통해 GPT-4와 같은 거대한 클로즈드 소스 모델들만큼 훌륭한 모델을 만들 수 있다는 것을 보여주고자 합니다.
예시 : BERT를 이용한 애니메이션 장르 다중 레이블 분류
장르 예측 모델의 성능을 평가하기 위해 항목 집합 간의 유사성을 측정하는 지표인 자카드 점수를 사용할 것입니다 이 점수는 각 애니메이션 타이틀에 대해 장르를 예측하는 모델의 정확도를 평가할 수 있기 때문에 항목 당 여러 레이블을 예측하는 다중 레이블 장르 예측 작업에 적합합니다.
대표사진 삭제
모델 파인튜닝 과정
오픈 소스 LLM 파인튜닝을 위한 일반적인 팁
- 데이터 준비 + 피처 엔지니어링
- 배치 크기 및 기울기 누적 조정하기
- 동적 패딩
- 혼합 정밀도 훈련
- 파이토치 2.0 통합
- 결과 요약
- 모델 동결
9장 : LLM을 프로덕션 환경에서 사용하기
LLM을 활용할 수 있는 능력이 커짐에 따라, 더 많은 사람과 공유할 수 있도록 이러한 모델을 프로덕션에 배포하는 필요성도 커지고 있습니다.
클로즈드 소스 LLM을 프로덕션 환경에 배포하기
비용 예측
클로즈드 소스 모델의 경우 비용 예측은 주로 API 사용량과 관련이 있습니다. 이는 일반적으로 이런한 모델에 접근하는 방식이기 때문입니다.
API 키 관리
API 키를 관리함에 있어 노출되지 않도록 주의해서 관리해야 하며, 잠재적인 키 유출의 영향을 최소화하기 위해 정기적으로 API 키를 교체해야 합니다. 또한 필요한 최소한의 권한만을 가진 키를 사용하도록 해야 합니다.
프로덕션 환경에 오픈 소스 LLM 배포하기
추론을 위한 모델 준비
훈련을 마친 모델을 프로덕션에 바로 사용할 수는 있지만, 프로덕션 추론을 위한 머신러닝 코드를 추가적인 작업을 통해 최적화하는 것이 좋습니다.
상호 운용성
모델은 기본적으로 상호 운용 가능하도록 하는 것이 유익합니다. 이는 모델이 다양한 머신러닝 프레임워크에서 사용될 수 있음을 의미합니다. 인기 있는 방법 중 하나로 ONNX를 사용하는 것으로, 이는 머신러닝 모델을 위한 개방형 표준 형식입니다.
양자화
양자화는 신경망의 가중치와 편향의 정밀도를 줄이는 기술입니다. 이는 더 작은 모델 크기와 빠른 추론 시간을 결과로 가져오며, 모델 정확도에는 약간의 감소가 있습니다.
가지치기
가지치기는 LLM의 크기를 줄이는 데 도움이 되는 또 다른 기술입니다. 이는 신경망에서 모델의 출력을 가장 적게 기여하는 가중치를 제거함으로써 모델의 복잡성을 줄이는 작업을 의미합니다. 이는 더 빠른 추론 시간과 더 작은 메모리 사용하여, 자원이 제한된 환경에서 모델을 배포하는 데 특히 유용합니다.
지식 증류
지식 증류는 더 큰 모델이나 모델 앙상블의 행동을 모방하려는 더 작은 모델을 생성하는데 사용되며, 더 효율적으로 실행될 수 있는 컴팩트한 모델을 결과로 만듭니다. 자원이 제한된 환경에서 배포할 때 유익합니다.
LLM 사용에 대한 비용 예측
오픈 소스 모델의 경우, 비용 추정은 모델을 호스팅하고 실행하는 데 필요한 컴퓨팅 및 저장 공간 자원을 모두 고려합니다. 이러한 비용을 정확하게 예측하려면 애플리케이션의 요구사항, 선택한 클라우드 제공업체의 가격 구조, 모델의 자원 요구사항에 대한 포괄적인 이해가 필요합니다.
Hugging Face에 올리기
Hugging Face를 저장소로 사용하고자 한다면, 아래와 같은 단계로 진행해야 합니다. 모델 준비하기, 라이선스 선택하기, 모델 카드 작성하기, 저장소에 모델 푸시하기 입니다.
책의 총평
프롬프트 엔지니어링과 관련한 내용부터 LLM 기초, 활용, 배포까지 다양한 부분에 대해 상세하게 가르쳐 준 책으로 LLM에 관심이 있는 사람이라면 한번 쯤은 읽어볼만한 도서입니다. 하지만 깊이가 없는 사람들에게는 이해가 어려울 수 있고, 번역된 용어가 개발자인 나 조차도 이해하기 어렵게 된 부분들이 있었습니다. 가이드 문서로 적합하니 너무 깊이 있는 것을 원한다면 다른 도서도 같이 활용해야 할것입니다.
최근에 컴퓨터 비전 위주의 책을 읽다보니, 언어 모델에 대해서도 호기심이 더 생긴거 같긴 합니다.
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.