일반적으로 사용되는 pytorch 최적화 프로그램 요약

1. 경사 하강 법의 원리

        경사 하강 법의 주요 목적은 반복을 통해 목적 함수의 최소값을 찾거나 최소값으로 수렴하는 것입니다. 가장 일반적으로 사용되는 예는 산을 내려가는 것입니다. 예를 들어, 모든 계단은 계단 길이이며 내려갈 때마다 가장 가파른 곳을 찾습니다 (낙하하는 상황은 고려하지 마십시오 ...). 산이 거의 매끄럽고 계곡이 없다고 가정하면 산을 내려가는 가장 짧고 빠른 길을 찾을 수 있으며,이 길은 경사가 가장 가파른 곳이기도합니다.

                                                                           공식 : x1 = x0 + λ ▽ J (x) (1)

    J는 x의 함수이고 현재 위치는 x0이며이 지점에서 J의 최소 지점으로 이동해야합니다. 먼저 진행 방향, 즉 기울기의 역을 결정한 다음 λ 의 단계 크기가 점 x1에 도달합니다. 위는 경사 하강 법에 대한 직관적 인 설명입니다.

2. 딥 러닝의 경사 하강 법

2.1 sgd

        딥 러닝은 일반적으로 미니 배치 경사 하강 법 (미니 배치 경사 하강 법)을 사용합니다. 실제로 미니 배치 경사 하강 법 알고리즘을 가리키는 sgd 알고리즘에 대해 이야기 해 보겠습니다. 아무도 한 번에 전체 데이터 세트 또는 하나의 샘플을 최적화하지 않을 것입니다. 핵심 원칙은 Formula 1입니다.

장점과 단점;

(1) 학습률과 전략 선택이 어렵다. 미니 배치를 사용하면 매우 빠르게 수렴 할 수 있습니다.

(2) 학습률이 매개 변수의 모든 차원을 동등하게 취급 할만큼 똑똑하지 않습니다.

(3) 국부 극한 점과 안 장점의 문제를 동시에 직면합니다. 로컬 최적 솔루션의 문제를 해결할 수 없습니다.

(4) 그라디언트를 무작위로 선택하면 동시에 노이즈가 발생하므로 가중치 업데이트 방향이 올바르지 않을 수 있습니다.

2.2 모멘텀 방법

        운동량 방법의 각 단계는 이전 하강 방향과 현재 지점의 기울기 방향의 누적을 조합 하여 2.1 방법으로 인한 충격을 줄이고 기울기를 더 부드럽게 만듭니다. 공식은 다음과 같습니다

                                                                                         vt = β * vt-1 + λ ▽ J (x) (2)

                                                                                         x1 = x0 + vt (3)

그림에 표시된 운동량 항은 공식 2에서 (1-λ) * vt-1이고 점 B에서의 기울기는 공식 2에서 λ ▽ J (x)입니다. 기울기 업데이트 방향은 전체 공식 2입니다.

                                                                                                                              영상

  비교 차트는 지터가 분명히 더 작다는 것을 보여줍니다.

                                                                                               영상

 

2.3 NAG 알고리즘   

 

처음 세 개의 알고리즘 코드는 다음과 같습니다.

 

class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)[source]
实现随机梯度下降算法(momentum可选)。
参数:

params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
lr (float) – 学习率
momentum (float, 可选) – 动量因子(默认:0)
weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认:0)
dampening (float, 可选) – 动量的抑制因子(默认:0)
nesterov (bool, 可选) – 使用Nesterov动量(默认:False)
例子:

>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
>>> optimizer.zero_grad()
>>> loss_fn(model(input), target).backward()
>>> optimizer.step()

계속하려면 ........

참조 :

https://blog.csdn.net/qq_41800366/article/details/86583789

https://blog.csdn.net/weixin_36811328/article/details/83451096

https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA==&mid=2649031658&idx=1&sn=fd1b54b24b607a9d28dc4e83ecc480fb&chksm=8712bd97b065348132d8261908e4580&scenea4c3chat1907c750&scenea4c3chat1907c750&scenea1a21646dfc9c0&

https://blog.csdn.net/kyle1314608/article/details/104401836

 

 

                              

 

추천

출처blog.csdn.net/gbz3300255/article/details/111212418