Sự khác biệt giữa giảm dần độ dốc dựa trên động lượng và độ dốc tăng tốc của Nesterov là gì?


48

Vì vậy, độ dốc gốc dốc hoạt động như sau:

v=self.momentummlrg

Trong đó là bản cập nhật trọng số trước đó và là độ dốc hiện tại đối với các tham số , là tốc độ học tập và là một hằng số.g p l r s e l f . m o m e n t u mmgplrself.momentum

pnew=p+v=p+self.momentummlrg

và giảm dần độ dốc tăng tốc của Nesterov hoạt động như sau:

pnew=p+self.momentumvlrg

tương đương với:

pnew=p+self.momentum(self.momentummlrg)lrg

hoặc là

pnew=p+self.momentum2m(1+self.momentum)lrg

nguồn: https://github.com/fchollet/keras/blob/master/keras/optimulators.py

Vì vậy, đối với tôi, dường như việc giảm độ dốc tăng tốc của Nesterov chỉ tăng thêm trọng lượng cho thuật ngữ lr * g so với thuật ngữ thay đổi trọng lượng phổ biến m (so với động lượng cũ đơn giản). Giải thích này có đúng không?


7
Bạn có yêu cầu bạn nhập không? LATEX
Rodrigo de Azevedo

Câu trả lời:


35

Câu trả lời của Arech về động lượng Nesterov là chính xác, nhưng về cơ bản mã này cũng làm điều tương tự. Vì vậy, về mặt này, phương pháp Nesterov không mang lại nhiều trọng lượng hơn cho thuật ngữ và ít trọng lượng hơn đối với thuật ngữ .vlrgv

Để minh họa tại sao việc triển khai của Keras là chính xác, tôi sẽ mượn ví dụ của Geoffrey Hinton .
nhập mô tả hình ảnh ở đây

Phương pháp Nesterov sử dụng phương pháp "đánh bạc-> hiệu chỉnh". Vectơ màu nâu là (đánh bạc / nhảy), vectơ màu đỏ là (hiệu chỉnh) và vectơ màu xanh lá cây là (nơi chúng ta thực sự nên di chuyển đến). là hàm gradient.
v=mvlr(w+mv)
w=w+v
mvlr(w+mv)mvlr(w+mv)()

Mã trông khác nhau vì nó di chuyển theo vectơ màu nâu thay vì vectơ màu xanh lục , vì phương thức Nesterov chỉ yêu cầu đánh giá thay vì . Vì vậy, trong mỗi bước chúng tôi muốn(w+mv)=:g(w)

  1. di chuyển trở lại nơi chúng tôi đã ở(10)
  2. theo vectơ màu xanh lá cây đến nơi chúng ta sẽ đến(02)
  3. thực hiện một canh bạc khác(23)

Mã của Keras được viết tắt là , và chúng tôi làm một số phép toánp=p+m(mvlrg)lrg

p=pmv+mv+m(mvlrg)lrg=pmv+mvlrg+m(mvlrg)=pmv+(mvlrg)+m(mvlrg)

và đó chính xác là . Trên thực tế, mã gốc có đường dẫn ngắn hơn . 1 2 31023123

Giá trị ước tính thực tế (vectơ màu xanh lá cây) phải là , gần với khi học hội tụ.ppmvp


2
@youkaichao hãy thử youtube.com/watch?v=LdkkZglLZ0Q
dontloo

13

Dường như với tôi rằng câu hỏi của OP đã được trả lời, nhưng tôi sẽ cố gắng đưa ra một lời giải thích (hy vọng trực quan) khác về động lượng và sự khác biệt giữa Classical Momentum (CM) và Gradient tăng tốc (NAG) của Nesterov.


tl; dr
Chỉ cần bỏ qua hình ảnh ở cuối.
Lý luận của NAG_ball là một phần quan trọng khác, nhưng tôi không chắc nó sẽ dễ hiểu nếu không có tất cả các phần còn lại.



