[AI System] Basics of Deep Learning

"Basics of Deep Learning"

[ML(Machine Learning)]


· Training
학습 단계에서 Algorithm과 Training Data를 이용해 Model 생성

· Testing(Inference)
학습이 끝난 후, Test Data를 입력하여 새로운 데이터에 대한 예측 수행

[DNN(Deep Neural Network)]


· 여러 층의 신경망을 가진 구조를 의미하며 Deep Learning의 기본 단위는 Neuron이다.
· Input → Multiply Weight → Accumulation → Bias Summation → Activation Function → Output
· DNN ⊃ (MLP, CNN, RNN, Transformer, …)
※ MLP(Multi Layer Perceptron) = 모든 Layer가 Fully Connected 구조로 Convolution과 Sequence 구조가 없다.

▣ Activation Function

· Neuron이 활성화될지 결정
· 입력과 출력 사이의 복잡한 비선형 관계를 Modeling

** Activation Function 없이 Linear Function만 사용하면 하나의 Linear Function이 되어 Deep Learning 의미가 사라짐
    → 복잡한 문제를 학습/추론 불가
    Ex. w0 · x0 → w1 · (w0 · x0) → w2 · (w1 · (w0 · x0)) = w2 · w1 · w0 · x0 = w' · x0

▣ Softmax Layer

· 모델 출력을 확률로 변환(가장 큰 확률 선택) → 모든 출력의 합 = 1

[Propagation]

· 신경망 내부에서 정보가 이동하는 과정 (Layer → Layer)


▣ Forward Propagation
· 학습과 예측 단계에서 사용되며, Input → Output 방향으로 Neuron 출력을 계산하여 Prediction을 계산

▣ Backpropagation
· 학습 단계에서 사용되며, Output → Input 방향으로 Loss의 Gradient를 계산하여 Weight Update에 필요한 정보를 계산
· (1) : Compute Gradient / (2) : Compute the Next Backpropagation Signal / (3) : Weight Update

[Loss Function]

 L(w) : 전체 Loss / Lk(w) : k번째 데이터의 Loss / N : Training 데이터 개수 / w : Weight

· 모델의 예측이 정답과 얼마나 다른지를 숫자로 나타내는 함수이며, Loss Function을 최소화하는 Weight를 찾는 것이 목표
→ 예측을 잘하면 Loss↓ / 예측을 못하면 Loss↑

Cross-Entropy Loss
ti = 0 for all i ≠ qk

· 분류 문제에서 모델의 예측 확률과 실제 정답 분포의 차이를 재는 Loss
· One-Hot Label인 경우, ti는 정답 Class만 1이고 나머지는 0
· 정답 확률↑ → Loss↓(-log0.9 ≒ 0.105) / 정답 확률↓ → Loss↑(-log0.1 ≒ 2.303)

MSE(Mean Squared Error) Loss
ti = 0 for all i ≠ qk

· 각 원소 차이를 제곱해서 더함
· Classification 작업에서는 Cross-Entropy Loss가 틀린 예측을 더 강하게 수정하므로 Cross-Entropy Loss가 MSE Loss보다 좋음

[Mini-Batch SGD(Stochastic Gradient Descent)]

Gradient Descent
· Loss의 기울기 방향을 이용하여 Loss를 최소화하는 방법

<전체 학습 데이터를 한 번에 사용하여 Model을 Update>
· 결과가 안정적이지만, Dataset이 크면 계산량↑& Global Minima가 아닌 Local Minima(지역 최솟값)에 빠지기 쉬움

Mini-Batch SGD
<전체 데이터를 작은 Batch로 나눠서 계산>
· 계산 속도↑, Randomness에 의해 Local Minima를 탈출하는데 도움됨
· But, 학습 과정이 다소 불안정할 수 있어 학습률을 신중히 조정

· Batch GD : Randomness가 없어 경로가 매끄럽지만 속도가 느림
· Mini-Batch SGD : 실제 현업에서 가장 많이 쓰이며, Batch 크기가 중요한 Hyper-Parameter
· SGD : 한 번에 단 1개의 Sample만 사용하며 경로가 매우 불규칙

Alternative Methods to Replace SGD
SGD with Momentum
· 단순 SGD의 방향 급변 문제를 해결하기 위한 관성
·학습 속도↑ & 지역 최솟값 탈출↑, But, 관성에 의해 최적 지점을 지나칠 가능성 존재

RMSProp(Root Mean Square Propagation)

