이전 게시물 : IndIndustrial Anomaly Detection : Survey part 1

 

저번 게시물에 이어 Bearing Fault Diagnosis 관련 논문을 소개합니다. 저번 게시물에서도 말씀드렸다시피 베어링의 이상을 감지하기 위해서는 여러 종류의 센서 데이터를 사용할 수 있고, 그중에서도 진동 센서 데이터를 가장 많이 사용합니다. 이 분야에서 가장 많이 사용되어 왔던 방법론은 먼저 feature extractor로 모델의 인풋으로 들어갈 피쳐를 추출한 다음, classification 알고리즘을 적용한 것입니다. 저번 게시물에서 autoencoder 기반 방법론을 다루었고, 이번 게시물에서는 CNN 기반 방법론을 소개합니다.

 

 

Gearbox fault identification and classification with convolutional neural networks, Chen et al. (2015)


이 논문에서는 gearbox의 이상을 확인하기 위해 2D-CNN을 사용했습니다. 256차원의 통계 피쳐를 추출한 후 이를 16x16 차원의 input matrix로 변환합니다. 시간 도메인에서는 standard deviation, skewness, kurtosis와 같은 통계 피쳐를 추출하였고, frequency domain에서는 Fast Fourier Transform을 수행한 후 이를 몇 개의 band로 나눠서 각 band에 대해 RMS값을 피쳐로 사용하였습니다.

 

 

Convolutional Neural Network Based Fault Detection for Rotating Machinery, Janssens et al. (2016)


이 논문에서는 먼저 feature-learning 방식과 feature-engineering 방식을 비교하였습니다. feature-engineering 방식은 input data에서 feature를 추출한 다음, 이를 분류 모델에 넣는 방식인데 앞서 보았던 많은 논문에서 이와 같은 방법을 사용했습니다. 반면 feature-learning 방식은 먼저 feature를 추출하지 않고, input data를 여러 번 transform 함으로써 이를 모델의 인풋으로 사용하는 방식입니다. 이 논문에서 말하기를 feature-learning 방식이 기존의 feature-engineering 방식보다 훨씬 좋은 성능을 보였다고 합니다.

 

 

Deep convolutional neural network based regression approach for estimation of remaining useful life, Babu et al (2016)


기계의 상태를 분류하는 앞선 논문의 모델과는 다르게, 이 논문에서는 잔여 수명(Remaining Useful Life)을 예측하는 모델을 만들었습니다. 따라서 분류 모델 대신 회귀 모델을 쓰고, 마지막 layer로는 linear regression layer를 사용합니다.

 

 

Hierarchical adaptive deep convolution neural network and its application to bearing fault diagnosis, Guo et al. (2016)


이 논문에서는 계층적인 fault diagnosis 모델인 hierarchical adaptive deep convolution neural network(ADCNN)을 만들었습니다. 먼저 비정상의 종류를 판별하는 ADCNN을 하나 두고, 3개의 비정상 상태에 대하여 각각의 ADCNN이 비정상의 정도를 판단하게 됩니다.

 

 

A multi-scale convolution neural network for featureless fault diagnosis, Wang et al. (2016)


이 논문에서는 CNN 모델이 더 좋은 성능을 내게 하기 위해서 적용할 수 있는 몇 가지 테크닉을 제시하였습니다.

 

 

Design of deep convolutional neural network architectures for automated feature extraction in industrial inspection, Weimer et al. (2016)


이 논문에서는 앞서 제시된 CNN 모델들의 최적 configuration을 탐색하였습니다. 모델의 깊이(convolutional layer의 개수)와 너비(filter의 개수)의 두 가지 측면에서 최적의 configuration을 제시하였습니다.

 

 

Energy-fluctuated multiscale feature learning with deep convnet for intelligent spindle bearing fault diagnosis, Ding et al (2017)


이 논문에서는 CNN의 input으로 WPE(Wavelet Packet Energy) image를 사용하였습니다. WPE의 계층적인 특성을 잘 반영하기 위하여 convolution layer의 마지막에 multiscale layer를 추가하였습니다.

 

 

A deep convolutional neural network with new training methods for bearing fault diagnosis under noisy environment and different working load, Zhang et al. (2018)


이 논문에서 제시한 방법은 noisy한 signal에 대해서도 잘 동작하며, 사전에 noise를 없애기 위해서 추가적인 작업을 할 필요가 없습니다. 각 convolution layer의 output을 좌표평면에 나타내 보면, layer를 통과할수록 각 상태에 해당하는 점들이 확연히 잘 구분되는 것을 볼 수 있습니다.

 

 

