Community

항해 플러스 AI 후기 4주차 WIL

1. 이번 주 목표 * 요새는 학습한 내용들을 회사에서 어떤 문제를 푸는데 활용할 수 있을지 고민하고 있다. 이번주도 똑같다. 이번주 학습 내용을 어떻게 회사에서 활용할 수 있을지 고민해보는게 목표다. 2. 학습 내용 1. HuggingFace * HuggingFace 이전에 Transformer와 관련된 Model, Trainer 등은 매번 새로 구현해야 했으므로 손이 많이가고 귀찮았다. * 하지만 HuggingFace가 이미 구현한 모델을 제공하기 때문에, dataset만 구하면 편하게 활용할 수 있음. 1.1 Transformer Variants * 일반적으로 Transformer를 사용하는 task들은 다음과 같다 * Text Classification: 감정 분석과 같이 주어진 text의 label을 예측하는 task. * Sequence-to-sequence: 기계 번역과 같이 입력, 출력이 모두 text인 task. * Pre-training: 단순히 Transformer의 자연어 이해 능력을 올리기 위한 Task * 위의 task들은 기존 transformer의 마지막 layer를 수정하거나 두 개의 transformer를 연결하는 등의 서로 다른 구현을 요구한다. * HuggingFace는 다음과 같이 다양한 Transformer의 구현체들을 제공한다. * AutoModelForSequenceClassification: text 분류를 위한 모델입니다. * AutoModelForSeq2SeqLM: sequence-to-sequence task를 위한 Transformer 구현체입니다. * AutoModelForCausalLM: GPT에서 활용하는 next token prediction을 위한 모델입니다. * AutoModelForMaskedLM: BERT에서 활용하는 mask token prediction을 위한 모델입니다. 이외에도 다양한 종류의 Transformer 구현체들이 있으니 필요할 때 참고해보면 좋을것 같다. 1.2 Data Hub * 오픈소스로 공유된 Dataset과 Pre-trained model을 사용할 수 있다. * 최신 논문들의 구현체나 데이터셋들을 함께 배포하는 경우가 많아, 날먹 연구하기 좋을 것 같다. 1.3 Trainer * Transformer류의 모델을 학습시킬 때 다음과 같은 순서를 반복하여 학습한다. 1. Loss 계산: evaluate 함수를 통해 현재 보유한 모델의 성능을 평가 2. Gradient 계산: 1에서 계산한 성능을 기준으로 parameter들의 gradient를 계산 3. Gradient descent: Adam 등의 optimizer를 사용하여 gradient descent를 진행 * 이 과정에서 task가 바뀔 때 마다 loss, optimizer 등을 새로 구현해야하는 pain point가 있었으나 HuggingFace에 loss, optimizer, train logic을 묶어 Trainer로 구현해 놓았다. * TrainingArguments에 원하는 arguments들을 전달하고 trainer.train() 호출 한번으로 많은 양의 코드를 대체할 수 있다. 2. Zero & Few-shot Classification * 지난주에 GPT의 next token prediction에 대해 간단하게 언급했었는데, 다시 짚고 넘어가보자. 2.1 Next Token Prediction 1. Next token prediction은 주어진 문장을 보고 다음에 어떤 token이 나올지 예측하는 방식으로 학습을 진행한다. 2. 여기서 어떤 token이 나올지 예측하는 분류( Classification ) 문제이기 때문에 tokenizer에 포함된 모든 token들에 대해 확률을 계산한다. * 이 때 각 token에 대한 확률 분포를 logit 이라고 부른다. 2.2 Zero-shot Classification ❓ LLM이 특정 token에 대한 logit 을 구할 수 있는건 알겠는데, 이걸로 어떻게 Classification 을 해야할지 모르겠는데? * logit 을 이용하면, text 분류 중 하나인 영화 감정 분석 문제를 LLM으로 해결할 수 있다. 1. 영화 리뷰와 label 이어붙이기 * “The movie was interesting. The review is positive” * “The movie was interesting. The review is negative” 2. 이어붙인 label의 logit 구하기 * 1에서 만든 문장들을 LLM에 넣은 후 text로 변환한 문장에 대한 logit을 계산한다. * 예를들어 ". The review is positive" 에서 ""가 주어졌을 때 "The review is positive"가 나올 확률을 계산한다. 3. 가장 확률이 높은 label을 예측 값으로 설정 * 이 과정에서 가장 큰 장점은 학습이 전혀 필요하지 않다. 2.3 Few-shot Classification ❓ LLM의 logit 계산 능력을 활용하면 Text Classification 을 별다른 학습 없이도 할 수 있다는 것을 알게 되었다. 근데, 이 때 학습할 수 있는 data가 있다면 이를 활용할 수 있을까? * 당연히 가능하다. 위의 예시 문장처럼 몇가지 샘플을 주면 된다. “The movie was fun. The review is positive” “The movie was sad. The review is negative” ". ." * 이렇게 예제를 주면 few-shot learning의 원리로 답변에 대한 성능이 올라갈 수 밖에 없다. 3. Prompting * LLM을 사용할 때 같은 문제를 풀더라도 더 좋은 성능이 내도록 입력을 꾸미는 작업 3.1 CoT: Chain-of-thoughts 수학문제가 있다고 가정한다: 과거 LLM들은답을 바로 내놓으려 했으나 이런 방식들은 다음과 같은 문제가 있다: * 좋지 않은 성능: 기본적으로 LLM은 추론에 약하기 때문에 바로 답을 내놓아야 하는 경우 성능이 떨어짐 * 신뢰도가 떨어지는 답안: 중간 과정이 생략되었기 때문에 답안에 대한 검증도 힘들고, 틀린 이유도 알 수 없기 때문에 신뢰도가 떨어짐 따라서 이런 문제를 해결하기 위해 나온 prompting이 바로 CoT 이다. Cot 는 주어진 문제를 풀이와 함께 풀도록 하는 prompting 방법으로 일종의 Few-shot learning이다. 3.2 PAL: Program-aided language model LLM이 수학 문제를 풀 때 생기는 또 다른 문제점은 연산 과정의 오차이다. 이러한 오차를 해결하기 위해 나온 기법 중 하나는 수식을 코드로 풀어서 해결하는 것이다. 코드를 활용하도록 식만 제대로 쓴다면 오차가 생길 수 없으므로 수학 문제를 푸는 것이 훨씬 유리해진다. 따라서 대다수의 LLM은 마지막에 코드를 써서 풀어줘 라고 말만 해줘도 출력에 코드를 활용한다. 3.3 RAG: Retrieval Augmented Generation * 인터넷 자료를 찾아보게 하고 답변을 작성하게 함. * 높은 정확도와 신뢰도를 얻을 수 있음. 3. 느낀점 * 원래 이 개념 저 개념 따로 놀았던 것 같은데 요새 개념들간에 신경망이 좀 이어지는 느낌이다. * "개념 원리가 이렇다면, 어찌어찌 활용해야 실제 업무에서 발생하는 문제들을 해결할 수 있겠다." 하는 생각들이 든다. * 실제로 덕분에 스쿼드에서 의견을 많이 내놓고 있기도 하다. 빨리 앓던 이가 빠졌으면..

알림

알림이 없습니다