Deep Learning/Transformer 4

[Transformer] Transformer 코드 리뷰

Positional Encodingclass PositionalEncoding(nn.Module): """ Transformer는 입력 토큰의 순서를 고려하기 위해 위치 정보를 부가한다. 이를 위해 논문에서는 사인/코사인 함수를 이용한 Positional Encoding을 사용. PE(pos, 2i) = sin( pos / (10000^(2i/d_model)) ) PE(pos, 2i+1) = cos( pos / (10000^(2i/d_model)) ) """ def __init__(self, d_model, max_len=5000): super(PositionalEncoding, self).__init__() # pos : 0부터 max_..

[Transformer] Transformer의 다양한 Attention

Transformer는 자연어 처리(NLP)에서 놀라운 성능을 보여주는 대표적인 모델 구조로, 이 안에는 여러 종류의 Attention 메커니즘이 내재되어 있음. 특히 Multi-Head Attention을 중심으로 Encoder와 Decoder 각각의 역할에 맞춰 세분화된 Attention을 사용함. 그렇다면 왜 Transformer에는 이렇게 다양한 Attention이 필요하며, 각각의 Attention은 어떤 방식으로 작동하는 걸까? 그리고 어떤 점에서 미래 단어를 마스킹해야만 할까? 이 글에서는 이러한 질문들에 대해 깊이 있는 설명을 해보도록 하겠음. 왜 Transformer에는 다양한 Attention이 쓰여야만 했을까?  Transformer 이전의 전통적인 RNN(Recurrent Neura..

[Transformer] Transformer 왜 개발함?

Motivation of TransformerTransformer는 왜 개발됨?기존 LM(Language Model)에서 발생하는 문제점을 해결하기 위해서 고안.기존 RNN 기반 모델에서는 인코더에서 계산한 결과가 고정된 길이의 Context Vector로 압축되어 정보를 담아내다보니 정호가한 정보를 담아내지 못함. 이러한 문제를 해결하기 위해서 Transformer 개발함.또한 RNN 기반의 LLM(Large Language Model)은 Long term dependency 문제가 있음. Long term dependency는 긴 문장에서의 각 토큰 간의 상호 의존성에 문제가 있음. 문장이 길 경우 앞쪽의 단어들은 잊어버리는 문제점이 있었음.즉, RNN 기반의 언어 모델에는 두 가지 한계가 있음. 1..

[Transformer] Sinusoidal Positional Encoding

한 번 할 때 제대로 이해해놓기 위한 정리. 다음에 가물가물할 때 다시 볼 수 있도록.   class PositionalEncoding(nn.Module): def __init__(self, d_model, max_len=5000): super(PositionalEncoding, self).__init__() pe = torch.zeros(max_len, d_model) position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1) div_term = torch.exp( torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model)..