no image
[Review] SALMONN (오디오 - 언어 모델) 논문 리뷰
Introduction최근 LLM 연구는 언어가 아닌 다른 입력을 넣어 인체의 다른 감각적 양상(modality)을 불어넣는 방향으로 이뤄진다. 이를 통해 AI가 여러 형태의 데이터를 입력으로 이해하고 연산 값을 출력할 수 있게 된다. 이러한 방식은 Multi-modal (멀티모달)이라 불리며 연결 모듈이나 LLM 어댑터를 통해 훈련이 가능하다. 다만, 이러한 방식에는 특정 작업에 제한되는 문제가 발생한다. 특정 작업에는 잘 작동되지만 범용적으로 사용되기가 제한되는데, 이를 task over-fitting이라 하며 AI의 사용 가능성을 제한하는 요소가 된다. 따라서 많은 문제를 해결하는 AI 적용을 위해서는 훈련을 통해 학습한 것이 아닌 것을 해결하는 것이 필요한데, 이를 emergent ability라..
2025.01.13
[CV] 이미지 생성 관련 트렌드 기본 정리 | 2023~204년 상반기까지
기본 디퓨전 모델여기서 기본 디퓨전 모델은 별도의 조건이 주어지지 않고, 이미지를 생성하는 모델을 말한다.DDPM (Denoising Diffusion Probabilistic Model)DDPM은 점진적인 노이즈 추가와 제거 과정을 통해 이미지를 생성한다. 이는 마르코프 체인 기반의 확률적 모델링을 활용한다. 순전파에서는 원본 이미지에 점진적으로 가우시안 노이즈를 추가하고, 역전파에서는 노이즈를 단계적으로 제거하면서 이미지를 복원한다. 이러한 훈련은 U-Net 구조에서 이뤄진다.Improved DDPMDDPM에서 노이즈 스케줄링, 가우시안 전이 모델링, 목적함수를 개선하여 나온 모델이다. 이를 통해 샘플링 속도와 학습 효율성을 개선할 수 있었다.Latent Diffusion Models (LDM)LDM..
2025.01.08
no image
[CV] SAM Demo 활용해보기 | 위성사진 탐색, 동영상 객체 트래킹
SAMSegment Anything Model(SAM)은 Meta 인공지능 연구소(FAIR)에서 연구개발을 하고 있는 대표적인 이미지 분할 모델로 별도의 학습 없이도 이미지 객체를 분할해주는 Zero-shot 모델이다.  Demo는 SAM & SAM2 모델의 Demo는 여기서 확인할 수 있다. SAM : 이미지에 적용SAM2 : 동영상에 적용 실제로 가져다가 쓰기 위해서는 GitHub에서 안내해주는 방법에 따라 클론해서 사용할 수 있으며, 여기서는 위성 이미지와 스포츠 영상에 테스트하였다.  적용 1. 위성 이미지위성 이미지를 활용하면 지상의 물체 및 활동을 포착할 수 있다. 다만, 고도에 따라 물체의 크기가 달라져서 포착하지 못하는 경우도 발생하기 때문에 적절한 고도를 설정하는 것이 필요하다. 예를 들..
2025.01.01
no image
효율적인 딥러닝 학습을 위한 병렬화 기본 개념 정리 | Data, Tensor, Pipeline Parallelism
주요 개념병렬화(Parallelism)는 모델이나 데이터를 여러 개의 GPU로 분산시켜 큰 모델도 학습이 가능하도록 하는 것입니다. 이런 방법론의 필요성은 딥러닝 모델이 커짐에 따라 하나의 모델을 GPU에 넣을 수 없는 상황이 오고, 이를 학습시키기 위한 데이터들의 양이 방대해졌기 때문입니다.딥러닝에서 병렬화의 방식은 크게 두 가지가 있습니다. 하나는 데이터를 병렬화하는 것이고, 또 다른 하나는 모델의 병렬화입니다. 두 방식은 목적이 서로 다른데, 전자는 데이터를 나눔으로써 학습 속도를 높이기 위함이고 후자는 현존하는 GPU에 올릴 수 없는 초거대 모델의 학습을 위함입니다.먼저, 데이터의 병렬화는 큰 데이터를 여러 GPU에 분할하여 동시에 처리합니다. 동일한 모델로 처리해야 하기 때문에 모든 GPU로 모..
2024.12.30
no image
PEFT를 위한 AdapterFusion, QLoRA 훑어보기
PEFT 간단 정리이전에 파라미터 효율적인 파인튜닝(Parameter Efficient Fine-Tuning, PEFT)에 대해 글을 쓴 적이 있습니다.[Note/Deep Learning] - [NLP] LLM의 효율적인 Fine-Tuning을 진행하는 방법 | Parameter Efficient Fine-Tuning, PEFT위 글에서는 간단 개념만 설명했어서 이번에는 조금 더 자세한 정리 및 더 심화된 개념을 정리해보려고 합니다. AdapterAdpater는 기존 학습 모델 사이에 Adapter 모듈을 삽입하는 것을 제안하였습니다.Adpater는 bottleneck과 skip-connection으로 구성되어 다음과 같은 역할을 수행할 수 있도록 하고 있습니다. (추정하건데 ResNet의 내용들에서 적..
2024.12.27
no image
모델 경량화를 위한 양자화 관련 기본 개념 정리 | Quantization
기본개념양자화(Quantization)는 숫자의 정밀도(precision)를 낮추면서 모델을 최적화하고 경량화시킬 수 있는 기법입니다. 숫자의 정밀도가 낮춘다는 의미는 데이터의 자료형의 크기를 줄인다라고 볼 수 있습니다. 보통 딥러닝 모델의 매개변수를 구성하는 값들은 32비트 크기의 실수 자료형 숫자인데, 이를 8비트 크기의 정수 자료형 숫자로 전환하면서 경량화가 가능해집니다. 숫자의 정밀도가 낮아지면 아래와 같은 현상이 발생합니다.계산속도 향상메모리 사용량 감소오차 발생 또는 증가위와 같은 장점과 단점을 고려했을 때 적절한 낮은 정밀도 값으로 바꿀 수 있도록 하는 함수(Quantization Mapping)이 필요하게 됩니다. 그리고 양자화된 값을 복원(de-quantization) 과정을 거치게 되는..
2024.12.26
no image
딥러닝 모델 경량화를 위한 Knowledge Distillation 기본 개념 정리 | 지식 증류, KD
지식 증류의 기본 개념Knowledge Distillation(KD, 지식 증류)는 고성능의 모델(Teacher)에서 지식을 전달 받아 상대적으로 간단한 모델(Student)을 학습시키는 방법입니다. 전달하는 지식의 종류나 Teacher 모델의 유형에 따라 분류가 가능합니다.우선 Teacher 모델이 내부 구조, 파라미터를 공개 여부에 따라 White-box, Black-box, Gray-box로 구분됩니다. Black-box는 결과만 확인 가능한 경우며 White-box는 Llama 처럼 오픈소스로 모델의 내부 구조나 파라미터를 전부 알 수 있는 경우입니다. Gray-box는 그 중간으로 일부만 공개되어 있는 경우죠. 이러한 Teacher 모델의 특징에 의해 KD에 활용할 수 있는 정보의 종류가 달라지..
2024.12.25
no image
딥러닝 모델 경량화를 위한 Pruning 기본 개념 정리
Pruning 기본 개념과 복권 가설딥러닝 모델의 경량화를 위해 제안된 여러 개념 중 Pruning이라는 것이 있습니다. 사전 의미로 가지치기라는 뜻처럼 Pruning은 딥러닝 모델에서 노드(뉴런)나 연결(시냅스)을 제거해 모델의 크기와 계산 비용을 줄이는 방법입니다.Pruning을 뒷바침하는 이론으로 복권 가설(Lottery Ticker Hypothesis, LTH)이 있습니다. 이는 신경망 모델에서 일부를 잘 가지치기를 하면, 원래 모델과 같은 정도의 학습으로 동일한 효과를 얻을 수 있다는 가설입니다. 성공적인 pruning이 가능한 경우를 당첨 복권(winning ticket)이라 하며, 이에 대해 존재함을 실험적으로 증명했습니다.[1]Pruning이 이뤄지는 일반적인 절차는 다음과 같습니다.초기 ..
2024.12.24
no image
이미지 생성 모델 간단 정리하기 | GAN, Autoencoder, Diffusion
1. GAN1.1. 일반 구조Generative Adversarial Network(GAN)은 판별자(Discriminator)와 생성자(Generator)를 동시에 학습하는 생성형 모델입니다. '판별자'는 입력 이미지와 생성 이미지가 진짜인지 판별하며, 생성 이미지 여부를 판단하도록 학습합니다. '생성자'는 잠재 변수를 입력받아 학습 데이터의 분포에 가까운 이미지를 생성하게 됩니다. 생성 여부를 판단하지 못하도록 훈련을 진행하게 됩니다. 이런 식으로 판별자와 생성자가 서로 반대의 목표를 달성하기 위해 프로세스를 진행하고 있는 것을 적대적이라고 표현합니다.  1.2. 주요 모델Conditional GANConditonal GAN은 GAN의 학습 과정에 조건을 주입해서 학습을 진행하고, 그 조건에 따라 이..
2024.12.09
반응형

Introduction

최근 LLM 연구는 언어가 아닌 다른 입력을 넣어 인체의 다른 감각적 양상(modality)을 불어넣는 방향으로 이뤄진다. 이를 통해 AI가 여러 형태의 데이터를 입력으로 이해하고 연산 값을 출력할 수 있게 된다. 이러한 방식은 Multi-modal (멀티모달)이라 불리며 연결 모듈이나 LLM 어댑터를 통해 훈련이 가능하다.

 

다만, 이러한 방식에는 특정 작업에 제한되는 문제가 발생한다. 특정 작업에는 잘 작동되지만 범용적으로 사용되기가 제한되는데, 이를 task over-fitting이라 하며 AI의 사용 가능성을 제한하는 요소가 된다. 따라서 많은 문제를 해결하는 AI 적용을 위해서는 훈련을 통해 학습한 것이 아닌 것을 해결하는 것이 필요한데, 이를 emergent ability라고 한다.

 

SALMONN(Speech Audio Language Music Open Neural Network)은 사전학습된 LLM과 오디오 인코더를 통합한 멀티모달 모델이다. LLM이 오디오 입력을 이해하고 처리하도록 도와주면서 새로운 능력인 emergent ability를 나타낼 수 있도록 훈련 방법을 고안했다. 논문에 따르면, 일반적인 오디오 - 텍스트 문제를 해결할 수 있는 최초로 시도된 모델이라고 한다. [각주:1]

SALMONN [1]



Structure

SALMONN은 크게 다음과 같은 요소들로 구성된다.

 

  • 오디오 입력 데이터를 처리하는 인코더
  • 인코더 출력값을 LLM에 입력할 수 있도록 토큰 변환
  • LLM을 통한 출력

 

각 구성 요소별로 아래에서 살펴보자.

 

Dual Auditory Encoders

먼저 음성 데이터를 처리가능하게끔 인코딩해야 하는데, SALMONN에서는 두 개의 인코더(Whisper, BEATs)로 구성된다. 두 개를 도입한 이유는 일반적인 오디오 데이터를 처리하기 위해 스피치와 스피치가 아닌 오디오를 처리할 수 있는 두 종류의 인코더를 활용한다. 인코더는 음성 데이터를 인코딩하는 역할로 직접적인 학습을 수행하지 않는다.

 

Whisper는 스피치 인식 및 번역을 위해 학습된 모델이고, BEATs는 스피치가 아닌 오디오 정보 추출을 가능하도록 학습된 모델이다. 스피치와 다르게 Mel spectogram 을 입력으로 받아 처리를 하게 된다. 두 인코더의 출력은 50 Hz로 동일하기 때문에 총 T개의 프레임으로 합쳐(concatenate)준다.

 

Window-level Q-Former

합쳐진 인코더 출력을 LLM에 입력하기 위한 토큰으로 변환하기 위해 Q-Former를 활용한다. Q-Former는 이미지 인코딩에서 텍스트와 관련된 정보를 추출하고 LLM에 의해 해석 가능하도록 훈련된다. [각주:2] 

 

T개의 인코더 출력 이미지를 N개의 고정된 숫자 쿼리로 변환한다. 여기서 음성은 가변적인 크기를 갖기 때문에 L 크기의 윈도우로 분할하게 되고, 마지막 윈도우는 제로 패딩 처리를 한다. 이를 식으로 나타내면 아래와 같다.

 

LLM & LoRA

SALMONN에서는 LLaMA에서 파생된 언어모델 중 하나인 Vicuna를 활용한다. 그리고 파라미터 효율적인 학습을 위해 LoRA 기법을 활용한다.



Training & Evaluation

Training

먼저, 음성 인식 및 오디오 캡션 생성 데이터로 Q-Former와 LoRA를 사전학습한다. 그리고 본격적인 훈련을 위해 Audio-Text Instruction 쌍으로 구성된 학습을 수행한다. (이를 Instruction Tuning으로 지칭한다) 마지막으로 더 길고 다양한 응답을 생성하기 위해 Zero-shot Instruction(Activation Tuning) 훈련을 진행한다. 이 논문에서 제안한 방법은 스토리텔링이나 질의응답 데이터로 추가 학습을 진행하거나, LoRA의 Scaling factor를 감소시키는 방법이 있다.

 

Evaluation

해당 논문에서는 일반적인 오디오 문제 해결을 평가하기 위해 총 3가지 레벨로 구분한 평가를 제안한다. 우선 Instruction Tuning에서 학습한 문제들을 평가한다. 두번째는 훈련하지 않은 일반적인 NLP 문제들(예를 들어, 키워드 추출, 질의응답, 번역 등)을 평가한다. 마지막으로 좀 더 일반적인 해결 능력을 평가하기 위해 오디오 기반 스토리텔링, 스피치-오디오 추론 등 어려운 작업으로 구성한다.



결론

SALMONN은 일반적인 오디오 문제(Generic hearing)를 처리할 수 있는 모델로 구조를 제안했을 뿐 아니라, 이를 훈련하고 평가하는 방법까지 제안하였다. 특히, 여기서 제안한 Activiation Tuning은 emergent abilities를 갖기 위해서 필요했고, 단순히 LoRA scaling factor를 줄이는 방법만으로도 성능 향상이 나타나는 것을 확인했다.

 

👆 PPT로 살펴보기 

 

참고자료

반응형
반응형

기본 디퓨전 모델

여기서 기본 디퓨전 모델은 별도의 조건이 주어지지 않고, 이미지를 생성하는 모델을 말한다.

DDPM (Denoising Diffusion Probabilistic Model)

DDPM은 점진적인 노이즈 추가와 제거 과정을 통해 이미지를 생성한다. 이는 마르코프 체인 기반의 확률적 모델링을 활용한다. 순전파에서는 원본 이미지에 점진적으로 가우시안 노이즈를 추가하고, 역전파에서는 노이즈를 단계적으로 제거하면서 이미지를 복원한다. 이러한 훈련은 U-Net 구조에서 이뤄진다.

Improved DDPM

DDPM에서 노이즈 스케줄링, 가우시안 전이 모델링, 목적함수를 개선하여 나온 모델이다. 이를 통해 샘플링 속도와 학습 효율성을 개선할 수 있었다.

Latent Diffusion Models (LDM)

LDM은 오토인코더를 통해 차원을 축소하고, 저차원의 잠재공간에서 확산 활동이 수행된다. 이를 통해 연산능력에 대한 요구사항이 줄어들고, 더 빠른 학습 및 추론이 가능해졌다. 이로 인해 현재 많이 사용되는 기술인 Stable Diffusion의 기반이 되는 기술이다.


Fast Sampling

여전히 디퓨전 모델은 속도에 관한 문제가 있었고, 이를 극복하기 위해 제안된 것이 샘플링의 속도를 빠르게 하기 위한 노력이 있다.

DDIM (Denoising Diffusion Implicit Models)

DDIM은 이전 이벤트에 의해서 확률이 의존하는 마르코프 프로세스가 아닌 방법으로 샘플링을 진행한다. 이를 통해 샘플링의 속도를 빠르게 하고, 적은 과정만으로도 이미지를 생성할 수 있게 된다.

Progressive Distillation

증류(Distillation)이라는 단어가 있는 것처럼, Teacher - Student 모델을 활용하는 지식 증류에서 방법을 가져와 샘플링 단계를 줄일 수 있다. 먼저 모든 과정으로 학습을 진행하고, 그 다음에는 지식 증류를 수행한다. 이를 반복하면서 전체 스텝을 감소시키고 추론 속도를 향상 시킨다.

Consistency Models

추계 미분 방정식(Stochastic Differential Equation, SDE)을 상미분방정식(Ordinary Differential Equation, ODE)으로 바꾸는 방식이다. SDE를 푸는 것보다는 ODE를 푸는 수치해석적인 방법으로 접근하여 속도를 높이고자 시도하였다.


Text-to-Image Synthesis

쓸만한 이미지를 만들어내는 일은 그동안 예술적인 감각이나 훈련을 받은 사람의 영역이었지만, 이미지 생성 모델이 들어오면서 텍스트만으로 이미지를 생성할 수 있게 되었다.

DALL-E 2

DALL-E 2는 텍스트를 이미지 임베딩으로 바꾸는 Prior와 이미지 임베딩을 실제 이미지로 생성하는 Decoder 두가지 생성 과정을 거친다.

Stable Diffusion

많이 언급되는 모델인 Stable Diffsuion 모델은 CLIP의 잠재 공간에서 확산을 진행하고, VAE를 통해 이미지를 압축하는 구조를 채택해 계층적으로 생성한다.

Imagen

CLIP 대신에 T5 텍스트 인코더를 사용하는 방식으로 생성 크기가 점진적으로 커지는 캐스케이드 방식(64 x 64 ➡️ 256 x 256 ➡️ 1024 x 1024)으로 디퓨전을 실행한다.


Image-to-Image Translation

Image-to-Image Translation은 이미지를 입력으로 다른 이미지를 생성하는 기술이다. 특정 스타일로 변형하는 Stylization, 해상도를 높이는 Super-Resolution 등의 기술이 여기에 속한다.

SDEdit

SDEdit은 대략적인 이미지 (예를 들어, 형태만 갖춘 크로키 같은)에서 정밀한 이미지를 생성할 수 있다. 입력 이미지에서 노이즈를 부분적으로 생성하고 추계 미분방정식을 통한 노이즈를 제거하는 과정을 거치면서 원본의 이미지의 구조는 유지하되, 세부적인 내용만 수정하는 것이 가능하다.

ControlNet

기존 텍스트-이미지 모델에 프롬프팅을 통한 추가적인 제어 기능을 부여해 조금 더 유연하게 이미지를 생성할 수 있도록 한 기술이다. 다른 이미지 해석 문제처럼 엣지, 포즈, Depth map, 이미지 분할 등을 통해 이미지의 구조를 기반으로 텍스트 임베딩을 더해 이미지를 생성한다. 여기서 특징적인 부분은 Zero Convolution을 통해 모델을 확장을 시도했다는 점이다.


Image Customization

Textual inversion

새로운 의미나 개념을 나타내는 토큰(S*)를 학습해 텍스트 임베딩 공간에서 이미지를 생성하는 기술이다. 비교적 적은 수의 이미지로도 학습이 가능하다는 이점이 있다.

DreamBooth

DreamBooth는 특별한 식별자와 클래스의 단어 쌍을 활용하여 특정 주제에 대한 재현과 생성을 가능하게 했다. 클래스 보존을 위해 prior-preservation loss를 도입하였다.


Erasing Concept

생성 이미지는 간혹 저작권이나 적절하지 않은 표현이 발생할 수 있다. 이런 경우에 제거해주는 과정에 대한 연구도 이뤄지고 있다.하나는 학습된 디퓨전 모델에서 특정 개념을 선택적으로 제거하는 기술이다. 제거하고자 하는 개념의 네거티브 샘플을 수집하고, 개념별 마스크를 생성하여 불필요한 개념을 제거하는 것이다. 또 다른 하나는 Regularization을 도입해 전체 모델을 통합적으로 편집하도록 하는 방법이다.


Video Generation

Video Diffusion Model (VDM)

VDM은 이미지 디퓨전 모델에서 비디오로 확장된 버전이다. 주요 변화는 3D U-Net 구조를 사용했고, 시공간에 대한 어텐션 메커니즘을 채택했다.

Video Probabilistic Diffusion Model (VPDM)

VPDM은 압축된 잠재 공간에서 비디오를 생성해 메모리 효율적으로 이뤄진다는 특징이 있다. 이미지보다 복잡해진 상황에서 NeRF와 같이 압축적으로 정보를 표현하는 방식을 도입해 디퓨전이 가능하도록 했다.

Align your Latents: High-Resolution Video Synthesis

VPDM에서 더 나아가 정렬된 잠재 표현을 사용해 비디오를 생성하는 방식이다. 이는 비디오는 이미지(프레임)이 연속적으로 이뤄진 집합체고, 인접한(시간이 거의 비슷한) 장면끼리는 유사하다는 사실을 활용해 높은 시간적 일관성을 달성했다.


3D

DreamFusion

DreamFusion은 텍스트 프롬프트로부터 3D를 생성하는 모델이다. Score Distillation Sampling (SDS)을 사용해 학습하고, NeRF 기반으로 3D를 표현한다.

Zero-1-to-3

하나의 단면인 이미지를 보고 3D 모델을 생성하는 방식이다. 하나의 이미지만 있으면 되기 때문에 제로샷 방식이라고 할 수 있다.

Consistent 1-to-3

위의 Zero 1-to-3에서 더 나아가 프레임 단위로 학습되는 것을 연속성이 있게 만들 수 있도록 수정된 모델이다. Epipolar guided attention과 multi-view attention을 조합하여 사용한다.

참고자료

  1. 유재준. Recent Applications in Diffusion Models. 부스트캠프.
반응형
반응형

SAM

Segment Anything Model(SAM)은 Meta 인공지능 연구소(FAIR)에서 연구개발을 하고 있는 대표적인 이미지 분할 모델로 별도의 학습 없이도 이미지 객체를 분할해주는 Zero-shot 모델이다.  Demo는 SAM & SAM2 모델의 Demo는 여기서 확인할 수 있다.

 

  • SAM : 이미지에 적용
  • SAM2 : 동영상에 적용

 

실제로 가져다가 쓰기 위해서는 GitHub에서 안내해주는 방법에 따라 클론해서 사용할 수 있으며, 여기서는 위성 이미지와 스포츠 영상에 테스트하였다.  

적용 1. 위성 이미지

위성 이미지를 활용하면 지상의 물체 및 활동을 포착할 수 있다. 다만, 고도에 따라 물체의 크기가 달라져서 포착하지 못하는 경우도 발생하기 때문에 적절한 고도를 설정하는 것이 필요하다. 예를 들어, 154kV 보다 4배까지 크게 설계될 수 있는 365kV 송전탑은 100m 고도에서도 충분히 탐지하지만, 154kV 송전탑은 대략 80m는 되어야만 적절히 이미지를 분할한다.

지상 80m에서 바라본 지표면 (154kV 송전탑 포함)

 

지상 100m에서 바라본 365kV 송전탑

 

여러 이미지들을 슬라이딩 윈도우 방식으로 탐색하고 찾은 객체들을 GeoJSON이나 GeoPandas 형태로 저장해 특정 지도 GIS 파일을 만드는 프로젝트를 시도해볼 수 있을 것 같다. 

 

적용 2. 스포츠 

축구의 세트피스 상황(코너킥)에서 특정 선수들의 움직임을 추적할 수도 있다. 이러한 기술은 특정 상황에서 움직임을 분석하는데 요긴하게 사용 가능할 것으로 보인다.

 

 

 

반응형
반응형

주요 개념

병렬화(Parallelism)는 모델이나 데이터를 여러 개의 GPU로 분산시켜 큰 모델도 학습이 가능하도록 하는 것입니다. 이런 방법론의 필요성은 딥러닝 모델이 커짐에 따라 하나의 모델을 GPU에 넣을 수 없는 상황이 오고, 이를 학습시키기 위한 데이터들의 양이 방대해졌기 때문입니다.



딥러닝에서 병렬화의 방식은 크게 두 가지가 있습니다. 하나는 데이터를 병렬화하는 것이고, 또 다른 하나는 모델의 병렬화입니다. 두 방식은 목적이 서로 다른데, 전자는 데이터를 나눔으로써 학습 속도를 높이기 위함이고 후자는 현존하는 GPU에 올릴 수 없는 초거대 모델의 학습을 위함입니다.



먼저, 데이터의 병렬화는 큰 데이터를 여러 GPU에 분할하여 동시에 처리합니다. 동일한 모델로 처리해야 하기 때문에 모든 GPU로 모델을 복제해야 하고, GPU에서 학습 과정을 통해 나온 결과를 복제된 모델에 동일하게 업데이트 해주는 과정이 필요합니다. (만약 그렇지 않다면... 나눈 데이터로 각자 학습한 서로 다른 모델이 나오는 불상사가 나오겠지요) 그렇기 때문에 메모리 사용량이 증가하고, 동일하게 업데이트 해주는 방법을 고민할 필요가 있습니다.



다음으로 모델의 병렬화는 큰 모델을 여러 GPU로 분할하여 대형 모델 처리합니다. 여기서 문제는 '모델을 어떻게 나눌 것인가'인데, 생각해볼 수 있는 것은 가장 직관적인 모델을 구조(층) 단위로 분할하여 GPU에 할당하는 Pipeline Parallelism과 연산 단위로 나누는 Tensor Parallelism이 있습니다. 모델 병렬화는 하나의 모델로 동작을 해야하는 만큼 다른 GPU로부터 결과값을 이어받아야 하기 때문에 GPU 통신이 필요하고 이 과정에서 오버헤드로 인한 계산 부하 가능성을 고려해야 합니다.

데이터 병렬화

기본 방법

데이터 병렬화를 위해서는 크게 '초기화' - 'Forward' - 'Backward'로 딥러닝의 일반적인 학습 방법에 맞춰 과정이 진행되어야 합니다. 여기서 전체 모델을 뿌리고 결과를 취합하는 컨트롤 타워인 Master GPU가 존재합니다. 우선, 초기화 단계에서는 다음과 같은 일들이 수행되어야 합니다.

 

  • 데이터셋을 미니배치 단위로 나눔 (GPU 개수에 맞춰서)
  • Master GPU가 각 GPU에 모델 전달 (동일한 가중치)

그 다음 순전파 과정 입니다. Forward 과정에서는 각 GPU 할당 받은 데이터에 대한 각 연산을 병렬적으로 수행합니다.

 

  • 각 GPU는 전달받은 데이터의 logit 계산
  • Master GPU가 모든 logit 취합
  • Master GPU가 전체 logit에 대한 loss 계산

마지막으로 역전파 입니다. Backward에서는 각 GPU에서 계산된 gradient를 하나의 최종 gradient로 합치고, 마스터 노드 병합 및 모델 파라미터 업데이트 수행합니다.

 

  • Master GPU는 계산한 loss를 각 GPU 전송
  • 각 GPU에서 그래디언트 계산
  • Master GPU가 모든 그래디언트 취합
  • Master GPU에서 모든 가중치 업데이트 ➡️ 초기화 과정

개선 방법 : DDP

하지만, 위의 방법은 Master GPU가 할 일이 많아서 병목이 필연적으로 발생합니다. 따라서 이를 해결하기 위해 등장한 것이 분산된 데이터 병렬화 Distributed Data Parallelism (DDP) 입니다. DDP도 기본적인 데이터 병렬화와 동일하게 초기화 - Forward - Backward 과정을 거칩니다. 초기화의 경우 위와 동일하게 모든 모델을 GPU에 복제하고, 데이터셋을 미니배치 단위로 나누어 할당합니다.



다음으로 Forward입니다. 기존 과정과 다른 점은 loss를 계산하는 것이 하나의 Master GPU가 아니라 각 GPU마다 계산된다는 점입니다.

 

  • 데이터가 모든 GPU로 분산
  • 모든 GPU에는 동일한 모델 복제
  • GPU마다 데이터와 복제된 모델을 통해 독립적으로 logit 계산
  • GPU마다 계산된 logit으로 loss 계산

마지막으로 Backward 입니다. 여러 GPU에 흩어져있는 데이터를 주고받기 위한 방법으로 AllReduce 연산을 활용합니다.

 

  • GPU마다 그래디언트 계산
  • GPU마다 그래디언트를 AllReduce 연산으로 평균 그래디언트를 구함 (모든 GPU는 같은 평균 그래디언트 동기화)
  • GPU마다 평균 그래디언트로 업데이트 진행

텐서 병렬화

텐서 병렬화(Tensor Parellelism)은 행렬 또는 텐서 연산이 행/열을 따라 나누더라도 동일하게 연산이 유지된다는 점에서 고안된 방법입니다. 텐서 연산을 여러 차원의 슬라이스로 나눠 GPU에 할당해서 처리합니다.

 

Tensor Parallelsim [2]

 

텐서를 쪼개는 방향에 따라 세로(Column-wise)와 가로(Row-wise)로 구분되며, 각각 처리하는 방식은 조금 다릅니다. 먼저 Column-wise는 Input 행렬이 주어지면 각 GPU는 행렬의 열 부분을 나눠서 GPU의 output 값들의 열 부분만 계산합니다. 순전파 과정에서 GPU의 output을 이어붙여 하나의 output 행렬 완성하고, 역전파 과정에서 각 GPU의 열단위 그래디언트를 모든 GPU에 동일하게 공유하는 방식으로 연산이 구성됩니다.



반면, Row-wise는 Input 행렬이 주어지면 각 GPU는 행렬의 행 부분을 나눠서 계산합니다. 순전파 과정에서 GPU의 output을 합산해여 하나의 output 행렬 완성하고, 역전파 과정에서 각 GPU의 행단위 그래디언트를 이어붙여 전체 그래디언트를 형성합니다. 같은 듯 조금 다른데, 이는 행렬의 연산을 생각해보면 떠올릴 수 있습니다.

파이프라인 병렬화

파이프라인 병렬화는 모델을 여러 층을 스테이지 단위로 나눠 GPU에 분배하고 데이터들을 나눠 순차적으로 넣어주는 방법입니다. 여기서 스테이지 마다 연산량의 차이가 있는 경우 대기시간(pipeline bubble)이 발생하게 되는데, 이를 최소화할 수 있도록 메커니즘이 구성됩니다. 일반적인 파이프라인 수행 방법은 아래와 같습니다.

 

1) 배치를 더 작은 단위인 마이크로 배치로 분할합니다.
2) Forward는 첫 스테이지 연산이 완료되면 그 다음으로 전달, 두번째 미니 배치는 다시 첫번째로 주입하면서 순차적으로 진행합니다.
3) Backward는 스테이지에 들어간 역순으로 그래디언트가 모델 업데이트합니다.

 

