no image
이미지 생성 모델 간단 정리하기 | GAN, Autoencoder, Diffusion
1. GAN1.1. 일반 구조Generative Adversarial Network(GAN)은 판별자(Discriminator)와 생성자(Generator)를 동시에 학습하는 생성형 모델입니다. '판별자'는 입력 이미지와 생성 이미지가 진짜인지 판별하며, 생성 이미지 여부를 판단하도록 학습합니다. '생성자'는 잠재 변수를 입력받아 학습 데이터의 분포에 가까운 이미지를 생성하게 됩니다. 생성 여부를 판단하지 못하도록 훈련을 진행하게 됩니다. 이런 식으로 판별자와 생성자가 서로 반대의 목표를 달성하기 위해 프로세스를 진행하고 있는 것을 적대적이라고 표현합니다.  1.2. 주요 모델Conditional GANConditonal GAN은 GAN의 학습 과정에 조건을 주입해서 학습을 진행하고, 그 조건에 따라 이..
2024.12.09
no image
[boostcamp] 부스트캠프 AI Tech 16주차 돌아보기
1. 잘한 것- 시간 내에 수업 및 과제를 모두 마무리했습니다.- 매번 배운 내용을 바로 정리했습니다.- Leetcode, 백준 등 코딩 테스트 문제를 풀었습니다.2. 부족한 것- 시도할 것으로 이야기햇던 논문 요약 정리를 못했습니다.3. 배운 것- 대규모 언어 모델의 학습 방법론 개요와 오픈소스 LLM 모델, 그리고 평가지표 📖 Large Language Model(LLM)의 학습 방법론 | LLM Pretrained Models📖 LLM의 효율적인 Fine-Tuning을 진행하는 방법 | Parameter Efficient Fine-Tuning, PEFT📖 오픈소스 LLM과 학습방법 | LLaMA, Alpaca📖 LLM 평가지표와 주요 데이터셋 간단 정리 | MMLU, HellaSwag, Hu..
2024.12.06
이미지 생성 모델의 평가 지표 정리 | Inception Score, FID, CLIP Score
Inception ScoreInception Score는 이름에서 나타나는 것처럼 Inception v3 모델을 활용해 생성된 이미지를 분류하여 Fidelity와 Diversity의 KL Divergence를 계산해서 점수를 부여하는 방식입니다. 여기서 Fidelity와 Diversity는 아래와 같이 정의할 수 있습니다.Fidelity : 생성된 이미지가 특정 클래스를 명확히 표현 여부. 명확한 클래스를 갖는다면 likelihood 분포가 특정 클래스에 치우침.Diversity :  다양한 클래스가 생성되는지 여부. 다양한 클래스를 갖는다면 개별 이미지들의 likelihood 분포의 합이 균일할 것.위 두개의 KL 발산은 두 확률분포의 차이를 계산하는데 사용하는 함수로, 좋은 성능의 모델일수록 Fide..
2024.12.06
[NLP] LLM 평가지표와 주요 데이터셋 간단 정리 | MMLU, HellaSwag, HumanEval, G-Eval
LLM의 평가LLM 역시 다른 과업들과 동일하게 텍스트 생성이 잘 이뤄지는지 평가가 필요합니다. LLM은 모델의 특성상 일반적인 태스크(객체 탐지, 분류 등)와 다르기 때문에 평가의 목적, 데이터, 방법론이 달라지게 됩니다. 아래는 그 내용을 요약한 표입니다. 구분일반 평가지표LLM 평가 지표목적태스크 수행 능력범용 능력데이터태스크 데이터범용 데이터방법론태스크 평가 파이프라인 및 계산 방법론태스크별 상이LLM 데이터셋이러한 LLM의 평가 목적 달성을 위해 사용하는 데이터셋은 다를 수 있으나, 벤치마크로 사용하는 유명한 데이터셋이 있습니다. 아래는 그 데이터셋들의 목록, 링크 및 간단한 설명입니다. 데이터셋 목적 및 평가Massive Multitask Language Understanding- 범용적인 태..
2024.12.05
[NLP] 오픈소스 LLM과 학습방법 | LLaMA, Alpaca
LLaMA등장배경🤐 민감정보 문제회사를 다녀본 사람들이라면 많이 공감할 문제인데, 기업은 내부의 민감 정보가 밖으로 나가는 것을 막기 위해 여러 보안 장치를 해둡니다. 대표적인 것이 망분리인데 이런 내부망 환경에서는 Chat-GPT와 같은 외부 LLM 기능 활용이 제한됩니다. 🪪 라이센스 문제머신러닝/딥러닝 분야의 전반적인 프로세스를 살펴볼 때 학습 데이터 - 사전학습 모델 - 학습 / 추론이 진행되는 파이프라인을 거치게 됩니다. 이 과정에서 위 3개 중 하나라도 비상업용 라이센스가 있는 경우 모델의 상용화가 어렵습니다. 오픈소스 LLM일반적으로 LLM 서비스를 하는 기업들의 운영 형태를 보면 일반 사용자가 모델에 직접 접근하는 것을 제한하고 있는데, 이를 Closed LLM이라고 합니다. Close..
2024.12.05
no image
[NLP] LLM의 효율적인 Fine-Tuning을 진행하는 방법 | Parameter Efficient Fine-Tuning, PEFT
PEFT 등장 배경💉 Fine Tuning 언어 모델들은 수집된 데이터를 바탕으로 사전학습을 하고, 그 다음 용도에 따라 Fine-tuning을 진행했습니다. 여러 가지 방법들이 있지만,  사전학습 모델에서 임베딩을 추출하고 분류기를 학습하는 방법 (Feature-based), 다른 층은 동결하고 마지막 단계의 Ouput 층만을 업데이트 하는 방법, 모든 층을 업데이트를 하는 방법으로 크게 세 가지로 분류할 수 있습니다. 이 방법들 중 직관적으로도 모든 파라미터를 학습할 때 가장 높은 성능을 기록 하지만, 효율성 관점에서는 낮습니다.In-Context Learning (ICL)그래서 등장한 것이 ICL이라고 불리는 방법입니다. GPT-3 이후에는 언어모델을 활용할 수 있기 때문에 예시를 모델에 입력해주..
2024.12.04
[NLP] Large Language Model(LLM)의 학습 방법론 | LLM Pretrained Models
1. 주요 개념1.1. 언어 모델(LM)의 주요 변화언어 모델(Language Model, LM)은 시간이 지나면서 지속적으로 발전하고 있습니다. 과거에는 통계 및 어휘 빈도 기반의 방법론을 채택한 Statistical LM(예시 : TF-IDF)를 활용했지만, 이는 제한적 활용만 가능하고 그때마다 전용 사전을 구축해야 하는 등 많은 비용이 소모됐습니다. 이를 극복하기 위해 단어를 고정된 크기의 벡터로 표현하고 딥러닝 기술을 적용한 Neural LM이 유행하기도 했습니다. 이는 여전히 일부 작업(감성 분석 등)에 활용되기도 하지만, 단어의 맥락 의미를 파악하는데 제한이 있기 때문에 여전히 부족했습니다. Pretrained LM은 작업별로 Fine-tuning을 통해 목적별 모델을 구축하였습니다. 즉, 하..
2024.12.03
no image
[boostcamp] 부스트캠프 AI Tech 15주차 돌아보기
1. 잘한 것- MMSegmentation을 활용해 SegFormer 모델을 실험했습니다. - Hard voting을 구현해 여러 모델의 결과 csv파일을 앙상블할 수 있도록 했습니다.     - GitHub 리뷰어로 새롭게 구현된 기능과 실험들에 대한 브랜치를 검토하고 병합하였습니다. - 항상 까먹었던 파이썬 이미지 처리 라이브러리에 대해 전반적으로 정리를 완료했습니다.  2. 부족한 것- 여전히 MMSegmentation 라이브러리 사용에 아직 익숙하지 않아서 최신 모델을 적용하지 못했습니다.- Leetcode, 백준 등 코딩테스트 문제를 매일 풀지는 못했습니다. - 모델 학습 시간, 오류 가능성을 고려하지 않고 프로젝트 일정을 수립했었는데, 빠듯해서 충분한 훈련을 하지 못했습니다.  3. 배운 것-..
2024.11.29
no image
[boostcamp] 부스트캠프 AI Tech 14주차 돌아보기
1. 잘한 것- 할당된 과제들을 제시간에 제출 완료했습니다.  - Segmentation Models Pytorch (이하 'smp') 라이브러리를 현재 팀에서 사용하고 있는 베이스라인 코드에서 사용할 수 있도록 코드에 기여했습니다.  - UNet, UNet++, MANet에 대해 다양한 인코더로 실험을 진행했습니다.    - GitHub 리뷰어로 새롭게 구현된 기능과 실험들에 대한 브랜치를 검토하고 병합하였습니다. - 항상 까먹었던 파이썬 이미지 처리 라이브러리에 대해 전반적으로 정리를 완료했습니다.  2. 부족한 것- MMSeg 설치 문제가 있어서 주중에 MMSeg에서 제공하고 있는 모델을 실험해보지 못했습니다.- Leetcode, 백준 등 코딩테스트 문제를 매일 풀지는 못했습니다.  3. 배운 것-..
2024.11.22
반응형

