Neural Networks II

chelseey·2025년 5월 23일

Activation functions

Activation Functions

Sigmoid Function (Logistic 함수)

사용 이유 (Pros)

  • 출력 범위 : 항상 [0,1] 사이 값을 출력하므로 확률 해석이 가능
  • 입력이 작을 때 거의 0, 입력이 클 때 거의 1인 특성이 뉴런의 firing과 유사

사용하지 말아야 할 이유 (Cons)

  • 포화 영역에서의 그래디언트 소실
    : 입력 ≪0 혹은 ≫0 구간에서는 출력이 완전히 포화되어 기울기가
    0에 가까워짐 (vanishing gradient)

  • 출력이 0 중심이 아님
    : 출력이 항상 양수(0~1)이므로, 다음 층으로 전달되는 값의 평균이
    양수가 되어 가중치 업데이트 시 불필요한 편향을 유발

  • 비용이 큰 지수 연산
    : exp(x) 연산이 비교적 무거워 계산 효율 측면에서 불리

Sigmoid Function: Killed Gradients

Sigmoid 함수의 기울기 소실 (Killed Gradients)

Chain rule 관점에서

Lx=Lσ×dσdx\displaystyle \frac{\partial \mathcal{L}}{\partial x} = \frac{\partial \mathcal{L}}{\partial \sigma} \times \frac{d\sigma}{dx}
  • Lx\frac{\partial \mathcal{L}}{\partial x} : 최종 손실(loss) 함수
  • σ=σ(x)σ=σ(x): 중간 노드(시그모이드) 출력
  • Lσ\frac{\partial \mathcal{L}}{\partial \sigma} : 상위 노드(손실)에서 내려오는 그라디언트 (업스트림 그라디언트)
  • dσdx\frac{d\sigma}{dx} : 시그모이드 노드의 로컬 그라디언트(자신에 대한 미분)

dσdx\frac{d\sigma}{dx} 가 0에 가깝다면, upstream gradient가 아무리 크더라도 최종
Lx\frac{\partial \mathcal{L}}{\partial x}는 거의 0이 되어 학습이 정체됨.

Sigmoid Function: Not Zero-centered Output

: 시그모이드 로컬 그라디언트가 항상 양수여서,
어떤 w(가중치)는 증가, 어떤 w는 감소 같은 다양한 업데이트 방향을
취할 수 없게 되는 현상

업데이트 방향(즉 가중치 wiw_i를 올릴지 내릴지)은
파라미터 그래디언트 Lwi\frac{\partial \mathcal{L}}{\partial w_i}에 의해 결정

업스트림 그라디언트 Lσ\frac{\partial \mathcal{L}}{\partial \sigma}
로컬 그라디언트 σwi=σ(wx+b)(1σ(wx+b))xi\frac{\partial \sigma}{\partial w_i} = \sigma\bigl(w^\top x + b\bigr)\bigl(1 - \sigma(w^\top x + b)\bigr)\,x_i
과 곱해져 Lwi=Lσσwi\frac{\partial \mathcal{L}}{\partial w_i} = \frac{\partial \mathcal{L}}{\partial \sigma}\,\frac{\partial \sigma}{\partial w_i}이 내려옴

시그모이드 a=wx+ba = w^\top x + b 에 대한 미분 :

σa=σ(a)(1σ(a))>0\displaystyle \frac{\partial \sigma}{\partial a} = \sigma(a)\,(1 - \sigma(a)) > 0

→ 로컬 그래디언트는 항상 양수

xix_i :시그모이드 노드에 들어오는 입력(바로 이전 층의 시그모이드 출력)
xix_i 항상 (0,1) 구간의 양수

파라미터 그래디언트는 체인룰로 :

Lwi=Lσ업스트림×dσda로컬>0×awi=xi0\frac{\partial \mathcal{L}}{\partial w_i} = \underbrace{\frac{\partial \mathcal{L}}{\partial \sigma}}_{\text{업스트림}} \times \underbrace{\frac{d\sigma}{da}}_{\text{로컬>0}} \times \underbrace{\frac{\partial a}{\partial w_i}}_{=x_i≥0}

→ 업데이트 부호가 오직 업스트림 그라디언트에만 달려 있음

모든 가중치가 한 방향(증가 혹은 감소)으로만 업데이트 되어
최적 해로 곧장 이르는 다양한 방향 탐색이 어려워짐