이상으로 Industrial Anomaly Detection, 그중에서도 Bearing Fault Diagnosis를 다룬 논문들에 대해 살펴보았습니다. 논문은 임의로 선정하였기 때문에 혹시 놓친 중요한 논문이 있다면 댓글로 알려주시기 바랍니다. 감사합니다.

댓글을 달아 주세요

   이 글에서는 Industrial Anomaly Detection 관련 논문 경향을 살펴보도록 하겠습니다. 풍력 발전용 터빈, 발전소, 고온 에너지 시스템, 저장 장치, 회전 기계 부품 등 산업 현장에서 사용되는 기기들은 매일 엄청난 스트레스를 받습니다. 따라서 기기에 이상이 있는지를 미리 알아내는 것이 굉장히 중요합니다. 그런데 anomaly는 자주 발생하지 않고, 여러 가지 이유로 인해 이상이 발생하기 때문에 이를 미리 예측하기가 어렵습니다. 최근 이러한 rare event를 예측하기 위해 여러 Neural Net 기반 알고리즘이 널리 사용되고 있습니다.

   Industrial Anomaly의 범위는 굉장히 넓습니다. 간단하게는 센서의 출력인 1차원 벡터부터, 사진 혹은 영상과 같은 복잡한 데이터를 입력으로 받을 수도 있습니다. 따라서 범위를 조금 좁혀서 'Bearing Fault Detection' 관련 논문에 대한 경향을 조사했습니다. 베어링은 모든 모터 및 기타 회전 시스템에서 중요한 역할을 합니다. 베어링의 이상을 탐지하기 위해 여러 지표를 사용하는데, 베어링의 진동을 모니터하는 경우가 많습니다. 'Bearing Fault Detection' 대신 'Machinery Health Monitering'이라는 용어를 사용하기도 합니다. 베어링 이상 탐지에 Neural Net을 사용한 논문들을 시간 순서대로 하나씩 보도록 하겠습니다. 

 

A Rolling Element Bearing Fault Diagnosis Approach Based on Multifractal Theory and Gray Relation Theory, Li et al., 2016

Neural-network-based motor rolling bearing fault diagnosis, Li et al. (2000)


2000년에 발표된 Bearing vibration analysis에 Neural Network를 적용한 논문입니다. frequency domain에서 고속 푸리에 변환으로 feature를 추출하고 이를 1 layer Neural Net의 input으로 넣었습니다. input feature로는 6개를 사용했는데, 이는 뉴럴 넷을 통한 것이 아니라, 미리 정해져 있는 hand-crafted feature를 사용한 것입니다. Neural Net 모델의 output으로 세 가지 fault condition 중 하나를 결정하는 indicator를 출력합니다.

 

PCA-based feature selection scheme for machine defect classification, Malhi et al. (2004)


직전 논문과 달리 이 논문에서는 principal component analysis (PCA)에 기반하여 feature selection을 수행했습니다. 그 후 1 layer Fully Connected Neural Net과 K-means 알고리즘을 이용하여 anomly를 판별하였습니다.

 

Support vector machine in machine condition monitoring and fault diagnosis, Widodo et al (2007)


 이 논문은 Support Vector Machine을 사용하는 fault diagnosis 방법을 정리한 survey입니다. SVM은 분류 경계면과 데이터 포인트 사이의 거리를 최대화하는 기법입니다. kernel의 종류에 따라 경계면의 모양이 달라지게 됩니다. SVM은 feature extraction 능력이 약하기 때문에, 다른 방법으로 먼저 feature를 추출한 후, SVM을 사용한다고 합니다.

 

 

Fault Detection with Autoencoder


이제부터는 Fault Detection에 많이 사용되는 autoencoder 기반 논문을 소개하도록 하겠습니다. Autoencoder의 reconstruction error의 분포를 만들고, 값이 특정 수준 이상이면 anomaly라고 판단합니다. 이렇게 reconstruction error로 바로 anomaly를 판별하는 방식도 있고, 많은 논문에서는 antoencoder를 feature extractor로 사용합니다.

 

Bearing fault diagnosis method based on stacked autoencoder and softmax regression, Tao et al. (2015)


이 논문에서는 feature extractor로 2-layer Stacked Autoencoder를 사용하는데, 두 레이어의 hidden layer size와 dropout masking probability를 다르게 줍니다. 그 후 Softmax Regression을 사용하여 비정상 데이터를 탐지합니다. 앞의 논문들과 달리 feature를 추출하는 정해진 방법이 없고, 원형 센서 데이터를 그대로 모델의 인풋으로 넣어서 autoencoder가 특징을 배우도록 합니다.

 

Deep neural networks: A promising tool for fault characteristic mining and intelligent diagnosis of rotating machinery with massive data, Jia et al. (2016)


