1. CNN(Convolutional Neural Network)을 구성하는 각 레이어의 역할

CNN은 이미지의 공간적/지역적(Spatial/Local) 정보를 유지하면서 특징을 추출하도록 설계된 딥러닝 아키텍처입니다.
- Convolutional Layer (합성곱 계층): 특징 추출의 핵심
- 역할: 입력 이미지에 필터(Kernel)를 슬라이딩하며 곱 연산과 합(Sigma)을 수행하여 피처 맵(Feature Map)을 생성합니다. 여기서 Sigma는 지정된 수용 영역 내의 픽셀 값과 필터의 가중치(theta)를 각각 곱한 뒤 모두 더하는 수학적 연산을 의미합니다. 이를 통해 선, 모서리 같은 질감부터 복잡한 객체의 형태까지 시각적 특징을 추출합니다.
- 흔히 하는 실수: 수용 영역(Receptive Field)의 크기를 계산하지 않고 무작정 3*3필터만 쌓는 실수를 흔히 합니다. 타겟 객체의 크기에 맞춰 망이 충분히 넓은 영역을 볼 수 있도록 설계해야 합니다.
- Activation Layer (활성화 계층 - 주로 ReLU): 비선형성 부여
- 역할: 합성곱 연산은 본질적으로 선형(Linear) 연산입니다. 선형 연산만으로는 복잡한 실세계의 패턴을 학습할 수 없으므로, ReLU(f(x) = max(0, x)) 등을 통해 네트워크에 비선형성을 주입합니다.
- 기술 부채: 음수 값을 완전히 무시하는 ReLU의 특성상 죽은 뉴런(Dead ReLU) 문제가 발생할 수 있습니다. 가중치 초기화(He Initialization 등)에 신경 쓰지 않으면 학습 초기부터 모델의 절반이 마비되는 기술 부채를 안게 됩니다.
- Pooling Layer (풀링 계층): 차원 축소 및 이동 불변성
- 역할: 피처 맵의 크기를 줄여(Downsampling) 파라미터 수를 감소시키고 연산 효율을 높입니다. 동시에 이미지가 약간 이동하거나 변형되어도 특징을 잡아낼 수 있는 강건함(Translation Invariance)을 부여합니다.
- 실무 조언: 최근 모던 아키텍처(ResNet 등)에서는 정보의 강제적 손실을 낳는 풀링 대신, Convolution의 stride를 2로 설정하여 네트워크가 축소 방식을 스스로 '학습'하게 두는 Strided Convolution 방식을 선호합니다.
- Fully Connected Layer (완전 연결 계층): 최종 추론
- 역할: 추출된 모든 3차원 특징을 1차원 벡터로 평탄화(Flatten)한 뒤, 최종적으로 클래스 확률을 계산합니다.
- 흔히 하는 실수 및 최적화: FC 계층은 파라미터 수를 폭발적으로 증가시켜 메모리 병목과 과적합(Overfitting)의 주범이 됩니다. 최근에는 이를 Global Average Pooling (GAP)으로 대체하여 파라미터를 획기적으로 줄이는 설계가 표준입니다.
2. Autoencoder (AE)의 활용 상황과 Encoder / Decoder의 개념
오토 인코더는 입력 데이터를 그대로 출력으로 복원하도록 학습하는 비지도 학습(Unsupervised Learning) 모델입니다. 핵심은 중간에 병목(Bottleneck) 구간을 두어 데이터의 '진짜 중요한 정보'만 남기도록 강제하는 것입니다.
적합한 활용 상황
- 차원 축소 (Dimensionality Reduction): PCA(주성분 분석)의 비선형 확장판으로 사용되어, 고차원 데이터를 저차원의 밀집 벡터로 압축합니다.
- 이상 탐지 (Anomaly Detection): 정상 데이터로만 AE를 학습시킵니다. 이후 비정상 데이터가 들어오면 모델이 이를 제대로 복원하지 못해 복원 오차(Reconstruction Error)가 크게 발생하며, 이를 기준 삼아 이상을 탐지합니다.
- 노이즈 제거 (Denoising): 신분증 빛반사 제거나 훼손된 이미지를 복원하는 시스템의 가장 근본적인 베이스라인입니다. 다만 단순 AE는 병목 구간에서 텍스트 같은 세밀한 고주파 공간 정보를 잃어버리기 쉽습니다. 따라서 실무에서는 AE를 기초로 하되, 공간 정보를 보존하는 Skip Connection이 추가된 U-Net 등의 아키텍처로 넘어가야 SSIM 0.99 이상의 정교한 원본 복원 성능을 달성할 수 있습니다.
Encoder와 Decoder의 개념과 차이점
- 인코더 (Encoder): 압축과 추상화
- 개념: 고차원의 입력 공간 x를 저차원의 잠재 공간(Latent Space) z로 매핑합니다 (z = f(x)).
- 역할: 데이터에 낀 노이즈나 불필요한 중복 정보를 버리고, 데이터를 설명하는 핵심적인 특징(Manifold)만 추출합니다.
- 디코더 (Decoder): 생성과 복원
- 개념: 압축된 잠재 벡터 z를 다시 원래의 입력 공간 x'로 되돌립니다 (x' = g(z)).
- 역할: 인코더가 남긴 핵심 요약본을 바탕으로 원본 데이터를 최대한 정교하게 재구성합니다.
- 흔히 하는 실수: 잠재 공간(z)의 차원을 너무 크게 잡는 것입니다. 차원이 입력 데이터와 비슷하거나 크면, 오토인코더는 데이터의 패턴을 추상화하는 대신 단순히 입력값을 출력으로 복사하는 '항등 함수(Identity Function)'를 외워버리게 됩니다.