: 가중치 전부 ↑ 혹은 전부 ↓ 만 가능
→ 최적 지점을 향해 대각선으로 가야 할 때도 계속 축을 따라 좌우질주만 함

실제로는 한 번에 여러 개의 샘플을 묶어서 (미니)배치로 업데이트를 계산하기 때문에 non–zero-centering 문제가 어느 정도 상쇄됨.

Tanh Function

사용 이유 (Pros)

  • 출력 범위: [−1,1] 사이 값을 내어, 시그모이드보다 표현 범위가 넓음
  • 0 중심: 출력이 +/- 대칭이어서, 다음 층으로 전달되는 활성화의
    평균이 0 근처로 유지되어 가중치 학습 시 편향을 줄여 줌

사용하지 말아야 할 이유 (Cons)

  • 포화 영역에서의 그래디언트 소실
    : 입력 값이 매우 크거나 작으면 tanh(x)가 ±1에 포화되어
    미분값이 0에 가까워짐 → 역전파 시 학습이 정체될 수 있음

  • 실제로는 시그모이드 함수 σ(x)σ(x)를 단순히 스케일·이동한 형태
    tanh(x)=2σ(2x)1tanh(x)=2σ(2x)−1

ReLU (Rectified Linear Unit)

사용 이유 (Pros)

  • x>0x>0 구간에서 기울기 =1 → 그래디언트 소실 문제가 거의 없음
  • max(0,x) 연산만으로 구현 가능해 계산이 매우 빠름
  • 실제 학습에서 시그모이드나 탄젠트보다 더 빠르게 수렴하는 경향을 보임

사용하지 말아야 할 이유 (Cons)

  • 제로 중심 아님
    : 출력이 [0,∞) 구간이어서, 다음 층 입력의 평균이 양수로 쏠릴 수 있음

  • x=0일 때 미분 불가능

  • Dead ReLU 문제
    : 초깃값이나 배치 단위 경사하강에서 입력이 음수인 뉴런은 출력이 항상 0 → 역전파 시 기울기도 0
    → 해당 뉴런의 가중치는 절대 업데이트되지 않아 dead 상태가 됨

Leaky ReLU

사용 이유 (Pros)

  • 모든 영역에서 그래디언트 손실 없음
  • 간단한 max 연산으로 구현 가능해 연산이 빠름
  • 실제 학습에서 시그모이드/탄젠트 계열보다 훨씬 빠르게 수렴
  • Dead ReLU 문제 해소
    : x<0 구간에도 약한 기울기 α를 두어 dead 뉴런이 생기지 않음

사용하지 말아야 할 이유 (Cons)

  • 음수 영역 기울기 α를 설정해야 하므로 튜닝해야 할 변수가 하나 늘어남

ELU (Exponential Linear Unit)

사용 이유 (Pros)

  • x>0 구간에서 기울기 1로 비포화 → 그래디언트 소실 없음
  • x<0 구간에서 α(ex1)α(e^x−1) 형태로 음수 값을 내어,
    전체 활성화의 평균이 0에 가깝게 유지되어 학습 편향 완화
  • 노이즈에 대한 강함

사용하지 말아야 할 이유 (Cons)

  • 비용이 큰 지수 연산

Activation Functions in Practice

기본 선택 :

  • ReLU 사용 : 학습률(learning rate)에 특히 주의해 설정

  • 추가적인 소폭 성능 향상을 위해 Leaky ReLU 또는 ELU 시도

비추천 :

  • Sigmoid 및 Tanh 사용 금지 (그래디언트 소실, non zero centering 문제)

Data preprocessing

Zero-Centering & Normalization

문제점 : 입력(feature)들이 모두 양수일 때

  • 시그모이드처럼 출력이 항상 양수인 활성화 함수를 쓰면
    기울기(upstream gradient)의 부호가 바뀌지 않아,
    모든 파라미터가 한 방향(증가 또는 감소)으로만 업데이트됨
    → 다양한 방향 탐색이 어려워 학습이 비효율적

해결책 1 : Zero-Centering

  • 각 특성(feature)에 대해 전체 데이터의 평균(μ)을 빼서
    분포를 평균 0으로 이동

해결책 2 : Normalization (표준화)

  • zero-centering 후 표준편차(σ)로 나누어 분포의 스케일을 맞춤

