🍨 Deep Neural Network
보통 "Deep"이라고 하면 5층 이상의 레이어를 말한다.
인공신경망(Neural Network)에는 여러 종류가 있다.
n-Layer Perceptron (MLP)

혹은
Fully-Connected Network,
Dense Network,
Feed Forward Network
라고도 부른다.
모든 connection이 weight을 가지고 있다.
n-Layer Convolutional Neural Network (CNN)

weight가 재사용된다.
일부 입력 뉴런하고만 연결되어 있으며,
MLP, Dense Network와 달리 sparse하다는 특징이 있다.
DNN의 종류
신공망의 종류는 뉴런들이 어떻게 연결되어 있는지에 따라 결정된다.

- Fully-Connected Network
- Convolutional Neural Network
- Recurrent Neural Network
- LSTM (time-series data): NLP 같은 순서 있는 데이터를 처리하는 데 주로 사용되었으나, transformer 나오고 나서는 사용하지 않는다.
transformer는 전체 입력을 동시에 처리하면서,
각 단어(또는 토큰) 간의 관계를 self-attention 메커니즘으로 파악하는 딥러닝 모델 구조이다.
모든 곳에 사용되고 있다. (LLM, ViT...)
혹은 혼용할 수도 있다.
아래는 Fully-Connected Layer와 Convolutional Layer를 mix한 것이다.

매우 흔한 경우로 5개의 CONV Layer와 1개의 FC Layer를 합치는 방법이 있다.
CONV는 이미지에서 feature를 추출하는 데 사용되고,
마지막에 FC가 decision maker로써 hyperplane을 그리는 역할을 한다.
왜 더 딥하게 가는가? 🧐
이유는 다음과 같다.
1. XOR 문제의 예시에서, single neuron만으로는 XOR을 구현할 수 없다는 것을 확인했다.
2. 레이어가 깊어질수록 표현력이 더 좋아지고 정교해진다.
예시:

Low-level features: 초반 층에서는 edge, 방향성, 밝기 변화 같은 기본적인 특징만 탐지한다.
중간 층에서는 여러 low-level features들을 조합해서 눈, 코, 입, 귀 등 의미 있는 패턴을 탐지한다.
High-level features: 후반 층에서는 좀 더 구체적이고 추상적인 개념을 인식하며, 눈+코+턱이 모이면 사람 얼굴, "Sara"의 얼굴이라고 판단할 수 있게 된다.
크고 얕은 네트워크는? 🤷♀️
그렇다면 fewer layers & more hidden units 조합은 안 되는 걸까?

예를 들어 위 그림처럼 2 layers에 hidden units 개수가 12개인 구조가 있고,
5 layers에 각 layer마다 hidden units 개수가 3개, 총 12개인 구조가 있다고 하자.
이론적으로는 big & shallow network나 small & deep network나 똑같다.
하지만 실제로는 "fewer hidden units & deeper layers" 조합이 더 강력하다.
각 조합의 특징은 다음과 같다.
1. Shallow한 구조:
- 훈련시키기 어렵다.
- Backpropagation 시, activation gradient가 next layer에서 와서 각각의 뉴런마다 같은 값이 전달된다.
- 그로 인해 가중치 업데이트가 제대로 되지 않고, 유연성(flexibility)이 떨어진다.
- 오차(error)가 작아서 학습시키기 어렵다.
- 모델이 데이터를 학습하는 게 아니라 단순히 외워버려, 일반화가 되지 않는다.
2. Deep한 구조:
- non-linearity가 높다.
- 우리가 살고 있는 세계 자체가 non-linear하므로 세계를 더 잘 묘사할 수 있다는 강점이 있다.
- feature를 계층적으로 추출할 수 있어 일반화에 유리하다.
- 단순한 정보에서부터 점점 더 고수준의 특징을 뽑아내며 복잡한 문제를 잘 다룰 수 있다.
이제 어떤 구조를 사용해야 할지 알았을 것이다.
FCN - Forward Propagation

(WL=weight matrix, bL=bias factor)
이전 층의 output이 현재 층의 input으로 직접 연결된다.
연쇄적으로 정보가 전달되며,
이렇게 형성된 깊이 덕분에 점점 더 복잡하고 추상적인 feature를 추출할 수 있다.
FCN - Gradient Descent

이전 글에서 정리한 weight gradient 공식이다.
구하고자 하는 것은 weight에 대한 cost function의 그래디언트, 즉 오차가 가중치에 얼마나 영향을 주는가이다.
각각은 체인룰을 적용한 결과이며, 각 요소의 의미는 다음과 같다:
- `(o - o_t)`: output과 ground truth의 차 = 출력층에서의 error
- `f'(zₖ)`: 출력층의 activation function의 도함수
- `wⱼₖ`: 출력층으로 가는 가중치
- `f'(kⱼ)`: 은닉층 뉴런의 activation function의 도함수
- `xᵢ`: input