여기서 마이크로 배치로 쪼개는 규모를 줄일수록 대기시간 감소할 수 있습니다만, 너무 많이 줄일 경우 데이터를 전달하는 시간이 증가할 수 있으므로 최적의 나누는 분할 수를 찾을 필요가 있습니다.



추가적으로 Forward와 Backward를 실행하는 시기에 따라 방법론이 분화될 수 있습니다. Synchronous pipeline은 Forward가 끝나기 전에는 Backward 연산이 시작되지 않도록 하고 최종 역전파가 마무리된 후 모델을 한번에 업데이트 합니다. 반면, Asynchronous pipeline : Forward와 Backward를 번갈아가면서 실행하는 방법으로 약간의 bubble이 생길 수 있지만, 전체적인 forward와 backward의 효율을 높일 수 있습니다.

참고자료

[1] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.
[2] Huggingface

반응형
반응형

PEFT 간단 정리

생성 이미지

이전에 파라미터 효율적인 파인튜닝(Parameter Efficient Fine-Tuning, PEFT)에 대해 글을 쓴 적이 있습니다.

[Note/Deep Learning] - [NLP] LLM의 효율적인 Fine-Tuning을 진행하는 방법 | Parameter Efficient Fine-Tuning, PEFT



위 글에서는 간단 개념만 설명했어서 이번에는 조금 더 자세한 정리 및 더 심화된 개념을 정리해보려고 합니다.