PCA & Whitening

  • 데이터를 zero-centered(평균 0)로 만들고,
    축이 데이터 분산 방향(주성분)에 정렬(axis-aligned) 되게 함

  • Whitening까지 하면, 각 축의 분산이 같아짐

Zero-Centering

각 특성(feature)의 평균을 빼서 데이터를 원점에 맞춤

PCA(Principal Component Analysis)

  • 원본 데이터의 특성(feature)들이 서로 상관되어 있을 때,
    분산이 큰 방향(주성분)으로 좌표계를 돌려놓음
  • 새로운 좌표(주성분) 간에는 공분산이 0이 되어, 서로 decorrelated 상태

Whitening

  • 각 주성분 축마다 √(고유값)로 나누어 분산을 1로 맞춤
    → 데이터가 원점에 모이고(평균 0), 모든 방향으로 분산이 동일

Weight initialization

Small Random Numbers

: 평균 0, 표준편차 0.01 정도의 작은 Gaussian 분포를 사용해
가중치 WW를 초기화

층을 지날수록 활성화 값이 0 근처로 수렴

tanh(Wx+b)W=tanh(Z)Zx=(1tanh2(Z))×x\frac{\partial \tanh(Wx + b)}{\partial W} = \frac{\partial \tanh(Z)}{\partial Z}\,\cdot\,x = \bigl(1 - \tanh^2(Z)\bigr)\,\times\,x

Z=Wx+bZ=Wx+b
Z0Z \approx 0 일때 tanh(Z)0    1tanh2(Z)1\tanh(Z)\approx 0\;\rightarrow\;1 - \tanh^2(Z)\approx 1이고,
동시에 입력 x0x≈0

→ 깊은 층으로 갈수록 입력값 xx가 0에 가까워져,
가중치 업데이트 값이 거의 0이 되어버림

Large Random Numbers

가중치 표준편차를 키워서 초기화 시점에 평균 0, 분산이 큰 정규분포에서 샘플링
→ 가중치 초기값이 전반적으로 더 큰 값(ex. ±0.05 스케일)으로 분포

활성화 saturation(포화) 현상

각 층의 tanh 출력이 ±1 근처에 몰려 버림

그래디언트 소실 (Vanishing Gradient)

tanh의 가중치에 대한 국소 (local) 미분은

tanh(Z)Z=1tanh2(Z)\frac{\partial \tanh(Z)}{\partial Z} = 1 - \tanh^2(Z)

포화된 ZZ에선 tanh2(Z)1tanh^2(Z)≈1이므로

1tanh2(Z)01 - \tanh^2(Z) \approx 0

최종 가중치 업데이트 식

tanh(Wx+b)W=(1tanh2(Z))x\frac{\partial \tanh(Wx + b)}{\partial W} = \bigl(1 - \tanh^2(Z)\bigr)\,x

에서 1tanh2(Z)01 - \tanh^2(Z) \approx 0이 되어 학습이 멈춤

Xavier Initialization

: 가중치를 정규분포 N(0,1)에서 뽑되, 분산을 입력 차원 크기(dind_{in})에 맞춰 N(0,1din)\mathcal{N}\bigl(0,\tfrac{1}{d_{\mathrm{in}}}\bigr)로 스케일링하는 기법

각 층의 출력을 비슷한 분포(분산)로 유지해,
깊어질수록 신호(순전파)와 기울기(역전파)가 사라지거나 폭발하는 문제를 완화.

가중치 WW

WN(0,1)dinW \sim \dfrac{\mathcal{N}(0,1)}{\sqrt{d_{\mathrm{in}}}}

dind_{\mathrm{in}} : 입력 변수(차원) 개수

→ 입력값이 N(0,1din)\mathcal{N}\bigl(0,\tfrac{1}{d_{\mathrm{in}}}\bigr) 분포를 가지므로,
각 층의 활성화 분포가 너무 넓거나 좁아지지 않고 안정적으로 유지됨.

깊은 네트워크에서도 각 층의 출력 평균은 0 근처, 표준편차는 대략 일정
(0.6→0.3 정도 서서히 감소)

Xavier 초기화가 왜 효과적인가?

출력 분산 계산

