이미지 생성 모델의 평가 지표 정리 | 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
[Seg] Fully Convolutional Networks (FCN) for Segmentation 정리
1. Fully Convolution Networks1.1. 주요 특징Convolution 네트워크는 컴퓨터 비전에서 획기적으로 성능 향상을 이끈 구조입니다. 다양한 피쳐 맵(feature map)을 만들어서 여러 컴퓨터 비전의 작업에 활용했습니다. Semantic segmentation에서도 convolution 네트워크를 활용하려는 시도가 있었고, 이에 대한 효시가 된 논문이 있습니다. [1] 해당 논문에서 제시하고 있는 Segmentation을 위한 FCN의 설계 주요 특징은 다음과 같습니다.당시 좋은 성능을 내고 있던 VGG-16을 기본 구조(backbone)으로 사용Fully-connected layer를 Convolution layer로 대체Transposed convolution을 이용해 p..
2024.11.15
no image
[Seg] Segmentation Task와 주요 평가지표(Dice) 정리
1. Task의 분류Segmentation 또는 Image Segmentation은 컴퓨터 비전에서 연구되는 주요 분야 중 하나로, 이미지를 객체에 대응하는 여러 부분(segments)이나 영역으로 나누는 것입니다. 이미지의 픽셀을 레이블이나 카테고리에 할당해서 비슷한 것끼리 묶는 것을 목표로 하고 있습니다.[1] Segmentation은 크게 Semantic, Instance, Panoptic로 구분할 수 있습니다.  Semantic Segmentation은 이미지의 픽셀 단위로 분류해서 클래스나 객체인지를 구분하는 컴퓨터 비전의 한 영역입니다. 이 과제의 주요 목표는 매핑을 통해 이미지를 모두 구분할 수 있는 구분을 형성하는 것입니다. [2] Instance Segmentation은 이미지 안 있는 ..
2024.11.14
no image
OCR 성능 평가 지표 알아보기 | DetEval, IoU, TIoU, CLEval
1. OCR 모델의 평가 OCR은 객체 탐지의 세부 영역으로 볼 수 있기 때문에 이전에 다뤄진 객체 탐지의 지표들을 참고해볼 수 있습니다.  참고자료:2024.11.02 - [노트/Computer Vision] - [OCR] 광학 문자 인식(OCR) 문제와 특징2024.10.02 - [노트/Computer Vision] - [OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS OCR 모델들의 평가는 추론을 진행한 결과와 정답(Ground Truth, GT) 간 비교를 하고, 매칭 및 점수를 매기는 과정(Scoring)을 통해 평가합니다. 여기서 살펴봐야 할 것은 추론 결과와 GT가 어떻게 매칭되는지 판단하고, 그 매칭한 정도에서 어떻게 점수를 ..
2024.11.07
[OCR] 광학 문자 인식(OCR) 문제와 특징
1. 개념이전에 객체 인식 문제는 객체의 위치와 클래스를 분류하는 문제였다면, 문자 인식은 1개의 클래스(텍스트)로 구분된 여러 객체들을 인식하는 문제입니다. 흔하게 Optical Characer Recognition(OCR)으로 불리며, 다양한 소스(스캔 파일, 문서 이미지 등)에서 다양한 방식으로 입력(수기, 프린팅 등)된 텍스트를 변환하는 것 입니다.  문자 인식 문제는 환경에 따라 아래와 같이 크게 2가지로 분류할 수 있습니다. 전통적인 문서 형태에서 인식을 하는 것과 일상적인 이미지에서 문자를 인식(예를 들어, 도시 이미지에서 간판 인식)하는 문제 입니다. 후자는 Scene Text Recognition (STR)로도 불리며, 배경이나 문자의 형태가 더욱 복잡하기 때문에 문서보다 어렵다고 여겨집..
2024.11.02
반응형

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. Fully Convolution Networks

1.1. 주요 특징

Convolution 네트워크는 컴퓨터 비전에서 획기적으로 성능 향상을 이끈 구조입니다. 다양한 피쳐 맵(feature map)을 만들어서 여러 컴퓨터 비전의 작업에 활용했습니다. Semantic segmentation에서도 convolution 네트워크를 활용하려는 시도가 있었고, 이에 대한 효시가 된 논문이 있습니다. [1]

 

해당 논문에서 제시하고 있는 Segmentation을 위한 FCN의 설계 주요 특징은 다음과 같습니다.

  • 당시 좋은 성능을 내고 있던 VGG-16을 기본 구조(backbone)으로 사용
  • Fully-connected layer를 Convolution layer로 대체
  • Transposed convolution을 이용해 pixel-wise 예측을 수행

1.2. Convolution 연산이 필요한 이유

Fully-conneted layer는 모든 신경망들이 연결되어 1차원의 평탄화된 행렬을 통해 이미지를 분류하는데 사용되는 층입니다. 평탄화되어 있는만큼 위치에 대한 정보가 없어지기 때문에 이미지 정보를 담기에는 적절하지 않습니다.

FC 연산[2]

 

반면에, Convolution은 필터/커널이 이동하면서 연산을 수행하기 때문에 위치 정보가 해치지 않은 상태로 피쳐 맵을 추출할 수 있고, 커널이 이동만 하면되기 때문에 입력의 크기에 상관이 없습니다.

Convolution 연산[2]

1.3. Transposed convolution

Convolution 네트워크의 층을 통과할 때마다 패딩, 스트라이드 등에 따라 다르긴 하지만, 해상도가 갈수록 줄어듭니다. VGG의 경우 최종 층에서 나온 것은 1/32 수준인데, Segmentation에서는 원본 이미지에 표시를 해야 하기 때문에 복원을 위한 업샘플링 과정이 필요합니다. 

 

 각 요소의 값에 더 큰 커널을 적용하면 단순히 곱이되는 방식으로 커널 사이즈만큼의 행렬이 생성됩니다. 그것을 모든 요소에 적용하고 그 위치에 맞춘 다음 최종적으로 합을 진행하면 업샘플링이 가능합니다. 아래 그림은 2x2 입력값을 스트라이드 1의 커널 사이즈 3x3을 통해 4x4로 늘려주는 과정입니다. [3] 만약 더 큰 사이즈를 원할 경우 스트라이드를 키우면 더 큰 사이즈로 업샘플링이 가능할 것입니다. 이렇게 스트라이드가 1이 아닌 convolution을 strided convolution이라 합니다. 

 

Transpose Convolution [3]

 

이러한 convolution 연산을 행렬로 표현하면 sparse한 커널 행렬을 역행렬을 구해서 곱해주면 업샘플링한 값을 구할 수 있습니다. 이는 전치(transpose)해서 우변에 곱하는 과정과 동일하기 때문에 transposed convolution이라고 합니다. 이러한 과정이 역으로 convolution한 것처럼 보인다고 해서 deconvolution이라는 명칭이 많이 활용되기는 하지만,엄밀한 의미에서 convolution의 역연산은 아니기 때문에 정확한 표기는 아닙니다.

 

Transposed convolution 역시 다른 convolution과 동일하게 학습이 되는 파라미터로 파이토치를 통해 구현이 가능합니다. 파이토치에서 구현하려면 아래와 같이 적을 수 있습니다. 

 

torch.nn.ConvTranspose2d()

 

 

ConvTranspose2d — PyTorch 2.5 documentation

Shortcuts

pytorch.org

1.4. 구조

FCN의 구조는 기존의 convoltion 네트워크와 거의 동일합니다. 기본적인 convolution 구조에서 forward 연산을 통해 추론과 backward로 학습이 진행이되고, 맨 마지막 예측은 transpose convolution을 통해 pixel-wise 예측을 수행합니다. 

구조 [1]

2. FCN에서 성능 향상 방법

2.1. stride 축소

하지만 진짜 구분해야 하는 ground truth에 비해 세밀함이 부족한 경우들이 많이 보였습니다. 아래 사진을 보면 경계선이 많이 사라진 것을 확인할 수 있는데, 이는 Max Pooling을 지나면서 손실된 정보들 때문입니다. 따라서 Pooling 층을 지나면서 잃어버린 정보에 대한 복원이 필요하고 손실이 발생하기 전에 정보를 합쳐서 정보를 보존하는 방식을 채택합니다.  

손실된 이미지 경계선 정보[1]

 

정보를 합치는 방법은 ResNet에서도 언급된 skip connection (이전 층의 정보를 더하기) 방식으로 개선합니다. 최종층이 1/32이었기 때문에 최종 층에서 나온 Transpose Conv에서 나온 값(FCN-32s)과 1/16 층에서 나온 값을 1x1 Conv를 통과시켜서 합쳐서 예측을 수행한 것이 FCN-16s 입니다.

 

여기서 더 나아간 것이 FCN-16s 예측값과  1/8 층에서 나온 값을 1x1 conv 통과시켜서 합쳐 Transpose Conv를 통해 예측을 수행한 것이 FCN-8s 입니다. 위 이미지에서 확인할 수 있듯 이전 층의 정보를 합쳐줄수록 더욱 선명한 결과값이 나오는 것을 확인할 수 있습니다. 

skip connection [1]

3. 참고자료

[1] Evan Shelhamer, Jonathan Long, Trevor Darrell. "Fully Convolutional Networks for Semantic Segmentation" 

[2] https://builtin.com/machine-learning/fully-connected-layer

[3] 김현우. "Lecture 3. Semantic Segmentation의 기초와 이해". boostcamp ai tech.

[4] https://zzsza.github.io/data/2018/02/23/introduction-convolution/

반응형
반응형

1. Task의 분류

Segmentation 또는 Image Segmentation은 컴퓨터 비전에서 연구되는 주요 분야 중 하나로, 이미지를 객체에 대응하는 여러 부분(segments)이나 영역으로 나누는 것입니다. 이미지의 픽셀을 레이블이나 카테고리에 할당해서 비슷한 것끼리 묶는 것을 목표로 하고 있습니다.[1] Segmentation은 크게 Semantic, Instance, Panoptic로 구분할 수 있습니다. 

 

Semantic Segmentation은 이미지의 픽셀 단위로 분류해서 클래스나 객체인지를 구분하는 컴퓨터 비전의 한 영역입니다. 이 과제의 주요 목표는 매핑을 통해 이미지를 모두 구분할 수 있는 구분을 형성하는 것입니다. [2] Instance Segmentation은 이미지 안 있는 개별 객체를 경계와 개별 객체에 고유한 레이블을 부여하는 것입니다. [3] Panoptic Segmentation은 semantic과 instance의 결합된 버전으로 장면에 대한 전반적인 이해를 하는 것을 목표로 하고 있습니다. 이미지를 의미에 따라 나누는 것은 semantic, 각 개별 객체를 구분해내는 것은 instance의 방법을 따라가는 것으로 주어진 이미지에서 의미 레이블과 고유의 인스턴스 id를 부여합니다. [4]

 

아래 이미지를 참고하면 각각에 대해 한번에 와닿게 이해할 수 있을 겁니다. 

Segmentation 구분 [5]

 

2. 주요 지표

객체 탐지 문제와 유사하게 면적을 계산할 수 있는만큼 Segmentation 역시 IoU를 활용해 평가지표로 활용할 수 있습니다. 

 

2024.10.02 - [노트/Computer Vision] - [OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS

 

[OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS

IoUIoU (Intersection Over Union)은 모델이 얼마나 객체 탐지를 정확하게 했는지, 즉 모델이 찾은 객체의 위치가 실제 데이터셋의 ground truth와 겹치는지를 확인하는 지표 입니다. 영문 명칭에서 확인할

seanpark11.tistory.com

 

이와 유사하게 두개의 영역이 얼마나 겹쳐져 있는지 살펴보는 또 다른 지표인 Dice 라는 것이 존재합니다. 원래 명칭은 Dice-Sørensen coefficient라고 하는데, 두 샘플 사이의 유사도를 측정하는 통계치입니다. 공식은 아래와 같습니다. 

Dice Sorensen Coefficient [6]

 

IOU 공식은 교집합을 합집합으로 나눈 것이었지만, Dice는 교집합의 2배를 각각 집합을 더한 것만큼 나눈 것이기 때문에 수치적으로 조금 차이가 있을 수 있습니다.  

 

이를 컴퓨터에서도 사용할 수 있게끔 boolean으로 풀어쓰면 아래와 같습니다. 겹치는 것은 2배해서 분자와 분모에 모두 넣고 분모에는 추가적으로 Ground Truth에는 있지만 Prediction에는 없는 것(FN)과 Ground Truth에는 없지만 Prediction에만 있는 것(FP)까지 함께 더합니다. 

Dice Sorensen Coefficient [6]

참고자료

[1] https://paperswithcode.com/task/image-segmentation

[2] https://paperswithcode.com/task/semantic-segmentation

[3] https://paperswithcode.com/task/instance-segmentation

[4] https://paperswithcode.com/task/panoptic-segmentation

[5] https://mindy-support.com/news-post/what-is-image-segmentation-the-basics-and-key-techniques/

[6] https://en.wikipedia.org/wiki/Dice-S%C3%B8rensen_coefficient

반응형
반응형

1. OCR 모델의 평가 

OCR은 객체 탐지의 세부 영역으로 볼 수 있기 때문에 이전에 다뤄진 객체 탐지의 지표들을 참고해볼 수 있습니다. 

 

참고자료:

2024.11.02 - [노트/Computer Vision] - [OCR] 광학 문자 인식(OCR) 문제와 특징

2024.10.02 - [노트/Computer Vision] - [OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS

 

OCR 모델들의 평가는 추론을 진행한 결과와 정답(Ground Truth, GT) 간 비교를 하고, 매칭 및 점수를 매기는 과정(Scoring)을 통해 평가합니다. 여기서 살펴봐야 할 것은 추론 결과와 GT가 어떻게 매칭되는지 판단하고, 그 매칭한 정도에서 어떻게 점수를 계산할 것인지에 대한 방법론입니다. 

 

2. 어떻게 매칭할 것인가

2.1. 기본 개념

두 영역 간 매칭 여부를 판단하고, 그에 따라 매칭 행렬을 계산합니다. 매칭 행렬을 계산하기 위해 알아야 할 기본 개념은 아래와 같습니다. 

 

  • Area Recall : 정답과 예측의 교집합 넓이 / 정답 넓이
  • Area Precision : 정답과 예측의 교집합 넓이 / 예측 넓이  

또한, 매칭의 방식에 대해서도 구분할 수 있는데, 정확히 하나씩 매칭되는 경우(One-to-One) / 하나의 정답에 여러 개를 매칭하는 경우(One-to-Many, Split Case), 여러 정답에 하나의 예측을 하는 경우(Many-to-One, Merge Case)가 있습니다.

 

2.2. DetEval 

DetEval은 아래 조건을 모두 충족하면 1, 아니면 0으로 해서 매칭 행렬을 설정합니다.

  • area recall >= 0.8
  • area precision >= 0.4

그리고 one-to-one, many-to-one은 1을 그대로 유지, one-to-many는 0~1 사이 값(예를 들어, 0.8)으로 페널티를 줍니다. 이렇게 하고 각각의 예측 영역 기준의 평균 값이 Precision과 정답 영역 기준의 평균 값인 Recall을 계산해 둘의 조화평균을 구합니다. 이 숫자가 이미지에 대한 최종 점수입니다.

 

2.3. IoU와 TIoU

IoU는 이전 정리 글(링크)에서 다룬 것처럼 예측과 정답의 교집합 영역이 일정 기준(보통 0.5) 이상이 넘은 경우에만 매칭 행렬 값을 1로 두는 방법입니다. 하지만, 이 방법에서 맹점은 예측에서 부족하거나 넘치는 영역에 대해서는 반영되지 않는다는 점인데요. 이를 보완하기 위해 등장한 것이 Tightness-aware IoU, 즉 TIoU가 등장합니다.

 

TIoU는 부족하거나 초과된 영역 크기에 비례해서 IoU 점수에 페널티를 주는 방식입니다. 각각 Recall과 Precision은 아래와 같이 계산할 수 있습니다. 앞서 얘기한 것처럼 두가지 케이스(부족/초과)가 존재할 수 있는데, 부족 영역의 경우 페널티를 주기 위해서는 정답 영역 기준이므로 Recall로 들어가게 되고 반대로 초과 영역은 페널티를 주기 위해서는 분모에 예측 영역이 되어야 하기 때문에 Precision으로 간주합니다. 

 

  • Recall = IoU * (1-penalty)  where penalty = 부족 영영 / 정답 영역
  • Precision = IoU * (1-penalty)  where penalty = 초과 영역 / 예측 영역 

이렇게 계산된 recall과 precision의 조화평균을 취해주면 최종 점수를 계산할 수 있습니다.

 

2.4. CLEval 

Character-Level Evaluation(CLEval)은 기존에 영역 기준만으로 측정하는 지표들의 한계를 극복하기 위해 등장했습니다. 즉, 얼마나 맣은 글자를 맞추고 틀렸느냐를 평가하기 위해 등장한 지표인데, 글자 영역을 글자 수만큼 등분하고, 등분한 영역에서 센터를 Pseudo Character Centers(PCCs)를 계산합니다.

 

텍스트의 기준점 잡기 [2]

 

위 이미지는 텍스트의 기준점을 잡는 방법에 대한 것으로 PCC는 이미지의 좌측에 한 글자에 해당하는 이미지에서 m-m 을 기준으로 한다고 이해하면 될 것 같습니다. 이렇게 영역에 PCC가 몇개나 있는지 계산합니다.

 

점수는 정답 기준과 예측 기준으로 두가지를 구해 조화평균하여 산출합니다. 각각의 점수는 다음 식을 사용해서 계산하는데, 각 표시가 기준마다 의미하는 바가 다르므로 그 아래의 표를 참고해주시기 바랍니다.

 

- ( Correct Number - Granual Penalty ) / Total Number

구분 정답 기준 (Recall) 예측 기준 (Precision)
Correct Number 정답 영역 내 PCC 중 예측 영역에 속한 PCC 숫자 예측 영역 PCC별 예측 영역의 개수를 나눈 것들의 합
Granual Penalty 정답 영역 내 PCC를 포함한 예측 영역의 개수 -1 예측 영역과 관련된 정답 영역의 개수 - 1
Total Number 정답 영역 내 PCC 개수 정답 영역 내 PCC 개수 

 

참고자료

[1] 유하늘. "(7강) OCR 성능 평가". Boost Camp

[2] https://pillow.readthedocs.io/en/stable/handbook/text-anchors.html#text-anchors

반응형
반응형

1. 개념

이전에 객체 인식 문제는 객체의 위치와 클래스를 분류하는 문제였다면, 문자 인식은 1개의 클래스(텍스트)로 구분된 여러 객체들을 인식하는 문제입니다. 흔하게 Optical Characer Recognition(OCR)으로 불리며, 다양한 소스(스캔 파일, 문서 이미지 등)에서 다양한 방식으로 입력(수기, 프린팅 등)된 텍스트를 변환하는 것 입니다. 

 

문자 인식 문제는 환경에 따라 아래와 같이 크게 2가지로 분류할 수 있습니다. 전통적인 문서 형태에서 인식을 하는 것과 일상적인 이미지에서 문자를 인식(예를 들어, 도시 이미지에서 간판 인식)하는 문제 입니다. 후자는 Scene Text Recognition (STR)로도 불리며, 배경이나 문자의 형태가 더욱 복잡하기 때문에 문서보다 어렵다고 여겨집니다.

 

2. 주요 특징 

OCR은 객체 탐지와 비슷한 것 같지만, 그것만이 갖고 있는 고유의 특징들이 있습니다. 먼저 클래스의 분류가 텍스트로만 분류된다는 점입니다. 일반 객체 탐지는 해당 객체가 무엇인지 분류해야 하는 작업이 존재하지만, 글자 검축은 텍스트라는 단일 클래스이기 때문에 위치만 예측하는 문제 입니다.

 

OCR의 대상에 따라 다양한 특성이 나타납니다. 논문과 같이 문자가 많은 경우는 매우 높은 객체 밀도를 보이기도 하고, 문장 형태로 된 데이터는 극단적으로 긴 종횡비가 나타나기도 합니다. 글자가 놓여있는 형태에 따라서 가로, 세로 쓰기에 따라 가로가 길거나 세로가 더 길 수 있습니다. 

 

글의 목적에 따라서 글의 배치 형태(가로,세로 뿐 아니라 휘어진 형태까지), 크기, 심지어 폰트까지 달라지기도 합니다. 그리고 한글처럼 띄어쓰기에 따라 의미가 달라질 수 있는 언어의 경우 문자의 박스 형태가 모호하게 설정될 수도 있습니다. OCR 문제 해결을 위해서는 이러한 특징들을 고려해서 판단할 필요가 있습니다. 

 

3. OCR 문제 해결 

앞서 이야기한 것처럼 OCR은 글자 객체를 찾고(Text Detection), 글자를 인식(Text Recognition)하는 과정으로 이뤄져 있습니다. 이러한 과정을 모듈화해서 살펴볼 수 있는데, Text Detector / Text Recognizer / Serializer / Text Parser로  크게 4가지 구분할 수 있습니다.

3.1. Text Detector

Text Detector는 글자의 위치만 반환하는 역할을 수행합니다. 이미지를 입력으로 받아서 각 글자의 영역별 위치정보를 반환하게 됩니다. 이 때 반환하는 위치 정보는 (x, y, w, h)가 될 수도 있고, 각 점의 좌표를 반환할 수도 있습니다. 

3.2. Text Recognizer

Text Recognizer는 Text Detector에서 나온 글자 영역 정보를 바탕으로 영역 내의 글자 인식을 수행합니다. 이미지 전체를 대상으로 판단하지는 않고 해당 영역만을 참고합니다. 이 task는 컴퓨터 비전과 자연어 처리를 모두 해야하는 작업으로 최근에 각광을 받는 Multi-modal의 성격을 띈다고도 볼 수 있습니다. Text Recognizer를 통과하게 되면 해당 영역의 글자 값을 반환하게 됩니다.

3.3. Serializer

Serializer는 해당 영역에서 인식한 글자를 자연어 처리를 할 수 있도록 정렬을 수행합니다. 예를 들어, 한글은 좌상단에서 우하단 방향으로 일반적으로 읽습니다. 그리고 단락별로 구분이 되어있기도 하죠. 이러한 규칙을 바탕으로 자연어를 처리할 수 있게끔 정렬을 수행합니다. 

3.4. Text Parser

Text Parser는 앞서 정리된 텍스트들에서 의미를 부여하는 역할을 수행합니다. 많이 사용하는 방법 중 하나는 이미 정의된 key-value에서 글자 영역별 의미를 추출합니다. BIO Tagging을 통해 문장에서 정의된 개체에 대한 값을 추출하는 방법이 있습니다. BIO 태깅은 Begin(개체가 시작하는 부분), Inside(개체의 내부), Outside(개체가 아닌 부분)으로 나눠서 태그를 진행하는 방식입니다. 태그가 완료된 이후에는 개체인 B와 I에 대해서만 사용하는 방식입니다. [2]

 

4. 참고자료

[1] 유하늘. "3. OCR Tasks". 부스트캠프 ai tech

[2] 12-04 개체명 인식의 BIO 표현 이해하기 - 딥 러닝을 이용한 자연어 처리 입문

 

반응형