이 논문에서는 layer를 더 깊게 쌓았습니다. supervised learning에서 많이 하는 것처럼, autoencoder로 모델을 층층이 pre-train 시킨 후, supervised loss로 fine-tuning합니다.

 

Multi-sensor feature fusion for bearing fault diagnosis using sparse auto encoder and deep belief network, Chen et al. (2017)


이 논문에서는 SAE-DBN 구조를 사용합니다. 시간 도메인과 주파수 도메인의 피쳐가 각각 다른 센서 신호로부터 나옵니다. 비정상 탐지에 여러 종류의 데이터를 같이 활용한 것이죠. 이렇게 뽑은 피쳐를 2-layer sparse autoencoder에 넣어서 피쳐를 합친 후에 Deep Belief Network로 상태를 분류합니다.

 

Transformer fault diagnosis using continuous sparse autoencoder, Wang et al. (2016)


이 논문에서는 continuous sparse auto-encoder (CSAE)를 feature extractor로 사용하는데, sparse autoencoder에서 activation 함수를 씌우기 전에 확률 유닛을 하나 추가한 것입니다. 확률 유닛을 추가함으로써 gradient의 방향을 바꾸고, over-fitting을 방지할 수 있었다고 합니다.

 

Bearing fault diagnosis with autoencoder extreme learning machine: A comparative study, Mao et al. (2017)


이 논문에서는 Autoencoder로 뽑은 feature를 ELM의 input으로 넣습니다. ELM(Extreme Learning Machine)이란 gradient 기반 방식의 문제점을 개선하기 위해 고안된 알고리즘입니다. ELM에서는 H의 의사 역행렬을 구함으로써 back propagation 과정을 거치지 않고 적합한 값을 빠르게 찾을 수 있습니다. 따라서 진단 속도가 빠르다는 장점이 있습니다.

 

Comparison of Algorithms


출처 : Artificial intelligence for fault diagnosis of rotating machinery: A review, Liu et al., 2018 (paper)

 

Performance comparison of Algorithms


출처 : Artificial intelligence for fault diagnosis of rotating machinery: A review, Liu et al., 2018 (paper)

 

RNN on time series data


 

More Recent Papers


최근(2019년 5~6월)에 bearing fault detection 관련해서 나온 논문들은 크게 sparse autoencoder 혹은 CNN 중 하나를 사용하는 경향이 있습니다. 여기에 전통적인 SVM 방법이나 GAN과 같은 generative model을 사용하는 논문도 간혹 보입니다.

 

참고 자료


 

댓글을 달아 주세요

본 게시물은 김성훈 교수님의 모두의 강화학습 https://hunkim.github.io/ml/ 을 참고하였으며 "Playing Atari with Deep Reinforcement Leraning" , "Human-level control through deep reinforcement learning" 논문을 기반으로 제작했음을 알립니다.

 

Q-learning


Q-learning은 에이전트(agent)가 주어진 상태 (state) 에서 행동(action)을 취했을 경우 받을 수 있는 보상(reward)의 기댓값을 예측하는 Q 함수를 사용하여 최적의 정책(policy)을 학습하는 강화학습 기법입니다.

   1. agent는 현재 환경(environment) 에서 특정 state s에 존재합니다. 

   2. agent가 action의 집합 A의 모든 action을 취했을 때의 rewards를 Q 함수로 구할 수 있습니다. 

   3. reward가 가장 높은 action인 policy를 취하고 agent의 state는 새로운 state로 업데이트 됩니다. 

 

Q- learning에서 쓰이는 Q 함수는 다음과 같이 정의 할 수 있습니다.

 

Q 함수 정의

learned value는 agent가 현재 state에서 다음 state로 가기 위해 action을 취할때 얻을 수 있는 보상을 나타내는 식입니다. 하지만 미래에 agent가 받을수 있는 reward를 100% 신뢰하는것이 아닌 discount factor로 제한을 두고, 그만큼 현재 state에서 받았던 reward도 고려하여 최종적인 reward 값을 계산하게 됩니다. 이것이 바로 old value가 식에 포함된 이유입니다. 이때 계산한 reward 값은 "Q-table"에 저장됩니다. Q table을 점진적으로 수정해나가는 반복절차를 통해 agent의 행동을 학습시킬 수 있습니다. 

 

하지만 이러한 Q-learning은 실제로 실행시켜보면 잘 동작하지 않는 경우가 빈번합니다. 

   1. agent가 취할 수 있는 state의 수가 많은 경우, Q-table 구축에 한계를 가지게 됩니다.

   2. 순차적인 sample data 간의 corelation으로 인해 학습이 어렵습니다. 

   3. 예측값 (target Y)이 제대로 예측을 수행한것인지의 여부를 비교하기 위한 정답(Y)이 변합니다. 

