Deep learning의 Optimizer 조견표

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은 스스로 결정할 필요가 있다


  • 배치 크기는 일반적으로 1/10 정도의 주문이며 종종 2의 배수입니다.
    일반적으로 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()
    
  • 좋은 웹페이지 즐겨찾기