Pupbani는 완성된 딥러닝 모델을 들고 마케팅 팀장을 찾아갔다.
성능이 87% 정도로 높아졌다고 보고 했지만 팀장의 반응은 시큰둥했다.
팀장은 "성능이 더 좋아질 수는 없을 까요?"라고 말했고 Pupbani는 당황했다.
지나가던 박선배가 "합성 곱신경망을 써보는 건 어때? 이미지 분류에 좋다던데?"라고 말했고
Pupbani는 알겠다고 하고 모델을 만들러 달려갔다.
합성곱
합성곱(convolution)이란 마치 입력 데이터에 도장을 찍어 유용한 특성만 드러나게 하는 것으로 비유할 수 있다.
합성곱의 동장 방식을 알아보자.
3개의 특성에 가중치를 곱하고 절편을 더해 1개의 출력을 만든다.
1칸을 이동해 위에서 했던 방식 그대로 1개의 출력을 만든다.
이 것을 반복하면 10개의 특성이 8개의 출력이 된다.
이렇게 합성곱은 이렇게 입력 데이터에 도장을 찍어 출력을 한 개씩 만들어 내는 형태를 띤다.
합성곱 신경망(CNN, Convolutional Neural Network)에서 뉴런에 해당하는 즉 도장을 것을 필터(filter) 또는 커널(kernel)이라고 부른다.
이 합성곱의 장점은 2차원 입력에도 적용 할 수 있다는 점이다.
이렇게 도장을 여러번 찍어서 최종적으로 만들어진 출력의 모음을 특성 맵(feature map)이라고 한다.
밀집층에서도 여러 개의 뉴런을 사용하듯 합성곱 층에서도 여러 개의 필터를 사용한다.
이렇게 필터를 여러개 사용하면 특성맵의 형태는 (줄어든X, 줄러든Y,필터의 개수)의 형태가 된다.
케라스 합성곱 층
합성곱에 대해 알아봤으니 이제 합성곱 층을 만들어보자.
합성곱 클래스는 keras.layers 패키지 아래, Conv2D라는 클래스로 구현되어 있다.
- 첫번째 매개변수 : 필터의 개수
- kernal_size : 필터의 크기
- activation : 활성화 함수
conv = keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu')
패딩(padding)
합성곱 신경망 층에서 필터가 입력 데이터를 특성맵을 만들때 크기가 줄어들지 않게 하려면 어떻게 해야할까?
입력의 주위를 0으로 채워 합성곱을 실행하면 되지 않을까?
이렇게 입력 배열의 주위를 가상의 원소로 채우는 것을 패딩(Padding)이라고 한다.
가상의 원소는 0으로 채우기 때문에 계산에 영향을 미치지 않는다.
- 입력 배열의 크기와 같은 특성맵을 만들기 위해 주위에 패딩을 하는 것을 세임 패딩(Same Padding)이라고 한다.
conv=keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu', padding='same')
- 패딩 없이 순수하게 합성곱을 하여 특성맵을 만드는 것을 밸리드 패딩(Valid Padding)이라고 한다.
스트라이드(stride)
합성곱에서 필터는 기본적으로 1칸씩 이동한다.
이 이동하는 거리도 따로 정해줄 수 있다.
필터의 이동거리를 stride라고 하며 Conv2D의 strides 매개변수로 지정가능하다.(기본값 = 1)
conv=keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu', padding='same', strides=2)
풀링(Pooling)
풀링은 합성곱 층에서 만든 특성 맵의 가로 세로 크기를 줄이는 역할을 수행한다.
하지만 특성맵의 개수는 줄이지 않는다.
- 최대 풀링(Max Pooling) : 필터를 입력 데이터에 찍은 영역에서 가장 큰 값을 고른 것
- 평균 풀링(Average Pooling) : 필터를 입력 데이터에 찍은 영역의 평균값을 고른 것
# 매개변수로 풀링의 크기를 얼마큼 줄일지 설정
# 최대 풀링
pool = keras.layers.MaxPooling2D(2)
# 평균 풀링
pool = keras.layers.AveragePooling2D(2)
합성곱 신경망의 전체 구조
컬러 이미지를 사용한 합성곱
컬러 이미지는 RGB 채널을 표현해야 하기 때문에 3차원(x, y, 3) 형태이다.
만약 이 이미지를 가지고 합성곱 신경망 모델을 사용하려면 필터도 3차원(3,3,3) 형태로 만들어줘야 한다.
필터를 통과하고 나온 특성맵은 차원과 크기가 줄어든 형태로 나오게 된다.
특성맵의 깊이는 필터의 개수에 의해 정해진다.
합성곱 층을 반복
합성곱 층을 여러개 넣고 싶을 때는 다음과 같은 형태로 넣을 수 있다.
[합성곱 층1 - 풀링 층1 - 합성 곱층2 - 풀링층2]
- 입력이 (8,8,3)인 데이터를 same padding을 적용한 필터(3,3,3) 20개, 풀링 (2,2) 인 경우
- 필터 통과 출력 : (8,8,20)
- 풀링 통과 출력 : (4,4,20)
'AI > 딥러닝(Deep Learning)' 카테고리의 다른 글
[딥러닝/DL]6. 합성곱 신경망의 시각화 (0) | 2022.12.08 |
---|---|
[딥러닝/DL]5. 합성곱 신경망을 사용한 이미지 분류 (1) | 2022.12.08 |
[딥러닝/DL]3. 신경망 모델 훈련 (0) | 2022.12.07 |
[딥러닝/DL]2. 심층 신경망 (0) | 2022.12.07 |
[딥러닝/DL]1. 인공 신경망 (1) | 2022.12.06 |