항해플러스 AI 후기(3주차) - BERT, GPT의 작동 방식

블로그에서 이미지와 함께 보기 : https://velog.io/@soonmac/hh-plus-ai-week3


## 토요지식회 오픈

매주 오프라인 정기 모임에서는 과제 리뷰를 하기 전, 토요지식회 시간을 갖는다.

발제 내용 말고도 AI 관련해서 자신이 시도한 것이나 배운 것들을 공유하는 시간인데 이번에는 두 분이 나오셔서 각각 MCP와 트랜스포머의 파라미터 수를 직접 계산하는 것에 대해 발표했다.

MCP 관련 발표가 흥미로웠는데, 발표자 분은 클로드 데스크탑에 MCP 환경을 구축해서 리서치, 블로그 글 작성, 일정 관리까지 활용하고 있었다.

오~ 매우 흥미로워... 나도 시도해보고 싶긴한데 지금 회사 + 방통대 중간고사 기간 + 부트캠프 과제 쓰리콤보로 부트캠프가 끝나야 시도를 해볼 수 있을 것 같다 하하ㅜㅠ


## 3주차 과제 회고

이번 과제는 MNLI 태스크를 BERT-base, distilBERT, 그리고 사전학습 하지 않은 Transformer에 각각 학습시켜서 정확도와 커브를 비교 분석해보았다.


* ***Multi-genre natural language inference(MNLI)** : 두 문장이 주어졌을 때 논리적으로 연결이 되어 있는지, 서로 모순되는지, 아니면 아예 무관한지 분류하는 문제다.

MNLI 데이터 셋의 구성요소는 아래와 같다.

-   premise (전제)

-   hypothesis (가설)

- labels ✅ label의 종류

- 함의(Entailment): 전제가 가설을 지 지하는 경우.​ -> 0

- 중립(Neutral): 전제가 가설에 대해 중립적이거나 관련이 없는 경우. -> 1

- 모순(Contradiction): 전제가 가설과 모순되는 경우.​ -> 2 


결과를 말하자면 distilBert와 Bert-base의 정확도 차이는 크지 않았고 오히려 distilBert가 약 5%차이로 더 좋은 성능을 내줬다.

사전학습하지 않은 트랜스포머에서는 freeze하지 않고 전체학습을 시켰는데, 그래서 학습용 데이터셋에 대한 정확도가 거의 1에 가까웠다.


자세한 내용은 아래의 깃헙에서 볼 수 있다.

https://github.com/sosososoyoen/hh_plus_ai_3/tree/main/work/week3/%EC%8B%AC%ED%99%94


아쉬웠던 점은, BERT에서는 freeze를 한 상태에서 학습을 시켰는데, 트랜스포머에서는 전체 학습을 시켜버렸다는 것이다.


그리고 다른 학생분들이 한 것을 보았는데 다른 학생분들은 pandas를 이용해 데이터 샘플이나 데이터 분석을 체계적으로 하여 깔끔하게 보고서를 썼는데

아 .. 이런 방법도 있구나! 하는 생각이 들었다.

같은 태스크를 비슷한 방식으로 해결했는데도, 테스트를 어떻게 하느냐에 따라서 보고서의 퀄리티가 달라지는 것 같다.


AI는 개발이 아니라 통계와 분석에 가깝다는 말을 들은 적이 있었는데 그 말이 맞는 것 같다.

비록 부족한 과제였지만, 그래도 Best Practice로 선정되어서 기쁘긴하다.

부트캠프 티어(게임 티어와 비슷)도 이번 과제들로 한 단계 승급해서 기분이 좋다ㅎㅎ


아래는 3주차에서 배운 내용들을 정리한 것이다!


## Transfer Learning(전이 학습)

* 사전 학습 모델(Pre-trained 모델) : 이미 충분한 데이터로 학습한 모델

* 파인 튜닝 : 사전 학습 모델로 자연어 처리 문제를 푸는 모델을 학습하는 것


## Pre-training

* Supervised pre-training : 입력값과 정답값이 나뉘어져 있는 자연어 처리 문제에 대해서 모델을 학습하는 방식

* 학습 데이터가 정답을 가지고 있음.

* 감정 분석(긍정/부정), 스펨 메일 분류