1. GAN

1.1. 일반 구조

Generative Adversarial Network(GAN)은 판별자(Discriminator)와 생성자(Generator)를 동시에 학습하는 생성형 모델입니다. '판별자'는 입력 이미지와 생성 이미지가 진짜인지 판별하며, 생성 이미지 여부를 판단하도록 학습합니다. '생성자'는 잠재 변수를 입력받아 학습 데이터의 분포에 가까운 이미지를 생성하게 됩니다. 생성 여부를 판단하지 못하도록 훈련을 진행하게 됩니다. 이런 식으로 판별자와 생성자가 서로 반대의 목표를 달성하기 위해 프로세스를 진행하고 있는 것을 적대적이라고 표현합니다. 

 

GAN 구조 [1]

1.2. 주요 모델

Conditional GAN

Conditonal GAN은 GAN의 학습 과정에 조건을 주입해서 학습을 진행하고, 그 조건에 따라 이미지를 생성하게 됩니다. 

 

Papers with Code - Conditional Generative Adversarial Nets

#2 best model for Human action generation on NTU RGB+D 120 (FID (CS) metric)

paperswithcode.com

Pix2Pix

Pix2Pix는 Conditonal GAN과 같은 구조이지만, 이미지를 조건으로 이미지를 변환하는 방법입니다. 이미지를 조건으로 하기 때문에 학습을 위한 이미지 매칭이 추가적으로 필요합니다.

 

Papers with Code - Pix2Pix Explained

Pix2Pix is a conditional image-to-image translation architecture that uses a conditional GAN objective combined with a reconstruction loss. The conditional GAN objective for observed images $x$, output images $y$ and the random noise vector $z$ is: $$ \mat

paperswithcode.com

CycleGAN

CycleGAN은 Pix2Pix가 이미지 쌍이 존재해야만 했던 제약(왜냐면 이미지 쌍이 있다면 데이터셋이 많이 필요하게 됨..)을 극복하기 위해 나타난 구조입니다. 이미지 쌍이 없이 Cycle Consistency Loss를 추가적으로 활용합니다. 

 

Papers with Code - CycleGAN Explained

CycleGAN, or Cycle-Consistent GAN, is a type of generative adversarial network for unpaired image-to-image translation. For two domains $X$ and $Y$, CycleGAN learns a mapping $G : X \rightarrow Y$ and $F: Y \rightarrow X$. The novelty lies in trying to enf

