일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 신경망
- PICO CTF
- 순전파
- HTML
- 우분투
- Python Challenge
- 신경망 학습
- 역전파
- Python
- PHP
- 소프트맥스 함수
- 리뷰
- 기울기
- C언어
- 오차역전파법
- CTF
- 코딩
- flag
- FastAPI
- Apache2
- 아파치
- 파이썬
- picoCTF
- AdaGrad
- sgd
- PostgreSQL
- 딥러닝
- 책
- 백준
- 설치
Archives
- Today
- Total
Story of CowHacker
딥러닝 5.1 학습 관련 기술들 본문
728x90
이번에는 저번 글에서 알아본 SGD의 단점을 보완한 방법 중 모멘텀에 대해 알아보겠다.
모멘텀은 운동량을 뜻하는 단어다.
그림 1을 보면 두 개의 수식이 있는데
첫 번째 수식은 모멘텀을 수식화 한 것이고
두 번째 수식은 간소화한 수식이다.
이제 이것을 파이썬으로 구현해보겠다.
참고로 이 코드는 밑에 출처를 참고했다.
출처 : https://github.com/WegraLee/deep-learning-from-scratch
모멘텀 파이썬 코드
import numpy as np
class Momentum:
"""모멘텀 SGD"""
def __init__(self, lr=0.01, momentum=0.9):
self.lr = lr
self.momentum = momentum
self.v = None
def update(self, params, grads):
if self.v is None:
self.v = {}
for key, val in params.items():
self.v[key] = np.zeros_like(val)
for key in params.keys():
self.v[key] = self.momentum*self.v[key] - self.lr*grads[key]
params[key] += self.v[key]
여기서 v는 물체의 속도다.
v는 초기화 때는 아무 값도 담지 않고, 대신 update함수가 처음 호출될 때 매개변수와 같은 구조의 데이터를 딕셔너리 변수로 저장한다.
그림 2는 모멘텀을 그래프화 한 것이다.
SGD와 비교하면 지그재그 정도가 덜한 것을 볼 수 있다.
728x90
'공부 > 딥러닝' 카테고리의 다른 글
딥러닝 5.3 학습 관련 기술들 (0) | 2020.08.20 |
---|---|
딥러닝 5.2 학습 관련 기술들 (0) | 2020.08.20 |
딥러닝 5.0 학습 관련 기술들 (0) | 2020.08.19 |
딥러닝 4.5 오차역전파법 (0) | 2020.08.19 |
딥러닝 4.4 오차역전파법 (0) | 2020.08.19 |
Comments