위와 같은 이유로 Q-learning은 잘 동작 하지 않습니다. 이러한 Q-learning의 단점을 보완하기 위해 Q-learning 기반의 DQN (Deep Q Network)이 출현했습니다. 

 

 

DQN


DQN은 CNN (Convolutional Neural Net) 을 이용하여 Q 함수를 learning 하는 강화학습 기법입니다. 이때 CNN layer를 깊게 하여 training을 할 때 Q value의 accuracy를 증대시키는 것을 목표로 하고있습니다. 

DQN은 Q-learning의 한계점을 극복하기위해 다음과 같은 기법을 사용합니다. 

   1. Experience Replay buffer를 사용합니다. 

   2. Target Neural Net과 Predict Neural Net으로 네트워크를 분리합니다. 

 

Experience Replay buffer를 사용하는 이유는 순차적인 sample data 간의 corelation을 해결하기 위함입니다. agent의 state가 변경된 즉시 훈련시키지 않고 일정 수의 sample이 수집 될 동안 기다리게 됩니다. 나중에 일정 수의 sample이 buffer에 쌓이게 되면 랜덤하게 sample을 추출하여 미니배치를 활용해 학습합니다. 이 때 하나의 sample에는 state, action, reward, next state가 저장됩니다. 여러개의 sample로 training을 수행한 결과들을 모두 수렴하여 결과를 내므로 corelation 문제를 해결 할 수 있습니다. 

 

하나의 네트워크를 사용하면 계속 Target Q-value 값이 변경되므로 Target값이 변함을 막기 위해 Target을 output으로 도출하는 Target Neural Net과 Q-value값을 예측하는 Neural Net을 분리합니다. 이 때 2개의 네트워크는 weight parameter를 제외한 모든 것이 같은 네트워크로 정의합니다. 예측한 Q-value의 안정된 수렴을 위해 target Network는 계속 update 되는것이 아닌 주기적으로 한번 update를 시키는 것이 특징입니다. 

target Q-value를 정의하는 네트워크, Q-value 예측 네트워크

 

 

아래는 DQN의 pseudo code 입니다. 

 

 

training을 수행할 때의 Loss function으로는 아래와 같은 MSE를 사용합니다. 아래의 loss function와 psuedo code에서 볼 수 있듯이, 두개의 네트워크가 분리되어 있으므로 각 네트워크에서 사용되는 파라미터 $\theta$ 의 표기가 다른것을 확인할 수 있습니다. 

DQN loss function

 

기술한 내용을 바탕으로 한 ppt 자료를 업로드 합니다. 

Reinforcement Learning - part1.pptx
5.41MB

 

댓글을 달아 주세요

  본 포스팅은 Google Brain에서 Practical Convolutional Neural Networks (CNNs)를 제안하기 위한 노력 중 하나인 EfficientNet에 대한 리뷰로써 최근 ICML 2019에 제출된 논문 입니다. 포스팅에 앞서, 주제와 관련된 모든 연구 내용은 EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks를 참조했음을 먼저 밝힙니다.

 

History


  본 연구 소개에 앞서 Practical Deep Learning 모델의 역사에 대해 간략히 살펴보겠습니다. 대부분 아시다시피, Google은 ILSVRC 2014에서 당시 ImageNet Classification Task에서 State-of-the-art 모델이었던 VGG를 근소한 차이로 압도하며 우승하였고, 이를 통해 CVPR 2015를 기점으로 그들의 최적화 모델 연구는 폭발적인 탄력을 받기 시작합니다.

 

아래의 History는 제가 직접 정리한 Google의 최적화 모델 발전 추세를 나타내는 논문인데요.

 

  • Going Deeper with Convolutions (CVPR 2015)
  • Rethinking the Inception Architecture for Computer Vision (CVPR 2016)
  • Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning (AAAI 2017)
  • Xception: Deep Learning with Depthwise Separable Convolution (CVPR 2017)
  • MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (ArXiv: 2018)
  • MobileNetV2: Inverted Residuals and Linear Bottlenecks (CVPR 2018)
  • EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks (ICML 2019)
  • MnasNet: Platform-Aware Neural Architecture Search for Mobile (CVPR 2019)

 

  위의 논문을 모두 follow-up 하신 분들은 아시겠지만, ILSVRC 2014에서 성과를 거둔 1~2년 찰나에 추구하는 모델의 발전 방향성이 다소 달라진 것을 확인할 수 있습니다. 당시 구글 이외에 Facebook 혹은 저명한 연구자들은 Classification Task를 더욱 잘 처리하기 위해 어떻게 Deeper Layer의 Building Block을 설계할까하는 고민을 많이 했지만, 흥미롭게도 Google은 CVPR 2016을 기점으로 다른 방향의 모델 진보가 필요하다고 말하였습니다.

 

  이미 Google Cloud의 Roadmap을 눈 여겨 보신 분들은 아시겠지만, Google의 여전한 관심은 Edge Device에서 Classification Task를 잘 처리해줄 수 있는 Deep Learning 모델이었고, 이에 따라, Accuracy 뿐만 아니라 실용적이고 활용 가능한 Efficient 모델이 필요하다고 주장하였습니다. 본 포스팅은 Google이 최근 3년간 연구 결과로 나타낸 Practical 모델 중 가장 최근 발표한 EfficientNet이 어떻게 high-end model과 유사한 성능을 나타내며, 실용적인 모델이 되었는지 살펴보도록 하겠습니다.

 

