지금, 나는 

Art is anything you can get away with.

Programming/혼공머신 8기.py

추가 학습(1)_합성곱 신경망

hyuckee 2022. 8. 16. 14:50
반응형

이전 단원에서 딥러닝에 대한 개괄적인 내용을 배웠다.

이번 단원은 이미지 학습에 강력한 효과를 보이는

합성곱 신경망에 대해 알아보자.


08-1   합성곱 신경망의 구성 요소

인공 신경망은 전체 입력층에 대해

전부 가중치를 곱하고 합해서 각 뉴런 별로 출력했다.

.

이와 달리 합성곱 신경망은

일부 데이터를 골라 가중치를 곱하고

한 칸씩 이동하며 1개의 뉴런에 대해 여러 개의 출력을 한다.

출처: https://blog.naver.com/comparkwb/222338992666

이렇게 이동하며 가중치를 곱하고 출력하는 단위를 따로 필터나 커널이라고 부른다.

이렇게 합성곱 계산을 통해 얻은 출력은 특성 맵이라고 부른다.

.

참고로 각각의 특성 맵에 대한 커널의 각 가중치는 서로 다르다.

따라서 여러 개의 필터를 사용하면 특성맵의 차원(깊이)이 늘어난다.

 

그리고 이러한 단위는 밀집층과 구별된 합성곱 층이라고 부른다.

하지만 마찬가지로 출력에 대해 활성화 함수를 지정한다.

.

이러한 특징 덕분에 합성곱 신경망(CNN)은 이미지 처리 분야에서 두각을 보인다.

2차원 데이터를 입력해서 출력도 2차원 형태를 유지하며

적은 양의 가중치로 이미지의 필수 요소를 부각시키면서 출력한다.


앞서 예시로는 (5, 5) 크기의 입력에 (3, 3) 커널을 적용하여

(3, 3) 크기의 특성 맵을 만들었다.

 

커널 크기는 유지하되 출력되는 특성 맵의 크기를 키우려면 

패딩이라는 작업을 거쳐야 한다.

패딩이란, 입력층의 둘레를 확장해 커널이 이동하는 범위를 늘리는 방법이다.

 

보통 입력 주위에 0으로 패딩하는 세임 패딩을 이용해

입력과 특성 맵의 크기를 동일하게 만든다.

이와 달리 이전처럼 순수한 입력 배열에서 합성곱을 사용한 것은 밸리드 패딩이라고 부른다.

밸리드 패딩은 특성 맵의 크기가 줄어들 수 밖에 없다.

 

또한, 세잎 패딩을 이용하면 입력 층의 각 셀이

밸리드 패딩에 비해 가중치에 곱해지는 횟수 비율

최대한 동등하게 유지할 수 있다는 장점도 있다.

따라서 이미지의 주변 외각 쪽의 정보를 잃지 않도록 도와준다.

.

이와 반대로 커널이 한 칸씩이 아닌 두 칸 이상 이동하게 할 수 있다.

이렇게 하면 특성 맵의 크기는 더더욱 작아지게 된다.

이런 이동의 크기를 스트라이드라고 부른다.


이전의 주성분 분석처럼 데이터의 특징은 최대한 살리면서 크기를 압축하는 방법이 여기도 있다.

풀링은 합성곱 층에서 만든 특성 맵의 가로세로 크기를 줄이는 역할을 수행한다.

풀링에는 가중치가 없어 해당 영역에서

가장 큰 값(최대 풀링)을 고르거나 평균 값(평균 풀링)을 계산한다.

합성곱과 달리 풀링은 겹치는 부분 없이 특성 맵을 이동한다.

평균 풀링은 중요한 정보를 희석시킬 수 있기 때문에 주로 최대 풀링을 이용한다.

 

합성곱 신경망의 전체 구조는 다음과 같다.

DNN 전체 구조

이렇게 이미지를 효과적으로 간소화 시키고 마지막에 인공 신경망 밀집층에 투입한다.

 

컬러 이미지의 경우 R, G, B 채널로 구성되어 있기에 3의 깊이 차원이 추가된다.

