본문 바로가기

ML&DL

(32)
[PyTorch] 시계열 데이터를 위한 1D convolution과 1x1 convolution 오늘은 시계열 데이터처리에 많이 사용되는 1D convolution이 PyTorch에 어떻게 구현되어 있는지와 어떤 파라미터가 존재하는지 차원은 어떻게 계산하는 지를 정리해 보려고 한다. 자꾸 까먹는 나 자신을 위한 포스팅이 될 것 같다. 시작해보자! 간단한 1D convolution 예시 2D convolution이 가로,세로로 모두 이동하면서 output이 계산되는 것과 다르게 1D convolution 연산은 가로로만 이동하면서 output을 계산해낸다. 우리가 알고있는 신호처리에서의 convolution과 다르게 사실은 cross correlation 연산과 같다. 아래의 예시를 계산해보면 쉽게 이해할 수 있다. 직접 계산해보면 금방 이해할 것이다. (여기서 kernel은 filter라고도 부르며..
[PyTorch] torch.nn.KLDivLoss() 사용법과 예제 어쩌다보니 처음으로 KLDivergence를 loss로 사용하게 되었다. keras에서는 그냥 평범(?)하게 사용했으나 PyTorch에서는 우여곡절 끝에 제대로 loss가 떨어지는 것을 확인했다. 그래서 겸사겸사 기록해둔다. KLDivLoss 선언하기 처음엔 그냥 간단하게 선언을 했으나 reduction이라는 parameter가 mean으로 설정되어있는데 이렇게 설정되어 있으면 진짜 KLDivergence value를 뱉지 않는다고 한다. 그러므로 선언할 때부터 아래와 같이 선언해주어야 한다. 다음 버전에서는 이 부분을 개선하여 업데이트한다고 한다. import torch Loss = torch.nn.KLDivLoss(reduction='batchmean') 모델 정의하기 제대로 된 모델을 정의한 것은 ..
[PyTorch] numpy에서 tensor로 변환: Tensor, from_numpy함수의 차이/tensor에서 numpy로 변환: numpy함수 Numpy에서 Tensor로 PyTorch에서 Numpy array를 Tensor 자료형으로 바꾸는 일은 흔하게 이루어지는 일이다. 나같은 경우 음성신호를 입력으로 받아 Tensor로 변환하여 Dataset을 만드는데 이 연산을 사용한다. PyTorch의 2가지 변환함수와 그 차이점을 설명한다. torch.Tensor() vs torch.from_numpy() torch.Tensor() 는 Numpy array의 사본일 뿐이다. 그래서 tensor의 값을 변경하더라도 Numpy array자체의 값이 달라지지 않는다. 하지만 torch.from_numpy()는 자동으로 input array의 dtype을 상속받고 tensor와 메모리 버퍼를 공유하기 때문에 tensor의 값이 변경되면 Numpy array..
HMM(Hidden Markov Model, 은닉마르코프모델) 원리 저번학기에 머신러닝과딥러닝수업을 들으면서 배웠던 내용을 정리하면서 하나씩 포스팅을 한게 꽤 많이 쌓였다. HMM같은 경우에는 따로 수업에서 다루지는 않았지만, sequential한 데이터의 classifiation에서 많이 쓰이던 모델이여서 한번 정리해보려고 한다. 이곳과 이곳을 참고해 정리한 내용이다. 음성 = sequential data이므로 HMM을 모델로 쓴 예전논문이 많은 것 같다. 하지만 한번도 처음부터 끝까지 공부해본적은 없다...하하하 사실 처음보면 한눈에 어려워서 포기하고싶은 HMM..... 그래도 차근차근 정리해보겠다!! 마르코프모델이 무엇인지에서 출발해서 HMM으로 어떤문제를 풀 수 있는지까지 다뤄보자. MM(Morkov Model)이란? Markov model의 핵심은 현재의 obs..
GMM(Gaussian Mixture Model,가우시안 혼합모델) 원리 개인공부용 블로그로 이곳의 내용에 개인적으로 추가정리하였다. 가우시안 분포는 데이터를 분석하는 데 있어서 중요한 여러 성질을 가지고 있지만, 실제 데이터셋을 모델링 하는데에는 한계가 있다.(어떻게 모든 데이터가 종모양분포를 띄겠나...) 그래서 나오게 된 것이 Gaussian Mixture Model(GMM)인데, 여기서 mixture model이라는 것의 뜻은 기본분포를 선형결합해서 만든 분포라는 뜻이다. 그러므로 GMM은 가우시안분포를 선형결합하여 만들어진 분포를 뜻한다. (이런식으로 모델을 딱 가정해버리면 모델에 들어가는 파라미터를 찾는 식으로 밀도를 추정하게 된다. 만약 모델을 가정하지 않는다면, non-parametric하게 밀도를 추정하게 된다. ex.커널밀도추정) 예를들어 위의 오른쪽 그림과..
K-means clustering(K-평균 군집화) 원리 Unsupervise learning, 그니까 label이 없는 data set을 학습시키는 방법중에 clustering(군집화)이라는 기법이 있다. K개의 clustering point(cluster center)를 잡고 데이터 집합에서 가장 가까운(거리개념) 애들끼리 같은 class를 주는 방식이다. 그리 어렵지 않은 알고리즘이지만 성능이 좋은 편이다. 이 알고리즘도 일종의 EM알고리즘이 되는데 이에 대해서는 추후에 살펴보도록 하고, 이번 포스팅에서는 간단히 K-means clustering알고리즘을 알아보도록 하자. K-means가 무엇인가? 일단 기본적으로 몇개의 cluster로 묶을 지, 원하는 cluster의 개수를 K로 설정해준다. 그리고 갯수 K개에 대하여 거리가 가까운 놈들끼리 묶어주기만..
Kernel/Kernel trick(커널과 커널트릭) Input의 선형조합(어떤 weight와의 곱을 다 더함)으로 output을 결정하는 많은 모델들을 살펴봤다. linear regression, logistic regression, SVM, perceptron... 더 나아가 NN에서도 weighted sum을 활용한다. SVM같이, 선형모델을 분류모델로 가정했을 때, 선형으로 완전히 분류할 수 없는 데이터분포를 만나게 될지도 모른다. 그때, soft margin SVM같은 경우는 soft margin을 두어, 즉 어느정도의 오류는 허용하는 형태로 분류를 했다. 그걸로는 좀 모자르다고 생각할 수 있다. 그럼 어떻게 더 잘 분류할 수 있을지 고민해보게 된다. ​ linear하게 separable하지 않은 애들을 좀 구불구불한 decision boundar..
Regularization(정규화): Ridge regression/LASSO 이 강의를 보고 정리한 내용이고 자료도 강의에서 가져온 자료임을 밝히고 시작한다. 이전 포스팅에서 살펴본 linear regression 모델을 다시 살펴보자. 이렇게 least square solution을 구하면 너무 모델이 복잡해진다는 특징이 있다. (weight가 너무 커져서 모델이 너무 요동치게 된다...) ​ 사실 데이터의 갯수가 많아지면 overfitting의 문제가 해결되는데 도움이 된다. 하지만 우리가 가지는 데이터의 수는 한정되어있을 가능성이 높다. 비교적 복잡하고 유연한 모델을 제한적인 숫자의 데이터 집합을 활용하여 fitting하려면 어떻게 해야할까? 과적합문제를 해결하기 위해 자주 사용되는 기법 중 하나는 바로 regularization(정규화)이다.(이를 penalization이..