CM và NAG đều là các phương thức để chọn vectơ tiếp theo trong không gian tham số, để tìm mức tối thiểu của hàm .θf(θ)

Trong một tin tức khác, gần đây hai quả bóng tình cảm hoang dã này xuất hiện:
CM_ball NAG_ball

Hóa ra (theo hành vi quan sát được của các quả bóng và theo bài báo Về tầm quan trọng của việc khởi tạo và động lực trong học tập sâu , mô tả cả CM và NAG trong phần 2) rằng mỗi quả bóng hoạt động giống hệt như một trong những phương pháp này , và vì vậy chúng tôi sẽ gọi chúng là "CM_ball" và "NAG_ball":
(NAG_ball đang mỉm cười, bởi vì gần đây anh ấy đã xem phần cuối của Bài giảng 6c - Phương pháp động lượng, bởi Geoffrey Hinton với Nitish Srivastava và Kevin Swersky , và do đó tin tưởng hơn bao giờ hết hành vi của anh ta dẫn đến việc tìm kiếm một mức tối thiểu nhanh hơn.)

Đây là cách các quả bóng cư xử:

  • Thay vì lăn như những quả bóng bình thường, chúng nhảy giữa các điểm trong không gian tham số.
    Đặt là vị trí thứ của quả bóng trong không gian tham số và để là bước nhảy thứ của quả bóng . Sau đó, nhảy giữa các điểm trong không gian tham số có thể được mô tả bởi .θttvttθt=θt1+vt
  • Họ không chỉ nhảy thay vì lăn, mà cả những bước nhảy của họ cũng rất đặc biệt: Mỗi lần nhảy thực sự là Nhảy đôi, là thành phần của hai lần nhảy: vt
    • Nhảy đà - một bước nhảy sử dụng động lượng từ , Bước nhảy kép cuối cùng. Một phần nhỏ động lượng của bị mất do ma sát với không khí. Gọi là một phần của động lượng còn lại (các quả bóng khá khí động học, vì vậy thường là ). Khi đó Bước nhảy động bằng với . (Trong cả CM và NAG, là một siêu tham số được gọi là "hệ số động lượng".)vt1
      vt1
      μ0.9μ<1μvt1
      μ
    • Slope Jump - một cú nhảy khiến tôi nhớ đến kết quả của việc đặt một quả bóng bình thường lên một bề mặt - quả bóng bắt đầu lăn theo hướng dốc cao nhất xuống dưới, trong khi độ dốc càng dốc thì gia tốc càng lớn.
      Tương tự, Slope Jump theo hướng dốc cao nhất xuống dưới (hướng đối diện với độ dốc) và độ dốc càng lớn, bước nhảy càng xa.
      Slope Jump cũng phụ thuộc vào , mức độ háo hức của quả bóng (một cách tự nhiên, ): Bóng càng háo hức, Slope Jump sẽ càng lấy được nó. (Trong cả CM và NAG, là một siêu tham số gọi là "tốc độ học tập".) Hãyϵϵ>0
      ϵ
      glà độ dốc ở vị trí bắt đầu của Slope Jump. Khi đó Slope Jump bằng với .ϵg
  • Vì vậy, đối với cả hai quả bóng, Double Jump đều bằng: Sự khác biệt duy nhất giữa các quả bóng là thứ tự của hai lần nhảy trong Bước nhảy kép.
    vt=μvt1ϵg
  • CM_ball không nghĩ nó quan trọng, vì vậy anh quyết định luôn bắt đầu với Slope Jump.
    Do đó, Bước nhảy đôi của CM_ball là:
    vt=μvt1ϵf(θt1)
  • Ngược lại, NAG_ball nghĩ về nó một thời gian, và sau đó quyết định luôn bắt đầu với Bước nhảy vọt.
    Do đó, Double Jump của NAG_ball là:

    vt=μvt1ϵf(θt1+μvt1)

    Lý luận của NAG_ball

    • Bất cứ bước nhảy nào đến trước, Bước nhảy của tôi cũng sẽ như vậy.
      Vì vậy, tôi nên xem xét tình huống như thể tôi đã thực hiện Bước nhảy vọt của mình và tôi sắp thực hiện Bước nhảy dốc của mình.
    • Bây giờ, Slope Jump của tôi về mặt khái niệm sẽ bắt đầu từ đây, nhưng tôi có thể chọn tính toán Slope Jump của mình sẽ như thế nào nếu nó bắt đầu trước Bước nhảy vọt, hoặc như thể nó bắt đầu ở đây.
    • Suy nghĩ về nó theo cách này cho thấy khá rõ rằng cái sau tốt hơn, vì nói chung, độ dốc tại một số điểm gần như chỉ cho bạn theo hướng từ đến mức tối thiểu (với độ lớn tương đối đúng), trong khi độ dốc ở một số điểm khác ít có khả năng chỉ cho bạn theo hướng từ đến mức tối thiểu (với cường độ tương đối đúng).θθθ

