본문 바로가기

분류 전체보기112

[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.
[Scaled dot product] Transformer란? Transformer는 2017년 논문, [Attention is all you need]( Ashish Vaswani 외)를 기반으로 만들어졌다. 위 이미지는 해당 논문 3페이지에서 발췌한 것이다. 위 이미지를 간략히 정리해 보면 아래와 같다. - softmax(output을 확률 형태로 바꿔주는 역할) - Feed Forward Network(f(wx+b) 연산 수행: linear 연산한 것에 activation function을 더한 것) - Add: 자기 output을 다음 layer로 넘기고, 다음 layer의 output에 다시 한 번 더해 주는 것. - Norm: Batch Normalization Layer - Multi-Head Attention: Transfor.. 2023. 12. 17.