최근 Large Language Model (LLM)이 다양한 태스크에서 뛰어난 성능을 보임에 따라, LLM을 원하는 태스크에 맞게 fine-tuning하여 사용하려는 니즈가 많다.그런데 LLM은 이름에 나와 있듯이 굉장히 많은 파라미터 (10B은 기본..)를 가지고 있기 때문에, full fine-tuning을 하려면 많은 메모리와 시간이 든다.그래서 사전학습된 LLM의 모든 파라미터를 튜닝하지 않고, 수행하고자 하는 특정 태스크를 위한 소량의 파라미터만을 추가적으로 학습하여 adaptation하는 lightweight fine-tuning이 주목받고 있다.그 중에서 최근 가장 많이 사용되는 LoRA (Low-Rank Adaptation)에 대해 알아보려고 한다. 글 작성에 도움을 받은 참고 링크들이다..
Meta에서 23년 7월 19일에 공개한 이후, 수많은 LLM들의 foundation model로 사용되고 있는 LLaMA 2에 대해 정리하려고 한다. LLaMA 2 논문 과 daewoo kim님의 블로그 를 참조하여 작성하였음을 밝힌다. 해당 블로그에 정리가 잘 되어 있어 도움을 많이 받았다. (노션에 가볍게 정리하다가 꽤 길어져서 블로그에 옮기는 중. 티스토리에서 그림이 자꾸 깨진다ㅠ) LLaMA 2 (23년 7월 공개)는 LLaMA 1 (23년 2월 공개)를 발전시킨 모델 self-supervised learning으로 학습 사전학습 데이터 40% 증가 (1.4T tokens → 2T tokens) Context length 2배 증가 (2K → 4K) Grouped-query attention 사..
KL-Divergence (KLD)는 쉽게 말해, 정답(ground-truth) 분포와 예측(prediction) 분포가 얼마나 유사한지/다른지를 측정하는 방법이다. KLD의 값이 낮을수록 두 분포가 유사함을 의미한다. $P(x)$를 실제 분포, $Q(x)$를 예측 분포라고 할 때, KLD loss는 다음 수식으로 나타낼 수 있다. $$ KLD = \displaystyle\sum_{x} P(x) \log \frac{P(x)}{Q(x)} = \displaystyle\sum_{x} P(x) \log P(x) - \displaystyle\sum_{x} P(x) \log Q(x) $$ 추가적으로, 우항에서 $\displaystyle\sum_{x} P(x) \log P(x)$는 $-Entropy$ 이고, $- \..
"WHAT, WHEN, and HOW to Ground: Designing User Persona-Aware Conversational Agents for Engaging Dialogue"라는 제목의 이 논문은 ACL 2023 Industry Track에 게재되었고, SK Telecom에서 작성한 논문이다. Personalize된 오픈 도메인 대화 시스템에서 응답 생성 시에 발생하는 WHAT, WHEN, HOW 문제를 해결하기 위한 방법을 제안하고 있다. 데이터셋 중점의 방법론을 제안하고 있으며, response-type label 생성을 통해서 확장된 효과를 취했다. 1 Introduction Personalized dialogue (PD) system에서는 일반적으로 주어진 페르소나 셋에서 현재 대화..
이번에 리뷰할 논문은 "P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks"이다. 이는 ACL 2022에 short paper로 게재되었다. 본 논문에서 언급하는 기존 prompt tuning 연구의 한계점은 다음과 같다. 모델 크기가 작을 때(< 10B)에는 fine-tuning을 능가하지 못함 어려운 sequence labeling 태스크(ex: MRC, NER, SRL)에서는 fine-tuning을 능가하지 못함 본 논문의 contribution은 다음과 같다. properly optimized된 prompt tuning은 다양한 모델 크기와 NLU 태스크에서 fine-tuning..
[방법1] PyTorch 공식 문서 및 Wikidocs에서 더 자세한 설명을 볼 수 있다. import os import pandas as pd from torchvision.io import read_image from torch.utils.data import Dataset class CustomDataset(Dataset): def __init__(self, annotations_file, img_dir, transform=None, target_transform=None): self.img_labels = pd.read_csv(annotations_file, names=['file_name', 'label']) self.img_dir = img_dir self.transform = transfor..
Distinct는 생성된 응답의 다양성을 평가하기 위한 것으로, A Diversity-Promoting Objective Function for Neural Conversation Models paper에서 제안된 metric이다. 보통 input에 대해 output이 특정하게 정해져 있지 않고 다양한 output이 올 수 있는 오픈도메인 대화 task에서 평가 metric으로 자주 사용된다. paddlenlp 라이브러리를 사용해 Distinct를 측정하기 위해서 다음을 설치한다. $ pip install --upgrade paddlenlp>=2.0.0rc -i https://pypi.org/simple $ pip install paddlepaddle -i https://mirror.baidu.com/p..
nn.BCELoss() label이 0 또는 1인 Binary Classification을 위해서는 nn.BCELoss()를 사용할 수 있다. 이때 주의할 사항은 다음과 같다. 1. input에 sigmoid() 함수를 씌운 후에 loss function에 넣어야한다. 2. input과 target은 동일한 shape이어야 한다. 3. input과 target의 데이터 타입이 모두 Float이어야 한다. Example: import torch.nn as nn loss_func = nn.BCELoss() sigmoid = nn.Sigmoid() input = torch.randn(size=(2, 4))# shape: (2, 4), dtype: float32 target = torch.FloatTensor(..