· 기울기 크기에 따라 학습률을 자동으로 조절
· 최근 기울기 제곱의 이동 평균(vt)을 구해, 기울기가 크면 보폭을 줄이고 작으면 보폭을 키움

· 가파른 구간에서 큰 학습률을 사용하면 심한 진동 또는 발산 발생 가능
· 평탄화 구간은 빠르게 통과하고, 가파른 구간에서는 작은 학습률을 유지하여 진동을 방지

Adam(Adaptive Moment Estimation)
· Momentum과 RMSProp의 장점을 합친 알고리즘으로, 현재 가장 널리 쓰이는 최적화 도구
· 이전 방향을 고려하는 mt와 학습률을 조절하는 vt를 모두 사용

** Input → Forward Propagation → Prediction → Loss 계산 → Backpropagation → Gradient 계산 → Weight Update **

[Overfitting]

· 학습 오차는 매우 낮지만 Test 오차는 높은 경우 (∵ Model이 지나치게 학습 데이터에만 맞춰져 실제 데이터에서 성능 저하)

Overfitting 방지책
· Gather More Data & Data Augmentation(데이터 증강) : 회전, 대칭, 이동, 확대/축소 등을 통해 데이터 양↑

Lnew(w) = L(w) + λ||w||2
· Regularization(규제화) : Weight에 Penalty를 주어 값이 너무 커지는 경우 방지 → Model의 일반화 성능↑

· Dropout & Dropconnect : 학습 시 무작위로 일부 Neuron을 비활성화하여 특정 Neuron에 대한 의존도↓

[Batch Normalization]

DL Model 학습 시 문제
<2가지 특징(집 크기와 방의 개수)으로 집값 예측>
· 입력 데이터의 Scale 차이 : 집 크기와 방 개수처럼 데이터의 범위가 다르면, 특정 특징이 학습 과정을 지배하게 되어 불균형 발생
· Mini-Batch 간의 변동성 : 학습은 Mini-Batch 단위로 진행 → Batch마다 데이터의 분포(평균, 분산)가 크게 다르면 학습이 불안정
· 은닉층 내부의 분포 변화 : Model이 깊어질수록 상위층의 Weight가 변함에 따라 하위 층으로 전달되는 데이터의 분포가 계속 변동
→ 학습 속도를 높이고 안정화하기 위해 각 층의 입력을 정규화

<기존 학습 방식>
· 단순하게 Weight와 입력 데이터의 곱셈 결과를 합하여 활성화 함수 적용

<Batch Normalization 적용>
· 활성화 함수 이전에 Batch Normalization Layer 추가
  ① 현재 Mini-Batch의 평균(μ)과 분산(σ²) 계산
  ② 평균 = 0, 분산 = 1이 되도록 표준화(ẑ)
  ③ 학습 가능한 Parameter인 γ(Scale)와 β(Shift)를 이용해 다시 값의 범위를 조정

· γ(Scale)와 β(Shift) : 단순히 평균 = 0, 분산 = 1로 고정 X
→ 모델이 Backpropagation을 통해 스스로 학습하여 가장 적절한 데이터 분포를 결정할 수 있도록 유연성 부여

DL Model 추론
추론 시에는 Mini-Batch가 아니라 단일 Sample을 처리 = 평균과 분산을 구할 수 없음
→ 학습 과정에서 미리 계산해 둔 Mini-Batch들의 이동 평균과 분산을 추론 시에 사용하여 정규화 수행

Evaluation
· 학습 속도↑ : Weight 초기화에 덜 민감 + 더 큰 Learning Rate을 사용할 수 있어 수렴 속도 & 높은 정확도 도달 속도↑
· 안정성 : 모델 내부의 데이터 흐름을 안정화 시켜 학습 중 성능이 요동치는 것을 방지

[Different Model Architectures]

· MLP(Multi-Layer Perceptron) : Fully Connected Layers
· CNN(Convolutional Neural Network) : Convolutional Layers
· Transformer Model : Attention Layers

[CNN]

① 이미지의 Pixel 값들이 합성곱과 비선형 함수 적용을 거쳐 Feature Map 생성
② 합성곱과 Pooling Layer를 여러 번 쌓은 후, 마지막에 Feature들을 Vector화
③ Vector화 한 Feature들을 Fully-Connected Layer에 전달
④ 최종 분류 결과 도출