임의의 층 L층일 때 역전파 과정을 일반화한 버전이다.
구하고자 하는 `dw^L`은 L번째 층의 가중치에 대한 그래디언트이다.
- `dy^L`: 그 층의 에러 = activation gradient (이전 층에서 전파된 것)
- `f'(z^L)`: activation function의 도함수
- `y^{L-1}`: 이전 층의 output = 현재 층의 input
결국 핵심 공식인 `weight gradient = activation gradient * input`과 같다.
이를 행렬 연산 관점에서 재구성하면 아래와 같다.

1st 수식: activation gradient
output의 gradient인 `dy^L`에 활성화 함수의 도함수 `f'(z^L)`를 원소별로 곱한다.
2nd 수식: weight gradient
activation gradient와 이전 레이어의 출력의 전치행렬을 곱한다.
`weight gradient = activation gradient x input`
3rd 수식: outgoing activation gradient
weight 행렬을 전치해서 역으로 error를 backpropagation한다.
구조는 이러하다.

모델은 (1) forward propagation, (2) backpropagation, (3) update 순서대로 수행하며, 각 단계를 epoch만큼 반복한다.
이때 역전파 과정에서 L번째부터 1번째까지 순서대로 weight gradient와 outgoing gradient를 계산한다.
모든 레이어에 대한 계산을 마친 뒤 한꺼번에 update를 한다.

딥러닝에서 파라미터는 네트워크가 학습을 통해 내부적으로 조정하는 값이고,
하이퍼파라미터는 사용자가 직접 설정해야 하는 값이다.
- Parameters
- `W^L`: L번째 레이어의 weight matrix
- `b^L`: L번째 레이어의 bias 벡터
- Hyperparameters
- Learning rate
- Number of epochs
- Batch size
- 모델의 구조 구성 설정 - Neural Architecture Search(NAS)로 자동 설계할 수 있다.
- Number of hidden layers
- Number of hidden units
- Choice of activation functions
- Choice of layer types
⚡ Activation Function
활성화 함수는 왜 중요할까?
활성화 함수가 없다면, 아무리 레이어를 여러 개 쌓아도 결국 또다른 선형 레이어일 뿐이기 때문이다.
(It becomes just another linear layer)

활성화 함수(`f`)가 없다면, 행렬곱 계산의 결과가 또다른 단순 행렬이 되며, 다시 단일 선형함수가 되어 버린다.
결국 표현할 수 있는 건 직선 하나뿐으로 복잡한 패턴을 배울 수 없다.
non-linearity를 표현하기 위해서는 non-linear인 활성화 함수가 있어야 한다.
활성화 함수에는 다양한 종류가 있다.
1. Sigmoid

- 출력 범위: 0 ~ 1
- 특징:
- (하나의 class에 속할) 확률처럼 해석 가능하다.
- Binary classification에서 output layer에 single neuron으로 자주 사용된다.
- 예) p(CAT) vs. p(DOG)=1 - p(CAT)
2. ReLU

- 정의: f(x)= 0 if x<0, x if x≥0
- 특징:
- hidden layer에서 활성화 함수로 사용된다.
3. Tanh

- 출력 범위: -1 ~ 1
- 특징:
- hidden layer에서 활성화 함수로 사용된다.
- 단점: 기울기 소실(vanishing gradient) 문제가 발생하며, ReLU로 대체되어 더 이상 사용되지 않는다.
4. Softmax

- 출력 범위: 0 ~ 1 (전체 합은 1)
- 특징:
- 다중 클래스 분류(Multi-class classification)에서 output layer에 사용된다.
(output neuron이 여러 개) - 각 클래스에 대한 확률을 출력한다.
- 예) output 뉴런마다 고양이, 강아지, 토끼 등 확률 출력
- 다중 클래스 분류(Multi-class classification)에서 output layer에 사용된다.
Rectified Linear Unit is popular 🪅
ReLU가 인기가 많은 이유는 다음과 같다.
- Vanishing gradient 문제 완화
- 그래디언트가 너무 작아지면 weight이 거의 변하지 않으므로, earlier layers는 거의 학습이 되지 않는 현상이다.
- Tanh 함수에서 발생하고, ReLU는 이를 줄여준다.
- Simple computation
- if문 하나로 처리 가능해서 연산이 간단하다.
- Sparse activation 유도
- 음수는 모두 0으로 바뀌기 때문에 전체 네트워크의 활성 노드 수가 적어진다.
- 연산 자원이 절약된다.
- 각 뉴런이 특정 feature에만 반응하도록 역할이 분화되며, 각자 다른 역할을 수행하게 된다.
- Simple but powerful non-linearity
물론 단점도 있다.
- x < 0일 때 미분 불가능 (not differentiable at 0)
- 입력이 음수인 경우 죽은 뉴런 문제(dying ReLU)가 생길 수 있다.
👤 DNN의 실례 - Face Recognition
MLP를 이용한 얼굴 방향 인식에 대한 설명이다.