Rethinking Optimization of CNNs


  예를 들어, ResNet이나 MobileNet 등을 고려할 때, 최적화 CNN 모델을 제안하였던 지난 연구 사례들은 아래의 그림과 같이 크게 3 가지 방향 (Figure.1)에서 발전되었다고 주장합니다.

  첫 번째, "Deeper layer (depth scaling)", 이는 다양한 filter layer 계층을 형성함으로써 풍성한 feature extraction 및 feature generation에 영향을 주었고, 모델의 성능을 한층 향상시키는 데 기여하였습니다.

  두 번째, "Wider output channels (channel width scaling)", 이는 데이터에서 충분히 많은 fine-grained patterns를 capturing하는 데 효과를 주었고, 역시 이를 통한 모델 accuracy 향상에 영향을 주었습니다.

  마지막으로, "Higher resolution (image size variation)" 효과는 filtering된 output channel의 height and width flexibility에 영향을 주어 capturing된 feature의 정교한 표현에 영향을 주었습니다.

 

Figure. 1. Scalibilty Analysis for Efficient Model Design

 

  효과적인 모델 스케일링을 위해 위에서 언급한 3 가지 측면을 controlling 할 수 있는 스케일링 파라미터가 각각 필요하며, 이를 위해 depth scaler α, width scaler β, image size scaler γ를 정의하였습니다. 한편, 논문에서는 각 파라미터와 모델에서 소비되는 Computation Resources와의 관계를 실험을 통해 발견하였고, 이는 Baseline Computing Resources로부터 약 2배 단위로 Resources를 더욱 소비하는 모델을 디자인한다면, 스케일링 파라미터를 활용하여 모델의 Baseline Configuration 대비 각각 α, β, γ배를 하는 것과 직관적으로 동일하다고 밝혔습니다. 이에 대한 자세한 언급은 논문을 통해 확인하시면 쉽게 이해하실 수 있습니다.

 

  본 논문은 앞서 언급한 Deep Convolutional Neural Network의 세 가지 Scalibility를 종합적으로 고려하는 "Compound Model Scaling" 기법을 제안하였으며, 이를 통해, 성능 손실을 최소화하며 Device-Aware한 디자인 방식의 목표를 달성할 수 있다고 말합니다. 그러나, 제안하는 기법이 적용되기 이전에 SOTA (State-of-the-art) 모델을 디자인하는 것이 성능의 Impact Results를 만드는 데 매우 중요한 과정이라고 언급하였으며, 이들은 성능이 우수한 Baseline 모델을 확보하기 위해 Multi-objective NAS (Neural Architecture Search) 기법을 활용하였습니다.

 

   NAS를 통해 얻은 최적의 Baseline 모델을 EfficientNet-B0 (Figure.2)로 하여, Optimal goal (Table.1)에 가까운 모델을 찾기 위해 "Compound Model Scaling"을 적용하였으며, 총 B0 ~ B7까지 디자인을 수행하였습니다.

 

 Table. 1. Optimal Goal of Efficient Model Design
Figure.2. The EfficientNet-B0 Architecture designed from Neural Architecture Search

 

 

Experiments Analysis


  Efficient-B0 ~ B7의 모델은 각각 SOTA를 달성한 모델과 비교하여 비슷한 성능을 확보하면서, 한편, 필요한 Parameters 개수 혹은 연산량에 대해 상대적인 Gain을 얻었고, 이를 통해 "Compound Scaling Method"가 Practical Design을 완성하는데, 효과적인 방법이라고 주장하였습니다 (Figure. 3). 더불어, Compound Scaling Method의 활용 우수성을 검증하기 위해 기존의 Practical Design으로 구현된 MobileNetV1, MobileNetV2 및 ResNet-50에 마찬가지로 적용함으로써, 기존모델의 hyper-parameter tuning 작업에도 적절히 활용될 수 있음을 보여주었습니다.

 