Adapter

Adpater는 기존 학습 모델 사이에 Adapter 모듈을 삽입하는 것을 제안하였습니다.Adpater는 bottleneck과 skip-connection으로 구성되어 다음과 같은 역할을 수행할 수 있도록 하고 있습니다. (추정하건데 ResNet의 내용들에서 적용을 시도해본 것이 아닐까 생각이 들기도 합니다)

  • Bottleneck : 하나의 행렬(d x d)을 두개의 작은행렬의 곱으로 바꾸는 Reparametrization Trick(d x m, m x d의 행렬 곱으로 바꾸는 것)을 통해 차원의 축소와 복구가 이뤄지는 효과. feed-forward down project에서 차원 축소. 비선형성 적용 후 feedforward up-project에서 다시 차원 확장(복구)
  • Skip-connection : bottleneck 이전 입력값의 차원으로 복구 후 더해주면서 적용

여기서 Adapter 당 추가되는 매개변수의 총 수는 2md + m + d이며, m(랭크)에 대한 조절을 통해 매개변수를 조절할 수 있습니다. 이에 대한 전반적인 개요는 아래와 같이 요약될 수 있습니다.[1]

Adapter 구조 [1]

LoRA

LoRA(Low Rank Adaptation)은 트랜스포머 구조의 Adapater와 유사하게 랭크 분해 행렬을 통해 차원을 나누지만, 이를 병렬적으로 위치시켜서 추론 과정에서 효율을 달성한 방법입니다. Adapter에서 처럼 Reparametrization Trick을 사용하지만, 위의 구조와 아래의 LoRA 구조가 다른 것은 순차적으로 진행되는 것들이 없다는 것입니다. 그리고 그에 따라 비선형 함수나 bias 파라미터도 사용하지 않고 있는데, 이로 인해 속도 측면에서 효율적이죠.