yi=j=1dinWijxj            Var[yi]=Var ⁣(j=1dinWijxj)y_i = \sum_{j=1}^{d_{\mathrm{in}}} W_{ij}x_j \;\;\implies\;\; \mathrm{Var}[y_i] = \mathrm{Var}\!\Bigl(\sum_{j=1}^{d_{\mathrm{in}}} W_{ij}x_j\Bigr)

독립성 가정
: 서로 독립인 항들의 합일 때 분산의 합은 각 분산의 합과 같음

Var[X+Y]=Var[X]+Var[Y]            Var[yi]=j=1dinVar(Wijxj)\displaystyle \mathrm{Var}[X + Y] = \mathrm{Var}[X] + \mathrm{Var}[Y] \;\;\implies\;\; \mathrm{Var}[y_i] = \sum_{j=1}^{d_{\mathrm{in}}} \mathrm{Var}\bigl(W_{ij}\,x_j\bigr)

모든 입력-가중치 항이 동일한 분산 Var(Wijxj)\mathrm{Var}\bigl(W_{ij}\,x_j\bigr) 을 가진다고 가정하면,

Var[yi]=din  Var[Wijxj]\mathrm{Var}[y_i] = d_{\mathrm{in}}\;\mathrm{Var}[W_{ij}x_j]

Wij,xjW_{ij}, x_j가 평균 0이고 서로 독립이라면

Var[Wijxj]=Var[Wij]E[xj2]\mathrm{Var}[W_{ij}x_j] = \mathrm{Var}[W_{ij}]\,\mathrm{E}[x_j^2]

층을 지날 때 분산이 유지되도록 하려면 Var[yi]E[xj2]\mathrm{Var}[y_i] \approx \mathrm{E}[x_j^2]이어야 하므로,

din  Var[Wij]  E[xj2]E[xj2]    Var[Wij]1din.d_{\mathrm{in}}\;\mathrm{Var}[W_{ij}]\;\mathrm{E}[x_j^2]\approx \mathrm{E}[x_j^2]\;\Longrightarrow\;\mathrm{Var}[W_{ij}]\approx \frac{1}{d_{\mathrm{in}}}\,.

Xavier Initialization for ReLU

ReLU에 대한 Xavier 초기화

ReLU는 음수 구간에서 출력을 0으로 내리기 때문에,
평균이 점점 양수로 치우치고, 분산(표준편차)도 층이 깊어질수록 점점 작아짐

그 결과,

  • 순전파
    : 출력 분산이 계속 줄어들어, 깊은 층으로 갈수록 0에 가까운 값만 흐르게 됨
  • 역전파
    : L/W=x∂L/∂W=x가 거의 0이 되어, 학습이 멈춤(gradient vanishing)

Kaiming Initialization for ReLU

Kaiming 초기화
: 분산을 2/din2/d_{in} 으로 조정한 정규분포에서 샘플링

WN(0,1din/2)    WN(0,2din)W \sim \mathcal{N}\bigl(0,\tfrac{1}{d_{\mathrm{in}}/2}\bigr) \;\Longleftrightarrow\; W \sim \mathcal{N}\bigl(0,\tfrac{2}{d_{\mathrm{in}}}\bigr)

직관적으로 ReLU는 절반의 입력(음수 구간)을 잘라내므로,
순전파 시 분산 보존을 위해 절반(0.5)를 보정해 주어야 함

Learning rate scheduling

How to Choose a Learning Rate?

학습률(learning rate) 선택 방법 요약

learning rate
: 경사하강법(SGD 등)에서 파라미터 업데이트 크기(αα)를 결정하는 하이퍼파라미터

θjθjαJ(θ)θj\theta_{j} \leftarrow \theta_{j} - \alpha \frac{\partial J(\theta)}{\partial \theta_{j}}
  • 너무 큰 학습률(Too high)
    : 손실 함수(Loss)가 낮아지는 방향으로 가지 못하고 발산(explode)
    학습 불안정, 발산 또는 진동 발생

  • 너무 작은 학습률(Too low)
    : 손실 함수는 점차 감소하나 매우 느림(inefficient)
    학습 속도 저하, 실용적이지 않음

  • 적절한 학습률(good learning rate)
    : 초기에는 비교적 큰 값에서 시작해 빠르게 손실을 줄이되,
    점차 감소 스케줄(learning rate decay)을 도입하여 수렴 안정성 확보

Learning Rate Decay (학습률 감소)

