gradient biến mất và gradient không
Có một vấn đề nổi tiếng vanishing gradienttrong quá BackPropagationtrình đào tạo Feedforward Neural Network (FNN)(ở đây chúng tôi không xem xét độ dốc biến mất của Mạng thần kinh tái phát).
Tôi không hiểu tại sao gradient biến mất không có nghĩa là gradient bằng không, cụ thể là giải pháp tối ưu mà chúng tôi muốn? Tôi đã thấy một số câu trả lời nói rằng gradient biến mất không chính xác là gradient bằng không, chỉ có nghĩa là việc cập nhật tham số rất chậm. Tuy nhiên, trong gradient tốt, chúng tôi không muốn đạt được gradient bằng 0 chính xác và chúng tôi sẽ dừng lại khi tham số không thay đổi trong$\epsilon,$ đó là trường hợp tương tự của gradient biến mất.
Vì vậy, bất cứ ai có thể cho tôi một câu trả lời rõ ràng?
Trả lời
Gradient tương đối thấp không phải lúc nào cũng có nghĩa là chúng ta đã đạt đến điểm quan trọng
Có một giá trị thấp trong một thành phần của gradient không nhất thiết có nghĩa là chúng ta đã gần đến điểm quan trọng cho tham số đó. Nó có nghĩa là chức năng sẽ thay đổi ít nếu chúng tôi thực hiện cập nhật chỉ dựa trên thành phần gradient đó.
Ví dụ, hãy nghĩ về chức năng $f(w_1,w_2) = 0.001w_1^2 + w_2^2\rightarrow$ đối với một điểm có tọa độ tương tự, chúng ta sẽ có một thành phần gradient $1000$ lớn hơn lần trong $w_2$ hướng hơn trong $w_1$ phương hướng.
Vì vậy, trong hàm đó (mà chúng ta có thể hiểu là hàm chi phí) nếu chúng ta khởi tạo các tham số của mình thành một giá trị tương tự, điều này sẽ dẫn đến việc cải thiện chậm hơn $w_1$ như chúng ta có thể thấy trong biểu đồ đường viền tiếp theo cho tỷ lệ học tập là $0.5$:
Như chúng ta có thể thấy, thậm chí còn xa mức tối thiểu ở $(0, 0)^T$, những cải tiến trên $w_1$ rất ít, vì vậy chúng tôi cần rất nhiều lần lặp lại để đạt đến mức tối thiểu $w_1$. Và nó đạt mức tối thiểu sau khi$1000$lặp lại! Vì vậy, nếu chúng ta đã khởi tạo thuật toán với một điểm nhỏ hơn thì nó sẽ không đạt đến mức tối thiểu.
Vì vậy, bây giờ chúng ta hiểu rằng ngay cả khi chúng ta có giá trị thấp của gradient, các tham số của chúng ta không nhất thiết phải gần với giá trị đạt đến mức tối thiểu (hoặc một điểm tới hạn nói chung) của hàm chi phí. Ngược lại, họ có thể thấy quá trình học tập của mình bị chậm lại nghiêm trọng .
Trong thực tế, chúng ta có thể tránh hành vi không mong muốn này bằng cách sử dụng một số sửa đổi trên phương pháp giảm độ dốc. Ví dụ, hãy xem Adagrad . Với phương pháp này, các thành phần của gradient được chuẩn hóa dựa trên các giá trị hiện tại và trước đó của độ lớn gradient tại mỗi hướng. Qua đó chúng ta có một tỷ lệ học cụ thể cho từng chiều.
Lập luận với sự lan truyền ngược bằng NN đơn giản
Để xem tại sao các thành phần gradient nhỏ hơn này cũng có thể xảy ra trong mạng nơ-ron, chúng ta có thể sử dụng NN đơn giản chỉ bao gồm một nơ-ron trên mỗi lớp, giống như lớp tiếp theo:
Như chúng ta đã biết, phần tử của gradient được cho bởi đạo hàm của hàm chi phí, $C$, liên quan đến trọng lượng $w^l$ của lớp $l$, trong một NN được kết nối đầy đủ được cho bởi thuật ngữ bên trái: $$\frac{\partial C}{\partial w^l}= \delta^l (a^{l-1})^T \,\,\,\,\,\,\,\,\xrightarrow[]{\text{in our simple NN}}\,\,\,\,\,\,\,\, \frac{\partial C}{\partial w^l}=\delta^l a^{l-1}$$
Ở đâu $\delta^l$ là thuật ngữ "lỗi" ($\partial C/\partial z^l$), và $a^{l-1}$ đại diện cho vectơ kích hoạt các tế bào thần kinh từ lớp trước ($l-1$). Lưu ý rằng trong NN đơn giản được trình bày ở trên, chúng ta không cần chuyển đổi$a^{l-1}$ vì nó là một đại lượng vô hướng (một tế bào thần kinh trên mỗi lớp $\rightarrow$ một lần kích hoạt cho mỗi lớp).
Theo mẹo, chúng tôi có thể dễ dàng tính toán thuật ngữ "lỗi" của lớp cuối cùng ($\delta^L$), Nhưng chúng tôi không biết làm thế nào để tính toán nó cho các lớp trước nên chúng tôi tận dụng lan truyền ngược :
$$\delta^l = \left((w^{l+1})^T\,\,\delta^{l+1}\right)\odot g(z^l) \,\,\,\,\,\,\,\,\xrightarrow[]{\text{in our simple NN}}\,\,\,\,\,\,\,\, \delta^l=w^{l+1} \,g(z^l) \,\,\delta^{l+1} $$
Ở đâu $g(z^l)$ đại diện cho chức năng kích hoạt của tế bào thần kinh cho trước thuật ngữ $z^l$.
Vì vậy, đối với bất kỳ lớp nào $l$, thuật ngữ như thế nào $\partial C/ \partial w^l$tính toán ?. Sử dụng lý luận trước đây cho NN đơn giản, bây giờ chúng ta biết rằng:
$$ \begin{align} \delta^{l} &= w^{l+1} \,g(z^{l}) \,\,\color{blue}{\delta^{l+1}}\\ \\ & = w^{l+1} \,g(z^{l}) \,\,\color{blue}{w^{l+2} \,g(z^{l+1}) \,\,\delta^{l+2}}\\ \\ &= w^{l+1}\color{blue}{w^{l+2}...w^{L}}\,\,g(z^{l})\color{blue}{g(z^{l+1})...g(z^{L})\,\,\delta^L} \end{align} $$ Trong đó các điều khoản màu xanh lam tương đương với $\delta^{l+1}$.
Như chúng ta đã thấy trước đó, thuật ngữ này $\delta^l$ nhân với sự kích hoạt của tế bào thần kinh từ lớp trước $a^{l-1}$, mang lại cho chúng tôi mong muốn của chúng tôi $\partial C/\partial w^l$:
$$ \frac{\partial C}{\partial w^l} = \delta^{l}a^{l-1} = w^{l+1}\color{blue}{w^{l+2}...w^{L}}\,\,g(z^{l})\color{blue}{g(z^{l+1})...g(z^{L})\,\,\delta^L} \,\,a^{l-1}$$
Vì vậy, bây giờ chúng ta có thể thấy rõ ràng rằng các cập nhật được thực hiện trên trọng lượng $w^l$ phụ thuộc trực tiếp vào giá trị của tất cả các trọng lượng và kích hoạt của các lớp tiếp theo.
Điều này có nghĩa là, đối với bất kỳ giá trị nào của$w^l$ (nó có thể còn rất xa so với mức tối ưu như trong tình huống được vẽ ở người ăn xin), thành phần của gradient có thể có xu hướng bằng không nếu bất kỳ trọng số hoặc kích hoạt nào, $g(z)$(hoặc sự kết hợp của chúng) của các lớp tiếp theo có xu hướng bằng không. Hiệu ứng không mong muốn này, như bạn đã nói trong câu hỏi, được gọi là gradient biến mất .
Bây giờ chúng tôi hiểu rằng ngay cả khi một trọng lượng thể hiện giá trị $\partial C/\partial w^l$gần bằng không, điều này không có nghĩa là chúng ta đã đạt đến điểm quan trọng cho trọng lượng đó. Hơn nữa, việc học các thông số này sẽ chậm lại đáng kể vì các cập nhật của chúng tỷ lệ thuận với thành phần tương ứng của gradient. Vì vậy, họ có thể bị mắc kẹt trong một giá trị xa mức tối thiểu!
Cuối cùng lưu ý rằng hiệu ứng không mong muốn này có thể trở nên quan trọng hơn khi số lượng các lớp tiếp theo tăng lên.