* Unsupervised pre-training : 주어진 입력값으로부터 가상의 label(정답)값을 생성해서 그것을 맞추는 방향으로 학습하는 방식

* 데이터에 정답이 없음

* 모델이 스스로 데이터의 패턴, 구조, 관계를 학습함

* 단어 임베딩, 텍스트 카테고리 분석

* 문장에서 단어 하나를 마스킹하고 이것을 맞추는 방식(MLM)도 포함


### 파인튜닝의 학습 방식

* 모든 파라미터를 포함하여 전체 모델 학습

* 마지막 classification 레이어를 태스크에 맞게 다시 정의하고, 나머지 부분은 사전 학습 모델의 파라미터들로 초기화 함

* 특정 레이어를 freeze하여 학습 (많이 사용!)

* 일반적으로 classification 레이어를 제외한 파라미터들을 고정함


### 왜 특정 레이어를 freeze해서 학습하는 걸까?

* 모든 파라미터를 학습 시키는 방식에는 메모리 이슈가 발생함

* 최신 언어 모델들은 파라미터의 개수가 수억, 수십억 개라 이 모든 파라미터를 학습시키면 메모리 사용량이 증가한다.

* 학습 시에는 각 파라미터에 대한 경사(gradient)와 파라미터의 현재 상태를 메모리에 저장 => 메모리 사용량 증가

* 오버피팅 이슈

* 파라미터가 많은 상황에서 적은 데이터로 학습을 하면, 데이터를 전부 다 외워버려서 예측을 잘 못하게 됨


## BERT

* 트랜스포머 인코더를 사용한 모델

* 이전의 Left-to-Right (Autoregressive)한 방식이 아닌 Bidirectional한 방법으로 모델 학습을 시도한다.

* left-to-Right 방식은 시퀀스 투 시퀀스를 생각하면 될 것 같다.

* unsupervised 방식으로 사전 학습 모델을 학습시키는 방식

* 입력값은 자연어로 하고 label이 필요 없기 때문에 위키나 인터넷에서 구한 텍스트를 그대로 입력값으로 사용할 수 있다.

* MLM, NSP 방식으로 사전 학습을 진행한다.


### Masked Language Model (MLM)

* BERT에서 사용하는 학습 방식

* 문장의 일부분을 지웠을 때(=마스킹 했을 때), 문장의 나머지 부분을 보고 마스킹된 단어를 맞추는 식으로 학습하는 것.

* 특정 토큰 마스크 : 학습 단계에서 랜덤하게 토큰들을 [MASK] 라는 스페셜 토큰으로 바꿈

* 마스크한 토큰 예측

### Next sentence prediction (NSP)

* BERT에서 사용하는 학습 방식

* 입력값이 두 문장으로 이루어져있을 때, 두 문장이 실제로 이어진 문장인지, 아니면 별개의 문장인지 맞추는 식으로 학습한다.


## DistilBERT

* Knowledge distillation(지식 증류)라는 방식을 통해 BERT와 비슷한 성능을 내지만 빠르고 가볍게 경량화를 시킨 모델


### Knowledge distillation(지식 증류)의 과정

1. 선생, 학생 모델 선정

* 선생 모델 : 성능이 좋은 사전학습 모델

* 학생 모델 : 우리가 학습시키고자 하는 소형 모델

2. soft label 생성

* 선생 모델을 통해 soft label를 생성함

* 예를 들어 MLM 에서 마스킹 된 단어에 대해 선생 모델이 예측한 값을 label로 삼는다.

* 이 때 soft label은 argmax를 하기 전 값을 의미함!

3. 학생 모델 학습 : 생성한 soft label을 가지고 학생 모델을 학습시킨다.


## GPT

* Generative(생성하는) Pre-trained(사전 학습된) Transformer(트랜스포머)

* 방대한 양의 텍스트 데이터셋에서 자연어의 패턴을 학습한 후, 텍스트를 이해하고 생성한다.

* BERT와 비슷한 방식으로 사전 학습을 진행한 모델

* 기본적인 아이디어는 BERT의 MLM과 비슷하지만 조금 다른 next token prediction이라는 방식으로 학습한다.


### next token prediction

* 기존의 MLM은 문장 중간의 토큰을 마스킹하고, 이를 맞추는 방식

* 이것은 문장의 마지막 토큰을 마스킹하고 맞추는, 앞의 문장만 보고 예측하는 방식