paperswithcode.com

StarGAN

기존 모델들은 새로운 생성 유형(도메인)을 만들려면 매번 모델을 학습해야 했지만, 단일 생성 모델만으로 여러 도메인을 반영할 수 있는 구조를 만들기 위해 StarGAN이 고안됐습니다. StarGAN은 손실함수는 GAN의 훈련을 위한 손실함수, Cycle Consistency 손실함수, 그리고 도메인을 판단하기 위한 손실함수가 추가되어 3가지 손실함수를 사용하게 됩니다. 

 

Papers with Code - StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation

🏆 SOTA for Image-to-Image Translation on RaFD (Classification Error metric)

paperswithcode.com

Progressive GAN

고해상도 이미지를 생성하기 위해서는 여러 스텝을 통해야 하기 때문에 훈련에 시간이 많이 소요가 됩니다. Progressive GAN은 저해상도 이미지 생성 구조부터 단계적으로 증강해 작은 이미지와 큰 해상도 이미지의 결과를 가중합하는 방식으로 고해상도 이미지를 생성합니다. 이를 통해 적은 훈련 비용으로도 빠른 수렴이 가능한 모델 구조를 제안했습니다. 

 

Papers with Code - Progressive Growing of GANs for Improved Quality, Stability, and Variation

#4 best model for Image Generation on LSUN Horse 256 x 256 (Clean-FID (trainfull) metric)

paperswithcode.com

StyleGAN

StyleGAN은 Progressive GAN에서 스타일을 주입하는 구조입니다. GAN에서 잠재 공간은 가우시안 분포를 가정하고 있지만, 실제 학습 데이터의 분포는 선형적으로 분포하기 때문에 가우시안 분포를 활용하는 것은 적절하지 않습니다. 따라서 실제 데이터의 특성을 반영할 수 있도록 mapping 함수를 도입해 변환된 값을 입력합니다. 

 

Papers with Code - StyleGAN Explained

StyleGAN is a type of generative adversarial network. It uses an alternative generator architecture for generative adversarial networks, borrowing from style transfer literature; in particular, the use of adaptive instance normalization. Otherwise it follo

paperswithcode.com

2. 오토인코더

Auto Encoder (AE)

AE는 인코더와 디코더로 구성된 구조로 입력 이미지를 저차원의 잠재 공간으로 매핑하여(인코더), 잠재 변수를 입력으로 사용해 원본 이미지를 복원(디코더)하면서 학습을 진행합니다. 여기서 유의해야 할 점은 잠재 변수는 입력 이미지보다 차원이 낮아야 한다는 점입니다. 

 

Papers with Code - AutoEncoder Explained

An Autoencoder is a bottleneck architecture that turns a high-dimensional input into a latent low-dimensional code (encoder), and then performs a reconstruction of the input with this latent code (the decoder). Image: Michael Massi

paperswithcode.com

Variational AE (VAE)

VAE는 인코더와 디코더로 구성되어 있고, 잠재 공간의 '분포'를 가정해서 학습합니다. 여기서 '분포를 가정'한다는 말의 의미는 평균과 표준편차를 만들고 가우시안 분포를 따르는 잠재 변수를 샘플링하고, 샘플링된 잠재 변수를 받아서 원본 데이터 공간에 재구성을 하게 됩니다. 

 

Papers with Code - VAE Explained

A Variational Autoencoder is a type of likelihood-based generative model. It consists of an encoder, that takes in data $x$ as input and transforms this into a latent representation $z$, and a decoder, that takes a latent representation $z$ and returns a r

paperswithcode.com

Vector Quantized-VAE (VQ-VAE)

VQ-VAE는 사전 정의한 K개의 임베딩은 이산적인 잠재 공간(Codebook)을 가정해 학습에 사용하고 있습니다. 다만, 이산적인 잠재 표현을 얻기 때문에 텍스트나 음성과 같은 데이터셋이 적합합니다.

 

Papers with Code - VQ-VAE Explained

VQ-VAE is a type of variational autoencoder that uses vector quantisation to obtain a discrete latent representation. It differs from VAEs in two key ways: the encoder network outputs discrete, rather than continuous, codes; and the prior is learnt rather

paperswithcode.com

3. Diffusion Models

Denoising Diffusion Probablistic Model (DDPM)

DDPM은 입력이미지를 forward process를 통해 잠재 공간으로 변환하고, reverse process를 통해 복원하면서 이미지를 생성하는 방식입니다. forward process에서는 가우시안 노이즈를 추가하고, reverse process에서는 추가된 노이즈를 추정하면서 제거합니다. 

 

Papers with Code - Denoising Diffusion Probabilistic Models

#2 best model for Image Generation on LSUN Bedroom (FID-50k metric)

paperswithcode.com

Denoising Diffusion Implicit Model (DDIM)

DDIM은 기존 DDPM에서 처럼 모든 스텝이 확률적인 샘플링 프로세스가 아니라, 일부만 적용하는 방식으로 바꾸게 됩니다. 즉, 생성 과정에서 모든 스텝을 통해서 생성하는 것이 아니라 일부만 reverse process를 적용하게 됩니다. 

 

Papers with Code - Denoising Diffusion Implicit Models

Implemented in 25 code libraries.

paperswithcode.com

Classifier-free Gudiance (CFG)

Classifier Guidance는 역전파 상황에서 노이즈를 추정할 때 학습한 분류기의 기울기(그래디언트)를 사용해 임의의 클래스로 샘플링하는데 사용되는 방법입니다. DDIM에 Classifier Guidance를 적용하기 위해 데이터에 대한 likelihood가 높아지도록 score 함수에 클래스를 조건부로 넣어 reverse process를 진행시키게 됩니다. 이렇게 하면 이미지 생성에 제어력을 높여 조건부 이미지를 생성하는데 활용할 수 있습니다.

 

