Alpaca (A Strong Instruction-Following Model)

Alpaca: A Strong, Replicable Instruction-Following Model

Hello, Alpaca?

최근 LLaMa이어서 아주 핫한 모델이 있습니다. 바로 Alpaca라는 모델인데요. 오늘은 Stanford에서 공개한 오픈소스인 Alpaca에 대해서 간단히 소개해보려합니다.
Alpaca는 지난번에 포스팅된 LLaMa라는 언어모델을 Stanford 박사과정 학생들이 사용자의 명령어에 언어모델이 잘 답변할 수 있도록 Instruction-following 데이터로 파인튜닝한 모델입니다.
언어모델은 기본적으로 다음 단어를 예측하는 문제를 풀기 때문에 일반적인 사용자의 명령어에 자연스럽게 답변하기가 어려운데요. 그럼에도 불구하고 ChatGPT 같은 모델이 답변을 잘하는 것은 사용자의 의도에 맞게 모델을 Instruction-following 데이터로 튜닝 (Alignment) 했기 때문이라고도 볼 수 있습니다. 결국 사용자가 언어모델을 잘 활용하기 위해서는 Instruction tuning은 꼭 거쳐야하는 관문이라고 할 수 있습니다.
LLaMa를 튜닝한 모델이니 아마 라마와 비슷한 생김새 가진 알파카라고 이름을 지은게 아닌가 싶네요🤔

image.png

Alpaca는 논문이 따로 발표되진 않았지만, 어떤 데이터로 어떻게 학습을 했는지 코드와 함께 공개가 되어있어서 현재시점에서도 LLaMa와 같이 많은 변형 및 어플리케이션이 나오고 있는데요. 지금부터 한번 알아보도록 하겠습니다.

Alpaca를 왜 만들었을까?

Stanford 학생들은 ChatGPT, Claude, Bing Chat등 다양한 모델이 이미 훌륭한 성능을 보여주고 있지만 그럼에도 불구하고 아직은 부족한 점이 있다고 지적합니다. 예를 들면, 잘못된 정보를 생성하거나, 사회적인 편견 및 불편한 말들을 생성하는 것이죠. 이러한 문제를 해결하기 위해 학계와의 협업이 필요하지만 OpenAI의 text-davinci-003과 같은 모델은 접근하기 힘든 closed-source model이기 때문에 연구에 어려움이 있다고 말합니다🥲
마침 Meta에서 LLaMa를 공개했고, 기존에 알려진 연구를 바탕으로 훨씬 저렴한 비용으로 모델을 학습할 수 있도록, 데이터 및 모델 학습 방법을 재현 가능하도록 공개한 것으로 보입니다.
결과적으로, Alpaca는 text-davinci-003(175B)보다 훨씬 작은 7B 모델이지만 유사하게 동작한다고 합니다.
Gradio 기반 데모 페이지도 공개했는데, 접속은 가끔 안되는 것 같네요🤔
image.png
Alpaca는 academic research에 한해서만 사용이 가능하고 상업적 사용은 금지하고 있는데요.
이유는 LLaMa의 라이센스가 non-commercial 라이센스라는점 그리고 OpenAI의 tet-davinci-003에서 얻어낸 데이터를 활용했다는 점등을 이유로 제시하고 있습니다.

자세히 보기

Toolformer: Language Models Can Teach Themselves to Use Tools

