Post

2025-02-17-TIL

2025-02-17-TIL

Today I Learned

안드로이드의 계산기 앱은 정확한 계산을 위한 수많은 노력이 들어간 산물이다.

NASA에서의 소프트웨어 개발 규칙을 10가지 정했는데, 이 내용들을 살펴보면 대부분 가독성이 좋고, 명확하며, 예상치 못한 상황(런타임 에러 or 버그)이 없게끔 작성하는 방향이다.

AI가 웹 개발 산업 전체의 모습을 바꾸고 있다는 점에는 의심의 여지가 없지만, 단기적으로는 웹 개발자(또는 적어도 유능한 개발자)는 괜찮을 것이라고 생각합니다.

저는 AI가 사람들이 코드를 작성하고 심지어 기하급수적으로 문제를 디버깅하는 데 확실히 도움이 될 것이라고 생각합니다. 코드 도구가 개선됨에 따라 AI는 웹 개발자 일자리를 대체하지는 않지만 증강시키고, 더 효율적인 작업을 가능하게 하며, 더 일상적인 작업에 소요되는 시간을 더 많은 문제 해결 및 전략적 사고가 필요한 일에 할애할 수 있게 됩니다.

AI의 기능은 제품 생성 및 설계에서 최적의 결과를 얻으려면 인간 사용자의 안내와 이해가 필요하다는 점에서 제한적입니다.

웹 개발자가 진정한 가치를 제공하는 양질의 작업을 신중하게 제공하는 데 집중하고, 이러한 새로운 도구를 사용하여 이익을 얻는 방법을 배우면 항상 한 발 앞서 나갈 수 있습니다.

대형 언어 모델은 대규모 데이터셋과 긴 학습 기간을 거치므로, 출시 시점을 기준으로 이미 구버전 지식을 포함하는 경우가 많다. 그리고 최신 기술에 대한 AI 지원이 부족 -> 사용자와 자료 감소 -> 모델 학습 데이터 부족 -> 재차 AI 자원 부족으로 이어지는 악순환 가능성이 존재한다.

이에 대해 비판적인 의견은 다음과 같다. AI가 새로운 기술 채택을 방해한다는 것은 Stack Overflow가 새로운 기술 채택을 방해한다고 말하는 것과 같다. 초기 수용자들은 LLM에 의존하지 않는다. pioneer들은 AI의 제안보다는 주체적으로 기술적인 의사결정을 하고 발전시킬 수 있다.

Slack Alternatives


Fine-tunning

파인 튜닝(Fine-tuning)이란?

파인 튜닝(Fine-tuning)은 사전 학습된(pre-trained) 모델을 특정 작업(task)이나 도메인(domain)에 맞게 추가 학습시키는 과정입니다. 기존의 대규모 데이터셋으로 사전 훈련된 모델을 활용하면서, 상대적으로 적은 양의 데이터로 추가 학습을 진행하여 특정한 요구 사항에 맞게 성능을 향상시킬 수 있습니다.


1. 파인 튜닝의 개념

  • 사전 훈련(Pre-training): 대규모 데이터셋을 사용하여 일반적인 패턴을 학습한 모델을 생성하는 과정
  • 파인 튜닝(Fine-tuning): 특정한 목적이나 데이터셋에 맞춰 사전 훈련된 모델을 미세 조정하는 과정

2. 파인 튜닝의 주요 과정

사전 훈련된 모델 로드

  • 보통 딥러닝 프레임워크(PyTorch, TensorFlow 등)를 사용하여 공개된 사전 훈련 모델을 가져옴
  • 예: GPT, BERT, ResNet, VGG, LLaMA 등의 모델

새로운 데이터셋 준비

  • 특정 도메인(예: 의료, 금융, 법률 등)에 맞는 데이터셋을 준비
  • 데이터 전처리 및 레이블링 작업 수행

모델 구조 조정

  • 전체 모델을 그대로 사용할 수도 있지만, 일반적으로 일부 층(layers)만 학습 가능하도록 설정
  • 초기층(early layers)은 고정(freeze)하고, 마지막 층(later layers)만 학습시키는 방식이 일반적

파인 튜닝 학습 진행

  • 보통 전이 학습(Transfer Learning) 방식으로 진행
  • 일반적으로 기존 가중치를 유지하면서 추가적인 학습을 수행
  • 하이퍼파라미터(learning rate, batch size 등)를 조정하여 최적화

