Deep learning의 Optimizer 조견표
읽은 녀석 (기사의 그림은 당 논문에서 인용하고 있습니다)
- An overview of gradient descent optimization algorithms (Ruder, 2016)
- On Empirical Comparisons of Optimizers for Deep Learning (Choi et al., 2019)
경사 강하법은 크게 나누어 3종류
구분
1itr에서 사용하는 샘플
좋은 곳
좋지 않은 곳
BatchGradient Descent
모두
· 에포크를 진행하면 전역 or 국소 최적해에 수렴
· 격중 · 대량의 메모리 필요
StochasticGradient Descent
1코
・비볼록함수라도 전역해에 갈 수 있는 가능성
· 에포크를 진행하면 목적 함수가 크게 상하한다
Mini-BatchGradient Descent
배치 사이즈 N코
・상위 2개의 좋은 토코취
・배치 사이즈 N은 스스로 결정할 필요가 있다
일반적으로 Mini-Batch Gradient Descent는 SGD (Stochastic Gradient Descent)라고합니다.
여러 SGD를 한마디로 소개
바닐라 SGD
이름
한마디로
좋은 곳
좋지 않은 곳
SGD
・상기와 같이
・상기와 같이
· 스케일의 크고 작은 크기에 따라 학습이 진행되지 않는 차원이있을 수 있습니다.
Momentum계
이름
한마디로
좋은 곳
좋지 않은 곳
Momentum
・운동량항을 갖게 한다
· 차원의 스케일 차이에 좌우되기 어렵다.
· 안장에서 빠질 수 없음
NAG
· 미래의 정보를 준 Momentum
·↑보다 효율적
· 안장에서 빠질 수 없음
Adagrad계(요컨대 「엄청 움직인 차원은 학습률을 낮춘다」)
이름
한마디로
좋은 곳
좋지 않은 곳
Adagrad
· 구배 제곱 합의 누적이 큰 차원은 학습률을 낮춘다
· 스파스 데이터에 적합 · 학습률은 초기 값만 결정하면 OK
· 학습률이 계속 떨어지기 때문에 학습이 진행되지 않습니다.
Adadelta
· 개선 Adagrad · 경사 제곱 합에 시간 페널티
· 학습률 단조 감소를 억제한다 · 학습률의 초기 값을 결정하지 않아도된다
・하이파라가 많다
RMSprop
Adadelta와 거의 같다 (동시기에 다른 사람이 만들었다)
같은
같은
Adam 계열 (Adagrad와 Momentum의 하이브리드)
이름
한마디로
좋은 곳
좋지 않은 곳
Adam
· Adadagrad와 Momentum의 하이브리드
· 좋은 사촌
・하이파라가 많다
Adamax
· 변형 Adam · L2 대신 L∞ 규범
같은
같은
NAdam
· Adagrad와 NAG의 하이브리드
같은
같은
이렇게
- Momentum 시스템은 목적 함수의 기울기에 항을 더하고 끌어 당기는 기술
- Adagrad 시스템은 목표 함수의 학습률 스케줄링을 자동화하는 방법
- 그래서 양립 가능 (대신 하이파라가 많아진다)
실험 결과
- 제대로 하이파라 튜닝하면 Adam계가 좋다(NAdam이 제일 성능이 좋았다)
- 텍토에 하면 바닐라 SGD+ 학습률 스케줄링에도 지는 것도
- Optimizer를 비교한다면 하이파라의 검색 공간을 명시하십시오.
↑ 분산이 다른 2차원 가우스 분포
↑ 안장 점 (Momentum이면 안되지만 Adadagrad 계 · Adam 계라고 잘되는 예)
덤 : 안장 플롯 코드
saddle_point.ipynb
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
x = np.arange(-1, 1, 0.05)
y = np.arange(-1, 1, 0.05)
x, y = np.meshgrid(x, y)
ax.scatter(x, y, x**2 - y**2, s=2, marker=".")
ax.scatter(0, 0, 0, color="red", s=10, marker="o")
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
plt.savefig("./saddle_point.jpg")
plt.show()
Reference
이 문제에 관하여(Deep learning의 Optimizer 조견표), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/norihitoishida/items/6d7c9a2494b62bfbe8ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)