하지만, 이 경우 기존 확산 모델 외에 새로운 분류기가 필요하고 매번 분류가 필요하기 때문에 효율성에 문제가 생길 수 있습니다. 따라서 이러한 문제를 해결하기 위해 등장한 것이 분류기가 없는 CFG입니다. CFG는 모델 자체에서 조건부와 무조건부 에측을 결합하는 방식으로 정의합니다. 이로 인해 추가 모델없이 효율성을 높인 방식을 활용할 수 있게 됩니다.

 

Papers with Code - Classifier-Free Diffusion Guidance

Implemented in 10 code libraries.

paperswithcode.com

Latent Diffusion Model (LDM)

LDM은 Diffusion 모델 학습 시 이미지 대신에 인코더를 통해 추출된 저차원의 잠재 변수를 사용하여 고해상도 이미지 학습에 필요한 비용을 절감하고, 입력된 이미지 생성 조건을 cross attention 연산으로 결합합니다. LDM은 여러 변형 모델이 존재하는데 현재 가장 유명하고 널리 사용되는 것은 Stable Diffusion 모델입니다. 

 

Papers with Code - High-Resolution Image Synthesis with Latent Diffusion Models

#2 best model for Layout-to-Image Generation on LayoutBench (AP metric)

paperswithcode.com

Stable Diffusion

Stable Diffusion은 '22년 8월에 Stability AI에서 발표한 오픈소스 라이선스의 Text-to-Image 생성 모델입니다. 구조는 크게 Autoencoder, Image Information Creator, Text Encoder로 구성되며 각 구성요소별 역할은 다음과 같습니다.

 

  • Autoencoder : 이미지가 아닌 인코더를 통해 추출된 저차원의 잠재 변수 사용
  • Image Information Creator : Noise scheduler에서는 잠재 표현과 노이즈 정도를 입력받아 노이즈를 만들고, U-Net 구조에서 생성된 노이즈가 추가된 Noisy latent와 시간 임베딩을 받아 노이즈를 예측. Text Encoder의 결과물(임베딩)과 결합해서 noisy latent(Q)와 토큰 임베딩(K, V)을 cross attention 연산 수행
  • Text Encoder : CLIP 텍스트 인코더를 사용해 입력된 텍스트를 임베딩으로 변환 

Stable Diffusion의 학습은 Noisy latent, 토큰 임베딩, 시간 임베딩을 받아 노이즈를 예측하고, 실제 노이즈와 예측 노이즈의 차이를 학습합니다. 추론할 때는 가우시안 노이즈를 따르는 노이즈 상태에서 시작해서 토큰 임베딩을 입력받아 U-Net에서 노이즈를 예측하고 예측 노이즈를 제거하는 과정을 반복합니다. 그렇게 만들어진 최종 latent를 오토인코더의 디코더를 통해 이미지로 변환합니다. 

 

Stable Diffusion은 뛰어난 성능으로 Stable Diffusion2, Stable Diffusion XL (SDXL), SDXL Turbo와 같이 후속 모델이 나오고 있습니다. 또한, 비디오 분야에도 활용되는 모델이 나오는 등 다양한 연구가 이뤄지고 있습니다. 

 

4. 참고자료

[1] https://www.kdnuggets.com/2017/01/generative-adversarial-networks-hot-topic-machine-learning.html

[2] 강필성. "Image Generation 1: Image Generation Models Overview". boostcamp ai tech

[3] 강필성. "Image Generation 2: Stable Diffusion & Evaluation". boostcamp ai tech

 

 

반응형
반응형

1. 잘한 것

- 시간 내에 수업 및 과제를 모두 마무리했습니다.

- 매번 배운 내용을 바로 정리했습니다.

- Leetcode, 백준 등 코딩 테스트 문제를 풀었습니다.

2. 부족한 것

- 시도할 것으로 이야기햇던 논문 요약 정리를 못했습니다.

3. 배운 것

- 대규모 언어 모델의 학습 방법론 개요와 오픈소스 LLM 모델, 그리고 평가지표 

📖 Large Language Model(LLM)의 학습 방법론 | LLM Pretrained Models

📖 LLM의 효율적인 Fine-Tuning을 진행하는 방법 | Parameter Efficient Fine-Tuning, PEFT

📖 오픈소스 LLM과 학습방법 | LLaMA, Alpaca

📖 LLM 평가지표와 주요 데이터셋 간단 정리 | MMLU, HellaSwag, HumanEval, G-Eval

 

- 생성형 이미지 모델들의 변천사 및 평가지표
📖 이미지 생성 모델의 평가 지표 정리 | Inception Score, FID, CLIP Score

4. 시도할 것

- 이미지 생성 모델을 실제 사용할 수 있게 정리하고 적용해보기

- 프로젝트 부분을 채울만한 것들 고민하고 실행에 옮기기

반응형
반응형

Inception Score

Inception Score는 이름에서 나타나는 것처럼 Inception v3 모델을 활용해 생성된 이미지를 분류하여 Fidelity와 Diversity의 KL Divergence를 계산해서 점수를 부여하는 방식입니다. 여기서 Fidelity와 Diversity는 아래와 같이 정의할 수 있습니다.

  • Fidelity : 생성된 이미지가 특정 클래스를 명확히 표현 여부. 명확한 클래스를 갖는다면 likelihood 분포가 특정 클래스에 치우침.
  • Diversity :  다양한 클래스가 생성되는지 여부. 다양한 클래스를 갖는다면 개별 이미지들의 likelihood 분포의 합이 균일할 것.

위 두개의 KL 발산은 두 확률분포의 차이를 계산하는데 사용하는 함수로, 좋은 성능의 모델일수록 Fidelity는 치우친 확률분포를 가질 것이고 Diversity는 균일한 분포를 가질 것이기 때문에 KL 발산 값은 커지게 될 것 입니다. 즉, 좋은 모델일수록 Inception Score의 값은 커집니다. 

 