따라서 입력층도 3차원, 커널도 3차원으로 형성되고 특성맵은 평면 형태를 띤다.

하지만 커널 수만큼 특성맵이 겹쳐져 깊이가 생긴다.


08-2   합성곱 신경망을 사용한 이미지 분류

합성곱 신경망에 대해 어느정도 알겠다.

하지만 인공 신경망과 달리 합성곱 신경망을 굳이 거쳐야 할까?

이전에 인공 신경망은 85%가 넘는 정확도를 보여줬었다.

 

다음은 케라스의 Sequential 클래스를 이용해 구현한 합성곱 신경망의 구조이다.

크기 (28, 28) 이미지에 (3, 3)필터를 적용해 합성곱과 풀링 층을 2번 거쳤다.

만약 이 과정이 없었다면 인공 신경망의 입력층은 784개의 rough한 값일 것이다.

하지만 합성곱 과정을 거치면서 입력층을 3,136개로 늘리고

이미지 내의 중요 정보를 부각 시키고 필요 없는 정보는 버리는 작업을 진행한 것이다.

 

실제로 모델을 만들고 학습시켜보면 무려 94%의 정확도가 나온다.

이전의 인공 신경망에 비해 훨씬 좋아진다는 것을 알 수 있다.


08-3   합성곱 신경망의 시각화

이제 합성곱 신경망의 동작 방법, 효과 등은 알겠다.

여기서는 모델이 어떤 가중치를 학습하고 어떤 특성 맵을 출력하는지 알아보자.

이를 통해 신경망의 동작 원리에 대한 통찰을 키울 수 있을 것이다.


먼저 가중치에 대해 알아보자.

다음은 순서대로 훈련하지 않은 신경망과 훈련을 마친 신경망의 가중치 그래프이다.

텐서플로는 신경망의 가중치를 처음 초기화할 때 균등 분포에서 랜덤하게 값을 선택한다.

따라서 훈련하지 않은 신경망의 경우 합성곱을 통과했을 때

텐서플로에서는 우선 무작위(같은 확률)로 가중치를 선택한다.

 

반면 훈련을 마친 신경망의 경우 0을 중심으로 종 모양의 그래프를 띤다.

이는 훈련을 통해 적절한 가중치를 스스로 찾아냈고

필요한 부분과 필요하지 않은 부분을 적절히 걸러냈다는 의미이기도 하다.

 

 

실제로 커널의 모습을 보면 훈련하지 않은 신경망은 밋밋한 데 반해

훈련을 마친 신경망은 밝은 부분과 어두운 부분이 적절히 분포되어 있다.


이번에는 특성 맵을 알아보자.

합성곱 층을 두 번 통과한다고 했을 때

각각의 출력인 특성 맵에 어떤 차이가 있는지 알아보자.

 

크기 (28, 28)의 신발 이미지를 이용할 것이다.

 

합성곱 과정은 08-2 과정을 따를 것이고 각 필터의 깊이는 32, 64이다.

그러므로 각 특성 맵의 수도 32, 64이다.

 

다음은 순서대로 첫 번째 특성 맵(A)과 두 번째 특성 맵(B)이다.

A의 경우 신발의 모습이 어느정도 뚜렷하게 보인다.

윤곽이나 내부 디테일도 잘 감지해 학습한 것으로 확인된다.

 

반면 B의 경우 신발의 모습은 거의 없고 심지어 알아보기도 힘들다.

이러한 현상은 합성곱 층을 많이 쌓을수록 심해진다.

 

앞부분(A)에서는 이미지의 시각적인 정보를 감지한다면

뒤쪽(B)에서는 앞의 시각 정보를 바탕으로 추상적이고

조금 더 고차원적인 정보를 학습한다고 볼 수 있다.

.

결론적으로 합성곱 층을 연이으면

모델은 이미지에서 다양한 정보를 학습한다.

하지만 일정 수준을 넘으면 쉽게 과대적합될 수 있고

정확도가 늘기는 커녕 분류 조차 안될 수도 있다.

그래도 이미지 분류에서 합성곱 신경망은 월등한 성능을 발휘한다.

728x90