Cuối cùng, ngày hôm qua tôi đã may mắn quan sát từng quả bóng nhảy xung quanh trong không gian tham số 1 chiều.
Tôi nghĩ rằng việc xem xét các vị trí thay đổi của chúng trong không gian tham số sẽ không giúp ích nhiều cho việc đạt được trực giác, vì không gian tham số này là một dòng.
Vì vậy, thay vào đó, với mỗi quả bóng, tôi đã phác thảo một đồ thị 2 chiều trong đó trục hoành là . Sau đó, tôi đã vẽ bằng một bàn chải màu đen, và cũng vẽ từng quả bóng ở vị trí đầu tiên của mình, cùng với các con số để hiển thị thứ tự thời gian của các vị trí. Cuối cùng, tôi đã vẽ các mũi tên màu xanh lá cây để hiển thị khoảng cách trong không gian tham số (tức là khoảng cách theo chiều ngang trong biểu đồ) của mỗi Bước nhảy đà và Nhảy dốc.θf ( θ ) 7
f(θ)7

Ví dụ CM_ball vs NAG_ball


Phụ lục 1 - Trình diễn lý luận của NAG_ball

Trong gif đầy mê hoặc này của Alec Radford , bạn có thể thấy NAG hoạt động tốt hơn nhiều so với CM ("Động lượng" trong gif).
(Tối thiểu là vị trí của ngôi sao và các đường cong là các đường đồng mức . Để giải thích về các đường đồng mức và tại sao chúng vuông góc với độ dốc, hãy xem video 12 của 3Blue1Brown huyền thoại .)

NAG tốt hơn CM (Động lượng)

Một phân tích về một thời điểm cụ thể cho thấy lý do của NAG_ball:

CM vs NAG trong một thời điểm cụ thể

  • Mũi tên màu tím (dài) là bước phụ đà.
  • Mũi tên đỏ trong suốt là bước phụ gradient nếu nó bắt đầu trước bước phụ đà.
  • Mũi tên đen là bước phụ gradient nếu nó bắt đầu sau bước phụ đà.
  • CM sẽ kết thúc trong mục tiêu của mũi tên đỏ sẫm.
  • NAG sẽ kết thúc trong mục tiêu của mũi tên đen.

Phụ lục 2 - những điều / điều khoản tôi đã tạo ra (vì lợi ích của trực giác)

  • CM_ball
  • NAG_ball
  • Nhảy đúp
  • Bước nhảy
  • Động lượng bị mất do ma sát với không khí
  • Nhảy dốc
  • Đại bàng của một quả bóng
  • Tôi quan sát những quả bóng ngày hôm qua

Phụ lục 3 - điều khoản tôi không tạo nên


1
Tôi tìm thấy phần từ "Đây là cách các quả bóng hoạt động: ..." đến "để chỉ cho bạn theo hướng từ θ đến mức tối thiểu (với cường độ tương đối đúng)." xuất sắc như một lời giải thích về sự khác biệt.
Poete Maudit

12

Tôi không nghĩ vậy.

