합성곱(Convolution)
: 입력 데이터에 유용한 특성만 드러나게 하는 것으로 비유 가능
○ 밀집층의 경우
밀집층에는 뉴런마다 입력 개수만큼의 가중치가 존재(= 모든 입력에 가중치를 곱함)
처음에 가중치 w1 ~ w10과 절변 b를 랜덤하게 초기화 후 에포크를 반복하면서 경사 하강법 알고리즘을 사용하여 손실이 낮아지도록 최적의 가중치와 절편을 찾음(= 모델 훈련)
만약 밀집층에 뉴런이 3개라면 출력은 3개 (입력 개수와 상관없음)
○ 합성곱의 경우(밀집층의 계산과 조금 다름)
: 입력 데이터 일부에 가중치를 곱함
● 만약 모델이 가중치를 3개 가진다고 가정(가중치는 선정 가능)
- 가중치 w1~ w3이 입력의 처음 3개의 특성과 곱해져 1개의 출력을 만듦
- 가중치 w1 ~ w3이 입력의 3개의 특성(2 ~ 4번)과 곱해져 1개의 출력을 만듦
(두 번째 합성곱에서도 가중치 w1 ~ w3와 절편 b는 그대로 사용)
○ 정리
● 밀집층의 뉴런 : 입력 개수만큼 10개의 가중치로 1개의 출력을 만듦
● 합성곱의 뉴런 : 3개의 가중치로 8개의 출력을 만듦
합성곱 신경망(Convoluional Neural Networks; CNN)
○ 뉴런을 필터(filter), 커널(Kernel)라고 부름
○ 장점 : 1차원이 아니라 2차원 입력에서도 적용 가능
○ 합성곱 신경망 : 1개 이상의 합성곱 층을 쓴 인공 신경망
○ 2차원이라면? 필터도 2차원이어야함
e.g. 필터의 커널(= 뉴런의 곱하는 가중치)를 3*3으로 가정
1. 왼쪽 위 모서리에서부터 합성곱 시작
2. 입력의 9갸 원소와 커널의 9개 가중치를 곱한 후(+ 절편) 1개의 출력을 만듦
3. 오른쪽 한 칸 이동, 이동할 공간이 없으면 밑으로 한칸
4. 이 예제의 경우 4개의 출력을 (2,2)로 배치 = 특성 맵(feature map)
케라스로 적용하기
○ 케라스의 층 : keras.layers 패키지 아래 클래스로 구현
○ 입력 위를 이동하는 합성곱 : Conv2D 클래스
○ 매개변수 : (필터, 필터에 사용할 가중치 크기, 활성화 함수)
from tensorflow import keras
keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu')
예제의 합성곱 계산은 (4,4) 크기의 입력에 (3,3) 크기의 커널을 적용해 (2,2) 크기의 특성맵을 생성함
If 커널 크기는 (3,3) 그대로 두고, 출력 크기를 입력과 동일하게 해주려면? 패딩(사진과 글 참고)
패딩(Padding) : 입력 배열의 주위를 가상의 원소(보통 0)로 채우는 것
* 합성곱 신경망에서는 세임 패딩을 많이 사용
● 세임 패딩(Same Padding) : 0으로 빈칸을 채워주는 패딩 (계산에 영향을 미치지 않음)
● 밸리드 패딩(Valid Padding) : 순수 입력 배열에서만 합성곱을 해 특성 맵을 만드는 경우(특성 맵의 크기가 줄어듦)
● 패딩 사용 이유?
패딩을 하지 않을 경우 중앙부와 모서리 픽셀이 합성곱에 참여하는 비율이 차이가 나게 됨.
패딩을 하면 차이가 줄어들고, 만약 2픽셀을 패딩하면 중앙과 모서리 픽셀의 참여 비율이 동일해짐.
e.g. (4,4) 그림에서 커널의 크기가 (3,3)이고 패딩을(6,6)으로 줬을때 a, b, c가 합성곱에 참여한 횟수
● 매개변수 : padding으로 지정 가능(default : 'valid')
keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu', padding='same')
스트라이드(Stride) : 합성곱 층에서 필터가 입력 위를 이동하는 크기(default : 1픽셀; 한 칸씩 이동)
keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu', padding='same', strides=1)
풀링(Pooling)
: 합성곱 층에서 만든 특성 맵의 가로세로 크기를 줄이는 역할 수행 But 특성 맵의 개수는 줄이지 않음
가중치가 없는 대신에 특성 맵에서 최댓값 | 평균값을 선택
● 최대 풀링 & 평균 풀링 : 풀링 수행할 때 최댓값 | 평균값 계산 하는 것
● 아래의 오른쪽 사진에서는 두 칸씩 이동해서 겹치는 부분이 없음
● 풀링은 가로세로 방향으로만 이동함
합성곱 신경망의 전체 구조
e.g. 예제를 사진으로 보기
1. 합성곱 층에서 사용할 커널 크기 = (3,3) → 세임패딩 → 합성곱(필터 : 3개) 수행
특성맵(4,4) * 필터(3) => (4,4,3) 크기의 특성 맵 생성
2. 풀링층(합성곱 층에서 만든 특성 맵의 가로, 세로 크기 줄이기)
- (2,2) 풀링을 사용해 절반으로 줄이기
- 특성맵의 개수는 변경되지 않으므로 (2,2,3)으로 개수가 유지
3. 밀집층
- 출력층에 전달하기 위해 3차원 배열을 1차원으로 펼쳐야함
- 결과 : 12개 원소를 가진 1차원 배열(이는 출력층의 입력이 됨)
4. 출력층 : 3개의 뉴런(즉, 3개의 클래스를 분류하는 다중 분류 문제)
- 출력층에서 계산된 값 : 소프트맥스 활성화 함수를 거쳐 최종 예측 확률
컬러 이미지를 사용한 합성곱
: 컬러라면 색깔까지(RGB) 포함되기에 3차원 배열이 됨. 예시로 (4,4)였던 것이 (4,4,3)이 됨
고로 필터의 가중치 크기도 (3,3)이 아니라 (3,3,3)이 되도록 해야함.
* 커널 배열의 깊이 = 입력의 깊이(항상 같음)
(케라스의 합성곱 층은 항상 3차원 입력을 기대함. So, MNIST 데이터처럼 흑백일 경우에 (28, 28) 크기를 (28, 28, 1) 크기의 3차원 배열로 변환하여줌. 즉, 원소 개수는 유지하고 차원만 3차원으로)
다른 예제 : 합성곱 층 - 풀링 층 다음에 다시 합성곱 층이 오는 경우
● 가정
- 첫 번째 합성곱 층의 필터 개수 : 5
- 첫 번째 풀링층을 통과한 특성 맵의 크기 : (4,4,5)
- 두 번째 합성곱 층의 필터의 너비와 높이 : 각각 3
- 필터의 커널의 크기 : (3,3,5) why? 입력 깊이와 필터의 깊이가 같아야 하기 때문
- 합성곱의 결과는 1개의 출력을 만듬
결론적으로 합성곱 신경망은 너비와 높이는 점점 줄어들고 깊이는 점점 깊어지는 것이 특징
(+ 마지막에 출력층 전에 특성 맵을 모두 펼쳐서 밀집층의 입력으로 사용)
'Networks > 데이터 분석 및 AI' 카테고리의 다른 글
SK networks AI Camp - 딥러닝 추가 조사 자료 (2) | 2024.09.04 |
---|---|
SK networks AI Camp - Deep learning 기초 (2) | 2024.09.04 |
SK networks AI Camp - 인공 신경망 (3) | 2024.09.02 |
SK networks AI Camp - 비지도 학습 (0) | 2024.08.31 |
SK networks AI Camp- 회귀 (0) | 2024.08.30 |