본문 바로가기

반응형

분류 전체보기

(369)
Clustering - Performance (1) 지난 포스트 [Machine Learning/Unsupervised Learning] - Clustering - Hungrian Algorithm 지난 포스트에서는 clustering 의 결과 할당된 군집 번호를 라벨과의 정확도가 최대화가 되도록 재할당하는 Hungarian Algorithm 에 대하여 알아봤습니다. 이번 포스트에서는 데이터에 대한 라벨이 없고 순수히 clustering 결과의 성능을 측정하기 위한 다양한 방법들을 알아보도록 하겠습니다. Silhouette score Silhouette score 는 지난 포스트에서 cluster 의 개수를 판단하는 지표로서 소개해드렸는데요, clustering 의 성능을 평가하는데도 사용됩니다. Silhouette score 는 특정 데이터 샘플과 같은..
Pycharm - Python Interpreter 지난 포스트 [개발 잡학/Python] - Pycharm 설치 Pycharm 을 설치하면 파이썬 interpreter 또한 같이 설치되는데 윈도우에는 파이썬 version 3.8.8, MacOS 에는 파이썬 version 2.7 이 설치됩니다. 특히, 파이썬 version 2.x 는 2020년 이후로 지원을 하지 않고 최근 파이썬 라이브러리 또한 지원하지 않기 때문에 파이썬 version 최소 3.6 이상의 interpreter 는 필수적입니다. 현재 저의 컴퓨터에도 파이썬 version 3.8.8 이 깔려 있으니 가장 최신 version 인 3.9.5 를 설치해보도록 하겠습니다. 먼저 www.python.org/downloads/ 에서 Python 3.9.5 패키지를 선택해 다운받습니다. 자신의 OS에..
Clustering - Hungrian Algorithm Clustering 은 주어진 데이터를 정해진 수의 군집 수에 따라 비슷한 특성끼리 묶어주는 알고리즘으로 K-Means, DBSCAN, deep learning based clustering 등 모든 종류의 clustering 알고리즘은 훈련 후의 각 데이터 샘플 별 할당된 군집 번호를 출력합니다. 하지만 문제는 할당된 군집 번호가 훈련 시마다 매 번 다르고 각 데이터 별 라벨이 있을 경우 라벨 번호와 맞지 않는다는 것인데요, 이번 포스트에서는 clustering 이후의 군집 번호를 기준 (라벨)에 맞게 재정렬하는 Hungarian 알고리즘에 대해 알아보도록 하겠습니다. 4개의 클래스를 가진 16개의 데이터가 [0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3] 라벨을 가졌을 때, clusteri..
Pytorch - backward(retain_graph=True) (1) Pytorch 에서는 계산된 목적함수의 loss 값에 backward() 함수를 계산하면 모델을 구성하는 파라미터에 대한 gradient (기울기)를 계산합니다. backward() 메소드는 암묵적으로 loss 값이 벡터가 아닌 scalar 라고 가정하여 최종 loss 값에 대한 평균이나 합을 통해 벡터를 하나의 scalar 값으로 만들어 주어야 하는데요, backward(torch.tensor([1], dtype=torch.float) 이 디폴트로 설정되어 있습니다. backward() 메소드를 수행할 때 또다른 유용한 파라미터는 retain_graph 라는 매개변수입니다. ratain 이라는 말에서 알 수 있듯이 텐서들의 연속된 연산으로 구성되는 graph 를 유지한다는 것인데 한 번 살펴보도록 하겠..
Pytorch - hook Deep neural networks 는 마지막 단의 목적함수에 대한 파라미터 별 기울기를 통한 gradient descient 방식으로 업데이트 됩니다. 이때 편미분의 chain-rule 을 이용한 back-propagation (neural networks 의 뒷 단에서 앞 단 순으로 기울기가 계산됩니다) 을 이용해 deep neural networks 를 구성하는 모든 파라미터의 목적함수에 대한 기울기를 구할 수 있습니다. Pytorch 에는 hook 이라는 기능이 있어 매 layer 마다 print 문을 통해 확인하지 않아도 각 층의 activation/gradient 값을 확인할 수 있습니다. 먼저 Figure 1과 같은 2-layer 의 MLP 를 구성해보도록 하겠습니다. import torc..
Learning Deep Features for Discriminative Localization (CAM) 이번 포스트에서 다룰 내용은 explainable AI (XAI) 의 원조격인 CAM (Class Activation Mapping) 입니다. 2015년 CVPR 에서 발표되었고 이미지 classification 에 GAP (Global Average Pooling) 을 사용하여 이미지의 어느 부분이 모델의 판단 근거가 되었는지를 파악합니다. Figure 1에서 보듯이 GAP 층과 CAM 을 이용하여 이미지를 분류함과 동시에 이미지의 판단 근거가 되는 중요한 부분을 localization 하는 것이죠. Class activation mapping CAM 이란 각 카테고리 별로 모델이 카테고리를 파악하기 위한 중요하고 차별적인 이미지 부분을 말합니다. 이를 마지막 convolution layer 전체를 높..
Learning and Evaluating Representations for Deep One-Class Classification (2) 이전 포스트 [Machine Learning/Anomaly Detection] - Learning and Evaluating Representations for Deep One-Class Classification (1) Experiments 실험은 CIFAR-10/100, Fashin-MNIST, Cat-vs-Dog 에 대해 one-vs-rest 방법으로 진행합니다. 또한 더욱 challenging 한 CelebA 의 eyeglasses 데이터와 (안경을 쓴 이미지가 비정상 데이터라 간주합니다.) 산업용 결함 데이터인 MVTec 에 대해서도 실험을 진행합니다. Backbone 모델로는 ResNet-18을 $f$로, 여러 층의 MLP를 $g$로 구성합니다. Main results 각각의 represent..
Learning and Evaluating Representations for Deep One-Class Classification (1) 이번 포스트에서 다룰 내용은 self-supervised 를 통해 추출한 representation을 이용해 이상탐지를 수행하는 two-stage 이상탐지에 관한 논문 "Learning and Evaluating Representations for Deep One-Class Classification" 입니다. 이상탐지를 위한 전통적인 방법으로는 크게 데이터 분포를 추정해 확률이 낮은 곳에 위치하는 데이터를 이상치로 판단하는 KDE (Kernel Density Esitmation) 와 one-class 주변에 decision boundary를 구축하는 OCSVM (One-class SVM) 이 있습니다. 이러한 전통적인 방법의 문제는 deep neural networks 와 달리 데이터의 represen..

반응형