Note

  • 미리 학습데이터를 API 기반으로 생성해놓되, 생성할때는 loss에 도움이 되는 방향으로 구성해놓고, 실제 인퍼런스할때 API콜과 관련된 토큰이 나오면 잠시 디코딩 중지 후 API콜하고 결과 받아온다음에 다시 이어서하는 방식!
  • API종류가 많진 않아서, 완전 범용적인 평가라 하기엔 애매하고 약간 무거운것 같기도하나(학습과정이), 실제 사용할땐 편할수도
  • 공개된 레포는 없지만, lucidrains가 만들기 시도 (https://github.com/lucidrains/toolformer-pytorch)
  • paper: Toolformer Language Models Can Teach Themselves to Use Tools.pdf
  • 자세한 내용은 slide 참고: Toolformer.pdf

Author

  • Timo Schick Jane Dwivedi-Yu Roberto Dessì† Roberta Raileanu Maria Lomeli Luke Zettlemoyer Nicola Cancedda Thomas Scialom
    • Meta AI Research †Universitat Pompeu Fabra

Abstract

  • They also, paradoxically, struggle with basic functionality, such as arithmetic or factual lookup, where much simpler and smaller models excel.
  • In this paper, we show that LMs can teach themselves to use external tools via simple APIs and achieve the best of both worlds.
  • We introduce Toolformer, a model trained to decide which APIs to call, when to call them, what arguments to pass, and how to best incorporate the results into future token prediction.
    • 이게 이 논문의 핵심이네, 어떤 API를 콜할지, 언제 콜할지, 어떤 args를 넣을지 어떻게 future token 예측에 쓸건지를 고르는 것!
  • This is done in a self-supervised way, requiring nothing more than a handful of demonstrations for each API
  • We incorporate a range of tools, including a calculator, a Q&A system, a search engine, a translation system, and a calendar.
  • Toolformer achieves substantially improved zero-shot performance across a variety of downstream tasks, often competitive with much larger models, without sacrificing its core language modeling abilities.

Introduction

자세히 보기

SELF-INSTRUCT Aligning Language Model with Self Generated Instructions

Note

  • code: https://github.com/yizhongw/self-instruct
  • slide: SELF-INSTRUCT.pdf
  • 여기 있는 Instruction은 NLP task쪽이라기보다 InstructGPT에서의 prompt중에 명령관련 표현을 의미하는 듯
  • Instruction뿐만 아니라 Instance도 생성하기 때문에 challenge하고, LLM에 내재되어있는 능력을 꺼내되 꺼낸 컨텐츠도 LLM안에 있는거라서, human의 개입이 잘안들어간 self-Instruct+Instance라고 할 수 있을듯
    • Because of SELF-INSTRUCT’s dependence on the inductive biases extracted from LMs
  • InstructGPT_001 정도의 모델을 휴먼리소스 적게해서 만드는 방법
  • 175개 시드 템플릿
예시1 예시2
image 두번째예시

Author

  • Yizhong Wang♣ Yeganeh Kordi♢ Swaroop Mishra♡ Alisa Liu♣ Noah A. Smith♣+ Daniel Khashabi♠ Hannaneh Hajishirzi♣+
  • ♣University of Washington ♢Tehran Polytechnic ♡Arizona State University ♠Johns Hopkins University +Allen Institute for AI

Abstract

  • Large “instruction-tuned” language models (finetuned to respond to instructions) have demonstrated a remarkable ability to generalize zero-shot to new tasks.
    • Nevertheless, they depend heavily on human-written instruction data that is limited in quantity, diversity, and creativity, therefore hindering the generality of the tuned model.
  • We introduce SELF-INSTRUCT, a framework for improving the instruction-following capabilities of pretrained language models by bootstrapping off its own generations.
  • Our pipeline
    • generates
      • instruction,
      • input, and
      • output samples
    • from a language model, then prunes them before using them to finetune the original model.
  • Applying our method to vanilla GPT3, we demonstrate a 33% absolute improvement over the original model on SUPERNATURALINSTRUCTIONS, on par with the performance of InstructGPT001
  • we curate a set of expert-written instructions for novel tasks, and show through human evaluation that tuning GPT3 with SELF-INSTRUCT outperforms using existing public instruction datasets by a large margin, leaving only a 5% absolute gap behind InstructGPT001
  • SELF-INSTRUCT provides an almost annotation-free method for aligning pretrained language models with instructions, and we release our large synthetic dataset to facilitate future studies on instruction tuning.
자세히 보기

(FLAN) Finetuned Language Models Are Zero-Shot Learners

Note

Author

  • Jason Wei∗, Maarten Bosma∗, Vincent Y. Zhao∗, Kelvin Guu∗, Adams Wei Yu, Brian Lester, Nan Du, Andrew M. Dai, and Quoc V. Le
    • Google Research

Abstract

  • explores a simple method for improving the zero-shot learning abilities of language models.
  • instruction tuning—finetuning language models on a collection of datasets described via instructions—substantially improves zero-shot performance on unseen tasks.
  • 137B parameter pretrained language model and instruction tune it on over 60 NLP datasets verbalized via natural language instruction templates. We evaluate this instruction-tuned model, which we call FLAN, on unseen task types.
    image

Introduction

자세히 보기

(T0) Multitask Prompted Training Enables Zero-Shot Task Generalization

Note

Author

  • V Sanh (Hugging Face) 저술 · 2021

Abstract

  • Q) Can zero-shot generalization instead be directly induced by explicit multitask learning?
  • we develop a system for easily mapping any natural language tasks into a human-readable prompted form.
    • convert a large set of supervised datasets, each with multiple prompts with diverse wording
    • fine-tune a pre-trained encoder-decoder model (Raffel et al., 2020; Lester et al., 2021) on this multi-task mixture covering a wide variety of tasks
    • The model attains strong zero-shot performance on several standard datasets, often outperforming models up to 16× its size.