Figure.3. Performance Results from EfficientNet B0 to Efficient B7, compared to SOTA models

 


  서술한 연구 내용 외에 추가적인 연구 결과나 이해가 필요한 부분이 있으면 직접 링크된 논문을 읽어보시고 댓글을 남겨주시면 답변드리겠습니다. 제가 작성한 PPT 자료를 업로드 해드리니 필요하시면 참고해주세요.

 

Thanks,

 

Min Cheol Park

 

EfficientNet_summary.pptx
6.07MB

 

댓글을 달아 주세요

Anomaly Detection with GAN : AnoGAN

카테고리 없음 2019. 6. 25. 14:50 Posted by woojeong

이번 글에서는 Anomaly Detection에 대한 간략한 소개와 함께 GAN을 Anomaly Detection에 처음으로 적용한 논문을 리뷰하겠습니다. 논문 원제는 Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery 이며, Anomaly Detection 소개 부분은 DEEP LEARNING FOR ANOMALY DETECTION: A SURVEY 논문을 참고했음을 먼저 밝힙니다. 

 

Anomlay Detection


   Anomaly Detection는 '이상 탐지'라는 이름에서부터 알 수 있듯이 normal 하지 않은 데이터를 정상 데이터로부터 구분하는 것입니다. 그렇다면 어떤 데이터가 비정상이라는 것은 어떻게 알 수 있을까요? 사실 label이 붙어있지 않으면 이 기준이 굉장히 애매하게 됩니다. 직관적으로 생각해 보면 데이터 샘플이 모여있는 구간이 있을 것이고, 이 구간에서 많이 떨어진 샘플을 우리는 비정상 데이터, 즉 '이상치'라고 판별할 수 있습니다. 

 

   위 그래프를 보면, $N_1$ 과 $N_2$ 영역에 거의 모든 관측치들이 몰려 있기 때문에 이들은 정상 데이터로 분류됩니다. 하지만 $O_3$ 영역과, $O_1$, $O_2$의 관측치들은 대부분의 관측치들이 몰려 있는 영역과 멀리 떨어져 있습니다. 따라서 이들을 비정상 데이터로 볼 수 있습니다. 다시 말해서 정상 데이터의 분포에 속해 있지 않은 outlier들을 찾는 것이죠. 

 

Hawkins(1980)에 따르면 outlier는 다음과 같이 정의됩니다.

Observation that deviates so significantly from other observations as to arouse suspicion that it was generated by a different mechanism.

   대부분의 데이터와 너무 달라서, 아예 다른 data generative process를 통해 만들어졌을 것 같은 샘플들을 말합니다. 따라서 비정상 데이터는 데이터의 오류로부터 발생할수도 있지만, 이전에 알려지지 않은 새로운 생성 매커니즘에서부터 비롯된 것일수도 있습니다. 아래 그림은 각각 교통 데이터, 사물인터넷 센서 데이터에서의 비정상 데이터 예시를 보여줍니다. 빨간색으로 표시된 부분이 비정상 데이터입니다. 

Anomaly Detection의 예시

 

novelty와 anomaly의 구분

   위의 그림에서 호랑이 사진을 정상 데이터, 다른 동물 사진을 비정상 데이터로 분류한다고 할 때, 백호랑이 사진은 어디에 들어가야 할까요? 백호랑이 사진은 호랑이의 범주에는 포함되지만, 다른 일반적인 호랑이 사진보다 anomaly의 경계에 가까운 곳에 위치하고 있을 것입니다. 이런 백호랑이 사진과 같은 관측치를 novelty라고 합니다. 이전 데이터에서 보지 못한 새로운 패턴이지만 anomaly와 달리 정상 데이터 생성 process로부터 생성되었다는 차이점이 있습니다. 

Different aspects of deep learning-based anomaly detection


   Anomaly Detection을 수행하는 방법에는 여러 가지가 있습니다. 정상 데이터의 분포를 정의하는 통계적인 방식도 있고, KNN과 같은 전통적인 머신러닝 알고리즘을 이용하는 방식도 있죠. 하지만 최근에는 딥러닝을 이용한 Anomaly Detection이 좋은 성능을 보이고 있습니다. 딥러닝 기반의 Anomaly Detection을 몇 가지 측면에서 분류해 보도록 하겠습니다. 

Nature of Input Data

  • Sequential (eg, voice, text, music, time series, protein sequences)
  • Non-sequential data (eg, images, other data)

Availability of labels

  • Supervised
    • Training a deep supervised binary or multi-class classifier, using labels of both normal and anomalous data instances
    • lack of availability of labeled training samples
  • Semi-supervised
    • Leverage existing labels of single (normally positive class) to separate outliers
    • ex) deep autoencoders - train them on data samples with no anomalies. normal class samples would produce low reconstruction errors, abnormal class would produce high reconstruction error
  • Unsupervised
    • Solely based on intrinsic properties of the data instances
    • PCA, SVM, Isolation Forest
    • Autoencoder, RBM, DBN, RNN, LSTM