성능 평가 및 최적화

  • 검증 데이터(validation data)로 모델 성능 평가
  • 오버피팅 방지를 위한 정규화(regularization) 및 드롭아웃(dropout) 적용 가능

3. 파인 튜닝의 장점

적은 데이터로 학습 가능

  • 대규모 데이터를 직접 학습하지 않아도 됨
  • 소량의 도메인 데이터로도 높은 성능을 기대할 수 있음

빠른 학습 속도

  • 처음부터 학습하는 것보다 훨씬 적은 연산량으로 학습 가능

높은 성능 유지

  • 일반적인 사전 훈련 모델보다 특정 도메인에서 더 나은 성능을 보일 수 있음

전이 학습 활용

  • 기존 모델의 강력한 표현력(representation power)을 유지하면서 특정 작업에 적합하도록 조정 가능

4. 파인 튜닝의 활용 예시

  • 자연어 처리(NLP)
    • OpenAI GPT 모델을 특정 도메인(예: 법률, 의료) 텍스트로 파인 튜닝
    • BERT 모델을 감성 분석, 질의 응답(QnA) 등에 최적화
  • 컴퓨터 비전(CV)
    • ImageNet으로 학습된 ResNet, VGG 모델을 의료 영상 분석, 얼굴 인식 등에 적용
    • 특정 도메인의 이미지(예: 자율주행 자동차 데이터)로 모델을 파인 튜닝
  • 음성 인식(Speech Recognition)
    • Whisper, Wav2Vec2 같은 사전 학습된 모델을 특정 언어나 억양에 맞게 조정
  • 추천 시스템(Recommendation)
    • 대규모 사용자 행동 데이터를 학습한 모델을 특정 웹사이트나 서비스에 맞게 조정

5. 파인 튜닝과 전이 학습(Transfer Learning)의 차이

| 구분 | 전이 학습(Transfer Learning) | 파인 튜닝(Fine-tuning) | |——|—————–|—————–| | 학습 방식 | 사전 훈련된 모델을 활용하여 특정 작업에 맞게 일부 계층만 수정 | 기존 가중치를 유지하면서 추가 학습 진행 | | 학습량 | 적은 데이터로도 가능 | 추가 학습이 필요함 | | 속도 | 상대적으로 빠름 | 더 많은 학습 시간이 필요할 수도 있음 | | 적용 범위 | 특정 작업(task)에 맞게 조정 | 특정 도메인(domain)에 맞게 조정 |


6. 파인 튜닝 적용 방법 (예제 코드)

1) NLP에서 GPT 모델 파인 튜닝 (Hugging Face 활용)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from transformers import GPT2Tokenizer, GPT2LMHeadModel, Trainer, TrainingArguments
from datasets import load_dataset

# 토크나이저 및 모델 불러오기
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")

# 데이터셋 로드 및 토큰화
dataset = load_dataset("wikitext", "wikitext-2-raw-v1")
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)

# 학습 설정
training_args = TrainingArguments(output_dir="./results", num_train_epochs=3, per_device_train_batch_size=4)
trainer = Trainer(model=model, args=training_args, train_dataset=tokenized_datasets["train"])

# 파인 튜닝 실행
trainer.train()

2) 이미지 분류 모델 파인 튜닝 (PyTorch 활용)

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
31
32
33
import torch
import torchvision.models as models
import torchvision.transforms as transforms
from torch.utils.data import DataLoader, Dataset

# 사전 학습된 모델 로드 (ResNet50)
model = models.resnet50(pretrained=True)

# 마지막 레이어 변경 (파인 튜닝)
num_ftrs = model.fc.in_features
model.fc = torch.nn.Linear(num_ftrs, 10)  # 새로운 클래스 개수 (예: 10개)

# 학습 준비
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)

# 데이터셋 및 데이터로더 정의 (예제)
transform = transforms.Compose([transforms.Resize((224, 224)), transforms.ToTensor()])
train_loader = DataLoader([], batch_size=32, shuffle=True)

# 옵티마이저 및 손실 함수 정의
optimizer = torch.optim.Adam(model.parameters(), lr=0.0001)
criterion = torch.nn.CrossEntropyLoss()

