Deep Learning 5

[모델 경량화] [1] Quantization 이란?

1. 모델 경량화와 Quantization: 심층 신경망 최적화를 위한 전략  최근 인공지능(AI)과 딥러닝 기술이 폭발적으로 발전하면서, 높은 정확도를 자랑하는 대규모 신경망 모델들이(ChatGPT, DeepSeek 등) 각광받고 있습니다. 그러나 이러한 모델들은 높은 메모리 사용량, 전력 소모 그리고 긴 추론 지연(latency) 등의 문제점을 내포하고 있습니다. 이에 대한 해결책으로 모델 경량화 기술이 연구되고 있으며, 그 중 Quantization(양자화)는 대표적인 기법으로 주목받고 있습니다.  2022년 ChatGPT의 등장은 인공지능 기술이 실제로 상용화되어 사람들에게 널리 알려지게 된 전환점 되었으며, 이후 대중의 일상에도 인공지능 기술이 더욱 가까워지고 있습니다. 하지만 인공지능이 우리 ..

[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)..