본문 바로가기

반응형

Machine Learning Models

(56)
Open CLIP text embedding pooling 현재 인공지능의 대표적인 키워드를 하나 꼽으라면, 인간의 의사소통에서 사용하는 이미지, 텍스트, 음성 등의 다양한 매개체를 연결하는 multi-modality 구현일 겁니다. 특히 다양한 전달 매개체 중에 직관적이면서 다루기 쉬운 text 데이터와 이미지를 연결하려는 시도가 중심적으로 이루어졌고, OpenAI가 CLIP (Contrastive Language-Image Pretraining) 모델을 내놓으면서 multi-modality 연구의 중요한 분기점이 시작되었습니다. 이제는 CLIP 모델은 image-text 기반의 다양한 연구에 디폴트로 사용되고 있고 open_clip 라이브러리를 통해 매우 손쉽게 모델을 불러와 사용할 수 있습니다. import open_clip model, _, preproc..
Pytorch 텐서 복사 - clone, detach 차이 Pytorch에서 텐서를 복사하는 방법은 여러 가지가 있지만 대표적으로 clone 메서드와 detach 메서드가 있습니다. 먼저 clone 메서드는 복사한 텐서를 새로운 메모리에 할당합니다. 따라서 복사 대상 텐서의 값이 변해도 복사한 텐서의 값이 변하지 않는 deepcopy라고 볼 수 있습니다. 하지만 detach 메서드는 텐서를 복사하지만 복사 대상 텐서와 메모리를 공유합니다. 따라서 기존 텐서의 값이 변하면 복사한 텐서의 값도 따라서 변하게 됩니다. 다만, back-propagation을 위한 기울기 계산 그래프에서 제외되죠. 먼저 clone 메서드부터 보겠습니다. clone() 어떠한 텐서를 clone 메서드를 이용해 복사하게 되면 기존 계산 히스토리 이력은 그대로 유지하면서 새로운 메모리를 할당..
Smooth L1 Loss vs Huber Loss 일반적인 회귀 (regression) 훈련에는 예측값과 실제값 차이의 절댓값인 L1 loss나 예측값과 실제값 차이의 제곱인 L2 loss를 목적 함수로 사용하게 됩니다. 잘 알려져 있다시피 L2 loss는 모든 구간에서 안정적으로 미분이 가능하지만 제곱이 들어가는만큼 아웃라이어 (이상치)에 민감하게 반응하고, L1 loss는 아웃라이어에 L2 loss 대비 강건한 대신 미분이 불가능한 지점이 존재하고 평균 대신 중앙값 (median)을 추정하는 만큼 부정확한 요소가 존재합니다. 따라서 L1, L2 loss을 합친 Smooth L1 loss나 Huber loss가 제안되었습니다. Huber loss, Smooth L1 loss 모두 L1과 L2의 장점 만을 합치고자 제안된 목적 함수로 공통적으로 예측값과..
LightGBM feature importance Feature Selection - XGBoost Feature Selection - Random Forest (1) Feature Selection - Random Forest (2) 최근 XGBoost, LightGBM, Random Forest, Factorization Machine 등 여러 알고리즘을 이용해 회귀 모델을 구성한 적이 있습니다. MAE, R2 등의 정확도는 비슷했지만 feature importance를 측정하니 LightGBM 모델에 대해서만 feature importance가 다른 양상을 나타냈습니다. Figure 1을 보면 LightGBM 모델의 경우 feature importance 합이 1이 되지도 않고 A부터 H까지의 feature가 균등한 importance를 가지고 있..
Pytorch - DistributedDataParallel (2) - 동작 원리 Pytorch - DataParallel Pytorch - DistributedDataParallel (1) - 개요 Pytorch DDP (torch.nn.parallel.DistributedDataParallel) 함수는 어떤 방식으로 동작할까요? 먼저 각 process 별로 torch.nn.Linear 함수를 이용한 간단한 선형모델을 한 번의 forward/backward pass를 거치는 간단한 예제를 살펴보겠습니다. import torch import torch.distributed as dist import torch.multiprocessing as mp import torch.nn as nn import torch.optim as optim from torch.nn.parallel impo..
Pytorch - DistributedDataParallel (1) - 개요 Pytorch - DataParallel 지난 포스트의 DataParallel 모듈은 하나의 machine에 붙어있는 multi-gpu를 사용하여 훈련하는 방법이지만 최근에는 하드웨어 리소스를 충분히 활용하기 위해 하나의 machine 만이 아닌 여러 개의 machine을 동시에 활용하여 deep neural networks를 훈련시키는 distributed data parallel 방법 또한 필수적으로 사용되고 있는 상황입니다. 즉, $N$개의 machine에 $G$개의 gpu가 달려있다면 총 $N\times G$개의 gpu를 딥러닝 훈련에 사용하겠다는 것이죠. Figure 1은 2개의 machine과 각 machine 별로 4개의 gpu가 달려 있는 분산 환경을 나타내며 DDP (Distributed..
Pytorch - DataParallel 제가 딥러닝을 처음 시작한 2017년 초반에 대학원에서 사용한 GPU는 GTX1080Ti 였습니다. 메모리가 대충 11 GB 정도 였던 것으로 기억하는데 서버당 GPU 4기씩 설치되어 있었으니 그 당시로서는 학교에서 사용할 수 있는 최선의 인프라를 제공받았었죠 ㅎㅎ. 물론 서버 하나를 제가 독점하지는 않았지만요. 제가 처음 작업한 딥러닝 프로젝트는 100 GB가 넘는 대용량 음성 데이터를 이용한 multi-gpu training 이었습니다. 그 당시에는 Pytorch가 나오기 직전이었고 (아마 lua로 된 Torch만 있었던 것으로 기억합니다.) 딥러닝 프레임워크로 사용한 tensorflow 에는 gpu 병렬구현 api가 존재하지 않았습니다. 즉, multi-gpu에 필요한 1) gpu 별 모델 복사, ..
Pytorch - ModuleList vs List Pytorch의 nn 모듈은 neural networks를 위한 다양한 구성 요소 클래스를 제공합니다. 특히, 여러 개의 구성 요소를 하나의 리스트로 담는 nn.ModuleList 객체 또한 많이 사용되는데요, 겉보기에는 일반 파이썬 list와 큰 차이가 없어 보입니다. 다음과 같이 간단한 네트워크를 구성해 보겠습니다. import torch import torch.nn as nn class MyNN(nn.Module): def __init__(self, fc_input_size, fc_hidden_sizes, num_classes): super(MyNN, self).__init__() fcs = [nn.Sequential( nn.Linear(fc_input_size, fc_hidden_size), nn..

반응형