Introduction

자세히 보기

(InstructGPT) Training language models to follow instructions with human feedback

Note

  • ChatGPT를 가기 위한 기초논문
  • paper: Training language models to follow instructions with human feedback.pdf
  • 결국 real-world의 prompts가 엄청 중요하고, 그걸 labelers를 통해 잘 demonstration을 적어놔야되고, output rankings을 통해 RM을 잘 굽고 plm obj를 특정 비율로 유지시키면서 PPO를 잘 굽는게 핵심..!

Author

Abstract

  • Making language models bigger does not inherently make them better at following a user’s intent
    • 모델 크기만 키우는게 유저의 의도를 따라가는 관점에서는 더 낫게해주진 않음
  • large language models can generate outputs that are untruthful, toxic, or simply not helpful to the user
    • 믿기 어렵거나 toxic하거나 하는 문장도 생성해내기 때문
  • 이런 모델들은 not aligned with their users!
  • show an avenue for aligning language models with user intent on a wide range of tasks by fine-tuning with human feedback.
    • 이 논문에서 LM을 유저의 의도에 맞게 파인튜닝하고 human feedback을 줘서 align했을때 효과를 보여줄 것임
  • Starting with a set of labeler-written prompts and prompts submitted through the OpenAI API, we collect a dataset of labeler demonstrations of the desired model behavior, which we use to fine-tune GPT-3 using supervised learning.
    • GPT-3 튜닝할 목적으로 labeler demonstrations 데이터셋 수집
  • collect a dataset of rankings of model outputs
    • 모델 아웃풋에 대한 랭킹으로 수집함
  • which we use to further fine-tune this supervised model using reinforcement learning from human feedback
    • RLHF로 파인튜닝하기 위해서 사용할 것
  • call the resulting models InstructGPT
    • 학습한 모델을 InstructGPT로 부를 것임
  • In human evaluations on our prompt distribution, outputs from the 1.3B parameter InstructGPT model are preferred to outputs from the 175B GPT-3, despite having 100x fewer parameters.
    • Human 평가에서 보면 1.3B InstructGPT가 175 GPT-3보다 결과가 좋음
  • InstructGPT models show improvements in truthfulness and reductions in toxic output generation while having minimal performance regressions on public NLP datasets
    • truthfulness나 toxic 관점에서도 꽤 개선이 보였음
  • RLHF기반 finetuning이 aligning LMs with human intents 관점에서 꽤 promising direction임을 보임

Introduction

자세히 보기

Robust Conversational Agents against Imperceptible Toxicity Triggers

Note

Author

  • Ninareh Mehrabi1, Ahmad Beirami2∗, Fred Morstatter1, Aram Galstyan1
  • 1University of Southern California - Information Sciences Institute 2Meta AI

Abstract

  • 최근 NLP 연구는 다양한 toxicity detection에 개선이 있었음
    • toxicity detection models with the intention of identifying and mitigating toxic language from existing systems.
  • 기존 연구가 많긴하나 adversarial attacks과 defense에 대한 연구는 부족했음
    • adversarial attacks that force the system to generate toxic language and the defense against them
  • 기존의 연구는 대부분 사람이 attack 용 문장을 생성해왔음, 비용이 비싸고 확장가능하지 않음
  • 반면에 자동화해서 만든 attack인 경우 attack vector가 human-like language와 맞지 않음, 이는 LM loss로 detecting이 가능함
    • Existing work to generate such attacks is either based on human-generated attacks which is costly and not scalable or, in case of automatic attacks, the attack vector does not conform to human-like language, which can be detected using a language model loss
  • 본 연구에서는 conversational agents를 눈에 띄지 않게 공격(앞서 자동화한 공격과 달리 인식되지 못하게) 하는 방법을 coherency, relevancy, fluency 관점에서 제안함
    • propose attacks against conversational agents that are imperceptible, i.e., they fit the conversation in terms of coherency, relevancy, and fluency, while they are effective and scalable, i.e., they can automatically trigger the system into generating toxic language
  • 본 연구에서는 제안한 attack에 대한 defense mechanism도 제안함. 공격을 완화시킬뿐만 아니라 conversational flow도 유지시킬 수 있는 방법을 제안함
    • propose a defense mechanism against such attacks which not only mitigates the attack but also attempts to maintain the conversational flow
  • 결론적으로 공격이 잘들어와도 잘 막을 수 있는 방법에 대해 automaitc and human evaluations했고 효과적임을 보였음
    • our defense is effective at avoiding toxic language generation even against imperceptible toxicity triggers while the generated language fits the conversation in terms of coherency and relevancy