LoRA 구조 [2]

심화 개념 1. AdapterFusion

AdapterFusion은 이름처럼 여러 Adapter들을 결합하여 다양한 task를 해결하는 모델을 구축하는 것입니다. Fine-Tuning의 역할은 일반적으로 학습된 사전학습 모델을 우리가 해결하고 싶은 세부 task에 맞춰서 좀 더 잘 해결할 수 있도록 하는 것이 목적입니다. 그러는 과정에서 좀 더 효율적인 Fine-Tuning의 방법론으로 Adapter로 다양한 문제에 대해 Fine-Tuning을 수행한 Adapter를 만들 수 있게 됐죠. 이렇게 만들어진 Adapter는 특정 작업에는 성능이 좋을지 모르겟지만 범용적으로 사용하기 위해선 제한점이 있는데 이를 해결하기 위해 등장한 것이 AdapterFusion 입니다.



Fusion은 크게 두가지 알고리즘의 조합으로 구축됩니다. 먼저 Knowledge Extraction입니다. 이는 여러 개의 문제를 동일한 개수의 Adapter 파라미터로 학습하는 과정입니다. 이는 앞서 Adapter를 활용하는 것과 동일합니다.



다음으로 Knowledge Composition입니다. 이는 입력에 따라 Adapter를 어떻게 합칠지 결정하는 모듈인데, 이를 위해 이전에 개발된 방법 Attention에서 아이디어를 얻어 제안하고 있습니다. 먼저 병렬적으로 수행한 Adapter 연산들의 출력값을 취합합니다. 그리고 최적의 출력 생성을 위해 Adapter Attention을 수행합니다. Adapter Attention은 아래와 같이 동작합니다.