FID Score 

Frechet Inception Distance(FID)는 곡선 간의 유사도를 측정하는 지표입니다. FID Score는 Inception 이미지 분류 모델을 활용해 실제 이미지의 임베딩과 생성 이미지의 임베딩의 FID를 계산합니다. FID의 정의 처럼 곡선의 유사도가 높을수록 거리는 가까워지게 되고, 값이 작아지게 됩니다. 즉, FID Score가 낮을수록 좋은 모델일 것 입니다.

 

CLIP Score

CLIP은 대표적인 Multi-modal 모델로 캡션에서 CLIP으로 만든 임베딩과 이미지로부터 CLIP으로 만든 임베딩의 코사인 유사도를 계산합니다. CLIP 점수는 앞선 다른 지표와 다르게 이미지와 캡션을 모두 사용하고 있는 둘의 상관관계를 평가하는 지표입니다.

 

참고자료

[1] 강필성. "Image Generation 2 : Stable Diffusion & Evaluation". boostcamp ai tech. 

반응형
반응형

LLM의 평가

LLM 역시 다른 과업들과 동일하게 텍스트 생성이 잘 이뤄지는지 평가가 필요합니다. LLM은 모델의 특성상 일반적인 태스크(객체 탐지, 분류 등)와 다르기 때문에 평가의 목적, 데이터, 방법론이 달라지게 됩니다. 아래는 그 내용을 요약한 표입니다. 

구분 일반 평가지표 LLM 평가 지표
목적 태스크 수행 능력 범용 능력
데이터 태스크 데이터 범용 데이터
방법론 태스크 평가 파이프라인 및 계산 방법론 태스크별 상이

LLM 데이터셋

이러한 LLM의 평가 목적 달성을 위해 사용하는 데이터셋은 다를 수 있으나, 벤치마크로 사용하는 유명한 데이터셋이 있습니다. 아래는 그 데이터셋들의 목록, 링크 및 간단한 설명입니다. 

데이터셋  목적 및 평가
Massive Multitask Language Understanding - 범용적인 태스크 수행능력 평가
- 생물, 수학, 정치, 역사 등 57가지 태스크로 구성
- 정답 보기를 생성하면 맞춘 것으로 간주
HellaSwag - 상식에 대한 평가 (이어질 자연스러운 문장 선택)
- 정답 보기를 생성하면 맞춘 것으로 간주
HumanEval - 코드 생성 능력 평가
- 실행 결과물이 실제값과 일치하면 맞춘 것으로 간주 

 

이러한 벤치마크 데이터를 평가하기 위한 방법론은 아래와 같이 구성됩니다.

  1. 몇 개의 예제와 함께 입력
  2. 각 보기 문장을 생성할 확률 계산
  3. 확률이 가장 높은 문장을 예측값으로 활용해서 정답 여부 확인

창조적 성과 지표

정답이 있는 데이터셋은 위와 같이 구성할 수 있지만, 글쓰기와 같은 창조적 활동은 명확한 정답이 있는 것은 아닙니다. 따라서 이에 대해 평가하는 G-Eval 지표가 있습니다. 이는 GPT-4를 이용한 방법으로 다음과 같이 구성할 수 있습니다.

  1. 평가 방식에 대한 Instruction을 구성
  2. 평가 기준을 제시
  3. 평가 단계 생성 : 모델 스스로 추론 단계를 구축하는 프롬프트 방식으로 Auto CoT(Chain of Thought)를 통해 모델이 스스로 평가
  4. 1~3에서 만든 문장을 프롬프트로 만들어 요약문에 대한 평가 진행

 

 

 

 

 

 

반응형
반응형

LLaMA

등장배경

🤐 민감정보 문제

회사를 다녀본 사람들이라면 많이 공감할 문제인데, 기업은 내부의 민감 정보가 밖으로 나가는 것을 막기 위해 여러 보안 장치를 해둡니다. 대표적인 것이 망분리인데 이런 내부망 환경에서는 Chat-GPT와 같은 외부 LLM 기능 활용이 제한됩니다. 

🪪 라이센스 문제

머신러닝/딥러닝 분야의 전반적인 프로세스를 살펴볼 때 학습 데이터 - 사전학습 모델 - 학습 / 추론이 진행되는 파이프라인을 거치게 됩니다. 이 과정에서 위 3개 중 하나라도 비상업용 라이센스가 있는 경우 모델의 상용화가 어렵습니다. 

오픈소스 LLM

일반적으로 LLM 서비스를 하는 기업들의 운영 형태를 보면 일반 사용자가 모델에 직접 접근하는 것을 제한하고 있는데, 이를 Closed LLM이라고 합니다. Closed LLM은 위에서 언급한 문제들에서 완전하게 자유롭지는 않습니다. (특히 민감정보 문제로부터)

 

따라서 이런 문제를 해결하기 위해 등장한 것이 Meta의 오픈소스 LLM인 LLaMA입니다. 오픈소스 LLM이란 공개된 사전학습 데이터를 이용해 라이센스 문제나 민감정보 문제로부터 자유로운 사전학습된 LLM 사전학습 모델입니다. 이를 활용해 특정 태스크에 Fine-tuning을 더 오래 학습시키는 것이 더 낫다는 것에서 출발한 것이죠.

LLaMA의 학습방법

LLaMA는 오픈소스로 제공된 사전학습 모델인만큼 실제 활용을 위해서는 추가적인 학습이 필요합니다. 많은 사례에서 GPT의 API를 활용해 데이터를 구축하고 이를 학습에 활용하는 학습 방법론이 연구되고 있습니다. 

👨‍🏫 Self-Instruct