Introduction

자세히 보기

SOCIAL CHEMISTRY 101 - Learning to Reason about Social and Moral Norms

Note

  • web site: https://maxwellforbes.com/social-chemistry/
  • paper: SOCIAL CHEMISTRY 101- Learning to Reason about Social and Moral Norms.pdf
  • 데이터셋 수집 순서
    • 상황 수집 필요 (여기선 레딧, 고민상담, 찬반좌등이 있을법한 상황설정된곳에서 가져옴)
    • → 상황마다 RoT를 1~5개 생성
    • → RoT마다 multiple annotation 작성 (같은 RoT를 다르게 볼 수 있으니..)
    • → RoT Breakdown, Action Breakdown (Action도 해야되나.. RoT안에 포함된거아닌가.. attribute 자체는 다르긴한데? 정답은! RoT는 도덕적인 관점에서 따지고, Action은 법이나 문화적인 관점에서 따짐)
    • → 추가적인 태깅도 진행 불분명한 상황이거나, 19금상황이거나, 너무불편한주제(학대나,…); 이런 경우는 스킵가능
  • RoT가이드라인등은 비슷하게 가져가면 될 것으로 보임
  • 137명이 태깅함
  • split our dataset into 80/10/10% train/dev/test partitions by situation
  • 데이터 예시
area m split rot-agree rot-categorization rot-moral-foundations rot-char-targeting rot-bad rot-judgment action action-agency action-moral-judgment action-agree action-legal action-pressure action-char-involved action-hypothetical situation situation-short-id rot rot-id rot-worker-id breakdown-worker-id n-characters characters
amitheasshole 1 train 4 advice loyalty-betrayal char-1 0 it’s bad doing something that causes other people to lose trust in you. agency -1 3 legal -2 char-1 hypothetical losing trust in my friend reddit/amitheasshole/aypvmz It’s bad to do something that causes other people to lose trust in you. rot/reddit/amitheasshole/aypvmz/3K5TEWLKGYQFYAIY0H6JQMIY5MEIVM/127/2 127 0 2 narrator|my friend
amitheasshole 1 dev 3 social-norms loyalty-betrayal char-0 0 expected people participating in the big events in their friends’ lives if asked. agency 0 3 legal 2 char-0 explicit-no saying no to being a bridesmaid at a friend’s wedding reddit/amitheasshole/9tzn0z People are expected to participate in the big events in their friends’ lives if asked. rot/reddit/amitheasshole/9tzn0z/3EG49X351XRR9FSSYVYCH4PEC656XX/89/1 89 39 3 narrator|a bridesmaid|a friend
amitheasshole 1 test 3 social-norms care-harm|loyalty-betrayal char-1 0 Partners should Listening to each other’s issues. agency 2 3 legal 2 char-1 probable telling my boyfriend I am bored and unhappy at my job reddit/amitheasshole/a1311q Partners should listen to each other’s issues. rot/reddit/amitheasshole/a1311q/3JV9LGBJWWT6CZ369HK2AIBAUGUGOV/111/2 111 145 2 narrator|my boyfriend

Author

Maxwell Forbes†‡ Jena D. Hwang‡ Vered Shwartz†‡ Maarten Sap† Yejin Choi†‡
†Paul G. Allen School of Computer Science & Engineering, University of Washington ‡Allen Institute for AI

Abstract

  • introduce SOCIAL-CHEM- 101, a large-scale corpus that catalogs 292k rules-of-thumb such as “It is rude to run a blender at 5am” as the basic conceptual units.
  • Each rule-of-thumb is further broken down with 12 different dimensions of people’s judgments, including social judgments of good and bad, moral foundations, expected cultural pressure, and assumed legality
    • which together amount to over 4.5 million annotations of categorical labels and free-text descriptions.
  • NEURAL NORM TRANSFORMER, learns and generalizes SOCIAL-CHEM-101 to successfully reason about previously unseen situations, generating relevant (and potentially novel) attribute-aware social rules-of-thumb
