티스토리 뷰
1️⃣ 이미지와 Convolution 연산
▶ Fully-connected Layer와 이미지 데이터
FC Layer는 1차원 데이터를 요구한다.
이미지를 단순하게 1차원으로 바꾸면 2차원 상에서 가지는 정보를 포기해야한다.
- 이미지 내 사물 간의 거리 관계 등
- 색의 변화 (특히, 세로로 변하는 상황)
→ 즉, 공간 정보(Spatial Information)가 무너진다.
따라서, 이미지 처리에 특화된 딥러닝 모델이 등장 : Convolutional Neural Network
CNN의 대표적인 구성 요소
- Convolutional Layer
- Pooling Layer
- 분류기(Classifier): Fully-connected layer
▶ Convolution 연산
: CNN을 구현하는 핵심 연산
커널과 Convolution 연산
- 전통적인 이미지 처리 분야에서 커널(또는 필터)이란 것이 존재
- 이미지와 커널 간의 Convolution 연산으로 처리
- 2차원 이미지 데이터 : 행렬로 표현 가능 (행렬의 각 원소는 해당 위치의 이미지 픽셀값)
- Convolution 커널 : 행렬로 표현 가능
Convolution 연산은 2차원 상에서 연산이 이루어지므로 이미지 데이터를 변형 없이 그대로 사용 가능하다.
2️⃣ Convolution 연산 과정
▶ Convolution 연산 과정
- 아래 이미지의 노란색 영역이 커널
Convolution 연산 용어
- Feature Map (또는 Activation Map) : 연산 결과
- 수용 영역(Receptive Field) : 커널과 이미지가 겹치는 영역
▶ 컬러 이미지의 Convolution 연산
- 위의 예시는 이미지의 채널이 1개이므로 흑백 이미지
- 컬러 이미지는 채널이 3개 → 이 경우 커널도 채널을 3개로 준비 (input 이미지의 채널 갯수와 커널의 채널 갯수는 동일해야한다)
- 각 채널 별로 Convolution 연산을 수행하고 각 결과를 더해서 하나의 Feature Map을 생성한다.
▶ Convolution 연산의 확장
- 지금까지는 커널을 1개만 사용 → Feature Map도 1개
- 커널을 여러 개 두면 Feature Map도 여러 개 생성된다.
- 커널 갯수가 CNN 모델의 성격을 결정하게 된다.
3️⃣ CNN (Convolutional Neural Network)
▶ Convolutional Layer
커널을 이용하여 이미지에서 feature를 추출하는 Layer
지금까지 사용한 커널들은 학습 가능한 커널 → 즉, 커널 행렬의 각 값들이 가중치(Weight)
이러한 커널들로 이루어진 Layer를 Convolutional Layer라고 부르고, 이 Layer들을 쌓아서 CNN을 구성한다.
(하나의 Convolutional Layer에 여러 개의 커널을 구성할 수 있다)
Layer의 역할
- 이미지가 가지는 특정 Feature를 뽑아내도록 커널을 학습
- 커널에 따라 추출하는 Feature를 다르게 학습
- 이미지 내의 대각선, 원형, 색조 등등이 이러한 Feature에 해당
Convolutional Layer의 의의
왜 이미지 특징을 잘 뽑아내는가?
→ Convolution 연산은 하나의 커널이 픽셀 간의 정보를 보게 만든다. (이미지에서 연속적으로 변하는 정보를 잡아내는데 유리)
→ 하나의 커널이 이미지 전체 영역을 보고 학습한다.
Parameter Sharing
→ 커널이 가진 Parameter를 이미지의 모든 영역에서 공유한다. (모델의 가중치 갯수극적으로 감소)
→ Parameter 개수를 FC Layer에 비해 극적으로 줄인다. (과적합 방지에 유리)
Stride
- Convolution 연산 과정을 조절하기 위한 Hyperparameter
- 커널이 이미지 내에서 이동하는 칸수를 조절한다.
- 지금까지 Convolution 연산에서 보여준 예시는 모두 1칸 / 위의 그림은 Stride가 2칸일 경우의 예시
💡 Hyperparameter
딥러닝 모델의 학습 과정을 조절하기 위한 파라미터
- 사람이 직접 정해줘야한다.
- Convolutional Layer에서 조절할 수 있는 hyperparameter로는 커널의 개수, 커널의 크기, stride, padding 등이 있다.
Padding
Convolution 연산을 진행하면 Feature Map 사이즈가 계속 줄어든다.
→ Padding을 추가하여 Feature Map 사이즈가 줄어드는 현상 방지할 수 있고,
이미지의 테두리 정보도 균일하게 활용할 수 있다.
일반적으로 패딩 영역의 값은 0이 들어간다. (zero padding)
Convolutional Layer 활성화 함수
Convolution 연산 또한 선형 연산은 곱셈과 덧셈으로만 이루어진 연산이다.
따라서 FC Layer처럼 비선형성을 추가하기 위해 활성화 함수를 사용한다.
CNN은 주로 ReLU 함수를 사용한다.
▶ Pooling Layer
- CNN에서 거의 항상 같이 쓰이는 Layer
- 주 역할은 Feature Map의 사이즈를 줄여서 Parameter 개수를 줄이는 것이다. (과적합 조절)
Max Pooling
각 영역에서 최대값을 뽑아 새로운 Feature Map을 구성한다.
- 주어진 이미지나 Feature Map을 겹치지 않는 영역으로 분할한다. (위 그림은 각 영역의 크기가 2x2가 되도록 분할)
- 일반적으로 pooling을 한다고 하면 Feature Map의 사이즈를 2배로 줄인다.
Average Pooling
Max Pooling과 거의 동일하나, 각 영역의 평균값을 계산하여 새로운 Feature Map을 구성한다.
일반적으로 Max Pooling을 많이 사용한다.
→ Feature Map에 존재하는 Feature 중 가장 영향력이 큰 Feature만 사용하는 것이 효율적이라는게 실험을 통해 밝혀진 사실이기 때문
Feature Map의 채널이 여러 개면 각 채널별로 Pooling 연산을 수행한다.
Convolution연산과 다른 점은 Pooling연산의 경우 각 채널별로 나온 연산의 결과를 더하진 않는다.
추가적인 Pooling Layer
- Global Average Pooling : 전체 Feature Map에서 하나의 평균값을 계산
- Global Max Pooling : 전체 Feature Map에서 하나의 최대값을 계산
둘 다 마찬가지로 채널 별로 연산을 수행한다.
여기선 Global Average Pooling을 많이 사용한다. → Global Average Pooling은 분류기와 많은 연관이 있다.
▶ 분류기 (Classifier)
CNN은 일반적으로 이미지 분류 목적으로 사용한다.
Feature Map을 Fully-connected Layer에 통과시켜 분류를 수행한다.
이를 위해 Feature Map을 1차원으로 변형한다. (Global Average Pooling 활용 가능)
4️⃣ 대표적인 CNN 모델
▶ LeNet (1990년)
우편번호 인식을 위한 모델
- Subsampling layer == Pooling layer
- Full connection == Fully-connected Layer
▶ AlexNet (2012년)
- 2012년 ImageNet Challenge 우승 → 기존 모델의 성능을 큰 폭으로 상회
- ReLU 활성화 함수 소개
- 딥러닝 모델 학습에 GPU를 활용 → 이후로 사실상 모든 딥러닝 모델은 GPU로 학습
▶ VGGNet (2014년)
- 커널 사이즈를 모두 3x3으로 통일
- Parameter 수 증가를 억제하면서 모델 층을 더 많이 쌓을 수 있게 된다.
- 층이 많을수록(즉, 모델이 깊을수록) 일반적으로 성능이 향상된다.
▶ ResNet (2015년)
- 깊은 모델에서 필연적으로 나타나는 현상인 Vanishing Gradient 문제를 해결하기 위한 구조 (Residual Connection)
- 이를 통해 Layer 개수를 극적으로 늘림 (152개)
- 기존 Convolutional Layer들을 우회하는 연결 (입력 Feature Map이 우회로를 통과하여 Convolutional Layer의 Feature Map과 더해짐) → 기울기 값이 항상 1 이상이 되어 기울기 소실 문제를 방지
💡 Vanishing Gradient (기울기 소실)
역전파 과정에서 기울기 값이 점점 작아지다 0에 수렴하면서 발생
→ 모델 학습에 오랜 시간이 걸리거나 아예 학습이 멈추게 된다.
▶ 분류 작업이 아닌 경우에 사용하는 모델은?
지금까지 나온 모델은 모두 분류 모델들
분류 작업이 아닌 경우에 사용하는 모델은?
→ 일반적으로 분류 모델과 유사하게 CNN을 구성한다.
→ 모델의 출력값, 손실 함수, 데이터셋 구성 등이 완전히 다르게 이루어진다. ex) YOLO, R-CNN, U-Net 등
이 글은 엘리스의 AI트랙 5기 강의를 들으며 정리한 내용입니다.
'개발공부 > 🤖 DL & ML' 카테고리의 다른 글
[RNN] Recurrent Neural Network (0) | 2022.11.07 |
---|---|
[자연어 처리] 텍스트 전처리 및 단어 임베딩 (0) | 2022.11.03 |
[CNN] 이미지 데이터 (0) | 2022.11.01 |
[딥러닝 기초] 딥러닝 모델 학습의 문제점 (0) | 2022.11.01 |
[딥러닝 기초] 텐서플로우와 딥러닝 학습 방법 (0) | 2022.10.28 |
프론트엔드 개발자 삐롱히의 개발 & 공부 기록 블로그