GPT API를 활용해 데이터를 구축하는 대표적인 방식입니다. 일반적인 절차는 아래와 같이 수행할 수 있습니다. 

  1. 데이터 수집을 위한 Prompt Pool을 확보하고, 다양한 작업에 대해 프롬프트-정답 쌍도 만든다.
  2. 기존 Pool에서 샘플링하여 LLM에게 새로운 Instrcution을 생성
  3. 생성된 Instruction을 분류 여부 판단
  4. 생성 Instruction에 답변(Instance) 생성
  5. 기존 Pool과 기준 유사도 이하인 데이터만 Pool에 추가하고 텍스트로 해결할 수 없는 작업(예를 들어, 이미지) 제거
  6. 이렇게 생성된 데이터로 지도학습(SFT) 진행

🦙 Alpaca

Alpaca는 2023년 스탠포드에서 발표한 LLM SFT 프로젝트로 Self-Instruct 방식으로 생성한 데이터를 LLaMA에 SFT를 진행한 모델입니다. 즉, Alpaca는 LLaMA를 활용해 fine-tuning한 모델입니다. 

참고자료

[1] 강필성. "Text Generation 3 : sLLM Models". boostcamp ai tech. 

 

 

반응형
반응형

PEFT 

등장 배경

💉 Fine Tuning 

언어 모델들은 수집된 데이터를 바탕으로 사전학습을 하고, 그 다음 용도에 따라 Fine-tuning을 진행했습니다. 여러 가지 방법들이 있지만,  사전학습 모델에서 임베딩을 추출하고 분류기를 학습하는 방법 (Feature-based), 다른 층은 동결하고 마지막 단계의 Ouput 층만을 업데이트 하는 방법, 모든 층을 업데이트를 하는 방법으로 크게 세 가지로 분류할 수 있습니다. 이 방법들 중 직관적으로도 모든 파라미터를 학습할 때 가장 높은 성능을 기록 하지만, 효율성 관점에서는 낮습니다.

In-Context Learning (ICL)

그래서 등장한 것이 ICL이라고 불리는 방법입니다. GPT-3 이후에는 언어모델을 활용할 수 있기 때문에 예시를 모델에 입력해주고 모델에 미세조정 없이 문제 해결할 수 있습니다. 이는 이전에 정리했던 Few-shot prompting과 같습니다.

 

2024.12.02 - [노트/NLP] - Large Language Model(LLM)의 학습 방법론 | LLM Pretrained Models

 

Large Language Model(LLM)의 학습 방법론 | LLM Pretrained Models