** 이미지는 인접한 Pixel끼리 강한 상관관계를 가지는 지역적 특성 존재 ∴ 근처 Pixel들을 묶어서 처리하는 것이 효율↑

※ Pooling Layer : CNN에서 데이터를 더 작게 압축하고 핵심적인 특징만을 남기는 역할
      · 연산 효율성 : Down-Sampling을 통해 데이터의 크기를 줄여 연산량 절감
      · 불변성 제공 : 이미지에서 객체가 약간 회전하거나 위치가 왜곡되더라도 동일한 특징으로 인식 가능
      · 정보 압축 : 덜 중요한 정보는 버리고, 가장 중요한 특징 신호만 추출하여 학습의 효율 증가

▣ 2D Convolution Operation
① Kernel 또는 Filter가 Input Data위를 슬라이딩
② Kernel 내의 값과 이미지의 Pixel 값을 요소 별로 곱한 뒤 모두 합산
③ 합산된 값(위 그림의 4)이 Feature Map의 한 칸을 채움

▣ Multiple Filters
· 하나의 이미지에서 여러 가지 Feature를 추출하기 위해 여러 Filter 사용
① 여러 개의 Filter(위 그림의 F1, F2)를 동시에 적용
② 연산 결과는 활성화 함수 적용
③ 사용한 필터의 개수가 곧 출력 Feature Map의 깊이가 됨

▣ Multiple Input Feature Maps
· Color 이미지와 같이 입력 데이터가 이미 깊이(채널)을 가지고 있을 때의 연산
· 채널 일치 : Filter의 깊이는 항상 입력 데이터의 깊이(채널 수)와 일치해야 함(Ex. RGB 3채널 입력 시 Filter 깊이도 3)
· 3D 연산 : Filter 전체가 하나의 3D Block처럼 작동하여 입력의 모든 채널을 동시에 훑음
· 결과 : 여러 채널을 합쳐서 계산하기 때문에, 하나의 Filter Set는 깊이가 1인 결과 Map 하나 생성

※ 채널 : 데이터의 한 지점이 가진 Feature의 가짓수(정보의 종류) = 깊이
※ 깊이(= Filter의 개수 = 추출된 Feature의 가짓수) : 각 층은 Model이 찾아낸 서로 다른 Feature를 의미
    → 깊이가 깊어질수록 Model은 이미지에서 더 다양하고 복잡한 특징(색상, 질감, 형태 등)을 동시에 파악 가능
         (Ex. 깊이 1번 층 : 이미지의 '가로 선' / 깊이 2번 층 : 이미지의 '세로 선' / 깊이 3번 층 : 이미지의 '둥근 곡선')

▣ Multiple Input Feature Maps & Multiple Filters(Kernels)

· 입력 : (3, 5, 5) 크기의 이미지 (= 3채널, 5x5 크기)
· Filter : (2, 3, 3) 크기의 합성곱 Filter (= Filter 2개, 3x3 크기)
· 결과 : 2개의 Filter를 거쳐 깊이가 2인 (2, 3, 3) 크기의 Feature Map 출력 (= 깊이 2, 3x3 크기)

▣ Pooling Layer
· 데이터의 크기를 줄이고 주요 특징만 남기는 단계(Max Pooling / Avg Pooling)
· 데이터 크기를 줄여 연산량 절감
· 이미지의 미세한 회전이나 왜곡이 있어도 동일한 특징을 잡아낼 수 있음

▣ CNN 학습
· Fully-Connected Layer Model과 구조만 다를 뿐 학습 절차는 매우 유사
· Cross-Entropy Loss를 사용하여 Loss 계산
· Backpropagation을 통해 Gradient를 계산하여 Weight(Filter 값) Update
· Mini-Batch SGD, SGD with Momentum, Adam 알고리즘 사용
· Weight Decay, Dropout을 사용하여 Overfitting 방지
· Batch Normalization을 사용하여 학습 안정화 & 속도 향상

※ Weight Decay = Regularization → 특정 데이터의 Noise까지 다 학습해서 Weight가 비정상적으로 커지는 것을 방지

> Weight : DNN(MLP) 기준 → Neuron과 Neuron 사이의 연결 강도
> Filter : CNN 기준 → Filter 안에 들어있는 숫자 하나하나가 Weight

[Reference]

· Basics of Deep Learning (AI System : Week 1) - Dongjun Han

댓글

이 블로그의 인기 게시물

[Mini-NPU RTL] NN Reference Model

[Mini-NPU RTL] TPU (Study Paper)