딥러닝 모델은 블랙박스다?
학습에서 표현된 특징들이 사람이 이해하기 쉬운 형태가 아니기 때문이다.
일부 딥러닝 모델에서는 어느정도 맞지만, 콘볼루션 뉴럴 네트워크에서는 전혀 아니다.
콘볼루션 뉴럴 네트워크의 표현은 시각적인 개념을 학습한 것이므로,
시각화하기 좋다.
사용이 편하고 유용한 세 가지 기법은 다음과 같다.
1. 컨브넷 중간층의 출력을 시각화
연속된 컨브넷 층이 입력을 어떻게 변형시키는지 이해하고 개별적인 컨브넷 필터의 의미를 파악하는데 도움이 된다.
2. 컨브넷 필터를 시각화
컨브넷의 필터가 찾으려는 시각적인 패턴과 개념이 무엇인지 상세하게 이해하는데 도움이 된다.
3. 클래스 활성화에 대한 히트맵(heatmap)을 이미지에 시각화
이미지의 어느 부분이 주어진 클래스에 속하는 데 기여했는지 이해하고 이미지에서 객체 위치를 추정(localization)하는데 도움이 된다.
중간층의 활성화 시각화
어떤 입력이 주어졌을 때 네트워크에 있는 여러 합성곱과 풀링 층이 출력하는 특성맵을 시각화 하는 것이다.
네트워크에 의해 학습된 필터들이 어떻게 입력을 분해하는지 알 수 있다.
사용한 모델은 고양이와 강아지를 이진분류하는 콘볼루션 뉴럴 네트워크 모델이다.
훈련할 때 사용하지 않았던 고양이 사진을 입력이미지로 선택한다.
고양이 사진을 출력한다.
확인하고 싶은 특성 맵을 추출하기 위해 이미지 배치를 입력으로 받아
모든 합성곱과 풀링 층의 활성화를 출력하는 keras 모델을 만든다.
입력 이미지가 들어 올때 원본 모델의 활성화 값을 반환 한다.
고양이지 이미지에 대한 활성화 값을 출력하면 다음과 같다.
각 층의 shape는 위와 같고, 마지막 출력층의 값이 고양이인지, 강아지인지 분류하는 것인데,
원본모델에서 마지막에 sigmoid 함수기 때문에 0에 가까우면 고양이, 1에 가까우면 강아지이다.
여기서는 0.01이므로 고양이로 분류한 것이다.
첫번째 층의 활성화 중에 20번째 커널과 17번째 커널(채널)
밝은 녹색 점이 해당 채널이 감지하고 있는 부분이다.
네트워크의 모든 활성화는 다음과 같다.
여기서
임의의 실수인 층의 출력을 그래프로 나타내기 좋게 처리했다.
0~255 사이의 정수로 바꾸었음.
평균을 빼고 표준 편차로 나누어 표준 점수로 바꾸었다.
첫번째 층은 여러 종류의 edge detection을 모아 놓은 것으로 보임.
초기 사진에 있는 거의 모든 정보가 유지되나...
상위층으로 갈 수록 더 추상적으로 되고 시각적으로 이해하기 어려워 진다.
고양이 귀, 고양이 눈 처럼 고수준 개념을 인코딩 하게 된다.
상위층의 표현은 이미지의 시각적 콘텐츠에 대한 정보가 줄어들고 이미지 클래스에 관한 정보가 점점 증가한다.
비어있는 활성화가 층이 깊어짐에 따라 늘어난다.
첫번째 층에서는 모든 필터가 입력 이미지에 활성화되었다.
그러나, 층이 올라가면서 활성화되지 않는 필터들이 생긴다.
'머신러닝과 딥러닝' 카테고리의 다른 글
케라스 어텐션 메커니즘(Keras Attention Mechanism) (LSTM) (1) | 2020.01.08 |
---|---|
ConvNet 학습 시각화 (히트맵 시각화) (0) | 2020.01.07 |
패딩(Padding)과 스트라이드(Strides)와 풀링(Pooling) (0) | 2020.01.07 |
콘볼루션에서의 커널 (0) | 2020.01.07 |
콘볼루션 뉴럴 네트워크(Convolution Neural Networks) (0) | 2020.01.07 |