Training objective

  • Deep Hybrid Models (DHM)
    • Use deep neural networks mainly autoencoders as feature extractors
    • Features are input to traditional anomaly detection algorithms (ex, such as one-class SVM)
    • Lack of trainable objective customized for anomaly detection
  • One-Class Neural Networks (OC-NN)
    • data representation in the hidden layer is driven by the OC-NN objective
    • customized for anomaly detection

     

Deep Hybrid Model Architecture

AnoGAN


   이 논문에서 수행하고자 하는 task는 망막의 이미지 샘플을 보고 이 사진이 질병이 있는 사람의 것인지를 판별하고 어떤 부분이 비정상인지를 찾아내는 것입니다. 이를 위해서 GAN을 이용한 비지도학습을 수행합니다. 아래 그림이 전체 아이디어를 잘 보여주는데요, 정상 데이터로만 GAN을 학습해서 정상 데이터를 잘 생성할 수 있는 모델을 만든 다음, 비정상 데이터를 이 모델의 입력으로 넣어서 원래 이미지와 얼마나 비슷하게 복원할 수 있는지를 봅니다. 

Overall Architecture of AnoGAN


   모델 구조와 핵심 아이디어에 대해 더 자세히 보도록 하겠습니다. 먼저 모델 Training 과정에서는 앞서 말씀드렸다시피 정상 데이터만 사용하여 GAN을 학습합니다. 이때 GAN의 구조는 DCGAN을 차용했다고 합니다. 관측치의 label이 주어지지 않았기 때문에 논문에서는 이를 unsupervised learning이라고 정의하고 있습니다. 하지만 Training 과정에 사용되는 이미지들이 정상이라는 점은 알고 있기 때문에 엄밀히 보면 semi-supervised 방식이 아닐까 합니다. Training data $\left \langle l_m \right \rangle$는 다음과 같이 정의합니다.

  • $I_m$ :  $a \times b$ 크기의 정상 망막 이미지 $(m = 1,2, ... , M)$ 
  • $x_{k,m}$ :  $I_m$ 에서 랜덤으로 추출된 $c \times c$ 크기의 2D 이미지 패치

   정상 데이터로 Generator를 학습시킨다는 것은 $x = G(z)$의 매핑을 학습시키는 것입니다. $z$는 잠재 공간 $\mathcal{Z}$로부터 샘플링된 input noise의 1차원 벡터이고, $x$는 manifold $\mathcal{X}$를 따라 분포하는 2차원 이미지입니다.  

   정상 이미지들이 이런 manifold를 이루고 있다고 하면 manifold위의 점들은 각각 다른 정상 이미지 패치를 나타냅니다. 하지만 비정상 이미지는 이 manifold 바깥에 위치하게 되겠죠. 여기서 제일 중요한 점은 정상데이터로 학습시킨 GAN의 Generator가 $z$에서 $x$로의 매핑을 나타낸다는 것입니다. 

 

   Testing 과정에서는 비정상 데이터와 정상 데이터를 둘 다 사용하고 label 또한 주어져 있습니다. Testing data $\left \langle y_n, l_n \right \rangle$는 다음과 같이 정의합니다.

  • $y_n$ : 새로운 testing data $J$에서 추출된 $c \times c$ 크기의 이미지
  • $l_n \in \{0,1\}$ : 각 이미지에 대한 binary ground-truth label

 

   (a) 그림은 모델의 전체 모델 구조를 나타냅니다. 학습 과정은 GAN과 동일합니다. random noise $z$를 샘플링해서 Generator의 인풋으로 주어서 $G(z)$를 만들어 냅니다. 그리고 이를 실제 이미지와 구분할 수 있는 Discriminator $D$ 의 인풋으로 넣어서 이로부터 나오는 loss를 역전파하여 Generator와 Discriminator를 업데이트합니다. 

   Testing 과정에서는 비정상 데이터와 정상 데이터를 둘 다 사용하는데 이 때 (b) 그림이 Discriminator의 가장 마지막 convolution layer를 t-SNE 알고리즘으로 시각화한 것입니다. 파란색 정상 이미지와 빨간색 비정상 이미지가 확연히 구분되어 있는 것을 볼 수 있습니다. 

 

