1. 경사하강법과 한계
-
경사하강법은 선형회귀, 로지스틱 회귀, 신경망의 기본 학습 알고리즘
-
하지만 학습률(α) 조절이 어려움
-
한 단계 업데이트 수식:
wj:=wj−α∂wj∂J
- 동일한 방향으로 반복 이동하는 경우: 학습률을 더 키우고 싶음
- 진동하는 경우: 학습률을 줄여야 함
2. Adam 알고리즘의 개요
- Adam: Adaptive Moment Estimation의 약자
- 학습률(α)을 자동으로 조정
- 각 파라미터별로 다른 학습률 α1,α2,...,αn 사용
- 경사하강법보다 더 빠르고 안정적인 수렴 유도
실무에서는 대부분 경사하강법(GD) 대신 Adam 사용
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
3. Adam 알고리즘의 핵심 아이디어
- 파라미터가 비슷한 방향으로 계속 움직임 → 학습률 증가
- 파라미터가 진동 → 학습률 감소
- 내부적으로는 1차/2차 모멘텀(평균/분산)을 추적하여 업데이트
4. 계산 그래프 (Computation Graph)
딥러닝의 핵심 개념. 순전파와 역전파 계산을 시각적, 단계적으로 표현함.
4-1. 순전파 예시 (단일 뉴런)
- x=−2, y=2
- w=2, b=8
- 출력 a=wx+b=−4+8=4
- 오차: d=a−y=2
- 비용 함수:
J=21(a−y)2=21d2=2
4-2. 역전파 개요
- 오른쪽에서 왼쪽으로 계산
- ∂d∂J=2d=4
- ∂a∂J=2
- ∂b∂J=2
- ∂c∂J=2
- ∂w∂J=−4
5. 도함수의 직관적 계산 예시
함수: J(w)=w2
- w=3⇒J=9
- w=3.001⇒J=9.006001
- 도함수: ΔwΔJ≈6
공식적 계산
dwdJ=2w
- w=3⇒dwdJ=6
- w=2⇒dwdJ=4
- w=−3⇒dwdJ=−6
6. SymPy로 도함수 계산 (파이썬 코드)
import sympy as sp
w = sp.symbols('w')
J = w**2
sp.diff(J, w)
7. 계산 그래프와 역전파 효율성
- 노드 수: n, 파라미터 수: p
- 브루트포스 방식: O(n⋅p)
- 계산 그래프 역전파: O(n+p) → 효율적!
8. 대규모 신경망 예제 (ReLU 포함)
J=21(a2−y)2
-
예시 값:
- w1=2, b1=0, w2=3, b2=1
- a1=2, a2=7
- J=2
9. 자동 미분과 오토디프(Autodiff)
- 프레임워크 (TensorFlow, PyTorch)는 자동 미분 기능 제공
- 사용자는 forward 계산만 정의하면 됨
- 내부적으로 계산 그래프 + 역전파로 도함수 자동 계산
- 과거에는 직접 미분을 손으로 계산해야 했지만 이제는 필요 없음!