본문 바로가기

DeepLearning

메모리 지도를 통한 오토인코더 기반 이상치 탐지 (Memory-guided autoencoder based anomaly detection) 1. 개요 오토 인코더 (autoencoder)는 어떤 사물의 특징을 좀 더 작은 차원으로 압축하는 인코더와 작은 차원에서 원래의 특징으로 복원하는 디코더 (decoder)로 이루어져 있다. 오토인코더는 자신이 학습한 것만을 잘 압축하고 잘 복구할 수 있기 때문에 학습이 된 적이 없는 사물이 주어지면 재복원 오차 (reconstruction error)값이 크게 나온다. 이를 활용해 이상치를 탐지에 이용할 수 있다.  하지만, 오토인코더가 종종 모든 사물을 잘 압축하고 잘 복원할 수 있는 경우가 생길 수 있다. 이러한 문제를 해결하기 위해 오토인코더를 학습한 후에 정상 데이터에 대한 특징을 저장하는 모듈 (memory module)을 만들어서 좀 더 견고한 이상치 탐지를 할 수 있다. 2. 원리 방식은 .. 더보기
[torch] DDP 모드에서 훈련된 모델 불러오기. def load_DDP_model(path,model_frame): ''' path : /path/to/DDP-trained-model.pt model_frame : model structure ''' state_dict=torch.load(path) from collections import OrderedDict new_state_dict = OrderedDict() for k, v in state_dict.items(): name = k[7:] # remove 'module.' of DataParallel/DistributedDataParallel new_state_dict[name] = v model_frame.load_state_dict(new_state_dict) return model_fram.. 더보기
[torch] multi-gpu (DDP)로 사용하기 튜토리얼 아래의 코드는 간단하게 autoencoder를 만드는 과정을 적은 것이다. mp.spawn해봤자 global에 있는 model에는 영향을 안준다. 따라서, 학습 중간에 훈련된 trained-model을 torch.save로저장해야한다. 다른 것으로는 과거의 loss변동을 이용하는 옵티마이저들 (ex. ADAM)같은 것들도 저장해서 불러와야한다고 한다. SGD는 해당사항이 없다. 이 부분에 대해서는 테스트가 필요할 것 같다. 다만, 나의 경우는 데이터가 너무 커서 컴퓨터 메모리에 모두 못 올리는 상황인 것이라 문제가 없지 않을까 한다. 현재 내 상황은 총 데이터는 5TB이고 메모리에 모두 못 올리니 50gb 정도 불러온 후에 이를 배치로 나눠서 훈련하고 있는 상황이다. 그리고 각 gpu에서 돌던 모델들이 .. 더보기
[torch] cross-validation을 위한 기능 만들기 (multi-gpu) 정리가 안된 단계이지만 DistributedDataParallel 기능을 잘 활용하면 cross-validation을 수행할 수 있을 것으로 보인다. 구체적으로 각 gpu만큼 k-fold cv가 가능하다. 다만, 각 gpu에서 연산된 loss값 같은 것은 pickle로 내보내게 한 후에 하나로 합쳐야할 것으로 보인다. 테스트가 필요한 사항은 아래와 같다. DDP를 통해 각 gpu에서 진행되던 모델이 학습되는 것이 연동된다면 정확한 k-fold는 아니게 된다. import os import sys import tempfile import torch import torch.distributed as dist import torch.nn as nn import torch.optim as optim import.. 더보기
[PRML] 2.2.1 The Dirichlet distribution (디리클레 분포) 1. 개요 앞서봤던 수식 2.34의 다항분포의 파라미터 {u_k}에대한 사전확률 중 하나인 디리클레 분포 (Dirichlet distribution)를 살펴보겠다. 2. 내용 다항분포의 형태를 탐구하면 결합 사전 분포 (conjugate piror)는 수식 2.37로 주어지는 것을 볼 수 있다. 여기서 0 더보기
[PRML] 2.2. Multinomial variables (다변량 변수) 1. 개요 이진 변수 (binary variables)는 2가지의 가능한 값들 중 하나를 정량화하는 것에 쓰일 수 있다. 하지만, 우리는 자주 K개의 상호적으로 겹치지 않는 상태들에 대해 마주할 수 있다. 다양한 방식으로 이를 서술할 수 있지만 편의상 1-of-K 개념 (1-of-K scheme)으로 살펴보려한다. 2. 내용 이 개념에서는 변수는 K차원의 벡터 x에 의해 표현되며 벡터 x의 원소 x_k는 1이고 나머지 원소들은 0이다. 예를들어 K=6개의 상태로 표현하면서 x_3=1이라면 벡터 x는 수식 2.25와 같이 표현된다. 여기서 벡터 x의 원소들의 합은 1을 만족한다. 만일 우리가 u_k라는 파라미터로 x_k=1의 확률로 나타내면 벡터 x의 분포는 수식 2.26과 같이 나타난다. 여기서 u_k의.. 더보기
[PRML] 2.1.1 The beta distribution (베타 분포) 1. 개요 수식 2.8에서 봤듯이 베르누이 분포와 나아가 이항 분포에서 u에대한 최대 가능도 설정은 데이터에서 x=1이라는 값을 갖는 관측값의 비율이다. 이것은 이미 말했듯이 과적합 문제를 작은 데이터셋에서 발생시킬 수 있다. 이 문제에 대해 베이지안 해결법을 적용하기 위해서는 우리는 u에대한 사전확률 p(u)를 도입해야 한다. 여기서 우리는 간단하고 유용한 분석적인 특징을 갖는 사전확률의 한 가지 형태를 고려할 것이다. 2. 내용 가능도 함수는 [u**x][(1-u)**(1-x)]의 형태의 원소들의 곱셈으로 이루어진다는 것을 알고 있다. 만일 우리가 사전확률이 u와 (1-u)의 승수 (powers of u and 1-u)에 비례하는 사전확률을 선택한다면, 사전확률과 가능도 함수에 비례하는 사후 확률 분.. 더보기
[PRML] 2.1. Binary variables (이진 변수들) 1. 개요 먼저, 단일 이진 무작위 변수 (single binary random variable) x ∈ {0,1}에 대해 다루면서 시작하겠습니다. 예를들어 x는 동전 던지기로 설명할 수 있습니다. x=1은 앞 면 (heads) x=0은 뒷면 (tails)로 기술하는 것이지요. 2. 내용 동전이 손상되어서 앞 면이 떨어질 확률이 뒷 면이 떨어질 확률과 다르다고 상상해봅시다. 그렇다면 x=1의 확률은 파라미터 u에 대해 수식 2.1과 같이 표기됩니다. 여기서 0 더보기