Abstract
- Gradient Descent(경사하강법)은 널리 사용됨
- 하지만 직관적인 설명이 부족해 블랙박스로 활용됨
- 이 글은 다양한 Gradient Descent기법과 최적화 기법들을 소개함
- 병렬·분산 학습 환경에서의 알고리즘 및 추가 학습 전략을 다룸
- 상황에 맞는 옵티마이저를 선택할 수 있도록 도움
1. Introduction
신경망 최적화에 가장 많이 사용되고, 대부분의 딥러닝 라이브러리에서 제공하지만 블랙박스로 사용됨
- GD(경사하강법) 최적화를 위한 알고리즘을 소개하고 활용에 도움을 주는 것을 목표로 함Sector별 소개
- 2장: 다양한 경사하강법 변형 기법 소개
- 3장: 학습과정에서 발생하는 난제 요약
- 4장: 가장 일반적인 최적화 알고리즘들 소개 및 학습과정에서 발생하는 난제 해결 방법
- 5장: 병렬 및 분산 환경에서의 경사하강법 및 최적화 알고리즘
- 6장: 경사하강법 최적화에 유용한 전략
Gradient Descent란?
모델의 파라미터 θ
에 의해 매개변수화된 목적 함수 J(θ)
를 최소화하는 방법
$$\theta = \theta - \eta * \nabla \theta ; J(\theta) $$
- 목적함수$J(\theta)$를 최소화
- 방법
- 파라미터 $\theta$를 업데이트
- 업데이트 방향: 목적 함수의 기울기 $\nabla\theta ; J(\theta)$
- 학습률 (Learning Rate, $\eta$)
- 최솟값(지역 최솟값)에 도달하기 위해 내딛는 단계의 크기를 결정
- 비유: 목적 함수가 만드는 표면의 경사를 따라 내리막길을 따라 이동하여 골짜기에 도달함
2. Gradient descent variants
- 3가지 Gradient Descent 기법이 존재
- 목적함수의 기울기를 업데이트 하는 데 사용하는 데이터 양에 따라 달라짐
- Trade-Off 관계: parameter-update accuracy <-> update time
2.1 Batch gradient descent (배치 경사 하강법)
- 기본적인 경사 하강법 (vanila gradient descent)
- 전체 훈련 데이터를 사용하여 계산된 목적 함수의 기울기 활용
- 모델을 한 번 업데이트 할 때마다 전체 데이터셋을 훑어봄
$$\theta = \theta - \eta * \nabla \theta ; J(\theta)
- 모델을 한 번 업데이트 할 때마다 전체 데이터셋을 훑어봄
특징
- 매우 느림
- Memory에 담을 수 없는 데이터셋을 적용 불가능
- On-line 학습 불가능
Code
for i in range(nb_epochs):
params_grad = evaluate_gradient(loss_funtion, data, params)
params = params - learning_rate * params_grad
- 미리 정의된 Epochs만큼, 손실 함수에 대한 기울기 벡터 'params_grad' 계산
- 이 떄, 기울기는 모델의 파라미터 벡터 'params'에 대한 것
- 즉, 파라미터를 어떻게 바꿔야 손실이 줄어드는지 계산하는 것
- learning_rate(학습률)를 사용하여 기울기 방향으로 매개변수 업데이트
손실함수에 따른 수렴 위치
![[convex_vs_non-convex.png]]
- 볼록(convex) 한 형태의 손실 함수에서는 global minimum(전역 최솟값) 으로 수렴 보장
- 비볼록(non-convex) 한 손실 함수에서는 local minium(지역 최솟값) 으로 수렴
2.2 Stochastic gradient descent (확률적 경사하강법)
- 하나의 데이터 포인트 $x^i$와 $y^i$를 사용하여 가중치 업데이트
![[SGD.png]]
$$θ ← θ - η ∇L(θ; xᵢ, yᵢ)$$
장점
- 각각의 훈련 예제(데이터 포인트)에 대해 파라미터(가중치) 업데이트를 수행하므로 훨씬 빠름
- 새로운(잠재적으로 더 나은) 지역 최솟값으로 점프 가능
- On-line 학습 가능단점
- 높은 분산으로 인해 불안정하게 움직이며 정확한 최솟값으로의 수렴을 복잡하게 만듬 (overshooting 발생)해결책
- learning rate를 점진적으로 감소시키면 Batch Gradient-descent과 동일한 수렴을 보임
- 비볼록/볼록 최적화에서 각각 지역/전역 최솟값으로 거의 확실하게 수렴
Code
for i in range(nb_epochs):
np.random.shuffle(data)
for example in data:
params_grad = evaluate_gradient(loss_function, example, params)
params = params - learning_rate * params_gard
주의 사항
각 epoch마다 훈련 데이터를 섞어야 함
2.3 Mini-batch gradient descent (미니배치 경사하강법)
- Batch gardient descent와 Stochastic gradient descent의 장점을 모두 가져온 방법
- 모든 Mini-Batch에 대한 업데이트를 수행
$$
\theta = \theta - \eta \cdot \nabla_\theta J(\theta; x^{(i:i+n)}; y^{(i:i+n)})
$$장점 - 매개변수 업데이트의 분산을 줄임 -> 더욱 안정적인 수렴
- 딥러닝 라이브러리를 활용한 매우 효율적인 기울기 계산(미분) 가능특징
- 일반적인 Mini-batch 크기: 50~256 (응용 분야에 따라 달라짐)
- 신경망 훈련 시 가장 흔하게 선택되는 알고리즘
Code
for i in range(nb_epochs):
params_grad = evaluate_gradient(loss_funtion, data, params)
params = params - learning_rate * params_grad
3. Challenges
- Vanila Mini-Batch Gradient Descent는 좋은 수렴을 보장하지 않음해결해야 할 과제
- 적절한 Learning_rate 선택
- Learning_rate가 너무 낮은 경우 -> 수렴속도가 매우 느림
- Learning_rate가 너무 높으면 -> 손실함수가 최소값 주변에서 변동 or 발산Learning_rate scheduling 한계
- Learning_rate shcedule: 훈련 중 학습률 조정하는 것
- ex) annealing: 미리 정의된 스케줄 or epoch간 손실함수 변화가 임계값 아래로 떨어질 때 학습률을 줄임
- 문제점: 스케줄과 임계값을 미리 정의해야 하므로, 데이터셋 특성에 적응 불가능모든 파라미터에 동일한 학습률 적용의 문제점
- 데이터가 희소하고 특징의 빈도가 매우 다른 경우, 모든 특징을 동일한 정도로 업데이트하는 것이 최적이 아닐 수 있음 (드물게 나타나는 특징에 더 큰 업데이트 적용하는 것이 나을 수 있음)비볼록 오류 함수에서의 어려움
- 수많은 차선의 Local Minimum에 갇히는 것을 피해야 함
- Dauphin et al.의 주장: 어려움은 지역 최솟값이 아니라 안장점 (saddle points) 에서 발생
![[saddle_points.png]]
- 안장점: 기울기(gradient)는 0이지만, 극솟값도 극댓값도 아닌 점
- 기울기가 0이므로, gradient descent가 더 이상 작동 X
- 일부 방향에서는 오르막, 다른 방향에서는 내리막
- 최솟값도 최댓값도 아님
- 안장점: 기울기(gradient)는 0이지만, 극솟값도 극댓값도 아닌 점
4. Gradient descent optimization alorithms
- Challenge에서 언급한 과제를 해결하기 위한 4가지 경사하강 최적화 알고리즘들4.1 Momentum경사하강법(GD)는 골짜기(ravine) 를 탐색하기 어려움
기존 경사하강법(Gardient Descent의 문제)
골짜기(revine): 기울기가 가파른 방향과 완만한 방향이 공존하는 좁고 긴 손실 함수의 영역
- 한 방향은 가파르게 경사져 있음 -> 그 방향으로는 기울기가 큼 -> 빠르게 움직임
- 다른 방향은 매우 완만하게 경사져 있음 -> 그 방향으로는 기울기가 작음 -> 거의 이동 X
- 이런 구조로 인해, GD는 지그재그로 진동하며 매우 느리게 수렴
- Local-Minimum point 주변에서 흔히 나타남
![[momentum.png]]
![[avoiding_loval_minima.png]]
Momentum이란?
이동 방향으로 SGD를 가속하고, 진동을 완화하는 데 도움을 주는 방법
-> SGD가 손실 함수의 ravine에서 진동하지 않고 빠르게 수렴하도록 돕는 기법
$$v_t = \gamma v_{t-1} + \eta \nabla_\theta J(\theta)$$
$$\theta = \theta - v_t$$
원리
- 언덕에서 공을 굴리는 것에 비유 가능
- 공은 언덕을 따라 굴러갈수록 운동량을 축적하여 점점 더 빨라짐
- 작은 오르막(진동)을 만나도 관성으로 넘을 수 있음 → local minimum이나 saddle point 극복 가능성 ↑Momentum의 항($\gamma$)
- 일반적으로 0.9로 설정
- 기울기가 지속적으로 같은 방향: 업데이트 누적 -> 속도 증가
- 기울기가 자주 바뀌는 방향(진동): 상쇄 -> 속도 감소 -> 진동 억제
4.2 Nesterov accelerated gradient
Momentum의 문제점
- 언덕에서 맹목적으로 굴러가는 공과 같음
- 현재 기울기만 따라감NAG의해결책
- '똑똑한 공' 만들기: 어디로 가는지 알고, 언덕이 다시 올라가기 전에 속도를 줄일 수 있도록 함
- 모멘텀 항에 '예지력(prescience)" 부여Nesterov Accelerated Gradient (NAG)란?NAG 작동 방식
Momentum 항에 일종의 예측 능력을 부여하는 방법
NAG 작동 방식
- 모멘텀 항 $y^{vt-1}$을 사용하여 파라미터($\theta$)를 이동시킬 것을 알고 있음
- $\theta-y^{vt-1}$ 계산: 파라미터의 다음 위치에 대한 근사치 제공
- 파라미터가 어디로 향할지에 대한 대략적인 아이디어를 얻음
- 현재 파라미터 $\theta$가 아닌, 예상되는 미래 위치에 대해 기울기 계산 -> 미리 내다보는 효과
Momentum vs NAG momentum
![[NAG(Nasterov_Accelerate_Gradient).png]]
- Momentum (모멘텀)
- 현재 기울기 계산 (파란색 벡터)
- 업데이트된 누적 기울기 방향으로 큰 점프 (큰 파란색 벡터)
- NAG (Nesterov Accelerated Gradient)
- 이전 기울기 방향으로 큰 점프(갈색 벡터) -> 예측
- 기울기 측정
- 오차 보정 (녹색 벡터)장점
- 학습 속도가 너무 빨라지는 것 방지
- 반응성 증가
- RNN 성능 향상
4.3 Adagrad
Adagrad 는 학습률을 각 파라미터마다 다르게, 그리고 학습이 진행될수록 자동으로 감소시키는 최적화 기법
개요
- 기울기 기반 최적화 알고리즘
- 파라미터별로 학습률을 적응적으로 조정
- 드물게 등장하는 파라미터: 더 큰 업데이트 수행
- 빈번하게 등장하는 파라미터: 더 작은 업데이트 수행
- 희소 데이터에 특히 적합
성공 사례
- Dean at al. (Google): SGD의 견고성 향상, 대규모 신경망 훈련 (유튜브 고양이 인식)
- Pennington et al.: GloVe 단어 임베딩 훈련 (드물게 등장하는 단어에 더 큰 업데이트 필요)
수식
$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot \nabla_\theta J(\theta_t)$$
- $\theta$: 파라미터
- $eta$: 초기 학습률
- $G_t$: 이전 iteration까지의 기울기 제곱의 누적합
(즉, $G_t = \sum_{i=1}^t g_i^2$) - $\epsilon$: 0으로 나누는 것을 방지하는 아주 작은 수 (예: $1e^{-8}$)
핵심 아이디어
- 자주 업데이트되는 파라미터 -> 학습률이 빠르게 줄어듬
- 드물게 업데이트되는 파라미터 -> 학습률이 천천히 줄어듬
즉, 자주 변하는 파라미터는 보수적으로, 거의 변하지 않는 파라미터는 적극적으로 학습
장점
- 희소(sparse)한 데이터에 유리
- ex) 자연어 처리에서의 단어 임베딩 학습
- 수작업으로 학습률 조정 없이 자동 조절
단점
- 기울기 제곱의 누적합이 계속 증가하기 때문에, 학습률이 지나치게 작아져서 학습이 멈출 수 있음
4.4 Adadelta
문제 상황
Adagrad 한계
- 자주 쓰인 파라미터에 큰 업데이트, 덜 쓰인 파라미터에 작은 업데이트
- 시간이 지날수록 학습률이 지나치게 작아져 “더 이상 배우지 못하는” 현상 발생
핵심 아이디어
최근 정보만 활용
- 모든 과거 기울기를 쌓지 않고, 지수 이동 평균으로 “최근에 본 기울기”만 반영
- 마치 시험에서 ‘최근 기출문제’만 다시 풀어보는 것과 비슷
계산 과정
- 기울기 제곱의 지수 이동 평균
$$E[g^2]t = \gamma ,E[g^2]{t-1} + (1 - \gamma),g_t^2$$- $\gamma$ (감쇠 계수): 보통 0.9
- $E[g^2]$가 최근 기울기 제곱의 평균을 저장
- RMS of gradient 계산
$$\mathrm{RMS}[g]_t = \sqrt{E[g^2]_t + \varepsilon}$$- $\varepsilon$: $10^{-8}$ 정도의 작은 상수 (0으로 나누는 것 방지)
- 기본 파라미터 업데이트
$$\Delta \theta_t = -\frac{\eta}{\mathrm{RMS}[g]_t},g_t$$
단위(스케일) 일치 보정
- 업데이트 제곱의 지수 이동 평균
$$E[\Delta \theta^2]t = \gamma ,E[\Delta \theta^2]{t-1} + (1 - \gamma),\Delta \theta_t^2$$ - RMS of updates 계산
$$\mathrm{RMS}[\Delta \theta]_t = \sqrt{E[\Delta \theta^2]_t + \varepsilon}$$ - 최종 업데이트 식
- 학습률 $\eta$ 제거 → 과거 업데이트 크기 사용
$$\Delta \theta_t = -\frac{\mathrm{RMS}[\Delta \theta]{t-1}}{\mathrm{RMS}[g]_t},g_t$$
$$\theta{t+1} = \theta_t + \Delta \theta_t$$
- 학습률 $\eta$ 제거 → 과거 업데이트 크기 사용
장점
- 학습률 $\eta$를 따로 설정할 필요 없음
- “최근 기울기” 중심으로 자동 조정 → 학습이 너무 느려지지 않음
4.5 RMSprop
- Geoff Hinton이 Cousera 강의에서 제안한 learning rate Scheduling 방법
- RMSprop은 Adadelta의 첫 번째 업데이트 벡터와 동일
- Adagrad의 급격히 감소하는 학습률 문제를 해결하기 위해 같은 시기에 개발됨
$$E[g^2]t = 0.9 E[g^2]{t-1} + 0.1 g^2_t $$
$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_t$$
- Adagrad의 급격히 감소하는 학습률 문제를 해결하기 위해 같은 시기에 개발됨
설정
- 감쇠율($\gamma$): Hinton은 0.9로 제안
- 학습율($\eta$): 적절한 기본값은 0.001
핵심
- 학습율을 제곱 기울기의 지수 감쇠 평균으로 나눔
4.6 Adam
개요
- 각 파라미터에 대한 적응적 학습률을 계산하는 방법
- RMSprop(학습률 똑똑하게 조절) + Momentum (언덕에서 공 굴릴 때 탄력)
- Adadelta, RMSprop처럼 과거 제곱 기울기의 지수 감쇠 평균 ($v_t$) 저장
- Momentum과 유사하게 과거 기울기의 지수 감쇠 평균 ($m_t$) 유지
수식
$$m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t$$
$$v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2$$
- $m_t$ : 기울기의 첫 번째 모멘트 (평균) 추정
- $v_t$: 기울기의 두 번째 모멘트 (uncentered 분산) 추정
편향 보정 (Bias Correction)
- $m_t$, $v_t$는 0으로 초기화되므로, 특히 초기 단계에서 0으로 편향됨 ($\beta1, \beta2$가 1에 가까울수록 심함)
- 편향을 보정하기 위해 다음과 같이 보정된 추정치 사용
$$\hat{m}_t = \frac{m_t}{1 − β^t_1}$$
$$\hat{v}_t = \frac{v_t}{1 − β^t_2}$$
4.7 AdaMax
배경
- Adam은 과거 그래디언트의 2차 모멘트($(v_t$))를 이용해 학습률을 조정하지만,
때때로 분산값 계산에서 수치 불안정이 발생할 수 있음 - AdaMax는 Adam의 변형으로, 2차 모멘트 대신 $(L^\infty$) [노름]을 사용해 더 안정적인 업데이트를 제공
핵심 아이디어
- 과거 그래디언트 제곱의 평균 대신, “가장 큰” (절댓값) 그래디언트를 지수 감쇠하며 추적
- 이렇게 하면 분모가 0에 수렴하지 않고, 더 안정적으로 학습률을 조정할 수 있음
계산 과정
- 1차 모멘트(평균) 업데이트
$$m_t = \beta_1,m_{t-1} + (1 - \beta_1),g_t$$- $(\beta_1$): 보통 0.9
- 무한 노름 추적
$$u_t = \max\bigl(\beta_2,u_{t-1},,|g_t|\bigr)$$- $(\beta_2$) 보통 0.999
- 과거 $(u_{t-1}$)를 $(\beta_2$)로 감쇠시킨 값과, 현재 그래디언트 절댓값 중 큰 쪽을 선택
- 편향 보정된 1차 모멘트
$$\hat m_t = \frac{m_t}{1 - \beta_1^t}$$ - 파라미터 업데이트
$$\theta_{t+1} = \theta_t - \frac{\eta}{u_t},\hat m_t$$- 학습률 $(\eta$) 기본값: 0.002
장점
- $(L^\infty$) 노름을 사용해 분모가 0에 너무 작아지지 않음 → 수치적으로 안정적
- Adam과 비슷한 적응형 학습률 효과를 내면서, 편차가 적고 구현이 간단
4.8 Nadam
개요
- Adam + NAG (Nesterov Accelerated Gradient)
- Adam: RMSprop (과거 제곱 기울기의 지수 감쇠 평균 $v_t$) + Momentum (과거 기울기의 지수 감쇠 평균 $m_t$)
- NAG: 일반 모멘텀보다 우수
핵심 아이디어
- Adam의 편향 보정된 1차 모멘트 $(\hat m_t$)를 계산한 뒤,
- NAG처럼 “현재 모멘텀”을 이용해 파라미터를 미리 갱신하고 그 기울기를 반영합니다.
계산 과정
- 그래디언트와 모멘텀 업데이트
$$m_t = \beta_1,m_{t-1} + (1 - \beta_1),g_t$$ - 2차 모멘트(분산) 업데이트
$$v_t = \beta_2,v_{t-1} + (1 - \beta_2),g_t^2$$ - 편향 보정
$$\hat m_t = \frac{m_t}{1 - \beta_1^t},\quad\hat v_t = \frac{v_t}{1 - \beta_2^t}$$ - Nesterov-스타일 업데이트
- 기존 Adam:
$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat v_t} + \varepsilon},\hat m_t$$ - Nadam:
$$\theta_{t+1} = \theta_t;-;\frac{\eta}{\sqrt{\hat v_t} + \varepsilon}\Bigl(,\beta_1,\hat m_t + \frac{(1 - \beta_1)}{1 - \beta_1^t},g_t\Bigr)$$
- 기존 Adam:
주요 하이퍼파라미터
- $(\beta_1$): 1차 모멘트 감쇠 계수 (기본값 0.9)
- $(\beta_2$): 2차 모멘트 감쇠 계수 (기본값 0.999)
- $(\eta$): 학습률 (기본값 0.002)
- $(\varepsilon$): 수치 안정화 상수 (기본값 $(10^{-8}$))
장점
- Adam 대비 더 빠른 수렴과 높은 응답성
- NAG의 미리보기(look-ahead) 효과로 진동 억제 및 안정성 상승
4.9 Visualization of algorithms
![[visualize_algorithm.png]]
Loss surface 등고선 상의 최적화 경로
- 모든 알고리즘이 동일한 시작점에서 출발, 서로 다른 경로로 Minimum에 도달
- Adagrad, Adadelta, RMSprop: 처음부터 올바른 방향으로 빠르게 수렴
- Momentum, Nag: 골짜기(ravine)을 따라 진동하며 진행하다, NAG look-ahead(미리보기)로 더 빨리 방향 수정 후 수렴
Saddle point에서의 동작
- saddle point는 기울기가 거의 0으로, SGD가 빠져나오기 어려움
- SGD, Momentum, NAG: 대칭성을 깨기 어려워 한동안 머뭇거리지만 Momentum, NAG는 탈출
- Adagrad, RMSprop, Adadelta: 지수 이동 평균 기반 적응 학습률 덕분에 빠르게 내려가면 효과적으로 탈출
결론
- Adagrad, Adadelta, RMSprop 및 Adam* 이러한 환경에 가장 적합, 최상의 수렴 성능
4.10 Which optimizer to use?
- 입력 데이터가 sparse(희소)하다면, Adaptive learning-rate방법을 사용하는 것이 좋음
- 별도의 learning 조정 없이 기본적으로 좋은 성능을 냄
요약
- RMSprop: Adagrad의 급격한 학습률 감소 문제를 해결하기 위해 고안됨
- Adadelta: RMSprop과 유사하지만, 업데이트 규칙의 분자에 파라미터 업데이트의 RMS를 사용
- Adam: RMSprop에 편향 보정(bias-correction)과 Momentum을 더한 기법
- 대체로 RMSprop, Adadelta, Adam은 비슷한 환경에서 좋은 성능을 보이며 유사함
- 희소 데이터 -> Adagrad / RMSprop
- 일반 CNN/RNN -> Adam (바이어스 보정 덕분에 안정적)
- 대규모 분산환경 -> Downpour SGD / EASGD
6. Additional strategies for optimizing SGD
SGD의 성능을 더욱 향상시킬 수 있는 추가 전략
6.1 Shuffling and Curriculum Learning
Data Shuffling
일반적으로 훈련 데이터를 모델에 의미 있는 순서로 제공하는 것을 피해야 함
-> 모델에 편향을 줄 수 있음
- 매 epoch마다 Train data를 무작위로 섞는 것이 좋음
- 순서가 있는 데이터를 그대로 사용 -> 해당 순서에 over-fitting
Curiculum Learning
반면, 점진적으로 어려운 문제를 해결하는 경우, 의미 있는 순서가 도움될 수 있음
- 쉬운 예제부터 시작: 모델이 기본 패턴을 먼저 학습하도록 함
- 점진적으로 난이도 증가: 모델이 학습함에 따라 더 복잡한 예제 제공
- 학습 안정화: 어려운 패턴을 학습하기 전에 간단한 패턴에 집중할 수 있도록 함
6.2 Batch Normalization
배경
- 일반적으로 parameter 초기값을 평균 0, 단위 분산으로 초기화 후 정규화
- 하지만 훈련이 깊어지면서, 이러한 정규화가 손실 -> 학습 속도 저하, 변화 증폭
Batch Normalization
위와 같은 문제를 해결하기 위해, 각 Mini-batch마다 정규화 재설정
- Model Architecture의 일부로 사용
- 정규화 과정에서 발생하는 변경 사항은 역전파됨
장점
- 더 높은 learning-rate 사용 가능 -> 학습 속도↑
- 초기화 파라미터에 덜 신경 쓸 수 있음
- 정규화 효과 (dropout 필요성 감소/제거)
6.3 Early stopping
- Geoffry Hinton 왈: "Eraly stopping은 아름다운 공짜 점심"
- 학습 중에 validation loss를 모니터링 하고 개선되지 않으면, 중단해야 함
6.4 Gradient Noise
- 각 기울기 업데이트에 추가하는 방법 제안
- 매 step마다 평균 0, 분산 $\sigma^2_t$인 가우시안 노이즈를 기울기(gradient)에 더함
업데이트 수식
$$g_{t,i} = g_{t,i} + \mathcal{N}(0, \sigma^2_t)$$
분산 스케줄
$$\sigma^2_t = \frac{\eta}{(1 + t)^\gamma}$$
($\eta$는 학습률, $t$는 현재 step, $\gamma$는 감쇠 계수)
효과 및 장점
- 초기화가 부적절할 때도 네트워크가 더 강건해짐
- 특히 깊고 복잡한 네트워크의 학습을 촉진
- 노이즈 덕분에 모델이 새로운 지역 최소값(local minima)을 탐색할 수 있는 가능성이 높아짐
→ 이는 특히 더 깊은 신경망에서 중요한 효과임
🚀 Key Takeaways
- Gradient Descent: 모델 파라미터를 손실 함수 기울기 반대 방향으로 이동시켜 최적화
- Variants:
- Batch: 전체 데이터로 한 번에 업데이트 (느림)
- SGD: 샘플 단위 업데이트 (빠르나 진동)
- Mini-batch: 배치 단위 업데이트 (안정적 & 효율적)
- Challenges: 학습률 설정, 희소성 대응, ravine & saddle point 극복
- Optimizers:
- Momentum / NAG: 관성·예측으로 진동 억제
- Adagrad: 파라미터별 적응형 학습률 (단, 소진 문제)
- Adadelta / RMSprop: 지수 이동 평균으로 소진 문제 개선
- Adam / AdaMax / Nadam: 모멘텀+분산 추적 & 바이어스 보정, NAG 결합
- Distributed: Hogwild!, Downpour SGD, EASGD 등으로 대규모 학습 가속
- Tips: 데이터 셔플링, 배치 정규화, 조기 종료, 그래디언트 노이즈 주입으로 추가 성능 향상
'Data Science > 딥러닝 논문 리뷰' 카테고리의 다른 글
[딥러닝 논문 리뷰]Attention Is All You Need 논문 리뷰 (Transformer) (10) | 2024.10.09 |
---|---|
Cycle GAN이란? (1) | 2024.04.07 |