데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      쉽게이해하는 GPT. 1편(다음단어 예측기. Base모델)

      Teus 25.05.12
      1,997 6 1
      DEVOTEE 요약
      GPT는 "다음 단어 예측기"로, 이전 문맥을 바탕으로 다음에 올 단어를 예측하는 모델입니다. GPT의 핵심 구조는 Transformer 모델의 Decoder만을 활용한 구조(Decoder Only Transformer)로, 입력 문자열을 Vector로 변환하고 이를 이용해 다음 단어를 예측하며, 인터넷 상의 방대한 텍스트 데이터를 활용해 학습됩니다. LLaMA 모델을 예로 들면, 입력 문자열을 Vector로 변환해 학습 데이터를 생성하며, 이를 통해 대규모 사전 학습된 상태의 LLM(Base Model)이 만들어집니다.

      안녕하세요. Teus입니다.

      이번에 포스팅에서는 GPT라는게 어떻게 구성이 되어있고

      현재 많이 쓰이는 ChatGPT의 동작을 LLAMA모델을 통해서 대략적으로 알아봅니다.


      0. 다음단어 예측기

      전체적인 문맥을 만드는 일은 굉장히 어렵지만

      현재 단어를 보고, 다음에 올 단어를 예측해보는일은 어느정도 가능한 일 입니다.

      예를 들어 볼까요?

      life is short

      image.png

      위 문장만 주어질 경우 다음 단어가 무엇이 나와야 할지 맞추기 어렵지만

      life is short, you need

      까지 주어지면, 앞에있는 단어들을 통해서 해당하는 문장의 다음 단어가 python일것이라고 대략적으로 예상해 볼 수 있습니다.(물론 🍺도 맞지만요!)

      이처럼 문장이 주어지고, 그 문장 다음에 어떤 단어가 나올지를 맞추는게 GPT의 알파이자 오메가 라고 할 수 있습니다.

      이때 문장을 주고, 해당하는 문장에 따른 다음 문자를 예측하면 되는것이기 때문에

      기존 머신러닝의 데이터 : Label1 과같은 형태의 데이터가 없더라도

      인터넷에 존재하는 모든 텍스트가 이런 다음단어 예측기의 데이터로 활용이 가능해 집니다.


      1. GPT

      GPT는 이제는 유명해진 General Pretrained Transformer의 약자 입니다.

      full name에서 추론해 볼 수 있지만, 블라블라Transformer 인것을 알 수 있습니다.

      Transformer(범블비🤪) google의 attention is all you need에서 처음 등장한것으로 알고있습니다.

      그리고, 이 Transformer를 설명할 때 항상 아래그림이 등장하죠

      image.png

      근데, 저만 그런가요?

      사실 이렇게 주어지고, 이해하라고하면 저는 잘 모르겠더라구요.

      그래서 조금더 설명을 추가해 봤습니다.

      image.png

      조금은 설명을 추가해 봤습니다.

      1. 아 multi-head attention 뭔지 잘 모르겠고!

      2. 아니 데이터가 도대체 어디서 어디로 흐르는 것이냐아아ㅏ

      위 두가지를 반영 해봤는데요

      1. (왼쪽 남색부분)Inputs를 통해서 들어간 문자열은 Vector로 변환됩니다.

      2. (보라색 부분)1️⃣에서 처리가 완료된 Vector를 사용해서 뭔지 모르겠지만 Encoding 동작을 하면, 그 결과로 Input한 Text의 특성을 보유한 Latent Vector가 생성됩니다.

      3. (오른쪽 남색부분)Latent Vector를 사용해서 이제 새로운 무언가를 출력해 내야합니다. 이때 가장먼저 start token이 들어갑니다. 이 start token역시 단어의 일종이어서, Vector로 변환됩니다.

      4. (초록색 부분)Latent Vectorstart token의 특성을 뽑아내는 중간에 끼어넣고, 출력해야하는 Text의 특성을 뽑아냅니다.

      5. (주황색 부분)4️⃣에서 얻어진 출력 Text의 특성을 활용해서, start token 다음에 올 문자를 추측합니다.

      6. 5️⃣에서 얻어진 단어(Ex. Hello)와 start token을 합쳐서 [start token] Hello를 만들고, 이 문자를 다시 3️⃣에다가 넣어줍니다.

      7. end token이 나올때까지 3~6을 반복해 줍니다.

      여기서 Latent Vector없이 오른쪽 부분이 바로 다음단어 예측기인 것을 알 수 있고,

      Transformer는 다음단어는 예측할 때 입력문장의 정보까지 참고해서 예측한다고 할 수 있습니다.

      image.png

      3. 어떻게 학습시켜요?

      Transformer의 경우 입력된 값이있고, 입력된 값에 따른 적당한 출력값이 필요합니다.

      그래서 0. 다음단어 예측기와 같이 단순하게 학습시킬 수 없고

      입력된 문장에 대응되는 적당한 결과문장이 필요합니다.

      (그래서 Transformer를 설명할때 자주 언급되는게 번역작업 이죠)

      여기서 이제 아이디어를 내는게

      그러면 그냥 입력 문장의 특성추출부분 없이, 바로 예측해버리면 되는거 아냐?

      가 됩니다.

      그래서, 최신 GPT계열의 모델들의 경우 다음단어 예측기(Decoder) Only Model이 대세를 이루고 있습니다.


      4. 다음단어 예측기(Decoder) Only Model

      그래서 입력문장의 특성추출을 별도로 분리하지않고

      입력문장을 그대로 출력문장의 단어예측에 집어넣는 방식이 바로 Decoder Only Model입니다.

      image.png

      https://dugas.ch/artificial_curiosity/GPT_architecture.html

      이런 구조로 될 경우

      life is short, you need 가 들어갈 경우 python이라는 문자가 출력되게 모델의 가중치를 학습시키면 되고

      문장은 온라인 상에 넘쳐나기 때문에, 학습에 어려움이 없습니다.

      huggingface에 올라온 LLaMa2 모델을 살펴보면

      image.png

      #Pytorch 의사코드로 표현된 Llama2
      class LlamaModel(nn.Module):
          def __init__(self, vocab_size, dim, hidden_dim, num_layers, num_heads, max_seq_len):
              super().__init__()
              #문자열 -> Vector 변환기
              self.embed_tokens = nn.Embedding(vocab_size, dim)
              #Vector를 이용해서 다음 문자열을 추측하기위한 정보 추출
              self.layers = nn.ModuleList([
                  LlamaDecoderLayer(dim, hidden_dim, num_heads)
                  for _ in range(num_layers)
              ])
              self.norm = RMSNorm(dim)
              self.max_seq_len = max_seq_len
      
          def forward(self, input_ids, mask=None):
              x = self.embed_tokens(input_ids)
              for layer in self.layers:
                  x = layer(x, mask)
              return self.norm(x)
      
      class LlamaForCausalLM(nn.Module):
          def __init__(self, vocab_size, dim, hidden_dim, num_layers, num_heads, max_seq_len):
              super().__init__()
              self.model = LlamaModel(vocab_size, dim, hidden_dim, num_layers, num_heads, max_seq_len)
              #추출된 정보를 바탕으로 다음에 올 문자에 대한 확률 return
              self.lm_head = nn.Linear(dim, vocab_size, bias=False)
      
          def forward(self, input_ids, mask=None):
              hidden_states = self.model(input_ids, mask)
              return self.lm_head(hidden_states)

      Decoder Only Transformer의 모습을 보여주는것을 확인할 수가 있습니다.

      이러한 Decoder Only Transformer에 천문학적인 문서를 통해서 다음 문자를 예측하게 만든 상태를

      pre-trained 상태 LLM 또는 Base Model이라고 부릅니다.

      하지만 지금까지 본 내용 만으로는

      어떻게 GPT가 유저와 Chat이 가능한지 예상하기 어렵습니다.

      GPT가 어떻게 유저와 Chat이 가능한다는 다음 포스팅에서 다룹니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      Teus 님의 최신 블로그

      더보기