`960 x 3 x 4` 네트워크로,
사람의 얼굴을 보고 왼쪽, 오른쪽, 정면, 위쪽 중 어디를 보는지 예측하는 분류 문제이다.
Training data 구성은 다음과 같다.
- 총 624장 grayscale 이미지
- 20명 사람당 32장의 이미지
- 다양한 변수 포함:
- 표정: happy, sad, angry, neutral
- 방향: left, right, straigt ahead, up
- 선글라스 유무
- 이미지 해상도: 120x128
- 각 픽셀 값은 0~255 (흑~백)
- Task: 사람의 시선 방향을 학습하는 것
Design factors for DNN
DNN 설계 시 고려할 주요 factor는 다음과 같다.
- Input encoding (입력 표현 방식)
- Output encoding (출력 표현 방식)
- Network architecture (hidden units/layers 개수, 활성화 함수의 종류 등)
- Hyperparameters
하나씩 자세히 살펴보자.
1. Input Encoding
가능한 솔루션은 2가지이다.
- 전처리로 주요 특징(key features) 추출
- 엣지, 일정한 밝기 영역 등
- 단점:
- 전처리 비용이 크다.
- features 개수가 가변적이다.
- Coarse-resolution (저해상도) 방식
- 원본 120x128 이미지를 고정된 30x32 크기로 축소 (총 4x4=16배 축소)
➡️ 픽셀 하나당 하나의 입력 뉴런에 대응, 즉 960개의 neurons
➕ 30x32 크기의 2D 이미지를 960x1 크기의 1D 벡터로 넣어야 함 => flatten - 30x32 픽셀 이미지는 원본 120x128 이미지를 요약한 저해상도 표현
- 계산량(computation)을 줄이는 효과
- 원본 120x128 이미지를 고정된 30x32 크기로 축소 (총 4x4=16배 축소)
2. Output Encoding
가능한 솔루션은 2가지이다.
- One unit scheme: 하나의 output unit에 여러 개의 임계값(threshold)을 사용하는 방법
- Multiple unit scheme: 여러 개의 output unit 각각에 하나의 임계값을 사용하는 방법
이렇게 정리할 수도 있다.

| 방식 | 출력 구조 | 함수 | 예시 |
| One output + thresholds | output unit 1개 | Sigmoid | 출력값 0.51 -> straight |
| Multiple output + one-hot | output unit 4개 | Softmax | [0.01, 0.97, 0.01, 0.01] -> right |
첫 번째 방식은 불안정하기 때문에 사용하지 않는다.
이 중 multiple unit scheme 방식은 One-hot encoding이라고 한다.
One-hot encoding:
- 4개의 output unit을 사용
- 각 unit은 4개의 얼굴 방향 중 하나를 나타냄
- 가장 높은 값의 output이 예측 결과로 선택됨
3. Network Architecture
1 hidden layer vs. more hidden layers
hidden node 수:
- 3개의 hidden units:
- 테스트 정확도 = 90%
- 트레이닝 시간 = 5 mins
- 30개의 hidden units:
- 테스트 정확도 = 91.5%
- 트레이닝 시간 = 1시간
어떤 걸 사용하든 자유지만, 일반적으로는 정확도를 높이는 선택을 한다.
예를 들어 자율주행의 경우에는 training time이 오래 걸려도 accuracy가 더 중요하기 때문이다.
(하지만, 이런 접근법은 에너지를 많이 잡아먹으므로 sustainable하지 않다.)
4. Hyperparameters
- Learning rate η
- Number of epochs
- Batch size
Batch size는 클수록 좋다.
행렬이 커지면 GPU 메모리의 utilization이 높아지기 때문이다.
📝 Summary
- 신경망의 종류는 뉴런이 연결된 방식에 따라 다르다.
- FCN의 공식 2가지
- `y^L = f^L(W^L*y^L-1 + b^L)`
- `dw^L = dy^L * f'(z^L) * y^L-1` : weight gradient = activation gradient * input
- 활성화 함수
- ReLU는 hidden layer에 주로 사용되고, sigmoid/softmax는 output layer에서 사용된다.
- Sigmoid는 2-class(binary) 분류, softmax는 다중 클래스 분류에 적합하다.
- ReLU는 계산이 간단하고 성능이 좋아 hidden layer에서 거의 표준으로 사용된다.
- Coarse-resolution은 원본 이미지보다 낮은 해상도로 줄여서 표현하는 것이다.
- One-Hot encoding은 각 클래스에 해당하는 output 뉴런을 하나씩 따로 두는 방식이다.
'𝐄𝐰𝐡𝐚 > 인공지능' 카테고리의 다른 글
| Various CNN Models (0) | 2025.04.30 |
|---|---|
| Training Dynamics (0) | 2025.04.28 |
| Multi-Layer Perceptron (MLP) (0) | 2025.04.18 |
| Neural Network Basics (0) | 2025.04.16 |
| Introduction to Deep Learning (0) | 2025.04.14 |