초기에는 큰 학습률

  • 모델이 손실 표면(loss landscape)의 전반(큰 스케일) 구조를
    빠르게 익힐 수 있게 도와줌
  • 글로벌 최적점 근처로 빠르게 이동할 수 있음

최적점에 가까워질수록 학습률 감소

  • 학습률이 너무 크면 파라미터가
    최적점 주변을 뛰어넘어(overshoot) 다시 멀어질 수 있음
  • 작은 학습률은 손실 곡선의 미세한 기울기를 정확히 반영해
    안정적으로 수렴하도록 함

Learning Rate Decay: Step

스텝(단계) 학습률 감소(Step Learning Rate Decay)

특정 시점에 학습률을 줄임

epoch마다 learning rate 줄여줌

  • learning rate :
    epoch 50, 75에서 학습률이 0.1→0.01→0.001로 ‘계단식(step)’으로 감소

  • training loss
    : 학습률 감소 직후 손실(loss)이 다시 유의미하게 하락하는 모습을 관찰

Learning Rate Decay: Cosine, Linear, Inverse Sqrt

α0α_0 : 초기 학습률
tt : 현재 epoch
TT : 총 epoch 수

Learning Rate Decay: Initial Warmup

학습 초반에 너무 큰 학습률을 쓰면 손실(loss)이 폭발적으로 증가할 수 있음.

해결책 (Warmup)

0에서 시작 : 학습률을 0으로 세팅.

: 전체 훈련의 첫 10% 동안,
학습률을 0 → 원하는 초기 학습률까지 일정하게 선형으로 키움.

Warmup이 끝난 뒤엔 학습률을 감소시킴.

Avoid overfitting

Overfitting Problem

과적합(Overfitting) : 훈련 데이터에서는 오차(loss)가 계속 줄지만,
검증·테스트 데이터에서는 오차가 다시 증가

  • 샘플 수에 비해 특성(feature) 차원이 매우 클 때
  • 모델이 불필요하게 복잡할 때 (너무 많은 층·파라미터)

Regularization (Weight Decay)

L2 정규화 (가중치 감쇠)

: 모든 가중치를 작게 만듦

R(W)=W22=k=1mwk2R(W) = \|W\|_2^2 = \sum_{k=1}^m w_k^2
  • 파라미터의 제곱합을 벌점으로 부과
  • 큰 가중치일수록 더 큰 페널티 → 파라미터가 작아지도록 유도

L1 정규화

: 불필요한 가중치는 0으로 강력하게 축소 → 특성 선택 효과

R(W)=W1=k=1mwkR(W) = \|W\|_1 = \sum_{k=1}^m |w_k|
  • 절댓값 합을 벌점으로 부과
  • 일부 가중치를 0으로 희소(sparse)하게 만들어 중요한 특성만 남김

Early Stopping

학습 중간에 검증 손실(validation loss)을 모니터링하다가
검증 성능이 더 이상 좋아지지 않으면 학습을 중단.

  • 전체 훈련 데이터를 훈련(train) 과 검증(validation) 세트로 분리

  • epoch마다
    훈련 손실(training loss) 계산 → 모델 파라미터 업데이트
    검증 손실(validation loss) 계산 → 개선 여부 확인

  • 검증 손실이 일정 횟수(epoch) 이상 증가 하면
    → 더 학습하지 않고 종료

테스트 세트 사용 금지
→ 테스트 세트로 validation loss 모니터링하면 모델이 테스트 데이터에 과적합됨

Early Stopping vs. L₂ Regularization

Dropout

  • 학습 때마다 (forward pass) 무작위로
    일부 뉴런을 off(출력을 0으로 설정)하여 네트워크를 학습시키는 기법

  • Dropout 비율(p)를 하이퍼파라미터로 지정
    ex. p=0.5면 절반의 뉴런을 랜덤 삭제

: 일부 단서가 사라져도 모델이 올바른 판단을 내리도록, 학습 단계에서 매번 서로 다른 단서 조합을 사용해 훈련

Dropout의 앙상블 효과 (Ensemble Effect)

기본 네트워크(base network)에서,
드롭아웃을 적용하면 총 2n2^n 개의 하위 조합이 가능

  • 입력(x₁, x₂)이나 출력(y)으로 연결되는 경로가
    완전히 끊긴 네트워크는 의미 없는 구조이므로 무시

  • 실제 학습·추론 시에는 입력과 출력이 연결된 유효한 서브네트워크만 고려

