일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 딥러닝
- 역전파
- PostgreSQL
- 코딩
- Python
- 순전파
- C언어
- PHP
- 기울기
- picoCTF
- 소프트맥스 함수
- 우분투
- 리뷰
- PICO CTF
- 파이썬
- 백준
- FastAPI
- sgd
- 오차역전파법
- flag
- Python Challenge
- 아파치
- HTML
- 신경망
- 설치
- Apache2
- 책
- CTF
- AdaGrad
- 신경망 학습
Archives
- Today
- Total
Story of CowHacker
딥러닝 5.3 학습 관련 기술들 본문
728x90
앞에서 알아본 모멘텀, AdaGrad를 합진 기술의 이름은 Adam이다.
이 Adam을 먼저 파이썬으로 구현해볼 것이다.
Adam 코드
class Adam:
"""Adam (http://arxiv.org/abs/1412.6980v8)"""
def __init__(self, lr=0.001, beta1=0.9, beta2=0.999):
self.lr = lr
self.beta1 = beta1
self.beta2 = beta2
self.iter = 0
self.m = None
self.v = None
def update(self, params, grads):
if self.m is None:
self.m, self.v = {}, {}
for key, val in params.items():
self.m[key] = np.zeros_like(val)
self.v[key] = np.zeros_like(val)
self.iter += 1
lr_t = self.lr * np.sqrt(1.0 - self.beta2**self.iter) / (1.0 - self.beta1**self.iter)
for key in params.keys():
self.m[key] += (1 - self.beta1) * (grads[key] - self.m[key])
self.v[key] += (1 - self.beta2) * (grads[key]**2 - self.v[key])
params[key] -= lr_t * self.m[key] / (np.sqrt(self.v[key]) + 1e-7)
자 이제 우리는 4개의 매개변수 갱신 방법을 알아보았다.
SGD, 모멘텀, AdaGrad, Adam 중 어느 것을 사용해야 하는지는 없다.
각자 장단점이 존재하기 때문에 그렇다.
지금 많은 연구에서 SGD를 사용하고 있다.
다음은 학습의 반복 횟수를 2000으로 잡아두고 실험한 그래프다.
각 층이 100개의 뉴런으로 구성된 5층 신경망에서 ReLU를 활성화 함수로 사용했다.
SGD의 학습 진도가 가장 느린 걸 볼 수 있다.
나머지 세 기법의 진도는 비슷한데, 그중에서도 AdaGrad가 더 빠른 걸 볼 수 있다.
728x90
'공부 > 딥러닝' 카테고리의 다른 글
딥러닝 5.2 학습 관련 기술들 (0) | 2020.08.20 |
---|---|
딥러닝 5.1 학습 관련 기술들 (0) | 2020.08.19 |
딥러닝 5.0 학습 관련 기술들 (0) | 2020.08.19 |
딥러닝 4.5 오차역전파법 (0) | 2020.08.19 |
딥러닝 4.4 오차역전파법 (0) | 2020.08.19 |
Comments