* 이 방식은 랜덤한 마스킹이 필요 없고, 문장 전체를 가지고 학습할 수 있다.


### BERT와의 차이점 - Text generative model

GPT가 예측값을 출력하는 과정은 아래와 같다.

1. 주어진 문장을 보고 토큰 생성

* GPT에 문장을 입력하면, next token prediction과 같은 방식으로 문장 다음의 토큰을 생성함

2. 생성한 토큰을 주어진 문장에 concat한다.

* 위에서 생성된 토큰을 주어진 문장에 붙인다. 그리고 이것을 다시 GPT에 입력하여 토큰을 생성한다. 이 과정을 반복하여 문장을 얻는다.

3. 스페셜 토큰이 나올 때까지 생성

* BERT의 [SEP] , GPT의 <|endoftext|> 와 같은 문장의 끝을 의미하는 토큰이 나올 때까지 반복

시퀀스 투 시퀀스 모델의 디코더가 텍스트를 생성하는 방식과 동일하다.

BERT는 마스킹된 토큰을 예측할 때 모든 문장을 토대로 예측하기 때문에 text를 생성할 수 없다.

반면, GPT는 마스킹 토큰 이전에 나온 토큰들을 가지고 예측하기 때문에 text 생성에 활용할 수 있다.


## Large Language Model (LLM)

* GPT 모델의 파라미터 수와 300B의 토큰을 학습시켜 내보인 모델

* 기계 번역, 질의 응답, 수학 연산에 있는 자연어 처리 문제들에 대해서 파인튜닝을 하지 않아도 괜찮은 정답을 내놓는 수준까지 오게 되었다.

* few-shot-learning이라는, 문제의 예시를 먼저 보여주고 주어진 문제를 풀게하는 방식으로도 태스크를 잘 해결할 수 있다.


## 🌟🌟 BERT와 LLM의 모델 선택 기준


### BERT 사용이 적합한 경우

* 입력이 짧고

* 분류, 추천, 의도 분석 등 비교적 단순한 task일 때

* 고성능 GPU가 부족할 때

* 특정 도메인에 대해 이미 훈련된 언어 모델을 그대로 활용하고 싶을 때

* 단점 : 자연어를 입력했을 때, 구조적인 한계로 새로운 텍스트 생성(요약, 번역 등)에 약함


### LLM 사용 적합한 경우

* 요약, 생성, 검색 증강, 수학 문제 풀기 등 다양한 언어 추론이 필요한 경우

* 멀티모달 데이터(이미지 + 텍스트 등) 기반 추천 기능


### 🌟BERT vs GPT 계열 모델 성격 비교

| 항목 | BERT | GPT/LLM |

| ------- | ----------- | ------------------ |

| 방향성 | 양방향 | 단방향(left to right) |

| 구조 | 인코더 | 디코더 |

| 주요 용도 | 분류, 임베딩 추출 | 생성, 요약, 생성기반 QA |

| 파라미터 크기 | 작음(0.1B~1B) | 큼(7B ~ 1000B) |


#항해99 #항해플러스 #AI #AI개발자 #항해플러스AI후기 #LLM #트랜스포머 #BERT


다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2025년 4월 13일 오후 1:24

댓글 0

    함께 읽은 게시물

    이직의 조건

    

    ... 더 보기


    어제 출시된 따끈따끈한 ChatGPT Codex를 실제 프로젝트 레포에 써 보았습니다.


    테스트가 있으면 스스로 테스트도 실행하고, 만든거 스스로 실행해보면서 버그도 수정하고 하는게 기특하긴 합니다.


    ... 더 보기

    React 면접 전 살펴보기 위한 Q&A 40가지 (2024년 ver)

    1. R

    ... 더 보기

    Top 40 ReactJS Interview Questions and Answers in 2024 | Simplilearn

    Simplilearn.com

    Top 40 ReactJS Interview Questions and Answers in 2024 | Simplilearn

     • 

    댓글 1 • 저장 218 • 조회 11,550


    기회

    

    ... 더 보기

    조회 484


    서비스 텐션

    ... 더 보기

    서비스 텐션

    K리그 프로그래머

    서비스 텐션

     • 

    댓글 1 • 저장 5 • 조회 3,732