네트워크의 일부만 활성화시키면서 입출력 경로가 유효한
여러 개의 하위 네트워크를 학습
→ 앙상블된 예측 효과를 냄

Dropout vs. 배깅(Bagging)

  • Dropout: 하나의 네트워크에서 파라미터를 공유하면서,
    mini batch 마다 무작위로 일부 뉴런(파라미터)을 끄고 업데이트

  • Bagging : 서로 완전히 독립된 여러 모델을 학습시켜 앙상블

Dropout의 장점

  • 계산 비용이 작음
  • 가중치 감쇠(weight decay), 희소성 제약(sparsity) 등
    기존 방법보다 일반화 성능 개선 효과가 큼
  • CNN, RNN, RBM 등 다양한 신경망 구조에 제약 없이 활용 가능

Dropout: Test Time

학습 시 : 무작위로 일부 뉴런을 끄고(=regularization),
켜져있는 뉴런의 활성화를 1/p 배로 키워 전체 평균 출력이 일정하도록 조정 (드롭아웃 확률 p, ex. 50% dropout → 2×)

시험 시 : 드롭아웃을 적용하지 않고 모든 뉴런을 그대로 사용

DropConnect

DropConnect는 가중치 하나하나(=각각의 간선) 를 무작위로 꺼버리기 때문에 훨씬 많은 서브네트워크를 앙상블하는 효과를 냄

Optimization

Problems with SGD

  • 학습 속도 저하
  • Local Min / Saddle Point에 갇힘
  • 미니배치로 인한 그래디언트 불안정(Noise)

Problems with SGD: Jittering

  • 완만한(평탄한) 방향
    : 기울기가 작아 step size이 작아짐 → 이동 속도가 매우 느려짐

  • 가파른(급경사) 방향
    : 기울기가 크기 때문에 큰 폭으로 갱신이 이루어지려함
    → 한 스텝에서 보폭이 커져 상하로 크게 흔들림(jitter)

따라서 비효율적인 학습

Problems with SGD: Saddle Point

Saddle Point : 함수가 한 방향(ex. x축)으로는 극솟값 형태(오목),
다른 방향(ex. y축)으로는 극댓값 형태(볼록)을 띠는 지점

  • 기울기 소실
    : 국소 최적점(극댓값·극솟값)이나 안장점에서는 기울기(gradient)가 0이 됨

  • 업데이트 정지
    : 기울기가 0이면 SGD의 매개변수 갱신이 멈추므로,
    그 지점에서 더 이상 학습이 진행되지 않음

  • 고차원에서 더 빈번
    차원이 커질수록 안장점의 비중이 높아져,
    학습이 불필요한 지점에 갇힐 가능성이 커짐

Problems with SGD: Mini-batch

  • Batch Gradient Descent
    전체 데이터 기반 기울기를 사용
    → 매 업데이트가 일관되어, 부드럽게 목적 함수의 저점으로 수렴.

  • Mini-batch Gradient Descent
    일부 미니배치만 사용해 기울기를 추정
    → 업데이트마다 기울기가 조금씩 달라져 지그재그로 이동.
    최적 지점 주변에서 흔들림이 발생 (수렴 속도 저하).

  • Stochastic Gradient Descent(보라 선)
    배치 1개를 사용해 기울기 추정
    → 매 스텝마다 극단적으로 노이즈가 섞여, 훨씬 불규칙한 경로를 그림.
    Mini-batch보다 수렴 속도가 느려지고, 안정적이지 않음.

SGD + Momentum

Momentum

: 여러 스텝에 걸쳐 누적된 기울기의 방향을 계속 따르도록 하여,
일시적인 노이즈나 jitter에도 크게 흔들리지 않고
일관된 방향으로 파라미터를 이동시킴

기본 SGD 업데이트

xt+1=xtαf(xt)x_{t+1} = x_t - \alpha \nabla f(x_t)

xtx_t : 시점 t의 파라미터
α\alpha : 학습률(learning rate)
ff : loss function

SGD + Momentum 업데이트

속도(velocity) 갱신

vt+1=ρvt    αf(xt)v_{t+1} = \rho\,v_t \;-\; \alpha\,\nabla f(x_t)

