항해 플러스 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”


  1. 이어붙인 label의 logit 구하기

  • 1에서 만든 문장들을 LLM에 넣은 후 text로 변환한 문장에 대한 logit을 계산한다.

  • 예를들어 ". The review is positive" 에서 ""가 주어졌을 때 "The review is positive"가 나올 확률을 계산한다.


  1. 가장 확률이 높은 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”
"<예측 하고자 하는 review>. <label text>."
  • 이렇게 예제를 주면 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. 느낀점

  • 원래 이 개념 저 개념 따로 놀았던 것 같은데 요새 개념들간에 신경망이 좀 이어지는 느낌이다.

  • "개념 원리가 이렇다면, 어찌어찌 활용해야 실제 업무에서 발생하는 문제들을 해결할 수 있겠다." 하는 생각들이 든다.

    • 실제로 덕분에 스쿼드에서 의견을 많이 내놓고 있기도 하다. 빨리 앓던 이가 빠졌으면..


다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2025년 4월 20일 오후 1:34

댓글 0

    함께 읽은 게시물

    무너지고 있는 프론트엔드, 백엔드 직군의 경계에 대한 고찰

    AI 기술이 우리 일상과 산업 전반에 스며들면서 소프트웨어 개발 환경 역시 큰 변화의 물결을 맞이하고 있다. 특히 코딩을 돕는 AI 에이전트의 등장은 개발 생산성에 대한 큰 변화를 만들고 있다. 나 역시 이러한 변화를 체감하며, 나에게 익숙한 소프트웨어 개발의 대표적인 두 축인 프론트엔드와 백엔드 영역에서 AI 기술이 미치는 영향과 그로 인해 변화하는 소프트웨어 엔지니어의 역할에 대해 개인적인 생각을 정리해 본다.

    ... 더 보기

     • 

    저장 32 • 조회 3,801


    타입 안전한 API 모킹으로 프론트엔드 생산성 높이기

    이번에 우아한형제들 기술 블로그에 "타입 안전한 API 모킹으로 프론트엔드 생산성 높이기"라는 새 글을 발행하게 되었습니다.

    ... 더 보기

    Gemini 2.5 모델의 프롬프트 캐싱도 이제 자동 캐싱을 지원하는군요. 가장 기다렸던 기능!


    요약하면 Flash 는 1024 토큰 이상일 때, Pro 는 2048 토큰 이상일 때 발동!되며, 캐싱된 토큰의 비용은 75% 할인.


    자세한 토큰 갯수 단계나 캐시 만료 시간이 기재되어 있진 않은데, 써 보면서 파악을 해 봐야겠습니다. 챗봇류에서는 선택적으로 사용하면 될 것 같고, 배치성 잡에는 여전히 명시적 캐싱이 낫긴하겠네요.


    주니어 개발자들이 읽으면 좋은 테크 아티클 모음📚

    F-Lab 에서 주니어 개발자들이(사실 개발자라면 누구나) 보시면 좋을 아티클 모음을 공유해 주었네요! 검색엔진부터 비동기 처리, NoSQL 등 다양한 분야의 아티클들이 공유되어 있으니 관심있으신 분들은 보시면 좋겠습니다. F-Lab 에서 공유해주신 아티클 주제를 나열해보면 다음과 같습니다. 📌 구글이 직접 말하는 검색엔진의 원리 (tali.kr) 📌 검색 엔진은 어떻게 작동하는가 (xo.dev) 📌 네이버의 검색엔진의 특징과 알고리즘 (tistory.com) 📌 [네이버 블로그]네이버 검색의 원리 : 네이버 블... 더 보기

    주니어 개발자들이 읽으면 좋은 테크 아티클 모음

    F-Lab : 상위 1% 개발자들의 멘토링

    주니어 개발자들이 읽으면 좋은 테크 아티클 모음

     • 

    저장 121 • 조회 3,363


    차세대 파이썬 패키지 매니저 uv 소개 영상

    h

    ... 더 보기

    Introducing swiftly 1.0

    S

    ... 더 보기

    swiftly 1.0

    iOYES

    swiftly 1.0