Mapping new Images to the Latent Space


   Training을 마치면 모델은 $z$로부터 $x$로 가는 매핑 $G(z)$를 학습한 상태입니다. 하지만 이 반대의 경우 $x$에서 $z$로 가는 매핑은 알지 못하는 상태입니다. 새로운 비정상 이미지가 인풋으로 주어질 때를 고려하면 우리는 이 inverse mapping이 필요합니다. 

   DCGAN에서 noise $z$의 값을 조금씩 조정해 가면서 이미지를 생성하면, 이미지가 서서히 바뀌었던 것을 기억하시나요?

Walking in the latent space

DCGAN 논문에서는 'Walking in the latent space'라를 표현을 사용했습니다. 따라서 잠재 공간 상에서 가까이 있는 두 $z$를 뽑으면 굉장히 비슷한 두 이미지를 생성하게 됩니다. 그렇다면 쿼리 이미지 $x$가 주어졌을 때, 매핑되는 $z$를 얻기 위해서는 generator가 최대한 $x$와 비슷한 이미지를 만들도록 $z$를 움직이면 되지 않을까요? 최적의 $z$를 찾기 위한 과정은 다음과 같습니다. 이는 모두 Testing 과정에서 이루어지며, Training 과정에서 학습된 Discriminator와 Generator의 파라미터는 모두 고정된 상태입니다.

Finding the best $z$

  1. $z_1$을 랜덤하게 샘플링합니다.
  2. 이를 학습된 Generator에 인풋으로 넣습니다.
  3. 생성된 이미지 $G(z_1)$를 보고 $z_1$의 coefficient를 업데이트합니다.
  4. 1-3을  $\Gamma$번 반복해서 $x$와 가장 비슷한 이미지 $G(z_\Gamma)$를 찾습니다. 그러면 잠재 공간 $\mathcal{Z}$ 상에서 $z$의 최적의 위치를 찾을 수 있습니다. 

이 때, 노이즈 자체를 업데이트하는 것이 아니라 $z$의 coefficient를 업데이트하는 것을 주의하세요.

 

Loss function to find best $z$


   $z$의 coefficient를 업데이트하려면 기준이 될 loss function을 정의해야겠죠. loss function은 residual loss와 discrimination loss 두 부분으로 나누어집니다.

 

  • Residual loss

$$\mathcal{L}_R(z_\gamma) = \sum \left | x-G(z_\gamma) \right |$$

   생성된 이미지 $G(z)$와 쿼리 이미지 $x$가 얼마나 일치하는지를 나타냅니다. 만약 완벽한 generator $G$를 학습해서 완벽한 매핑 $z \mapsto z$를 얻었다면 $x$와 $G(z)$는 완벽히 일치할 것이고 residual loss는 0이 될 것입니다.

 

  • Discrimination loss

$$\mathcal{L}_D(z_\gamma) = \sum \left | f(x)-f(G(z_\gamma)) \right |$$

   생성된 이미지가 학습된 manifold $\mathcal{x}$ 위에 있도록 강제합니다. adversarial training에서 실제 이미지의 discriminator loss와 같은 역할을 합니다. 하지만 논문에서는 discriminator의 출력 스칼라 값을 사용하는 대신 discriminator의 중간 layer $f(\cdot)$의 출력으로 나오는 intermediate feature representation을 사용했습니다. 이를 통해 더 풍부한 의미를 가지는 표현을 만들 수 있었다고 합니다.

 

Residual loss와 Discriminator를 합친 최종 loss는 다음과 같습니다. 

$$ \mathcal{L}(z_\gamma) = (1-\lambda)\cdot\mathcal{L}_R(z_\gamma) + \lambda\cdot\mathcal{L}_D(z_\gamma)$$

새로운 샘플 $x$가 anomaly인지 아닌지 판별하려면 이 loss값을 그대로 anomaly score로 사용하면 됩니다.  그리고 이미지의 어떤 부분이 비정상인지를 판별하기 위해서는 Residual score $x_R = \left | x-G(z_\Gamma) \right |$를 사용합니다. 이를 통해 원래 이미지 $x$와 생성된 이미지 $G(z_\Gamma)$가 다른 부분을 감지할 수 있습니다.

 

Experiments


실험 결과를 볼까요? 첫 번째 행은 실제 입력 이미지입니다. 두번째 행은 논문에서 제시한 방법으로 새로 생성한 이미지를 나타냅니다. 실제로 왼쪽 두 블록은 정상 이미지인데 원래 이미지와 새로 생성된 이미지가 매우 유사한 것을 볼 수 있습니다. 반면 가장 오른쪽 블록의 비정상 이미지의 경우 학습된 generator가 원래 이미지를 제대로 복원하지 못합니다. 생성된 이미지와 원래 이미지를 픽셀끼리 비교하면 어떤 부분이 비정상인지를 알려주는 marker를 얻을 수 있게 됩니다. 

댓글을 달아 주세요