✅CNN(Convolutional Neural Network)은 주로 이미지 처리 분야에 사용되는 딥러닝 모델로, 여러 가지 종류의 레이어들이 조합되어 이미지의 특징을 효과적으로 추출하고 분류하는 역할을 합니다. 각 레이어는 마치 이미지를 분석하는 전문가들처럼 고유한 임무를 수행합니다.
1. 합성곱 레이어 (Convolutional Layer) 🔎
합성곱 레이어는 CNN의 핵심으로, 이미지에서 **특징(Feature)**을 추출하는 역할을 합니다. 이 레이어는 마치 이미지를 돋보기로🔍 들여다보는 것과 같습니다.
- 원리: 필터(Filter) 또는 **커널(Kernel)**이라고 불리는 작은 행렬이 이미지를 처음부터 끝까지 훑고 지나가면서(합성곱 연산), 이미지의 특정 부분(예: 수직선, 수평선, 엣지, 색상 등)의 특징을 감지하고 강조합니다. 이 과정을 통해 생성된 결과물을 **특징 맵(Feature Map)**이라고 부릅니다.
- 용어 설명:
- 필터(Filter): 이미지의 특정 특징을 감지하는 역할을 하는 작은 행렬(가중치)입니다. 이 필터의 값들은 학습 과정에서 자동으로 업데이트됩니다.
- 합성곱 연산(Convolution): 필터가 이미지 위를 이동하며 픽셀 값과 필터의 값을 곱하고 모두 더하는 연산입니다. 이 연산을 통해 이미지의 지역적 특징이 새로운 값으로 표현됩니다.
- 코드로 예시:
-
import tensorflow as tf # 32x32 크기의 컬러 이미지에 32개의 3x3 필터를 적용하는 합성곱 레이어 tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)) # 32: 필터의 개수입니다. 더 많은 특징을 추출합니다. # (3, 3): 필터의 크기입니다. 이 크기로 이미지를 훑습니다. # activation='relu': ReLU 활성화 함수를 적용하여 비선형성을 추가합니다. # input_shape: 입력 이미지의 크기입니다. (가로, 세로, 채널) - Python
2. 활성화 함수 (Activation Function) 🚀
활성화 함수는 합성곱 레이어 바로 뒤에 위치하여, 선형적인 계산 결과에 **비선형성(Non-linearity)**을 추가합니다.
- 원리: 선형적인 변환만으로는 복잡한 패턴을 학습할 수 없습니다. 활성화 함수는 입력 값에 따라 출력 값을 조절하여 신경망이 더 복잡하고 다양한 형태의 데이터를 학습할 수 있도록 도와줍니다.
- 주로 사용되는 함수: CNN에서는 주로 ReLU(Rectified Linear Unit) 함수가 사용됩니다.
- 용어 설명:
- 비선형성(Non-linearity): 입력과 출력 사이의 관계가 직선적이지 않은 것을 의미합니다. 비선형성을 추가해야만 신경망이 직선 하나로 해결할 수 없는 복잡한 문제(예: 고양이와 개를 구분하는 문제)를 풀 수 있게 됩니다.
(1) 추가설명
3. 풀링 레이어 (Pooling Layer) 🤏
풀링 레이어는 특징 맵의 크기를 줄여(다운샘플링) 계산량을 감소시키고, **과적합(Overfitting)**을 방지하는 역할을 합니다. 풀링 레이어는 마치 불필요한 세부 정보를 버리고 핵심만 요약하는 것과 같습니다.
- 원리: 정해진 영역(풀링 윈도우) 안에서 대표값(예: 최댓값 또는 평균)만을 추출하여 특징 맵의 크기를 줄입니다.
- 주로 사용되는 방식:
- 최대 풀링(Max Pooling): 윈도우 내에서 가장 큰 값만 선택합니다. 이 방식은 특징을 가장 잘 나타내는 값만 남겨서 노이즈에 덜 민감하게 만듭니다.
- 평균 풀링(Average Pooling): 윈도우 내의 모든 값의 평균을 취합니다.
- 용어 설명:
- 과적합(Overfitting): 모델이 훈련 데이터에 너무 맞춰져서, 실제(새로운) 데이터에 대한 예측 성능이 떨어지는 현상입니다.
4. 완전 연결 레이어 (Fully Connected Layer) 🧠
완전 연결 레이어는 CNN의 마지막 단계에 위치하여, 특징 추출 과정을 통해 얻은 모든 특징들을 종합하여 최종적으로 이미지를 분류하는 역할을 합니다.
- 원리: 합성곱과 풀링 레이어를 거쳐 2차원 또는 3차원 형태가 된 특징 맵을 1차원 벡터로 평탄화(Flatten) 시킨 후, 일반적인 신경망처럼 모든 노드가 서로 연결되어 입력된 특징을 기반으로 최종 결과를 도출합니다.
- 용어 설명:
- 평탄화(Flatten): 2차원 또는 3차원 배열의 데이터를 1차원 벡터로 펼치는 과정입니다. 예를 들어, 4x4 행렬을 16개의 요소를 가진 벡터로 변환하는 것입니다.
5. 드롭아웃 레이어 (Dropout Layer) ✂️
드롭아웃 레이어는 주로 완전 연결 레이어와 함께 사용되며, **과적합(Overfitting)**을 방지하는 효과적인 기법입니다.
- 원리: 학습 과정에서 특정 비율의 뉴런(노드)들을 임의로 '드롭아웃' 시켜서(비활성화) 학습에 참여하지 못하게 합니다. 이는 모델이 특정 뉴런에만 의존하는 현상을 막아, 여러 뉴런이 고루 학습하도록 유도합니다.
쉬운 비유로 마무리 🍎
CNN은 마치 전문가들이 모여 그림을 감정하는 과정과 같습니다.
- 합성곱 레이어는🔍 그림을 아주 가까이에서 보며 붓 터치, 색상, 선의 특징을 찾아내는 미술 감정사입니다.
- 풀링 레이어는🤏 너무 많은 정보를 버리고 그림의 핵심적인 요소(예: 사람의 얼굴, 사과의 형태 등)만 요약하는 요약가입니다.
- 마지막으로, 완전 연결 레이어는🧠 이 모든 특징들을 종합하여 "이 그림은 모나리자야!"라고 최종적으로 판단하는 전문 감정 위원회와 같습니다.
(1) 추가설명
❓ 왜 신경망 학습에 선형 변환만으로는 복잡한 패턴을 학습할 수 없는지, 그리고 비선형성이 왜 필수적인지
✅ 신경망이 복잡한 패턴을 학습하려면 **비선형성(Non-linearity)**이 필수적입니다. 선형적인 변환만으로는 여러 층을 쌓더라도 결국 하나의 선형 함수와 같아지기 때문입니다. 이는 마치 직선만으로 복잡한 곡선이나 지그재그 패턴을 따라갈 수 없는 것과 같습니다.
1. 선형 변환의 한계 🚫
선형 변환은 입력 데이터에 가중치(Weight)를 곱하고 편향(Bias)을 더하는 단순한 연산입니다. 이 연산은 아무리 여러 번 반복해도 그 결과는 결국 또 다른 선형 변환이 됩니다.
- 수학적 관점: 선형 함수 를 다른 선형 함수 에 적용한다고 가정해 봅시다. 이 식을 보면, $(W_2W_1)$와 $(W_2b_1 + b_2)$는 결국 새로운 가중치와 편향이 됩니다. 즉, 두 개의 선형 레이어를 통과해도 결과는 하나의 선형 레이어를 통과한 것과 동일합니다.
- 시각적 관점: 선형 변환은 데이터를 직선으로만 분류할 수 있습니다. 예를 들어, 위 이미지처럼 데이터가 하나의 직선으로 명확하게 나뉘는 경우에는 문제가 없습니다. 하지만 아래 이미지처럼 데이터가 복잡하게 섞여 있거나 원형으로 분포된 경우에는 직선 하나로는 절대 분류할 수 없습니다.
이러한 한계는 대표적인 XOR 문제에서 잘 드러납니다. XOR 연산은 입력값이 같으면 0, 다르면 1을 출력하는 비선형적인 패턴을 가지고 있는데, 단일 신경망(선형 변환만 사용하는)으로는 이 문제를 해결할 수 없습니다.
2. 비선형 활성화 함수의 필요성 ✨
신경망에 활성화 함수(Activation Function), 특히 비선형 활성화 함수를 추가하면 이 문제가 해결됩니다. 활성화 함수는 각 레이어의 출력 값에 비선형적인 변환을 적용하여, 신경망이 복잡한 패턴을 학습할 수 있도록 만듭니다.
- 역할: 활성화 함수는 선형 변환으로 나온 값을 비선형 공간으로 매핑(mapping)하여 데이터의 분포를 변경합니다. 이 과정을 통해 데이터는 여러 개의 직선으로 분류가 가능한 형태로 변형됩니다.
- 결과: 각 층마다 비선형 변환이 반복되면서 신경망은 선형적인 모델로는 불가능했던 복잡하고 다양한 패턴을 인식하고 학습할 수 있게 됩니다.
쉬운 비유로 마무리 🍎
선형 변환만 사용하는 것은 마치 모든 것을 직선 자로만 측정하는 것과 같습니다. 직선 자로는 직선이나 사각형 같은 단순한 모양은 잘 잴 수 있지만, 복잡한 곡선이나 불규칙한 모양은 정확히 측정할 수 없습니다.
반면, 비선형 활성화 함수는 이 직선 자에 유연한 고무줄을 달아주는 것과 같습니다. 고무줄 자로는 아무리 복잡한 곡선이나 지그재그 모양이라도 그 모양 그대로 따라가며 정확하게 측정할 수 있게 되는 것이죠.
❓ 시그마 함수로 만들어진 선형 모델에 시그모이드 함수를 적용하면 왜 비선형 모델이 되는지?
✅ 네, 정확히 그 이유 때문에 비선형 모델이 됩니다. 시그모이드 함수는 선형적인 결과에 비선형적인 왜곡을 주어 신경망이 복잡한 패턴을 학습할 수 있게 만듭니다.
1. 시그마 함수와 선형 모델 📉
- 시그마() 표기: 는 단순히 덧셈을 나타내는 수학적 기호입니다. 와 같이 여러 값을 더할 때 사용됩니다.
- 선형 모델의 본질: 이처럼 입력값()에 가중치()를 곱하고 모두 더한 것()은 선형 함수입니다. 이 모델은 아무리 복잡하게 만들어도 결국 입력과 출력 사이의 관계를 **하나의 직선(또는 평면)**으로만 표현할 수 있습니다. 즉, 와 같은 형태입니다.
2. 시그모이드 함수의 비선형성 📈
시그모이드 함수()는 S자 모양의 곡선을 그리는 함수입니다. 이 함수는 어떤 입력값이 들어와도 그 값을 0과 1 사이의 값으로 압축합니다.