1) 이미 학습된 Adpater와 모델 파라미터는 고정
2) Self-Attention 수행 : 어떤 Adapter에 해당하는지(Q), Adapter별 출력(V), Adapter별 키(K)로 설정해 QKV의 Attention 메커니즘 동작


전반적인 동작 방식은 아래 그림처럼 표현될 수 있습니다.

AdapterFusion 구조 [3]

심화 개념 2. QLoRA

QLoRA는 이름에서 유추할 수 있듯이 LoRA에 Q(양자화)가 추가된 것입니다. PEFT의 가장 널리 사용되고 효과적인 방법인 LoRA에 경량화를 위한 양자화까지 추가했기 때문에 모델의 경제성을 높이는데 도움이 될만한 방법입니다. 이를 위해 크게 아래 2가지 방법이 사용됩니다.



먼저, 양자화 기법을 사용하는 것입니다. LoRA의 경우 BF16(Brain Floating Point 16)을 사용한다고 합니다. 이는 16비트를 부호(1 bit), 지수(8 bit), 가수(7 bit)에 할당하는 방식입니다. 이런 BF16을 NF4(4-bit Normal Float), 즉 부호(1 bit), 지수(1 bit), 가수(2 bit)에 할당하도록 바꾸는 것입니다.



여기에 더해 Double Quantization이라는 기법도 사용합니다. 양자화에서는 복원을 위해 양자화 상수(s, z)가 필요합니다. 관련 링크 보통은 양자화 상수 값은 복원을 위해 높은 정밀도로 저장을 하는데, Double Quantization은 이러한 상수 저장에도 추한번 더 양자화를 진행하는 것입니다. 다만, 위에서 사용하는 양자화 기법만큼 획기적으로 용량을 감축하는 것은 아닙니다.