# 파인 튜닝 학습 루프
for epoch in range(10):
    for images, labels in train_loader:
        images, labels = images.to(device), labels.to(device)
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

7. 결론

파인 튜닝은 사전 훈련된 모델을 활용하여 특정 작업에 맞게 미세 조정하는 기법입니다. 이를 통해 적은 데이터와 연산 자원으로도 높은 성능을 기대할 수 있으며, NLP, 컴퓨터 비전, 음성 인식 등 다양한 분야에서 활용됩니다.

🔥 핵심 요약
✅ 파인 튜닝은 기존 모델을 특정 도메인에 맞게 미세 조정하는 과정
✅ 전이 학습과 유사하지만, 더 세밀한 조정이 가능
✅ 학습 속도가 빠르고, 적은 데이터로도 높은 성능 기대
✅ NLP, 이미지 처리, 음성 인식, 추천 시스템 등 다양한 분야에서 활용

필요한 분야에 따라 적절한 방법을 선택해서 활용하면 큰 도움이 될 것입니다! 🚀


AI에게 인간 사용자가 원하는 답을 이끌어내도록 안내하는 방법을 “프롬프팅(Prompting)” 이라고 합니다.


프롬프팅(Prompting) 개념

프롬프팅(Prompting)은 AI 모델(특히 대규모 언어 모델, LLM)에게 원하는 응답을 유도하는 입력 방식을 의미합니다. 사용자는 특정한 방식으로 질문이나 명령을 입력하여, AI가 더 정확하고 유용한 답변을 생성할 수 있도록 조정할 수 있습니다.


프롬프팅의 주요 유형

  1. 기본 프롬프팅(Basic Prompting)
    • 단순한 질의 입력
    • 예: “AI란 무엇인가?”
  2. 명확한 프롬프팅(Explicit Prompting)
    • 구체적인 지침을 제공하여 원하는 결과를 얻음
    • 예: “AI란 무엇인지 간단하고 쉽게 설명해줘.”
  3. 컨텍스트 프롬프팅(Contextual Prompting)
    • 특정한 배경 정보를 제공하여 더 정교한 답변을 유도
    • 예: “초등학생이 이해할 수 있도록 AI 개념을 설명해줘.”
  4. 예제 기반 프롬프팅(Few-shot Prompting)
    • 모델이 참고할 수 있도록 몇 가지 예시를 함께 제공
    • 예:
      1
      2
      3
      4
      5
      6
      7
      8
      
      Q: 사과는 어떤 색인가요?
      A: 보통 빨간색입니다.
      
      Q: 바나나는 어떤 색인가요?
      A: 노란색입니다.
      
      Q: 포도는 어떤 색인가요?
      A: ?
      
  5. 연쇄적 사고 프롬프팅(Chain-of-Thought Prompting, CoT)
    • 논리적인 사고 과정을 단계적으로 유도하여 복잡한 문제 해결
    • 예:
      ``` 문제: 어떤 사람이 사과 3개를 가지고 있다가 2개를 더 샀습니다. 총 몇 개의 사과가 있나요? 생각 과정:
      1. 처음에 3개의 사과가 있습니다.
      2. 2개의 사과를 추가로 삽니다.
      3. 3 + 2 = 5 답변: 5개입니다. ```
  6. 지시 기반 프롬프팅(Instruction Prompting)
    • 특정한 형식이나 스타일을 지정하여 답변을 유도
    • 예: “100자 이내로 AI의 개념을 요약해줘.”
  7. 반복적 프롬프팅(Iterative Prompting)
    • 사용자가 반복적으로 프롬프트를 수정하여 AI의 응답을 개선
    • 예:
      1. “AI란 무엇인가?” (너무 일반적인 답변)
      2. “AI란 무엇인지 기술적 관점에서 설명해줘.” (더 구체적인 답변)

프롬프팅의 중요성

더 정확하고 유용한 답변을 받을 수 있음
AI 모델의 강점을 최대한 활용 가능
작업의 자동화를 최적화할 수 있음
자연어 처리(NLP) 모델을 효과적으로 조작할 수 있음

프롬프팅 기법을 잘 활용하면 AI를 더욱 효과적으로 사용할 수 있습니다! 🚀

This post is licensed under CC BY 4.0 by the author.