Làm thế nào để chức năng kích hoạt trực tuyến giải quyết vấn đề gradient biến mất trong các mạng thần kinh?


40

Tôi tìm thấy đơn vị tuyến tính chỉnh lưu (ReLU) được ca ngợi ở một số nơi như là một giải pháp cho vấn đề độ dốc biến mất cho các mạng thần kinh. Nghĩa là, người ta sử dụng max (0, x) làm chức năng kích hoạt. Khi kích hoạt là dương, rõ ràng là tốt hơn so với chức năng kích hoạt sigmoid, vì đạo hàm của nó luôn là 1 thay vì giá trị nhỏ tùy ý cho x lớn. Mặt khác, đạo hàm chính xác bằng 0 khi x nhỏ hơn 0. Trong trường hợp xấu nhất, khi một đơn vị không bao giờ được kích hoạt, các trọng số cho đơn vị này cũng sẽ không bao giờ thay đổi nữa và đơn vị sẽ mãi mãi vô dụng - dường như tồi tệ hơn nhiều so với độ dốc nhỏ thậm chí biến mất. Làm thế nào để các thuật toán học tập giải quyết vấn đề đó khi họ sử dụng ReLU?


2
Những gì bạn mô tả là trường hợp xấu nhất được gọi là ReLU đang hấp hối
Martin Thoma

Tôi nghĩ ý tưởng là đối với một hàm logistic, vì độ dốc có thể trở nên nhỏ tùy ý, bạn có thể có một độ dốc biến mất về mặt số bằng cách soạn một số hậu cần "không đáng kể" (vấn đề sau đó sẽ trở nên tồi tệ hơn đối với các kiến ​​trúc sâu hơn). Đối với chức năng đường nối, vì độ dốc là hằng số piecewise, một gradient hỗn hợp biến mất chỉ có thể xảy ra nếu có một thành phần thực sự là 0.
GeoMatt22