참고자료

[1] Parameter-Efficient Transfer Learning for NLP
[2] LoRA: Low-Rank Adaptation of Large Language Models
[3] AdapterFusion: Non-Destructive Task Composition for Transfer Learning
[4] QLoRA: Efficient Finetuning of Quantized LLMs
[5] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.

반응형
반응형

기본개념

양자화(Quantization)는 숫자의 정밀도(precision)를 낮추면서 모델을 최적화하고 경량화시킬 수 있는 기법입니다. 숫자의 정밀도가 낮춘다는 의미는 데이터의 자료형의 크기를 줄인다라고 볼 수 있습니다. 보통 딥러닝 모델의 매개변수를 구성하는 값들은 32비트 크기의 실수 자료형 숫자인데, 이를 8비트 크기의 정수 자료형 숫자로 전환하면서 경량화가 가능해집니다. 숫자의 정밀도가 낮아지면 아래와 같은 현상이 발생합니다.

  • 계산속도 향상
  • 메모리 사용량 감소
  • 오차 발생 또는 증가

위와 같은 장점과 단점을 고려했을 때 적절한 낮은 정밀도 값으로 바꿀 수 있도록 하는 함수(Quantization Mapping)이 필요하게 됩니다. 그리고 양자화된 값을 복원(de-quantization) 과정을 거치게 되는데, 이를 위해 필요한 매개변수는 다음과 같습니다.

  • 양자화 방식
  • Quantized value (q) : 양자화 결과 값
  • Scale factor (s) : 양자화 방식에 따라 달라지는 기울기 값
  • Zero point (z) : 0의 양자화 후 위치

이를 식으로 간단히 표현하자면 아래와 같습니다.

q = round( x / s ) * s + z  # 양자화
x_hat = q * s - z           # 복원

생성 이미지

Absmax Quantization

Absmax는 양자화했을 때 변환 값들의 범위가 좌우 대칭이 되도록 변환하는 방법입니다. 값이 -127 ~ 127 사이에 위치할 수 있도록 조정하며, 0을 항상 0으로 보내는 것이 효과적인 경우에 채택합니다. (예를 들어, 하이퍼볼릭 탄젠트 함수를 사용하는 경우) 적용 방식은 아래 처럼 사용할 수 있습니다.

s = max(abs(x)) / 127
z = 0

다만, 이 방법은 극단적인 값에 예민할 수 있어 이를 완화하기 위해 Clipping 라는 기술을 활용 가능합니다. Clipping 기술은 일정 범주를 넘어갈 경우 동일한 값으로 취급합니다. 예를 들어, -5 ~ 5 를 넘어가는 경우 5의 값을 활용하는 방식이죠. 다만, 이렇게 적절한 범주를 찾는 과정이 필요한데, 이를 calibration 라고 합니다.

