Deep Neural Network
A A

🍨 Deep Neural Network

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

n-Layer Perceptron (MLP)

MLP

혹은
Fully-Connected Network,
Dense Network,
Feed Forward Network
라고도 부른다.
 
모든 connection이 weight을 가지고 있다.
 

n-Layer Convolutional Neural Network (CNN)

CNN

 
weight가 재사용된다.
일부 입력 뉴런하고만 연결되어 있으며,
MLP, Dense Network와 달리 sparse하다는 특징이 있다.
 

DNN의 종류

신공망의 종류는 뉴런들이 어떻게 연결되어 있는지에 따라 결정된다.
 

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한 것이다.

CONV Layer + FC Layer

 
매우 흔한 경우로 5개의 CONV Layer와 1개의 FC Layer를 합치는 방법이 있다.
CONV는 이미지에서 feature를 추출하는 데 사용되고,
마지막에 FC가 decision maker로써 hyperplane을 그리는 역할을 한다.
 
 

왜 더 딥하게 가는가? 🧐

이유는 다음과 같다.
 
1. XOR 문제의 예시에서, single neuron만으로는 XOR을 구현할 수 없다는 것을 확인했다.
2. 레이어가 깊어질수록 표현력이 더 좋아지고 정교해진다.
 
예시:

example of CNN

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

크고 얕은 네트워크는? 🤷‍♀️

그렇다면 fewer layers & more hidden units 조합은 안 되는 걸까?

Big Shallow Network

 
예를 들어 위 그림처럼 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

 
 

Generalized Backpropagation

 
임의의 층 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

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

 

2. ReLU

ReLU function

 

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

 

3. Tanh

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

 

4. Softmax

Softmax function
  • 출력 범위: 0 ~ 1 (전체 합은 1)
  • 특징:
    • 다중 클래스 분류(Multi-class classification)에서 output layer에 사용된다.
      (output neuron이 여러 개)
    • 각 클래스에 대한 확률을 출력한다.
    • 예) output 뉴런마다 고양이, 강아지, 토끼 등 확률 출력

 

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는 다음과 같다.

  1. Input encoding (입력 표현 방식)
  2. Output encoding (출력 표현 방식)
  3. Network architecture (hidden units/layers 개수, 활성화 함수의 종류 등)
  4. Hyperparameters

하나씩 자세히 살펴보자.
 

1. Input Encoding

가능한 솔루션은 2가지이다.

  • 전처리로 주요 특징(key features) 추출
    • 엣지, 일정한 밝기 영역 등
    • 단점:
      • 전처리 비용이 크다.
      • features 개수가 가변적이다.
  • Coarse-resolution (저해상도) 방식
    • 원본 120x128 이미지를 고정된 30x32 크기로 축소 (총 4x4=16배 축소)
      ➡️ 픽셀 하나당 하나의 입력 뉴런에 대응, 즉 960개의 neurons
      ➕ 30x32 크기의 2D 이미지를 960x1 크기의 1D 벡터로 넣어야 함 => flatten
    • 30x32 픽셀 이미지는 원본 120x128 이미지를 요약한 저해상도 표현
    • 계산량(computation)을 줄이는 효과

 

2. Output Encoding

가능한 솔루션은 2가지이다.

  • One unit scheme: 하나의 output unit에 여러 개의 임계값(threshold)을 사용하는 방법
  • Multiple unit scheme: 여러 개의 output unit 각각에 하나의 임계값을 사용하는 방법

이렇게 정리할 수도 있다.

방식출력 구조함수예시
One output + thresholdsoutput unit 1개Sigmoid출력값 0.51 -> straight
Multiple output + one-hotoutput 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
Copyright 2024. GRAVITY all rights reserved