[Study] Understanding CNN
Intro
캡스톤 프로젝트를 진행하면서 ‘수술 중 마취를 진행한 고위험 환자의 ECG & PLETH Data로 저혈압 발생 여부를 예측'하는 모델을 만들고자 했는데, 여러가지 참고자료를 살펴본 결과 CNN (Convolutional Neural Networks) 중에서도 ‘1D CNN’이 좋은 성능을 보이는 것을 알 수 있었다.
CNN 자체는 ‘Image tagging’ 분야에서 많이 쓰이는데, 1D CNN은 NLP (자연어처리)나 센서 & 신호 데이터를 분석할 때 적합하다. 또한, 데이터 내에서 단순한 패턴을 식별하는 데 좋고 Time sequence 분석에 잘 적용된다.
- 1D CNN vs 2D CNN
> Dimensionality of the input data
> How the feature detector (or filter) slides across the data
- Data Analysis Example
> Data : Time-sliced accelerometer sensor data
> 가속도계를 보고 ‘Standing’, ‘Jogging’, ‘Upstairs’ … 상태를 분류
- 1D CNN 구성 (in Python)
> Keras를 이용해서 CNN 모델 구축 (참고자료)
- Input Data
> 데이터는 각 데이터에 80개 시간 슬라이스가 포함되도록 전처리된 상태이며, 각 시간 간격에 x, y, z축에 대한 3개의 가속도계 값이 저장된다. 이 데이터는 80 x 3 행렬이며 데이터의 길이는 240으로 벡터로서 신경망에 전달된다. 네트워크의 첫 번째 layer는 80 x 3 이었던 원래의 모양으로 재구성한다.
2. First 1D CNN Layer
> Height가 10인 필터로 정의했다. 여기서 오직 하나의 필터를 정의해야만 Neural Network가 첫 번째 layer에서 하나의 특징을 학습할 수 있다. 하지만, 이것들로 충분하지 않을 수 있어 100개의 필터를 정의했고, 이는 100가지 다른 특징들을 학습할 수 있게 해준다. 첫 번째 layer의 출력은 71 x 100 Neuron matrix이고 출력 matrix의 각 열에 단일 필터의 가중치가 존재한다.
3. Second 1D CNN Layer
> 첫 번째 layer의 결과가 두 번째 layer로 보내질 것이며, 다시 100개의 필터를 정의하여 이 layer에서 훈련시킨다. 첫 번째 layer와 같이 출력 matrix는 62 x 100 크기이다.
4. Max Pooling Layer
> Pooling layer에서는 출력의 Complexity를 줄이고 데이터의 과잉 공급을 방지하기 위해 CNN layer 이후에 사용된다. 이 예시에서는 Pooling layer의 크기를 3으로 했는데, 이 layer의 출력 matrix 크기가 입력 matrix 크기의 3분의 1이라는 것을 의미한다.
5. Third & Fourth 1D CNN Layer
> 더 높은 수준의 특징을 학습하기 위해 또 다른 1D CNN layer가 있으며, 이 2개의 layer의 출력 matrix는 2 x 160 이다.
6. Average Pooling Layer
> Overfitting을 방지하기 위해 Pooling layer를 1개 더 추가했다. 앞선 layer에서의 최대값이 아니라 Network 내에 2개의 Weights의 평균값을 가진다. 출력 matrix는 1 x 160이며, 필터당 하나의 Weight만 남는다.
7. Dropout Layer
> Dropout layer에서는 Neuron에 무작위로 0의 Weight를 부여한다. 이 예시에서는 50%가 Weight 0으로 설정될 것이다. 이 과정을 통해서 Network의 Test data 정확성을 높일 수 있을 것이다. 이 layer의 출력 matrix는 1 x 160 이다.
8. Fully Connected Layer with Softmax Activation
> 예측하고 싶은 등급이 6개이기 때문에 최종 layer는 160인 벡터를 6으로 줄인다. 이것은 matrix 곱셈에 의해 이루어진다. Softmax 활성 함수는 Neural Network의 6개 출력 확률을 모두 합쳐서 1이 되게한다. (6개 등급 각각에 대한 확률을 나타내준다.)
- 참고자료
> Introduction to 1D Convolutional Neural Networks in Keras for Time Sequences
> Understanding Convolutional Neural Networks for NLP
> An intuitive guide to Convolutional Neural Networks
> What are CNNs (Convolutional Neural Networks)?