Zero-point Quantization

Zero-point는 0을 고려하지 않고 전체 범위를 균일하게 변환하는 방법입니다. 데이터 분포가 비대칭적이거나 평균이 0 이 아닌 경우(예를 들어, ReLU를 사용하는 경우) 사용할 수 있습니다. 위와 다르게 -128 ~ 127 사이에 위치하도록 조정하는 방식이며, 식은 아래와 같이 사용할 수 있습니다.

s = (max(X) - min(X)) / 255
z = -128 - round(min (X) / s)

참고자료

[1] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.

반응형
반응형

지식 증류의 기본 개념

수업 관련 생성 이미지 (by Diffusion)

Knowledge Distillation(KD, 지식 증류)는 고성능의 모델(Teacher)에서 지식을 전달 받아 상대적으로 간단한 모델(Student)을 학습시키는 방법입니다. 전달하는 지식의 종류나 Teacher 모델의 유형에 따라 분류가 가능합니다.

우선 Teacher 모델이 내부 구조, 파라미터를 공개 여부에 따라 White-box, Black-box, Gray-box로 구분됩니다. Black-box는 결과만 확인 가능한 경우며 White-box는 Llama 처럼 오픈소스로 모델의 내부 구조나 파라미터를 전부 알 수 있는 경우입니다. Gray-box는 그 중간으로 일부만 공개되어 있는 경우죠. 이러한 Teacher 모델의 특징에 의해 KD에 활용할 수 있는 정보의 종류가 달라지게 됩니다.

증류할 지식의 종류에 따른 분류는 다음과 같습니다. Response-based는 Black-box나 gray-box에 활용하고, 별도로 특징을 뽑을 수 있는 White-box는 Feature-based 접근 방식이 가능합니다.

  • Response-based : Teacher 모델의 logit이나 output 같은 응답을 활용
  • Feature-based : Teacher 모델의 중간 레이어의 feature, representation을 활용

Logit-based KD

Logit-based KD는 Response-based의 한 갈래로 정규화되지 않은 예측값인 logit을 활용하는 방법입니다. 오답에도 약간의 점수를 주기 때문에 모델의 강건성을 향상시키고, 연속된 형태이기이에 더 높은 엔트로피를 갖고 있으며, 하나의 클래스에서 다양한 인스턴스 차이나 클래스 간 유사도를 인식하는 등 장점이 있기 때문에 선호되는 방식입니다.

학습 방법

Teacher 모델은 Hard label(정답 클래스)로 학습을 진행하고 logit을 별도로 뽑아둡니다. 우리가 관심있는 Student 모델은 Hard label에 대한 학습(BCE loss 등)과 Teacher 모델의 logit 값을 Soft label로 해서(KL divergence) 두 개의 loss를 바탕으로 학습합니다. 두 손실을 섞는 방법은 하이퍼 파라미터로 실험을 통해 적절한 값을 찾는 것이 필요합니다.

여기서 클래스 간 logit의 차이가 극명하게 나거나 별로 나지 않을 수도 있습니다. 목적에 따라서 제대로 훈련이 되지 않을 수도 있으니 모든 클래스의 logit에 동일한 값(temperature, T)를 나누고 softmax를 적용하는 방법이 있습니다. 이는 기존 확률분포의 차이를 극명하게 또는 완만하게 될 수 있도록 변형을 가합니다.

  • T < 1 : 차이를 극명하게 만들 경우
  • T > 1 : 차이를 완만하게 만들 경우

Feature-based KD

Feature-based는 Teacher 모델이 특징을 Student 모델에 직접 활용하는 방식으로 모델의 구조, 파라미터 등을 알아야 사용이 가능합니다. (즉, White-box 경우)

학습 방법

Student 모델은 Teacher 모델보다 작기 때문에 차원을 맞춰주기 위한 regressor 층에 매핑합니다. 그리고 Teacher 모델과 Student 모델의 중간 층 피쳐맵에서 Mean Squared Error를 계산해서 훈련을 진행합니다. 여기서 중간 층의 피쳐맵을 사용하는 이유는 수행하려는 작업 데이터의 특징들이 층마다 다르게 분포하게 되는데, 중간 층이 양 극단의 중간 성격으로 섞여 있기 때문에 지식 증류에 효과적이기 때문입니다.

다른 방법들

Imitation Learning

앞서 언급한 방법들은 logit이나 특징들을 가져다 써야 가능한 방법이지만, ChatGPT처럼 거대하면서 좋은 성능을 가진 모델들은 Black-box인 경우가 많습니다. 따라서 이러한 거대 모델들을 지식 증류에 활용하기 위해 고안된 방법론으로 모방이 등장했습니다.

Imitation Learning은 LLM처럼 거대한 모델을 Teacher 모델로 삼고 질문에 대한 답변을 (질문-답변) 쌍을 데이터베이스로 저장합니다. 그리고 저장한 데이터 중 불필요한 내용들을 전처리하여 Student 모델의 학습에 활용하는 방식입니다. 좋은 성능을 가진 거대모델들이 등장한 현 시점에서 데이터 증강의 한 방식으로 활용하는 것이죠.

Multi-Teacher

여러 데이터 분석에서 성능 향상을 위해 흔하게 사용되는 방법으로 앙상블이 활용되곤 합니다. 여러 모델들의 결과를 종합해서 결과를 내는 방식인데, 이를 지식 증류에서도 활요이 가능합니다. 단일 모델의 한계를 극복할 수 있도록 여러 Teacher 모델을 앙상블하는 방식을 채택해 이를 학습하도록 하는 것입니다.

Cross-modal

최근 딥러닝 분야의 트렌드 중 하나는 여러 감각이 종합된 Multi-modal입니다. 이러한 트렌드에 맞춰 다른 modality(시각 - 청각, CV - NLP 등)를 가진 Teacher 모델에서 학습을 진행하는 것이 Cross-modal 입니다.

참고자료

[1] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.

반응형
반응형

Pruning 기본 개념과 복권 가설

딥러닝 모델의 경량화를 위해 제안된 여러 개념 중 Pruning이라는 것이 있습니다. 사전 의미로 가지치기라는 뜻처럼 Pruning은 딥러닝 모델에서 노드(뉴런)나 연결(시냅스)을 제거해 모델의 크기와 계산 비용을 줄이는 방법입니다.

가지 치기 이미지 생성 모델

Pruning을 뒷바침하는 이론으로 복권 가설(Lottery Ticker Hypothesis, LTH)이 있습니다. 이는 신경망 모델에서 일부를 잘 가지치기를 하면, 원래 모델과 같은 정도의 학습으로 동일한 효과를 얻을 수 있다는 가설입니다. 성공적인 pruning이 가능한 경우를 당첨 복권(winning ticket)이라 하며, 이에 대해 존재함을 실험적으로 증명했습니다.[1]


