2015년 NIPS에 S Han et al.이 Deep Convolutional Neural Network의 모델 및 연산 최적화를 위해 Aggressive Pruning 컨셉을 도입한 이후, 지금까지 적극적으로 해당 컨셉을 바탕으로 DNN 모델을 최적화 하기 위한 노력이 꾸준히 지속되어 왔습니다. 현재까지 적용되었던 Pruning 컨셉의 핵심적인 기술은 Connection의 Intensity를 결정하는 가중치의 값들이 특정 임계치보다 낮은 경우 과감히 제거함으로써 Connection 개수를 최적화시키는 Masking 기법이었고, 이는 "Going Deeper"하게 만들어온 여러 종류의 DNN 구조에 대하여 Size Reduction을 처리하는데 상당한 이점을 만들었습니다. 그러나, Model Size가 Pruning으로 인해 대폭 감소하더라도, 딥러닝 연산을 수행하는 대다수 Operation인 MAC (Multiply-Accumulation)을 효과적으로 감소시키지 못하였고, 게다가 줄어든 Connection의 Memory Footprint 최적화를 위해 도입했던 Sparse Representation Format이 오히려 연산의 부가적인 Overhead로 작용함으로써, Backend 측면에서 Drawback이 발생하는 Issue들이 등장하였습니다. 결과적으로, 최근, 모델을 축소하기 위한 노력에서 발견된 Operation 개수 최적화 (MACs Reduction)와 연산 Resource 최적화 (Backend Optimization) 간의 Trade-off가 Pruning 효과와 DNN 연산의 극대화를 위해 중요한 쟁점으로 떠올랐으며, 본 포스팅의 논문은 해당 추세의 연장선에 있는 연구 결과에 속합니다.
Integral Pruning
본 논문은 최근 Pruning History의 Related Work을 크게 두 부류의 Pruning Concept인 Weight Pruning과 Activation Pruning으로 정의하였습니다. Static Mask를 통해 Connection 최적화를 수행한 Weight Pruning의 Operation Reduction의 한계를 지적하며, Intermediate Generation Value인 Activation에 대하여도 필수적인 Outlier-value를 제외하고 Sparse하게 변형하려는 아이디어를 적용하였으며, 본 컨셉을 통해 Complexity가 낮은 Model에 대해서 충분한 최적화 효과를 얻었습니다.
Activation Mask Design을 위해 Winner Rate를 도입하여 Accuracy Loss를 tracking하는 sensitivity check를 수행하였으며, 이를 통해 mask의 threshold를 dynamic하게 setting하여 activation pruning를 처리하였습니다.
Scalpel
본 논문은 현재까지 연구되었던 Pruning 기법이 우리가 흔히 알고 있는 Low/Moderate/High Parallelism을 갖는 General-Purpose Processor로부터 연산 성능이 효과적으로 나타나지 않으며, 특히 대체적으로 나빠진다는 Empirical한 발견을 통해 Pruning 컨셉을 Backend-Aware하게 재구성한 논문입니다. 본 논문은 ARM Cortex-M4/ Intel i7-6700 / NVIDIA GTX Titan X를 Target으로 하였으며, 각각의 Processor가 보유하는 Parallelism에 적합한 재구성된 Pruning 기법을 적용하여 Hardware Operating Resource 활용을 극대화하였습니다.
서술한 연구 내용 외에 추가적인 연구 결과나 이해가 필요한 부분이 있으면 직접 링크된 논문을 읽어보시고 댓글을 남겨주시면 답변드리겠습니다. 제가 작성한 PPT 자료를 업로드 해드리니 필요하시면 참고해주세요.
저번 게시물에 이어 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을 사용한 논문들을 시간 순서대로 하나씩 보도록 하겠습니다.
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 함수는 다음과 같이 정의 할 수 있습니다.
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를 시키는 것이 특징입니다.
아래는 DQN의 pseudo code 입니다.
training을 수행할 때의 Loss function으로는 아래와 같은 MSE를 사용합니다. 아래의 loss function와 psuedo code에서 볼 수 있듯이, 두개의 네트워크가 분리되어 있으므로 각 네트워크에서 사용되는 파라미터 $\theta$ 의 표기가 다른것을 확인할 수 있습니다.