(Tôi không chắc liệu đây có phải là "mãi mãi" không? Nó có thể trở thành khác không sau khi được đào tạo thêm không? Từ các phụ thuộc vào các nút khác và / hoặc lô dữ liệu nhỏ hiện tại? (Đối với độ dốc dốc ngẫu nhiên)
GeoMatt22

Câu trả lời:


33

Đây là một bài báo giải thích vấn đề. Tôi đang trích dẫn một phần của nó để làm cho vấn đề rõ ràng.

Chức năng kích hoạt chỉnh lưu cho phép một mạng dễ dàng có được các biểu diễn thưa thớt. Ví dụ, sau khi khởi tạo đồng đều các trọng số, khoảng 50% giá trị đầu ra liên tục của các đơn vị ẩn là các số 0 thực và phần này có thể dễ dàng tăng lên với sự đều đặn gây ra thưa thớt.

Vì vậy, chức năng kích hoạt chỉnh lưu giới thiệu hiệu ứng thưa thớt trên mạng. Dưới đây là một số lợi thế của sự thưa thớt từ cùng một bài báo;

  • Thông tin gỡ rối . Một trong những mục tiêu được tuyên bố của các thuật toán học sâu (Bengio, 2009) là giải quyết các yếu tố giải thích các biến thể trong dữ liệu. Một đại diện dày đặc rất vướng mắc vì hầu như bất kỳ thay đổi nào trong đầu vào đều sửa đổi hầu hết các mục trong vectơ đại diện. Thay vào đó, nếu một đại diện vừa thưa thớt vừa mạnh mẽ cho những thay đổi đầu vào nhỏ, tập hợp các tính năng khác không hầu như luôn được bảo toàn một cách thô sơ bởi những thay đổi nhỏ của đầu vào.

  • Hiệu quả đại diện kích thước biến . Các đầu vào khác nhau có thể chứa lượng thông tin khác nhau và sẽ được biểu diễn thuận tiện hơn bằng cách sử dụng cấu trúc dữ liệu có kích thước thay đổi, thường thấy trong các biểu diễn thông tin của máy tính. Thay đổi số lượng tế bào thần kinh hoạt động cho phép một mô hình kiểm soát kích thước hiệu quả của biểu diễn cho một đầu vào nhất định và độ chính xác cần thiết.

  • Phân tách tuyến tính . Các biểu diễn thưa thớt cũng có nhiều khả năng phân tách tuyến tính hoặc dễ phân tách hơn với máy móc phi tuyến tính ít hơn, đơn giản vì thông tin được thể hiện trong một không gian nhiều chiều. Bên cạnh đó, điều này có thể phản ánh định dạng dữ liệu gốc. Trong các ứng dụng liên quan đến văn bản chẳng hạn, dữ liệu thô ban đầu rất thưa thớt.

  • Phân phối nhưng thưa thớt . Các đại diện phân tán dày đặc là các đại diện giàu nhất, có khả năng hiệu quả hơn theo cấp số nhân so với các đại diện thuần túy địa phương (Bengio, 2009). Hiệu quả của các đại diện thưa thớt vẫn lớn hơn theo cấp số nhân, với sức mạnh của số mũ là số lượng các tính năng khác không. Họ có thể đại diện cho một sự đánh đổi tốt đối với các tiêu chí trên.

Nó cũng trả lời câu hỏi bạn đã hỏi:

softplus(x)=log(1+ex)(Dugas et al., 2001), một phiên bản trơn tru của phi tuyến tính chỉnh lưu. Chúng tôi mất đi sự thưa thớt chính xác, nhưng có thể hy vọng sẽ được đào tạo dễ dàng hơn. Tuy nhiên, kết quả thực nghiệm có xu hướng mâu thuẫn với giả thuyết đó, cho thấy số không cứng thực sự có thể giúp đào tạo có giám sát. Chúng tôi đưa ra giả thuyết rằng các phi tuyến tính cứng không gây hại miễn là độ dốc có thể lan truyền dọc theo một số đường dẫn, nghĩa là một số đơn vị ẩn trong mỗi lớp là khác không Với tín dụng và đổ lỗi được gán cho các đơn vị ON này thay vì phân phối đồng đều hơn, chúng tôi đưa ra giả thuyết rằng tối ưu hóa dễ dàng hơn.

Bạn có thể đọc bài viết để biết thêm chi tiết.


18

Đây là lý do tại sao có thể nên sử dụng PReLU, ELU hoặc các kích hoạt giống như ReLU bị rò rỉ khác mà không chết xuống 0, nhưng rơi vào mức 0,1 * x khi x bị âm để tiếp tục học. Dường như đối với tôi trong một thời gian dài, ReLUs là lịch sử như sigmoid, mặc dù vì một số lý do, mọi người vẫn xuất bản các bài báo với những điều này. Tại sao? Tôi không biết.

Dmytro Mishkin và những người khác thực sự đã thử nghiệm một mạng với nhiều loại kích hoạt khác nhau, bạn nên xem những phát hiện của họ về hiệu suất của các chức năng kích hoạt khác nhau và các công cụ khác. Tuy nhiên, một số chức năng, như XOR, được học tốt hơn với ReLU đơn giản. Đừng nghĩ về bất kỳ thứ thần kinh nào theo thuật ngữ giáo điều, bởi vì mạng lưới thần kinh đang tiến hành rất nhiều. Không ai trên thế giới thực sự biết và hiểu họ đủ rõ để nói lên sự thật thiêng liêng. Không ai. Hãy thử mọi thứ, thực hiện những khám phá của riêng bạn. Lưu ý rằng việc sử dụng ReLU là một sự phát triển gần đây và trong nhiều thập kỷ, tất cả những người tiến sĩ khác nhau trong lĩnh vực này đã sử dụng các chức năng kích hoạt quá phức tạp mà bây giờ chúng ta chỉ có thể cười. Quá thường xuyên "biết" quá nhiều có thể khiến bạn có kết quả xấu. Điều quan trọng là phải hiểu rằng mạng lưới thần kinh không phải là một khoa học chính xác. Không có gì trong toán học nói rằng mạng lưới thần kinh sẽ thực sự hoạt động tốt như họ làm. Đó là heuristic. Và nó rất dễ uốn.

FYI thậm chí kích hoạt giá trị tuyệt đối đạt kết quả tốt đối với một số vấn đề, ví dụ như các vấn đề giống như XOR. Các chức năng kích hoạt khác nhau phù hợp hơn với các mục đích khác nhau. Tôi đã thử Cifar-10 với abs () và nó dường như hoạt động kém hơn. Mặc dù vậy, tôi không thể nói rằng "đó là một chức năng kích hoạt kém hơn để nhận dạng hình ảnh", vì tôi không chắc chắn, ví dụ, nếu việc khởi tạo trước của tôi là tối ưu cho nó, v.v ... Thực tế là nó đã học tương đối cũng làm tôi ngạc nhiên

Ngoài ra, trong cuộc sống thực, "các đạo hàm" mà bạn truyền cho backprop không nhất thiết phải khớp với các đạo hàm toán học thực tế.

Tôi thậm chí còn đi xa hơn để nói rằng chúng ta nên cấm gọi chúng là "phái sinh" và bắt đầu gọi chúng là một cái gì đó khác, ví dụ, error activation functionsđể không đóng tâm trí của chúng ta với khả năng mày mò với chúng. Ví dụ, bạn thực sự có thể sử dụng kích hoạt ReLU, nhưng cung cấp 0,1 hoặc một cái gì đó tương tự thay vì 0 làm đạo hàm cho x <0. Theo một cách nào đó, sau đó bạn có một ReLU đơn giản, nhưng với các tế bào thần kinh không thể "chết vì khả năng thích ứng". Tôi gọi nó là NecroRelu, vì đó là ReLU không thể chết. Và trong một số trường hợp (chắc chắn không phải trong hầu hết), hoạt động tốt hơn LeakyReLU đơn giản, thực sự có đạo hàm 0,1 tại x <0 và tốt hơn ReLU thông thường. Tôi không nghĩ rằng có quá nhiều người khác đã điều tra một chức năng như vậy, tuy nhiên, điều này hoặc một cái gì đó tương tự thực sự có thể là một chức năng kích hoạt tuyệt vời mà không ai coi là chỉ vì họ quá tập trung vào toán học.

Đối với những gì thường được sử dụng, đối với chức năng kích hoạt tanH (x), việc truyền 1 - x² thay vì 1 - tanH (x) ² là một đạo hàm để tính toán mọi thứ nhanh hơn.

Ngoài ra, hãy nhớ rằng ReLU không phải là tất cả "rõ ràng tốt hơn", ví dụ, TanH. TanH có lẽ có thể tốt hơn trong một số trường hợp. Chỉ là, có vẻ như, không phải trong nhận dạng trực quan. Mặc dù vậy, ELU, chẳng hạn, có một chút mềm mại sigmoid và nó là một trong những chức năng kích hoạt được biết đến nhiều nhất để nhận dạng hình ảnh tại thời điểm này. Tôi chưa thực sự cố gắng, nhưng tôi cá là người ta có thể đặt một số nhóm với các chức năng kích hoạt khác nhau trên cùng một cấp lớp thành một lợi thế. Bởi vì, logic khác nhau được mô tả tốt hơn với các chức năng kích hoạt khác nhau. Và đôi khi bạn có thể cần một số loại đánh giá.

Lưu ý rằng điều quan trọng là phải có một intialization tương ứng với loại chức năng kích hoạt của bạn. ReLUs bị rò rỉ cần các init khác mà ReLUs đơn giản, chẳng hạn.

EDIT: Trên thực tế, ReLU tiêu chuẩn dường như ít bị quá tải so với những thứ bị rò rỉ với kiến ​​trúc hiện đại. Ít nhất là trong nhận dạng hình ảnh. Có vẻ như nếu bạn đang sử dụng mạng có độ chính xác rất cao với tải thông số khổng lồ, có thể tốt hơn khi gắn bó với các tùy chọn ReLU đơn giản so với các tùy chọn rò rỉ. Nhưng, tất nhiên, tự mình kiểm tra tất cả những điều này. Có thể, một số thứ bị rò rỉ sẽ hoạt động tốt hơn nếu được cung cấp thường xuyên hơn.


Tôi quan tâm đến NecroReLU của bạn, nhưng không thể hiểu được những gì bạn đã viết khác với LeakyReLU. Bạn có thể làm rõ?
Tom Hale

Khác ở chỗ kích hoạt là ReLU, nhưng phái sinh là LReLU
Íhor Mé

@ ÍhorMé, như bạn đề cập về initialization that corresponds to a type of activation function one is usingmột NOTEtrong bài viết của bạn, bạn có thể vui lòng cung cấp đề xuất của bạn cho điều này trên đường cùng, tôi không hoàn toàn thuyết phục rằng việc sử dụng kích hoạt ReLu qua sigmoid / Tánh là một giải pháp cho biến mất / nổ vấn đề độ dốc .
anu

16

Đây là một lời giải thích heuristic:

  • Mỗi bản cập nhật gradient trong backprop bao gồm một số yếu tố nhân.
  • Bạn càng đi xa hơn về sự khởi đầu của mạng, càng nhiều yếu tố này được nhân lên với nhau để có được bản cập nhật gradient.
  • Nhiều trong số các yếu tố này là dẫn xuất của chức năng kích hoạt của các tế bào thần kinh - phần còn lại là trọng lượng, sai lệch, v.v.
  • Trong số các yếu tố này, những yếu tố quan trọng bằng trực giác là trọng lượng, độ lệch, v.v ... Các đạo hàm của hàm kích hoạt là một loại tham số điều chỉnh, được thiết kế để đưa độ dốc đi theo đúng hướng với vận tốc phù hợp.
  • Nếu bạn nhân một loạt các thuật ngữ nhỏ hơn 1, chúng sẽ có xu hướng về 0, bạn càng có nhiều thuật ngữ. Do đó biến mất độ dốc khi bạn nhận được thêm từ lớp đầu ra nếu bạn có các hàm kích hoạt có độ dốc <1.
  • Nếu bạn nhân một loạt các số hạng lớn hơn 1, chúng sẽ có xu hướng vô cùng khi bạn có nhiều hơn, do đó sẽ phát nổ gradient khi bạn tiếp tục từ lớp đầu ra nếu bạn có các hàm kích hoạt có độ dốc> 1.
  • Làm thế nào về việc nếu chúng ta có thể, bằng cách nào đó, kỳ diệu, có được các thuật ngữ này được đóng góp bởi đạo hàm của các hàm kích hoạt là 1. Điều này theo trực giác có nghĩa là tất cả các đóng góp cho các cập nhật gradient đến từ đầu vào cho vấn đề và mô hình - trọng số, đầu vào, thành kiến ​​- chứ không phải là một số yếu tố của chức năng kích hoạt được chọn.
  • RELU có độ dốc 1 khi đầu ra> 0 và khác 0.
  • Do đó, việc nhân một loạt các dẫn xuất RELU với nhau trong các phương trình backprop có đặc tính tốt là 1 hoặc 0 - bản cập nhật không là gì cả, hoặc đóng góp hoàn toàn từ các trọng số và thành kiến ​​khác.

Bạn có thể nghĩ rằng sẽ tốt hơn nếu có hàm tuyến tính, thay vì làm phẳng khi x <0. Ý tưởng ở đây là RELU tạo ra các mạng thưa thớt với số lượng liên kết hữu ích tương đối nhỏ, có tính hợp lý sinh học hơn, do đó mất một loạt các trọng lượng là thực sự hữu ích. Ngoài ra, việc mô phỏng các chức năng thú vị với mạng lưới thần kinh chỉ có thể với một số phi tuyến trong chức năng kích hoạt. Hàm kích hoạt tuyến tính dẫn đến đầu ra tuyến tính, điều này không thú vị chút nào.


giải thích tuyệt vời, bạn có thể giải thích rõ hơn về điểm thứ 6 Ngoài ra, bạn có thể vui lòng cung cấp đề xuất của mình cho vấn đề này trên cùng một dòng không, tôi không hoàn toàn tin rằng sử dụng kích hoạt ReLu trên sigmoid / tanH là một giải pháp cho vấn đề độ dốc biến mất / bùng nổ.
anu

1
Khởi tạo trọng lượng hợp lý cũng rất quan trọng; nhưng sự lựa chọn của chức năng kích hoạt cũng vậy. Như một ví dụ tầm thường, nếu tất cả các trọng số của bạn mặc định bằng 0 và bạn sử dụng RELU thì tất cả các kết quả đầu ra từ các nơ-ron của bạn sẽ bằng 0 và không có gì cả ... Các kỹ thuật khởi động một mình cũng không thể giải quyết hoàn toàn độ dốc biến mất / nổ, nhưng cả hai đều giúp ích. Không chắc chắn những gì bạn có nghĩa là xây dựng lại trên điểm 6, những gì không rõ ràng?
Tom Walker

1

Chúng ta hãy xem xét mối quan hệ lặp lại chính xác định sự lan truyền ngược của tín hiệu lỗi.

Wibiif

hii

si=Wi(hi1)+bi

hi=f(si)

δi

δi=Wi+1(δi+1f(si))

ff(si)=(1hi2)hi

f=Relu=max(0,x)ff=numpy.where(hi>0,1,0)

Phương trình này cũng cho thấy đặc điểm của vấn đề khác là kích hoạt lại - các nơ-ron chết: nếu một nơ-ron nhất định tình cờ được khởi tạo theo cách mà nó không kích hoạt bất kỳ đầu vào nào (kích hoạt của nó bằng 0), độ dốc của nó cũng bằng 0 và do đó nó sẽ không bao giờ được kích hoạt.

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.