자세히 보기

Learning rate & warmup step & LR scheduling

Background

요즘 딥러닝을 하다보면 수도없이 접하게 되는 단어 중 하나는 learning rate, warmup, LR scheduler와 같은 것들입니다.
이미 시중에 여러가지 기법들이 나와있고 한번은 정리해야겠다 생각했는데, 우연히 좋은 스레드를 발견하게 되서 공유해봅니다.

버트 논문에는 다음과 같은 그림이 있습니다. 여기서 밑줄쳐진 learning rate warmup과 linear decay에 대한 내용입니다.

Warmup

일반적으로 lr warmup은 말그대로 천천히 lr을 올리는 작업을 뜻합니다.
lr을 2e-5로 셋팅하고 warmup step을 10,000으로 셋팅한다면, (linear 일 경우) lr은 10,000 스텝동안 0에서 2e-5 까지 증가하게 됩니다.
코드 구현을 보면 다음과 같습니다
현재 스텝(global step)이 warmup 스텝 대비 어느정도이지 비율을 구하고 (warmup_percent_done = global_steps_float / warmup_steps_float)그에 맞는 warmup_lr을 구하는 방식으로 lr을 조절해갑니다. (warmup_learning_rate = init_lr * warmup_percent_done)

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
34
35
36
37
38
39
40
41
def create_optimizer(loss, init_lr, num_train_steps, num_warmup_steps, use_tpu):
"""Creates an optimizer training op."""
global_step = tf.train.get_or_create_global_step()

learning_rate = tf.constant(value=init_lr, shape=[], dtype=tf.float32)

# Implements linear decay of the learning rate.
learning_rate = tf.train.polynomial_decay(
learning_rate,
global_step,
num_train_steps,
end_learning_rate=0.0,
power=1.0,
cycle=False)

# Implements linear warmup. I.e., if global_step < num_warmup_steps, the
# learning rate will be `global_step/num_warmup_steps * init_lr`.
if num_warmup_steps:
global_steps_int = tf.cast(global_step, tf.int32)
warmup_steps_int = tf.constant(num_warmup_steps, dtype=tf.int32)

global_steps_float = tf.cast(global_steps_int, tf.float32)
warmup_steps_float = tf.cast(warmup_steps_int, tf.float32)

warmup_percent_done = global_steps_float / warmup_steps_float
warmup_learning_rate = init_lr * warmup_percent_done

is_warmup = tf.cast(global_steps_int < warmup_steps_int, tf.float32)
learning_rate = (
(1.0 - is_warmup) * learning_rate + is_warmup * warmup_learning_rate)

# It is recommended that you use this optimizer for fine tuning, since this
# is how the model was trained (note that the Adam m/v variables are NOT
# loaded from init_checkpoint.)
optimizer = AdamWeightDecayOptimizer(
learning_rate=learning_rate,
weight_decay_rate=0.01,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-6,
exclude_from_weight_decay=["LayerNorm", "layer_norm", "bias"])
자세히 보기

LLM(Large-Scale Language Model)을 위한 넓고 얕은 지식들

최근 LLM 관련 일을 하면서 익혀야할게 너무나 많다는 사실을 새삼스럽게 알게 되었다. 예전엔 아 그냥 하면 되지~ 정도로 생각했는데.. 디테일한게 생각보다 많구나 싶어서 이것 저것 많이 보기야 봤는데 머리에 남는게 없는 것 같아서 글로 간단하게 그리고 약간 어쩔수 없이 파편화된 상태로 정리해놓으려한다. 나 포함 누군가에게 도움이 되기를 바라며

PyTorch로 분산 어플리케이션 개발하기

  • 제일 먼저 볼 것!
  • 참고
  • Pytorch Multi-GPU 정리 중
  • node_gpu
  • 분산학습을 할때 로그를 찍으면 프로세스 개수만큼 찍힌다 -> 따로 처리가 필요해짐! if rank==0일때만 찍게 한다던지

code snippet

all-reduce

  • EleutherAI gpt-neox
    1
    2
    3
    4
    5
    6
    def reduce_losses(losses):
    """Reduce a tensor of losses across all GPUs."""
    reduced_losses = torch.cat([loss.clone().detach().view(1) for loss in losses])
    torch.distributed.all_reduce(reduced_losses)
    reduced_losses = reduced_losses / torch.distributed.get_world_size()
    return reduced_losses

Multi GPU & Node

자세히 보기