Pruning이 이뤄지는 일반적인 절차는 다음과 같습니다.

  1. 초기 모델 존재
  2. 제거 가능한 파라미터 판별
  3. 파라미터 제거
  4. 파인튜닝(fine-tuning)
  5. 최종 모델 도출

위 과정 중 2~4 부분에 대해 Pruning을 적용할 수 있는데 각 절차나 방법론에 따라 다음과 같이 분류할 수 있습니다.

Pruning의 분류

Structure

Pruning 단위에 따라 Unstructred와 Structured로 구분을 할 수 있습니다. Unstructred는 개별 파라미터 단위로 값을 0으로 변경하는데, 그러다보니 모델 구조의 변경이 수반되지 않습니다. Structured는 모델의 특정 구조(계층 등) 단위로 통째로 제거하는 방식으로 가지치기를 실행합니다. 그러다보니, 모델 구조 변경이 발생합니다.

Scoring

중요도(점수)를 계산해 덜 중요한 파라미터를 선정하는 방식에 따른 분류입니다. 여기서 방식은 점수를 계산하는 방법과 점수를 어떻게 반영할 것인지에 대한 방법론으로 구분할 수 있습니다.


점수를 계산하는 대표적인 방법은 파라미터의 절대값에 따라 작은 순으로 제거하는 방법과 구조 단위(레이어)별 Lp-norm을 계산해서 작은 순으로 제거하는 방법이 있씁니다.


중요도를 반영하는 방법으로 전체에서 비율을 적용하는 Global Pruning과 단위별로 비율을 적용하는 Local Pruning이 있습니다.

Scheduling

Pruning에서 파인튜닝에 대한 방법론에 대한 구분입니다. Pruning을 한번만 하는 One-shot과 여러 번에 나눠서 진행하는 Recursive가 있습니다. One-shot으로 진행할 경우 시간은 절약되나 성능이 좋지 않게 되고(Pruning 비율이 낮아짐), Recursive로 진행하게 되면 시간이 오래걸리나 성능이 좋아집니다.

Initialization

딥러닝의 훈련에서도 초기화가 중요한 이슈였습니다. Pruning 이후에 재학습 및 파인튜닝을 할 때 파라미터 초기화 여부에 따라 분류할 수 있습니다. 기존 모델의 가중치를 그대로 유지하고 파인튜닝을 진행하는 방법은 수렴은 빠르지만 성능이 불안정하게 됩니다. 반면, 초기화를 진행하고 재학습하는 방식(rewinding)은 성능이 좋지만 재학습이 필요하기 때문에 추가적인 자원이 필요합니다.

추가 고려사항

Matrix Sparsity

Sparsity는 전체 중 0의 비율을 의미하는 것으로 얼마나 데이터가 희소하냐는 것을 의미합니다. 앞서 Unstructured pruning은 파라미터를 개별적으로 0으로 바꾸는 방식이기 때문에 행렬에서 여전히 0을 저장하고 곱하는 연산이 남아 있습니다. 따라서 효율성이 바로 개선되지는 않죠.


이러한 문제를 해결하기 위해 크게 두가지 방법이 고려될 수 있습니다. 우선 Sparse Matrix Representation가 있는데 이미지 분할 문제에서 RLE 데이터 포맷처럼 데이터를 저장하는 방식입니다. 0이 아닌 값과 좌표를 Row, Column, Value의 3개 행으로 이뤄진 행렬로 구성합니다. 하지만, Sparsity가 1/3 미만일 때만 효율적입니다.


하지만, sparsity가 1/3을 넘어가는 애매한 정도라면 전용 하드웨어를 사용하는 것이 더 바람직합니다. 하드웨어에 대한 전문적인 지식은 없지만 대략적인 구동 방식은 곱셈 수행 전에 0의 위치를 파악하고, 해당 위치를 건너뛰고 계산되도록 조정하는 방식으로 연산을 수행합니다.

Sensitivity

네트워크가 복잡하거나 층별 특성이 다를 경우(즉, 다른 작업을 수행하기 위한 목적이 있는 경우) 파라미터나 층을 pruning 했을 때 성능 저하 정도를 민감도로 해서 측정 및 분석을 수행합니다. 민감도 분석 결과에 따라 민감도가 높으면 pruning ratio를 낮추고 민감도가 낮은 부분은 pruning ratio를 높이는 방식으로 대응하는 것이죠.


보통 민감도 분석은 성능 저하 정도를 실험적으로 측정합니다. 성능 저하 허용 범위(t %)를 고정하고, 이를 기준으로 레이어나 파라미터 별 prune ratio를 결정하는 방식이죠. 통상적으로 입력에 가까울수록 민감도가 높을 수 있습니다. 이는 신경망을 거치면서 정보가 점차 추상화되는데, 입력층에서는 추상화되기 전이기 때문에 더 크게 반응할 수 있습니다.

딥러닝에서 실제 활용

  • CNN

Convolutional Neural Network(CNN)는 합성곱 연산이 이뤄지는 CONV 층과 분류와 같은 문제를 해결하는 Fully Connected(FC) 층으로 나눠볼 수 있습니다. 파라미터는 FC 층에 있고, 복잡한 합성곱 연산은 CONV 층에 있기 때문에 개별로 pruning이 필요합니다.


CONV 층을 거칠 때마다 나오는 피쳐맵은 이미지의 의미를 담고 있는데, 여기서 중요한 피쳐맵과 그렇지 않은 것을 구분하고 pruning하는 것이 필요합니다. sparsity가 높은 피쳐맵일수록 별 의미가 없는 정보인 경우가 많기 때문에 sparsity를 기준으로 가지치기가 필요합니다. (실무적으론 L2-norm으로 sparsity를 계산한다고 합니다)[3]


  • BERT

Bidirectional Encoder Representation from Transformer(BERT)는 LLM 이전의 주요 언어 모델로 여러 개의 트랜스포머로 구성되어 작은 형태(단어)와 큰 형태(문장)을 인식하게 됩니다. 다만, 층마다 sparsity가 일관되지 않아 Structured 방법은 위험할 수 있습니다. 대신 층별로 local pruning을 적용하고, 대부분 파라미터가 0에 가깝기 때문에 절대값 기준으로 scoring을 하는 방법을 채택합니다.

참고자료

[1] Jonathon Fankle, Michael Carbin. "The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks". ICLR 2019.
[2] https://www.geeksforgeeks.org/sparse-matrix-representation/
[3] Pavlo Molchanov, Stephen Tyree, Tero Karras, Timo Aila, Jan Kautz. "Pruning Convolutional Neural Networks for Resource Efficient Inference". ICLR 2017.
[4] Mitchell A. Gordon, Kevin Duh, Nicholas Andrews. "Compressing BERT: Studying the Effects of Weight Pruning on Transfer Learning".
[5] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.

반응형
반응형

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

 

 

반응형