본문 바로가기

반응형

Machine Learning Models

(56)
Pytorch - backward(retain_graph=True) (2) Pytorch - backward(retain_graph=True) (1) 일반적으로 손실 함수 (loss function)을 계산할 때는 배치에 대하여 평균/합 등을 통해 스칼라 값을 만들어준 이후에 .backward() 함수를 적용합니다. 스칼라 로스에 대한 각 파라미터 별 기울기를 계산하고 최적화를 수행하죠. 하지만 출력 $y$가 스칼라가 아닌 다변수 벡터 $y=$인 경우에는 .backward() 함수를 어떻게 적용할 수 있을까요? Pytorch에서는 JVP (Jacobian Vector Product)를 계산하여 최종 loss에 대한 파라미터 기울기를 계산합니다. 먼저 입력 벡터 $x=$, 출력 벡터 $y=$에 대해서 Figure 1과 같은 Jacobian matrix를 구성할 수 있습니다. 이 ..
Temporal Convolutional Network (TCN) Transformer 모델이 등장하기 전에는 자연어처리, 시계열 데이터 처리 등에는 RNN의 LSTM/GRU 모델이 압도적으로 많이 사용되었습니다. 그 와중에서 convolution의 locality를 잡는 특성과 dilation을 이용해 receptive field를 넓힌 WaveNet의 등장 이후 1차원 convolution을 시퀀스 데이터에 적용하려는 시도가 많이 있었는데요, 이번 포스트에서 알아볼 내용은 다양한 시퀀스 벤치마크 데이터셋에 대해서 LSTM/GRU에 비해 높은 성능을 보인 TCN (Temporal Convolutional Network) 모델입니다. Temporal convolutional network Causal convolutions 먼저 시퀀스 모델링을 입력 시퀀스 $x_0, ..
Pytorch LSTM 이번 포스트에서는 시계열 데이터에서 자주 쓰이는 'airline-passengers.csv' 데이터에 대해 Pytorch 프레임워크의 LSTM 모듈을 이용하여 시계열 예측을 수행해보도록 하겠습니다. Import libraries 먼저 필요한 라이브러리를 호출합니다. import torch import torch.nn as nn import numpy as np import pandas as pd import matplotlib.pyplot as plt from torch.autograd import Variable from sklearn.preprocessing import MinMaxScaler Load data 판다스의 'read_csv' 함수를 이용해 데이터를 읽습니다. csv 데이터의 첫번째 열은..
Pytorch - embedding 임베딩 (Embedding) 이라는 말은 자연어처리 분야에서 (NLP) 매우 많이 등장하는 단어로 이산적, 범주형인 변수를 sparse한 one-hot 인코딩 대신 연속적인 값을 가지는 벡터로 표현하는 방법을 말합니다. 즉, 수많은 종류를 가진 단어, 문장에 대해 one-hot 인코딩을 수행하면 수치로는 표현이 가능하겠지만 대부분의 값이 0이 되버려 매우 sparse 해지므로 임의의 길이의 실수 벡터로 밀집되게 표현하는 일련의 방법을 임베딩이라 하고 각 카테고리가 나타내는 실수 벡터를 임베딩 벡터라고 합니다. Pytorch, Tensorflow 딥러닝 프레임워크는 이러한 임베딩을 쉽게 할 수 있는 api 함수를 제공합니다. 임베딩을 할 전체 크기에 대해 각 카테고리 별로 지정한 차원을 가지는 임베딩 벡터..
GELU (Gaussian Error Linear Unit) BERT, GPT, ViT 모델에서는 인코더 블락 안의 2-layer MLP 구조의 활성화 함수로 ReLU가 아닌 GELU (Gaussian Error Linear Unit) 함수가 사용됩니다. 최신 NLP, Vision SOTA 성능을 도출하는 모델들이 GELU 함수를 사용하면서 최근에 발표된 것이 아닌가 싶지만 arxiv 상에서는 16년 6월에 올라온 나름 오래된 함수입니다. 입력 $x$의 부호에 대해서 self-gating 하는 ReLU 함수와 달리 ($x 1_{x>0}$) GELU 함수는 $x\Phi (x)$ 형태로 정의되는데요, 한번 살펴보도록 하겠습니다. GELU 함수는 dropout, zoneout, ReLU 함수의 특성을 조합하여 유도되었습니다. 먼저 ReLU 함수는 입력 $x$의 부호에 ..
Vision Transformer (4) - Pytorch 구현 Vision Transformer (1) Vision Transformer (2) Vision Transformer (3) - Attention Map 이번 포스트에서는 Pytorch 프레임워크를 이용하여 Vision Transformer 모델을 구현해보도록 하겠습니다. 복습을 위해 다시 한번 ViT 모델의 구조를 보도록 하겠습니다. Figure 1을 보면 먼저 입력 이미지를 패치 크기만큼 나누어 순서대로 정렬한 후 임베딩을 수행합니다. 이후에 Encoder 에서 Multihead Self-Attention, MLP, Layer Normalization 블락들이 residual connection 과 함께 수행되죠. 최종적인 분류를 위해서는 $z_0^0$에 학습가능한 파라미터로 삽입한 'class tok..
Vision Transformer (3) - Attention Map Vision Transformer (1) Vision Transformer (2) Transformer 모델의 가장 큰 특징은 self-attention 으로 시퀀스의 각 위치가 어느 위치에 집중하는지 쉽게 시각화해서 볼 수 있다는 점입니다. 이미지 기반 딥러닝에서도 모델의 결과를 설명하려는 interpreting explanability (XAI) 시도가 매우 많고 이를 여러 포스트에서 살펴보았는데요, 이번 포스트에서는 ViT 모델의 입력 이미지에 대한 explaianability 를 attention 을 이용하여 알아보도록 하겠습니다. 또한, 실습으로 최근 페이스북에서 릴리즈한 3개의 헤드를 가진 Deit Tiny 모델을 사용하도록 하겠습니다. 사용하기 위해서는 timm 이라는 대표적인 이미지모델의 ..
Vision Transformer (2) Vision Transformer (1) Experiments How fine-tuning 실험 시에는 ViT 모델을 큰 데이터셋에 대해 사전훈련 하고 작은 데이터셋에 대해 fine-tuning 하는 과정을 거칩니다. Fine-tuning 을 위해서 사전훈련된 $z_L^0$에 붙은 MLP 를 제거하고 0으로 초기화된 $D\times K$ 선형변환 층을 추가합니다. ($K$는 fine-tuning 데이터셋 클래스 개수) 또한, fine-tuning 시에 고해상도 이미지를 사용하는 것이 좋다고 알려져 있기 때문에 패치 크기를 일정하게 유지한 채 큰 크기의 이미지를 사용합니다. 패치 크기가 고정되니 상대적으로 시퀀스 길이가 더 늘어나겠죠. 단 이러한 경우에는 사전훈련을 통해 학습한 position 임베딩 텐서..

반응형