20강 - 합성곱 신경망의 개념과 동작 원리 배우기

2021. 7. 8. 00:34ICT 멘토링/혼자 공부하는 머신러닝+딥러닝

20강 - 합성곱 신경망의 개념과 동작 원리 배우기

학습 로드맵

밀집층

dense 층

각 특성에 뉴런의 가중치 곱하고 절편을 더해서 출력.

 

 

그런데 이 방식은 2차원 -> 1차원이 되면서 기존 이미지가 다 사라짐.

도장을 찍는 형태로 이미지 특징을 유지할 수 없을까?

 

합성곱

합성곱 - 가중치의 개수가 입력 개수 전체에 대응하지 않고 일부만 존재함.

위 그림에서는 3개의 가중치만 존재.

입력보다 훨씬 작은 개수의 가중치 3~5 정도 사용.

커널=필터=가중치

합성곱에서는 뉴런이라고 표현을 잘 하지 않음.

입력층의 모든 특성이 다 곱해져서 다음 층으로 전달되어서 뉴런이란 말을 썼던 것인데, 여기서는 슬라이드식으로 입력층의 특성이 곱해짐.

보통은 필터라는 말을 많이 사용함.

 

필터 = 커널 = 가중치

2차원 합성곱

4*4 입력에 3*3 커널 사용.

입력보다 커널 크기가 작음.

왼쪽->오른쪽, 위->아래

 

동일한 가중치로 슬라이드하면서 곱함.

특성 맵

4*4 에서 3*3 커널 사용하기 위해서는 4개의 출력이 만들어짐.

2*2 특성 맵 - 활성화 출력으로 볼 수 있음.

입력, 출력 모두 2차원 유지.

 

여러 개의 필터

여러 필터 사용 가능하지만 필터의 가중치는 서로 다름.

절편도 잊지 말고 따라붙는 걸 기억!

3개의 필터, 1개 필터 내에서는 9개의 가중치, 1개의 절편, 합쳐서 10개의 가중치라고 말하기도 함.

 

2*2 특성맵 3개가 만들어 지는데 이걸 각각 쌓아서 3차원의 특성 맵이 만들어짐.

(2,2,3) 특성맵 마지막은 필터의 개수!

케라스 합성곱 층

from tensorflow import keras
keras.layers.Conv2D(10, kernel_size=(3, 3), activation='relu')

10 - 필터 개수

커널 크기 - 3*3

보통 정방형 사용. 3*4 같은 경우 잘 사용X

5*5, 4*4 등 사용.

 

 

패딩

입력은 4*4지만 1개 픽셀을 가장자리에 0으로 채워줌.

그럼 4개의 슬라이딩이 상하좌우에 가능해져서 4*4 특성맵이 가능해짐.

 

입력과 출력이 같도록 만드는 패딩 방식 - 세임패딩 same padding

 

패딩의 목적

패딩이 없으면 3이 1번만 사용됨.

가운데는 4번 사용됨.

외각 데이터가 중요 정보일 시 잘 적용이 안 되는 경우가 생길 수 있음.

 

4배나 차이 났던 사용빈도를 2배 좀 넘는 정도로 줄일 수 있음! 

케라스의 패딩 설정

keras.layers.Conv2D(10, kernel_size=(3, 3), activation='relu', padding='same')

padding = 'same'

'valid'는 특성맵이 줄어듦.

스트라이드

2칸, 2픽셀씩 이동하게 되면 패딩을 해도 특성 맵 2*2로 줄어듦.

마치 'valid' padding 과 동일.

 

케라스의 스트라이드 설정

keras.layers.Conv2D(10, kernel_size=(3, 3), activation='relu', padding='same', strides=1)

strides=1 아주 특수한 경우를 제외하고는 1을 암묵적으로 사용.

 

풀링

풀링 층.

합성 곱 세임패딩 많이 사용.

동일한 크기의 특성맵을 만들고 크기를 절반으로 줄이는 풀링층 사용.

4*4 -> 2*2*3 특성맵

2*2*3에서 3은 채널 차원

2*2 풀링 사용하면 1*1*3 특성맵이 출력됨.

 

  • 평균풀링 : 입력 특성맵에 해당되는 2*2 영역에서 픽셀값 평균.
  • 최대풀링 : 그 중에서 가장 큰 값을 고르는 것.

최대 풀링

이동 방식이 stride = 2. 

최대나 평균을 구하는 것이라서 겹치지 않음.

케라스의 풀링 층

keras.layers.MaxPooling2D(2)
keras.layers.MaxPooling2D(2, strides=2, padding='valid')

2 - 풀링 크기

strides=2, padding='valid'는 자동으로 맞춰서 지정되어서 따로 지정 안해도 됨.

합성곱 신경망

4*4 -> 6*6 (패딩)

3*3 필터 3개 사용.

4*4 3개에 활성화 함수가 적용되어 4*4*3 특성맵 만들어짐.

 

2*2 최대 풀링 적용하면

2*2*3 특성맵이 만들어짐.

 

1차원으로 펼치면 12개의 입력이 있고 출력층은 분류모델이면 클래스 개수 맞춰서 준비해야함.

밀집층이 맨 끝에 꼭 한 개 이상 존재해야 함.

 

CNN - 합성곱 신경망

합성곱층, 풀링층이 페어로 여러 개 존재할 수도 있음.

그럼 심층 합성곱 신경망!

 

3차원 합성곱

이미지에 너비와 높이 외에 길이(채널) 존재함.

rgb 채널

깊이가 3이면 커널로 3차원으로 만들면 됨.

입력 깊이와 커널 깊이 동일!

도장이 끝까지 쑤욱 들어가는 모습 연상!

많은 가중치가 필요하지만 출력은 1개씩 나옴.

 

흑백 이미지도 2차원을 그대로 쓰는 것이 아니라 depth가 1인 3차원 배열로 생각함.

 

여러 개의 필터가 있는 3차원 합성곱

3*3*5 필터가 10개

10개가 쌓여서 최종적으로 2*2*10 크기 특성 맵 출력.

참고자료

https://www.youtube.com/watch?v=tPLRox0YYc8&list=PLVsNizTWUw7HpqmdphX9hgyWl15nobgQX&index=20