1. 주요 개념1.1. 언어 모델(LM)의 주요 변화언어 모델(Language Model, LM)은 시간이 지나면서 지속적으로 발전하고 있습니다. 과거에는 통계 및 어휘 빈도 기반의 방법론을 채택한 Statistical LM(예시 : TF-

seanpark11.tistory.com

기존 방식의 한계

하지만 이러한 기존 방식들은 아래와 같은 한계를 보였고, 이에 효율적인 Fine-Tuning을 고민하기 시작했습니다. 

- 모델이 지속적으로 학습하다보면 기존 정보를 잊는 현상

- 모델의 크기가 커짐에 따라 전체 파라미터 학습이 어려워짐 (많은 컴퓨팅 자원과 시간 소요)

- ICL에서 신뢰할 수 없는 결과가 나올 수 있음 

PEFT 주요 접근방식

파라미터 효율적인 Fine Tuning (Parameter Efficient Fine Tuning, PEFT)은 이러한 맥락에서 등장했습니다. LLM에서 채택하고 있는 트랜스포머 구조의 모든 파라미터를 업데이트하지 않고, 각 방법론마다 소량의 파라미터를 효과적으로 업데이트하는 방식으로 이뤄집니다.

 

대표적인 방식은 아래 4가지( Adapter Tuning, Prefix Tuning, Prompt Tuning, Low-Rank Adaptation)로 요약할 수 있습니다.

 

PEFT 방식 [2]

 

☑️ Adapter Tuning

이미 학습된 Multi-Head Attention(MHA)과 Feed-Foward Network(FFN)에 Adapter를 붙인 구조입니다. Adapter 층은 트랜스포머의 벡터를 더 작은 차원으로 압축한 후 비선형 변환을 거쳐 원래 차원으로 복원하는 병목 구조를 채택합니다. 이를 통해 모델의 파라미터를 줄일 수 있습니다. (ResNet에서도 이러한 병목구조를 활용했던 적이 있습니다.)

☑️ Prefix Tuning

Layer에 Prefix라는 훈련 가능한 벡터를 붙여주는 구조입니다. 접두사라는 이름처럼 기존 벡터에 가상의 임베딩인 prefix를 붙여주는 형태로 기존 모델과 병합해서 사용할 수 있습니다. 

☑️  Prompt Tuning

입력 층에 훈련 가능한 prompt 벡터를 붙인 구조로, 임베딩 층을 최적화할 수있습니다. 앞서 ICL처럼 자연어인 입력 프롬프트를 바꾸는 것은 아니고, 벡터를 추가하는 방식입니다. 

☑️  Low-Rank Adaptation

현재 LLM의 PEFT에 가장 널리 쓰이는 방법론인 Low-Rank Adaptation(LORA)는 학습 가능한 randk decomposition 행렬을 삽입해 Layer 별로 낮은 랭크로 전환하는 구조를 가집니다. 행렬의 차원을 rank만큼 줄이는 행렬과 원래 차원의 크기로 바꿔주는 행렬로 구성되며 이를 통해 연산량을 줄입니다. 다만, 너무 많은 연산량을 줄일 경우 적절한 학습이 이뤄지지 않아 품질에 문제가 있을 수 있기 때문에 적정한 수준을 찾는 것이 필요합니다.

참고자료 

[1] 강필성. "Text Generation 2 : Parameter Efficient Tuning"

[2] Zhao et al. "A Survey of Large Language Models" 

반응형
반응형

1. 주요 개념

1.1. 언어 모델(LM)의 주요 변화

언어 모델(Language Model, LM)은 시간이 지나면서 지속적으로 발전하고 있습니다. 과거에는 통계 및 어휘 빈도 기반의 방법론을 채택한 Statistical LM(예시 : TF-IDF)를 활용했지만, 이는 제한적 활용만 가능하고 그때마다 전용 사전을 구축해야 하는 등 많은 비용이 소모됐습니다.

 

이를 극복하기 위해 단어를 고정된 크기의 벡터로 표현하고 딥러닝 기술을 적용한 Neural LM이 유행하기도 했습니다. 이는 여전히 일부 작업(감성 분석 등)에 활용되기도 하지만, 단어의 맥락 의미를 파악하는데 제한이 있기 때문에 여전히 부족했습니다.

 

Pretrained LM은 작업별로 Fine-tuning을 통해 목적별 모델을 구축하였습니다. 즉, 하나의 모델을 이용해 하나의 작업을 해결했고 GPT-1 & 2나 BERT 등과 같은 트랜스포머 초창기 모델이 그 예시입니다. 꽤 혁명적인 방법이었지만, 목적에 따라 사전학습된 언어모델에만 활용할 수 있었고 비교적 창의성을 요구하는 시스템에는 적용이 어려웠습니다.

 

이들을 모두 극복하고 등장한 것이 Large Language Model(LLM)입니다. LLM은 범용적인 작업이 가능한 LM으l로 사전학습 데이터 및 파라미터 수가 매우 큰 모델을 종합적으로 지칭합니다. 즉, 하나의 모델을 다양한 작업이 가능하기 때문에 현재 사용자들을 꾸준히 늘려가고 있고 지속적인 발전을 이룩하고 있습니다.

1.2. LLM 작동방식 구분

LLM은 프롬프트(prompt)를 입력받아 텍스트를 생성하는 작업을 수행합니다. 여기서 '프롬프트'란 LLM의 입력되는 데이터로 크게 수행할 작업을 설명하는 Description, 작업의 예시인 Demonstration, 그리고 입력 데이터 Input 3가지로 구분할 수 있습니다. 

 

LLM은 모델이 프롬프트만으로 작업을 수행하는 Zero shot learning과 예시(Demonstration)을 주고 작업을 수행하는 Few shot learning으로 구분됩니다. 이 두가지 학습의 개념은 이전에 이미지 분류 문제에서도 살펴본 적이 있었습니다. 그 당시에는 데이터의 양에 따라 구분하긴 했는데, LLM에서는 데이터가 프롬프트이기 때문에 프롬프트의 구성방식에 따라 학습을 나눌 수 있습니다. 

 

2024.09.19 - [노트/Computer Vision] - [CV] 이미지 분류 문제에 대한 분류 | Binary vs Multi-, Coarse vs Fine-grained, N-shot learning 까지

 

[CV] 이미지 분류 문제에 대한 분류 | Binary vs Multi-, Coarse vs Fine-grained, N-shot learning 까지

1. 문제 정의이미지 분류 문제는 주어진 이미지 데이터에 대해 사전에 정의된 클래스(혹은 '레이블')로 할당하는 문제입니다. 이미지가 가지고 있는 다양한 의미(색, 형태 등)를 해석해 클래스로

seanpark11.tistory.com

 

1.3. LLM 모델의 구조

LLM은 적은 데이터만을 갖고 있는 프롬프트를 통해 동작해야 하기 때문에 사전학습을 하는 것이 매우 중요합니다. 사전학습을 하는 방식은 모델의 구조 방식에 따라 달라지게 되는데, 모델 구조 방식은 크게 두 가지로 나눌 수 있습니다.

✅ Encoder-Decoder 구조

이 구조는 입력 데이터를 이해하는 Encoder와 문장을 생성하는 Decoder로 분리합니다. 대표적인 사전학습 방식은 Span Corruption인데 손상된 입력 문장의 일부를 복원하도록 생성하는 방식입니다. 간단한 절차는 다음과 같습니다.

 

1) 입력 문장의 임의의 span을 마스킹

2) 각 마스킹 id 부여

3) span corruption 된 문장을 인코더에 입력

4) 마스킹 id와 복원 문장을 디코더에 입력

5) 디코더가 복원된 문장 생성

✅ Decoder Only 구조

이는 단일 모델을 통해 이해 및 생성하는 방식으로 Language Modeling 으로 사전학습합니다. 이 사전학습 방식은 입력 토큰 기반으로 다음 토큰 예측해서 생성하는 것입니다. 사실상 현존하는 LLM은 Decoder Only 구조이기 때문에 우선 이 방식을 우선적으로 이해하면 될 것 같습니다. 

 

1) 토큰 단위로 입력

2) 토큰 마다 다음 토큰을 예측하도록 학습

2. LLM의 사전학습

2.1.  Corpus

GPT-3 이후 모델 크기가 점차 확장되면서 대형 모델을 훈련하기 위한 사전학습 Corpus 구축이 필요합니다. 여기서 Corpus란 말뭉치로 언어 연구를 위해 특정 목적을 가지고 추출된 텍스트 데이터 집합을 말합니다. LLM 사전학습에서는 목적이 훈련을 위한 데이터를 말하는 것이겠죠. 

 

Corpus를 수집하는 과정은 크게 다음과 같습니다. 세부적으로 살펴보면 어려운 점이 많겠지만, 큰 틀에서 보면 2단계로 비교적 단순합니다. 

 

1) 온라인에서 최대한 많은 데이터(원시 데이터) 수집

2) 불필요한 데이터(중복, 혐오, 개인정보 등)에 대해 정제 작업

 

