인공지능/머신러닝

[머신러닝 - 이론] CNN 시각화, CNN 성능 향상, 전이 학습 (CNN Visualization, CNN Improve Performanc

바보1 2022. 4. 10. 21:43

1. CNN의 시각화



CNN에서는 두 가지의 시각화를 시도할 수 있습니다.

첫 번째는 Convolution Layer의 Kernel을 시각화하는 방법이고,
두 번째는 Conv Layer, Pooling Layer이 추출해주는 Feature Map을 시각화하는 방법입니다.

왜 시각화를 해야할까요?
CNN의 성능은 뛰어나지만 왜 그런 의사결정을 했는지 설명하는 능력이 매우 떨어집니다.
방대한 수치 계산으로 의사결정이 이루어져서 의사결정에 대한 이유를 해석할 방법이 없기 때문입니다.
설명 가능을 달성하려는 많은 연구 결과가 있는데, 커널과 특징 맵의 시각화는 가장 낮은 수준의 방법입니다.
낮은 수준이지만 쉽게 적용이 가능하고, 많은 정보를 주기 때문에 애용하는 방법입니다.

코드와 실제 예시는 나중에 글로 쓰겠습니다.

1.1 Kernel의 시각화


솔직히 말씀드리면 Kernel의 시각화는 큰 도움이 되지 않습니다.
봐도 어떤 정보를 얻기가 힘들거든요

따라서 보통은 Feature Map을 시각화합니다.

1.2 Feature Map의 시각화


Feature Map을 시각화합니다.
어떤 Kernel을 통과해서 나온 특징 맵입니다.

원본 이미지

이게 원본 이미지라면 특징 맵은

Feature Map

이게 특징 맵이 되겠습니다.


2. CNN 성능 향상



충분히 큰 신경망 구조를 사용하되, 다양한 규제 기법을 적용하여서 over fitting을 방지합니다.
input data에 비해 모델이 크면 over fitting이 일어납니다.

이때 데이터 증식 (data augmentation), 드롭아웃 (Drop out), 가중치 감쇠 (weight decay), 앙상블, 배치 정규화 (Batch Normalization) 등의 방법이 있습니다.

2.1 데이터 증식 (Data Augmentation)


Over Fitting을 막는 가장 확실한 방법입니다.
데이터에 비해 모델이 크면 over fitting이 일어나는데, 그냥 데이터를 증식시키면 해결할 수 있습니다 ㅎㅎ

하지만 대부분의 상황에서는 데이터를 늘리는 일은 많은 비용이 소요됩니다.
따라서 딥러닝에서는 주어진 데이터를 인위적으로 늘리는 데이터 증식을 적용합니다.

  • 영상을 이동, 회전 또는 좌우 반전
  • 명암 조절 등

여기서 horse 까지만 데이터를 증식시키면,

이런 식으로 각도와 색깔 등을 바꿔서 데이터를 증식시킬 수 있습니다.

2.2 드롭아웃 (drop out)



일정 비율의 가중치를 임의로 선택하여 불능으로 만들고 학습하는 규제 기법입니다.
불능이 될 가중치는 샘플마다 독립적으로 정하는데, 난수를 이용하여 랜덤 하게 선택합니다.

모델 결합을 하게 되면 학습의 성능을 개선할 수 있습니다.
서로 다른 학습 데이터를 통해 모델을 학습시키거나 모델이 서로 다른 구조를 가지면 학습 성능을 개선할 수 있습니다.
하지만 하나의 네트워크를 훈련시키는 것도 어려운데 여러 개의 네트워크를 훈련시키는 것은 매우 어려운 일입니다.
더욱이 여러 개의 네트워크를 훈련시켰더라도 사용시에 연산 시간이 소비되어 속도가 느려지는 문제가 생깁니다.

Dropout은 이 두 문제를 해결하기 위해 생긴 기법입니다.
여러개의 모델을 만들지 않고 모델 결합이 여러 형태를 가지게 하는 것입니다.
네트워크를 학습하는 동안 랜덤 하게 일부 뉴런이 동작하는 것을 생략해버리면 뉴런의 조합만큼 지수함수적으로 다양한 모델을 학습시키는 것과 같습니다.
만약에 n개의 유닛이 있다고 가정한다면 2^n개의 모델이 생성될 것입니다.
왜냐면 꺼질 수도 있고, 켜질 수도 있으니까요.

2.3 가중치 감쇠 (weight decay)


가중치 감쇠는 성능을 유치한 채로 가중치의 크기를 낮추는 규제 기법입니다.
예를 들어 계수를 10 이하로 할 수 있습니다.
왜냐하면 계수가 높은 변수일 수록 큰 영향을 끼치기 때문이고, 이 변수가 곧 Over Fitting의 원인이 되기 때문입니다.
따라서 가중치 감쇠는 가중치가 편향되지 않고, 골고루 나누게 해 줍니다.
가중치 감쇠는 L1(라쏘 규제)와 L2(릿지 규제)가 있습니다.

수식은 좀따가...

L1 규제는 가중치가 0이 될 수 있다는 단점 때문에 L2 규제를 더 많이 사용합니다.

가중치 감쇠를 적용할 수 있는 세 가지 매개변수가 있습니다.

  • Kernel_Regularizer (가중치에 적용)
  • Bias_Regularizer (바이어스에 적용)
  • Activity_Regularizer (활성화 함수의 결과에 적용)


2.4 배치 정규화 (Batch Nomalization)


배치 정규화는 이전 Layer의 결과를 일반화합니다.
즉 데이터의 분포가 다양한 값을 가지더라도, 이를 평균과 분산을 이용해서 정규화시켜줍니다.
이때 각 배치마다 정규화를 적용해주는 것이 옳습니다. 그래야 각 배치가 표준 정규 분포를 따르기 때문이죠.

이렇게 말이죠

수식은 다음과 같습니다.


ResNet에서는 BN이 Drop out을 대신해서 모든 Conv Layer의 뒤에 위치합니다.

2.5 성능 평가



객관적인 성능 평가의 방법 중에 교차 검증에 대해 이미 설명드렸습니다.

추가적인 성능 평가 기법이 있는데 제거 조사 (ablation study)입니다.

제거 조사는 여러 선택 사항이 있을 때, 선택 사항을 하나씩 빼고 성능을 측정해봄으로써 선택 사항 각각의 기여도를 평가할 수 있습니다.


3. 전이 학습 (Transfer Learning)



인간의 전이 학습을 예를 들겠습니다.
C 언어에 능숙한 학생은 파이썬도 금방 배웁니다. 또한 채소를 잘 가꾸는 사람은 꽃도 잘 가꿉니다.
겉모습은 달라도 원천적인 개념과 사용법을 공유하기 때문입니다.

딥러닝에도 같은 원리가 적용됩니다.
자연 영상으로 학습한 신경망을 새나 개의 종을 분류하거나, 자율 주행에서 차선과 보행자를 인식하는데 쓰일 수도 있습니다.

전이 학습은 어떤 도메인의 데이터로 학습한 모델을 다른 도메인의 데이터를 인식하는데 활용하여 성능 향상을 꾀하는 기법입니다.
데이터가 부족하여 높은 성능을 달성하기 어려운 상황에 주로 사용합니다.

위의 사진은 텐서플로우가 제공하는 예비 학습 모델 (pre-trained model)입니다.

이때 전이 학습 프로그래밍의 두 가지 방식이 있습니다.

  • 미세 조정 방식 (Fine Tuning)
    • Conv Layer와 FC층의 가중치를 동시에 수정
    • 학습률을 낮게 유지하여 조금씩 수정함
  • 동결 방식 (Freezing)
    • Conv Layer의 가중치를 동결하여 수정이 일어나지 않게 제한

마지막으로 CNN의 대표적인 세 가지 방법은 classification, object detection, object segmentation이 있습니다.

 

 

4. 요약



시각화에는 두 가지 종류가 있습니다.
첫 번째는 kernel의 시각화, 두 번째는 feature map의 시각화가 있습니다.

성능을 올리기 위해서는
Data augmentataion, Drop Out, Weight decay, Batch Nomalization이 있습니다.

성능 평가의 기준으로는
교차 검증과 제거 조사가 있습니다.


마지막으로 이미 훈련된 모델을 사용하는 방법으로 전이 학습이 있습니다.

전이 학습의 최적화 방식에는 미세 조정 방식과 동결 방식이 있습니다.

감사합니다.



지적 환영합니다.