- 연속적인 변환: 시그모이드 함수는 입력값에 따라 출력이 연속적으로, 그리고 부드럽게 변하는 비선형 함수입니다. 이는 직선처럼 일정한 기울기를 가지는 것이 아니라, 입력값의 크기에 따라 기울기가 달라집니다.
- 비선형 모델로의 전환: 선형 모델의 결과값()에 이 시그모이드 함수를 적용하는 순간, 즉 $\text{y} = \sigma(z)$가 되는 순간 전체 모델은 더 이상 선형 모델이 아닙니다. 시그모이드 함수가 직선이었던 관계를 S자 형태의 곡선으로 변형시키기 때문입니다. 이 과정을 통해 모델은 더 이상 직선 하나로 분류할 수 없는 복잡하고 비선형적인 데이터 패턴을 분류할 수 있는 능력을 얻게 됩니다.
3. 왜 비선형성이 필수적인가? 💡
- 현실 세계의 복잡성: 현실 세계의 대부분의 문제는 선형적으로 해결할 수 없습니다. 예를 들어, 고양이와 강아지 이미지를 분류하는 것은 단순히 한 개의 직선으로 나눌 수 없는 복잡한 문제입니다. 비선형성을 추가해야만 이러한 복잡한 경계면을 학습할 수 있습니다.
쉬운 비유로 마무리 🍎
선형 모델은 직선으로만 된 도로를 그리는 것과 같습니다. 아무리 많은 직선을 겹쳐 그려도 구불구불한 길이나 원형 교차로는 표현할 수 없습니다.
여기에 시그모이드 함수를 추가하는 것은 도로에 자유롭게 구부러지는 곡선 구간을 넣는 것과 같습니다. 이제 직선만으로는 불가능했던 복잡하고 다양한 길을 만들 수 있게 되는 것이죠. 딥러닝에서 각 레이어에 비선형 활성화 함수를 넣는 것은, 직선 도로를 만들다가 갑자기 곡선 구간을 추가하고 다시 직선 구간을 추가하는 방식으로 복잡한 지도 전체를 완성해나가는 과정과 같습니다.
'AI 엔지니어준비' 카테고리의 다른 글
| ❓ 모델에 이미지를 입력하기 전에 크기 조정(Resizing)과 정규화(Normalization)를 하는 이유 (0) | 2025.09.29 |
|---|---|
| ❓ 오토인코더(Autoencoder)가 어떤 상황에 적합한지, 그리고 오토인코더를 구성하는 인코더와 디코더의 개념 및 차이점에 대해 (0) | 2025.09.21 |
| ❓노이즈 제거 오토인코더란? (0) | 2025.09.17 |
| ❓PyTorch에서 텐서란 무엇이고, NumPy의 Array(배열)과 어떤 차이가 있나요? (0) | 2025.09.15 |
| ❓ 딥러닝 프레임워크인 PyTorch와 TensorFlow를 비교 (0) | 2025.09.15 |