vtv_t : 시점 t에 누적된 이전 순간의 속도 (momentum term)
ρρ: 모멘텀 계수(momentum coefficient), 보통 0.9~0.99
f(xt)∇f(x_t) : 시점 t에서 계산한 미니배치 기울기

파라미터 업데이트

vt+1=ρvt    αf(xt)v_{t+1} = \rho\,v_t \;-\; \alpha\,\nabla f(x_t)

속도 vt+1v_{t+1}가 포함된 방향으로 파라미터를 이동.
기존 SGD처럼   αf(xt)-\; \alpha\,\nabla f(x_t)만 쓰지 않고, 과거 기울기 ρvt\rho\,v_t까지 더해줌.

AdaGrad (Adaptive Gradient)

각 파라미터별로(원소별로) 학습률을 조정하는 기법

과거까지의 그래디언트 제곱값 합을 누적(accumulate)하여,
파라미터마다 adaptive learning rate을 적용

SGD vs. AdaGrad

SGD (Stochastic Gradient Descent)

θt+1,i=θt,iηgt,i\theta_{t+1,i} = \theta_{t,i} - \eta \cdot g_{t,i}

θt,i\theta_{t,i} : 시점 tt에서 파라미터 ii
η\eta: 전체 파라미터에 공통으로 쓰이는 고정 학습률
gt,ig_{t,i} : 시점 t에서 계산된 파라미터 i에 대한 그래디언트

AdaGrad

θt+1,i=θt,iηGt,ii+ϵ파라미터 i의 적응형 학습률    gt,i\theta_{t+1,i} = \theta_{t,i} - \underbrace{\frac{\eta}{\sqrt{G_{t,ii} + \epsilon}}}_{\text{파라미터 $i$의 적응형 학습률}} \;\cdot\; g_{t,i}

Gt,ii=k=1t(gk,i)2G_{t,ii} = \sum_{k=1}^{t} \bigl(g_{k,i}\bigr)^2
: 파라미터 ii에 대한 과거 모든 그래디언트 제곱값의 누적 합
ϵϵ : 분모가 0이 되는 것을 방지하기 위한 아주 작은 상수

→ 과거 그래디언트가 클수록(누적 제곱합이 클수록) 현재 학습률이 작아짐

  • historically small gradient
    : 과거에 그래디언트가 거의 쌓이지 않은 축 방향.
    grad_squared가 작아서, 학습률이 상대적으로 크게 적용됨

  • historically large gradient
    : 과거에 그래디언트가 크게 쌓여 온 방향.
    grad_squared가 크므로,
    업데이트 시 학습률이 작아짐 (파라미터 이동폭이 작아짐)

→ SGD처럼 한 가지 고정 학습률(η)을 쓰는 대신,
과거 그래디언트 이력을 반영해 크게 움직였던 차원은 속도를 줄이고,
작게 움직였던 차원은 상대적으로 학습률을 크게 유지

RMSProp

AdaGrad의 누적 누적 제곱합(grad_squared)이 계속 커져
학습률이 지나치게 감소하는 문제를 해결하기 위해 고안된 기법

RMSProp 업데이트 수식

E[g2]t=0.9E[g2]t1과거 그래디언트 기여  +  0.1gt2현재 그래디언트 기여E\bigl[g^2\bigr]_t =\underbrace{0.9\,E\bigl[g^2\bigr]_{t-1}}_{\text{과거 그래디언트 기여}} \;+\; \underbrace{0.1\,g_t^2}_{\text{현재 그래디언트 기여}}
θt+1=θtηE[g2]t+ϵ  gt\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}}\;g_t

0.9 : decay rate
gtg_t : 시점 t에서 계산된 그래디언트
ηη : 학습률(스칼라)
θtθ_t : 시점 t에서의 파라미터(모델 가중치)

0.9 곱한 과거 평균값은 일정 비율만 유지,
나머지 0.1는 새롭게 들어온 그래디언트 제곱을 반영

→ 과거 그래디언트 제곱값이 완전히 누적되지 않고,
일정 비중으로만 남기 때문에 시간이 지나도 분모가 계속 커지지는 않음

Adam (Adaptive Moment Estimation)

RMSPropSGD 모멘텀(Momentum) 기법을 결합한 최적화 알고리즘

β1=0.9β_1=0.9 → 모멘텀(gradient의 이동 평균) 계수
β2=0.999β_2=0.999 → RMSProp(gradient 제곱의 이동 평균) 계수