여기서 정제 작업이 필요한 이유는 LLM이 정제되지 않은 데이터셋으로 학습을 하게 될 경우에는 모델이 데이터를 기억(Memorization)하게 되기 때문에 중복된 데이터를 많이 생성하게 되기 때문에 생성형 모델로 의미가 많이 떨어지게 되기 때문에 중복 텍스트는 지워줄 필요가 있습니다. 개인정보 역시 유출될 우려가 있기 때문에 지워줘야 합니다.  

2.2. Instruction Tuning 

LLM은 사용자들의 다양한 입력들에 대해 신뢰할 수 있는 대답을 제공해야 합니다. 혐오 등의 발언이 없이 안전(Safety)하면서도 이용자에게 도움(Helpfulness)이되는 답변을 하도록 Fine-tuning하는 과정이 Instruction Tuning입니다. Instruction Tuning을 위해서 다양한 연구가 이뤄졌는데, 여기서는 강화학습을 사용하는 방식을 기준으로 설명하고자 합니다.[2]

1️⃣Supervised Fine-Tuning (SFT) 

SFT는 광범위한 사용자 입력에 대해 정해진 문장을 생성하도록 Fine Tuning하는 과정입니다. 다양한 프롬프트에 대해 답변이 있는 학습데이터로 지도학습합니다.

2️⃣ Reward Modeling

Reward Modeling은 LLM 생성문에 대한 선호도를 계산합니다. 판별하는 학습 방법은 사용자의 다양한 요청 프롬프트를 LLM이 생성한 답변 후보를 입력하여 Helpfulness & Safety 만족도를 기준으로 점수 산출합니다. 

 

3️⃣ Reinforcement Learning with Human Feedback (RLHF)

RLHF는 광범위한 사용자 입력에 대해 인간이 선호하는 답변을 출력하도록 강화학습을 진행합니다. Reward Model이 높은 점수를 부여하는 답변을 선호도 높은 것으로 해서 점수를 높이는 방향으로 SFT 모델 학습을 시킵니다. 

3. 참고자료

[1] 강필성. "Text Generation 1: LLM Pretrained Models". boostcamp ai tech. 

[2] Ouyang et al. "Training language models to follow intructions with human feedback" 

 

반응형
반응형

 

1. 잘한 것

- MMSegmentation을 활용해 SegFormer 모델을 실험했습니다. 

- Hard voting을 구현해 여러 모델의 결과 csv파일을 앙상블할 수 있도록 했습니다.     

- GitHub 리뷰어로 새롭게 구현된 기능과 실험들에 대한 브랜치를 검토하고 병합하였습니다. 

- 항상 까먹었던 파이썬 이미지 처리 라이브러리에 대해 전반적으로 정리를 완료했습니다. 

 

2. 부족한 것

- 여전히 MMSegmentation 라이브러리 사용에 아직 익숙하지 않아서 최신 모델을 적용하지 못했습니다.

- Leetcode, 백준 등 코딩테스트 문제를 매일 풀지는 못했습니다. 

- 모델 학습 시간, 오류 가능성을 고려하지 않고 프로젝트 일정을 수립했었는데, 빠듯해서 충분한 훈련을 하지 못했습니다. 

 

3. 배운 것

- MMSegmentation에 새로운 모듈을 적용하는 방법 정리 

📖 MMSeg에서 .py로 정의된 사용자 정의 지표 가져오기 | Custom Metric

📖 MMSeg에서 새로운 데이터셋 정의하기 | Custom Dataset

📖 MMSeg에서 새로운 증강 기법 만들기 | Custom Transforms

 

-  CV 특히 픽셀단위로 수행하는 Segmentation 작업들은 이미지 사이즈에 모델 성능이 매우 민감하게 반응한다.

➡️ 훈련한 이미지 사이즈와 검증 및 추론에서 사용하는 이미지 사이즈가 다르지 않도록 resize 등 조치 

 

4. 시도할 것

- 실험을 진행하면서 겪었던 문제(UNet 계열, SegFormer의 이미지 사이즈)에 대한 답을 찾기 위해 논문 요약 정리[boo

반응형
반응형

1. 잘한 것

- 할당된 과제들을 제시간에 제출 완료했습니다.  

- Segmentation Models Pytorch (이하 'smp') 라이브러리를 현재 팀에서 사용하고 있는 베이스라인 코드에서 사용할 수 있도록 코드에 기여했습니다.  

- UNet, UNet++, MANet에 대해 다양한 인코더로 실험을 진행했습니다.    

- GitHub 리뷰어로 새롭게 구현된 기능과 실험들에 대한 브랜치를 검토하고 병합하였습니다. 

- 항상 까먹었던 파이썬 이미지 처리 라이브러리에 대해 전반적으로 정리를 완료했습니다. 

 

2. 부족한 것

- MMSeg 설치 문제가 있어서 주중에 MMSeg에서 제공하고 있는 모델을 실험해보지 못했습니다.

- Leetcode, 백준 등 코딩테스트 문제를 매일 풀지는 못했습니다. 

 

3. 배운 것

- 파이썬 이미지 처리 라이브러리에 대한 정리 : https://seanpark11.tistory.com/159 

📖 PIL, OpenCV, PyTorch, NumPy, Albumentations

➡️ 그동안 항상 혼동하면서 오류가 많이 났는데, 이번에 정리한 코드를 활용해 이미지 처리에 바로 적용할 수 있도록 했습니다. 

 

- SMP 라이브러리 사용법 : 

📖 https://smp.readthedocs.io/en/latest/index.html

 

- 팀원이 기존 Main에서 Pull하지 않고 커밋할 경우 리뷰 상황에서는 이전 코드로 회귀할 가능성이 있고, 이 때 GitHub에서 충돌이 발생하지 않으므로 그냥 브랜치를 병합하지 않도록 유의 

 

4. 시도할 것

- MMSeg 라이브러리를 사용할 수 있도록 모듈화 진행

- Segmentation 작업을 수행하기 위한 다양한 Loss에 대한 실험

 

반응형