Có một mô tả hay về các thuộc tính Nesterov Momentum (còn gọi là Nesterov Gia tốc Gradient), ví dụ, Sutskever, Martens và cộng sự "Về tầm quan trọng của việc khởi tạo và động lực trong học tập sâu" 2013 .

Sự khác biệt chính là ở động lượng cổ điển, trước tiên bạn điều chỉnh vận tốc của mình và sau đó thực hiện một bước lớn theo vận tốc đó (và sau đó lặp lại), nhưng trong động lượng Nesterov trước tiên bạn thực hiện một bước theo hướng vận tốc và sau đó điều chỉnh theo vectơ vận tốc trên vị trí mới (sau đó lặp lại).

tức là đà cổ điển:

vW(t+1) = momentum.*Vw(t) - scaling .* gradient_F( W(t) )
W(t+1) = W(t) + vW(t+1)

Trong khi đà Nesterov là thế này:

vW(t+1) = momentum.*Vw(t) - scaling .* gradient_F( W(t) + momentum.*vW(t) )
W(t+1) = W(t) + vW(t+1)

Trên thực tế, điều này tạo ra một sự khác biệt lớn trong thực tế ...


5

Đã thêm: một khóa học Stanford trên các mạng thần kinh, cs231n , cung cấp một dạng khác của các bước:

v = mu * v_prev - learning_rate * gradient(x)   # GD + momentum
v_nesterov = v + mu * (v - v_prev)              # keep going, extrapolate
x += v_nesterov

Đây vlà vận tốc aka bước aka trạng thái, và mulà một yếu tố động lượng, thường là 0,9 hoặc hơn. ( v, xlearning_ratecó thể vectơ rất dài, với NumPy, mã là như nhau.)

vtrong dòng đầu tiên là độ dốc giảm dần với động lượng; v_nesterovngoại suy, tiếp tục đi. Ví dụ: với mu = 0,9,

v_prev  v   --> v_nesterov
---------------
 0  10  -->  19
10   0  -->  -9
10  10  -->  10
10  20  -->  29

Mô tả sau đây có 3 thuật ngữ: riêng
thuật ngữ 1 là độ dốc gốc đơn giản (GD),
1 + 2 cho GD + động lượng,
1 + 2 + 3 cho Nesterov GD.

Nesterov GD thường được mô tả là các bước động lượng xen kẽ và các bước gradient :xtytytxt+1

yt=xt+m(xtxt1) - đà, dự đoán - gradient
xt+1=yt+h g(yt)

trong đó là độ dốc âm và là stepize aka tốc độ học tập.gtf(yt)h

Kết hợp hai phương trình này với một phương thức chỉ trong , các điểm tại đó độ dốc được ước tính, bằng cách cắm phương trình thứ hai vào thuật ngữ thứ nhất và sắp xếp lại:yt

yt+1=yt
+ h gt - gradient - động lượng bước động lượng bậc
+ m (ytyt1)
+ m h (gtgt1)

Thuật ngữ cuối cùng là sự khác biệt giữa GD với động lượng đơn giản và GD với động lượng Nesterov.


Người ta có thể sử dụng các thuật ngữ động lượng riêng biệt, giả sử và : - động lượng bước - đà dốcmmgrad
+ m (ytyt1)
+ mgrad h (gtgt1)

Sau đó cho động lượng đơn giản, Nesterov. khuếch đại nhiễu (độ dốc có thể rất nhiễu), là bộ lọc làm mịn IIR.m g r a d = m m g r a d > 0 m g r a d- .1mgrad=0mgrad=m
mgrad>0
mgrad.1

Bằng cách này, đà và stepsize có thể thay đổi theo thời gian, và , hoặc cho mỗi thành phần (ada * Phối gốc), hoặc cả hai - Phương pháp hơn trường hợp thử nghiệm.h tmtht


Biểu đồ so sánh động lượng đơn giản với động lượng Nesterov trên trường hợp thử nghiệm 2d đơn giản, :
(x/[cond,1]100)+ripple×sin(πx)

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.