소개: 패턴 지식 재사용
Il 고급 전이 학습 사전 훈련된 모델을 활용하는 열쇠 처음부터 훈련하는 데 계산 리소스가 필요하지 않고 대규모 데이터 세트에 대해 다음과 같은 모델 버트 e GPT 수백 가지에 대해 훈련을 받았습니다. 수십억 개의 토큰을 통해 언어에 대한 깊은 이해를 포착합니다. 이전됨 데이터가 적고 리소스가 제한된 특정 작업에
이 기사에서는 현대적인 미세 조정 전략, 신속한 엔지니어링, RAG(Retrieval-Augmented Generation)와 Hugging Face 생태계를 비교합니다. Llama, Mistral 및 Falcon과 같은 오픈 소스 모델.
무엇을 배울 것인가
- BERT: 이해 작업을 위한 양방향 사전 훈련 및 미세 조정
- GPT: 자동 회귀 생성 및 상황 내 학습
- 미세 조정 전략: 전체, LoRA, 어댑터 및 QLoRA
- 신속한 엔지니어링: 더 나은 결과를 얻기 위한 기술
- RAG: 정확한 답변을 위해 LLM과 연구를 결합하세요
- 오픈 소스 모델: Llama, Mistral, Falcon - 언제 무엇을 사용할지
- Hugging Face Hub: 사전 훈련된 모델의 생태계
BERT: 양방향 텍스트 이해
버트 (변압기의 양방향 인코더 표현) 혁신 양방향 사전 훈련이 언어 표현을 생성한다는 것을 보여주는 NLP 엄청나게 부자. 사전 훈련 중에 BERT는 두 가지 목표를 사용합니다.
- 마스크된 언어 모델링(MLM): 토큰의 15%가 마스크되어 있으며 모델은 양방향 컨텍스트에서 이를 예측해야 합니다.
- 다음 문장 예측(NSP): 모델은 원문에서 두 문장이 연속되어 있는지 예측합니다.
미세 조정을 위해 BERT 출력 위에 분류 레이어를 추가하면 됩니다. 수천 개의 레이블이 지정된 예제를 통해 모든 것을 훈련합니다.
from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments
import torch
# Caricare BERT per classificazione di sentiment
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained(
'bert-base-uncased',
num_labels=2 # positivo/negativo
)
# Tokenizzare i dati
texts = ["This movie is great!", "Terrible waste of time."]
labels = [1, 0] # 1=positivo, 0=negativo
inputs = tokenizer(texts, padding=True, truncation=True,
max_length=128, return_tensors="pt")
inputs['labels'] = torch.tensor(labels)
# Forward pass
outputs = model(**inputs)
print(f"Loss: {outputs.loss:.4f}")
print(f"Logits: {outputs.logits}")
# Fine-tuning con Trainer API
training_args = TrainingArguments(
output_dir='./results',
num_train_epochs=3,
per_device_train_batch_size=16,
learning_rate=2e-5,
weight_decay=0.01,
warmup_steps=100,
evaluation_strategy="epoch"
)
효율적인 미세 조정: LoRA 및 QLoRA
수십억 개의 매개변수로 모델을 완전히 미세 조정하려면 막대한 리소스가 필요합니다. 매개변수 효율적인 미세 조정(PEFT) 모델을 조정할 수 있습니다 매개변수의 일부만 수정:
LoRA(낮은 순위 적응)
로라 모델의 원래 가중치를 고정하고 낮은 순위 행렬을 추가합니다. Attention 레이어와 함께 훈련 가능합니다. 일반적으로 매개변수의 1% 미만만 변경됩니다. 전체적으로, 전체 미세 조정에 필적하는 성능을 달성합니다.
QLoRA
QLoRA LoRA와 4비트 양자화를 결합하여 미세 조정 가능 48GB VRAM을 갖춘 단일 GPU에서 65B 매개변수 모델을 지원합니다. 데이터 유형 사용 NF4(NormalFloat 4비트) 및 이중 양자화로 효율성을 극대화합니다.
from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM, AutoTokenizer
# Configurazione LoRA
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16, # Rango delle matrici LoRA
lora_alpha=32, # Scaling factor
lora_dropout=0.1,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
bias="none"
)
# Applicare LoRA al modello
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
peft_model = get_peft_model(model, lora_config)
# Contare parametri addestrabili
trainable = sum(p.numel() for p in peft_model.parameters() if p.requires_grad)
total = sum(p.numel() for p in peft_model.parameters())
print(f"Trainable: {trainable:,} / {total:,} "
f"({100*trainable/total:.2f}%)")
# Output: ~0.5% dei parametri sono addestrabili
신속한 엔지니어링: LLM과의 의사소통 기술
Il 신속한 엔지니어링 그리고 다음을 안내하는 지침을 공식화하는 연습 가중치를 변경하지 않고 원하는 출력을 향해 모델을 만듭니다. 주요 기술은 다음과 같습니다. 퓨샷 학습 (프롬프트에 예시 제공), 생각의 사슬 (모델에게 단계별로 생각하도록 요청) 역할 촉구 (모델에 특정 역할 할당) e 구조화된 출력 (요청 JSON과 같은 특정 형식).
RAG: 검색-증강 생성
Il 조각 LLM의 생성 능력과 검색 시스템을 결합합니다. 특정 문서를 기반으로 정확한 답변을 제공합니다. 단순히 의지하는 것보다 사전 훈련 중에 저장된 지식을 통해 모델은 관련 컨텍스트를 수신합니다. 문서 데이터베이스에서 검색되었습니다.
RAG 프로세스는 세 단계로 구분됩니다.
- 인덱싱: 문서를 덩어리로 나누어 벡터 임베딩으로 변환합니다.
- 검색: 쿼리가 주어지면 유사성 검색을 통해 가장 유사한 청크가 검색됩니다.
- 세대: 검색된 청크는 LLM에 대한 컨텍스트로 프롬프트에 삽입됩니다.
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
# 1. Splitting dei documenti
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["\n\n", "\n", ". ", " "]
)
chunks = text_splitter.split_text(document_text)
# 2. Creazione degli embedding e vector store
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
vector_store = FAISS.from_texts(chunks, embeddings)
# 3. Retrieval e generazione
query = "Come funziona il transfer learning?"
relevant_docs = vector_store.similarity_search(query, k=3)
# Costruire il prompt con contesto
context = "\n".join([doc.page_content for doc in relevant_docs])
prompt = f"""Basandoti sul seguente contesto, rispondi alla domanda.
Contesto:
{context}
Domanda: {query}
Risposta:"""
오픈 소스 모델: Llama, Mistral, Falcon
오픈 소스 템플릿 생태계가 폭발적으로 증가하여 템플릿에 대한 경쟁력 있는 대안을 제공합니다. 소유자:
- 라마(메타): 7B~70B 매개변수의 모델 제품군으로 미세 조정 및 온프레미스 배포에 탁월합니다. Llama 3는 GPT-3.5로 경쟁력 있는 성능을 달성합니다.
- 미스트랄: 혁신적인 아키텍처를 갖춘 효율적인 모델(Sliding Window Attention, Mixture of Experts). Mistral 7B는 많은 벤치마크에서 Llama 2 13B보다 성능이 뛰어납니다.
- Falcon: 고품질 데이터 세트(RefinedWeb)에 대한 교육을 받았으며 우수한 제로샷 성능을 제공합니다.
선택은 사용 사례에 따라 다릅니다. 일반 텍스트 생성의 경우 Llama 3 및 종종 더 나은 선택; 제한된 자원의 효율성을 위해서는 Mistral 7B가 이상적입니다. 특정 작업을 위해, 이러한 모델 중 하나를 LoRA로 미세 조정하면 탁월한 결과를 얻을 수 있습니다.
포옹 얼굴: 완전한 생태계
포옹하는 얼굴 NLP 딥러닝의 벤치마크가 되었습니다. 완전한 생태계 제공:
- 모델 허브: 500,000개 이상의 사전 훈련된 모델, 코드 한 줄로 다운로드 가능
- 트랜스포머 라이브러리: 모든 모델(BERT, GPT, T5, Llama 등)에 대한 통합 API
- 데이터세트: 학습 및 평가를 위한 수천 개의 데이터세트
- API 트레이너: 분산 훈련, 혼합 정밀도, 경사 누적을 통한 최적화된 훈련 루프
- 공백: 데모 및 ML 앱을 위한 무료 호스팅
시리즈의 다음 단계
- 다음 기사에서는 살펴보겠습니다. TinyML 및 엣지 AI
- 딥러닝 모델을 임베디드 장치와 스마트폰에 적용하는 방법을 살펴보겠습니다.
- 모델 압축을 위한 양자화, 가지치기 및 지식 증류를 분석합니다.







