본문 바로가기

경제학코딩 202311

[Decoder Generator] 이전 포스팅에서 설명한 코드들이 어떻게 작동하는지 알아본다. 우선 이전 포스팅에서 설명한 SimpleModel class의 instance를 만들고 불러온다. model = SimpleModel().to(device) m = model .to(device) 부분은 colab의 gpu사용 시, model과 data가 모두 gpu에 올라와 있어야 하기 때문에 첨부된 코드이다. 앞서 만든 xb, yb를 가져와서 model을 실행한다. 이 과정에서 SimpleModel class의 forward 멤버 함수가 작동한다. #xb, yb = get_batch('train') logits, loss = m(xb, yb) forward 함수의 실행 결과로 logit과 loss가 반환된다. logit은 256*65 값으로.. 2023. 12. 17.
[Decoder Model] class SimpleModel(nn.Module): def __init__(self): super().__init__() self.tok_emb = nn.Embedding(vocab_size, n_emb) self.pos_emb = nn.Embedding(block_size, n_emb) self.blocks = nn.Sequential( Block(n_emb, n_head=4), Block(n_emb, n_head=4), Block(n_emb, n_head=4), ) self.lm_head = nn.Linear(n_emb, vocab_size) def forward(self, idx, targets=None): B, T = idx.shape tok_emb = self.tok_emb(idx) # (B,.. 2023. 12. 17.
[Decoder Data Step] 이번 포스팅부터는 위 참조 그림의 우측에 해당하는 영역에 대해 알아본다. 우선 실습을 위해 Shakespear의 작품이 담긴 dataset을 가져온다. !wget "https://raw.githubusercontent.com/Joocheol/Transformer/b96eaede3556f79a0948ef8dc666848380dc9e6e/input.txt" 우리는 이 text를 input 으로 하여 새로운 text를 만들어내는 것을 목표로 한다. 필요한 기능들을 import하고 변수를 세팅한다. import torch import torch.nn as nn from torch.nn import functional as F batch_size = 32 block_size = 8 max_iters = 3000 .. 2023. 12. 17.
[Attention Mask] tril을 통해 lower traingular matrix를 만들 수 있다. attention_mask = torch.ones(2,2).tril(diagonal=0) attention "mask"라는 이름처럼, attention mask는 1인 부분의 data만 남기고 0인 부분의 data를 지우는 데 사용한다. 혹은, masked_fill을 사용해 traingular matrix의 특정 부분을 원하는 값으로 바꿀 수 있다. 아래의 코드는 0인 부분을 -infinity로 바꾸는 코드이다. attention_mask = attention_mask.masked_fill(attention_mask==0, -float('inf')) attention_mask attention mask에 softmax를 취해서 .. 2023. 12. 17.