첫 번째 모멘트(gradient의 EMA)

mt=β1mt1  +  (1β1)gtm_t = \beta_1\,m_{t-1} \;+\; (1 - \beta_1)\,g_t

mtm_t : 시점 t에서의 그래디언트(1차) 이동 평균 (first moment)
gtg_t : 시점 t에서 계산된 현재 그래디언트 벡터
β1β_1 : 첫 번째 모멘트에 대한 decay rate (보통 0.9)

두 번째 모멘트(gradient 제곱의 EMA)

vt=β2vt1  +  (1β2)(gt)2v_t = \beta_2\,v_{t-1} \;+\; (1 - \beta_2)\,(g_t)^2

vtv_t : 시점 t에서의 그래디언트 제곱(2차) 이동 평균 (second moment)
β2\beta_2 : 두 번째 모멘트에 대한 decay rate (보통 0.999)
(gt)2(g_t)^2 : 각 차원별 gtg_t의 제곱

First Order vs. Second Order

First-Order Method

: 한 번의 업데이트에서 현재 기울기 J(θ)∇J(θ)만을 사용하여
이동 방향과 크기를 결정

θj=θjαθjJ(θ)\theta_{j} = \theta_{j} - \alpha \frac{\partial}{\partial \theta_{j}}J(\theta)\,

αα : 학습률(learning rate)
JJ : loss function

Second-Order Method

: 목적함수 J(θ)J(θ)의 1차 도함수(그래디언트)뿐만 아니라
2차 도함수(헤시안 행렬 H\mathbf{H})까지 활용하여 파라미터를 갱신하는 방법

θj=θjH1θjJ(θ)\theta_{j} = \theta_{j} - \mathbf{H}^{-1} \frac{\partial}{\partial \theta_{j}}J(\theta)

H=2J(θ)\mathbf{H}=∇^2J(θ) : 헤시안 행렬(Hessian Matrix), 2차 편미분들로 구성됨

H1\mathbf{H}^{-1} 을 곱해 주면, 그래디언트만 사용할 때보다
함수의 곡률(curvature)에 맞추어 이동하기 때문에

  • 이동 방향이 더욱 정확해짐
  • 수렴 속도가 빠름

직관적 비교

Second-Order를 사용하지 않는 이유

  • 헤시안 계산 비용
    파라미터 차원이 N이라고 할 때,
    헤시안 행렬(H\mathbf{H})의 크기= N×N → 메모리 공간 O(N2)O(N^2) 필요
    딥러닝 모델에서는 N107108N≈10^7∼10^8

  • 역행렬(Inversion) 비용
    헤시안 H\mathbf{H}의 역행렬 H1\mathbf{H}^{-1}을 구하려면 → O(N3)O(N^3)의 계산 시간이 듦

Optimizers in Practice

옵티마이저(Optimizer) 선택 및 사용 시 유의사항

기본 시작점: Adam

학습률 자동 조정(Adaptive Learning Rate)과 모멘텀(지수 가중 이동 평균) 기능을 동시에 제공

SGD + Momentum 조합

Adam 대비 더 나은 일반화 성능(Generalization)을 보이는 경우가 많음.
학습률(lr)과 감쇠(Decay) 스케줄을 보다 세밀하게 튜닝해야 함.

learning rate은 반드시 조정

SGD, SGD + Momentum, Adagrad, RMSProp, Adam 등
대부분의 최적화 기법에서 learning rate이 모델 수렴 속도와 품질을 좌우

Training Neural Networks

모델 형태 설계

  • 네트워크의 구조(architecture)
  • 활성화 함수(activation function)
  • 하이퍼파라미터

파라미터 초기화

모든 층의 가중치(weight)와 편향(bias) 값을 랜덤하게 초기화

학습 반복 (y^y\hat{y} \approx y)

  1. 데이터 전처리
    : 모델에 넣기 좋은 형태로 데이터를 처리

  2. 순전파(Forward Pass) 및 예측 (Compute y^\hat{y})
    : 순전파가 끝나면 모델이 현재 W로 예측한 값 y^\hat{y}를 얻게 됨

  3. 손실 계산(Compute loss)
    : 현재 예측 y^\hat{y}와 실제 정답 yy를 비교하여 손실(loss) 값을 얻음

  4. 파라미터 업데이트(Update the parameters W based on this loss)

0개의 댓글