paint-brush
Tại sao hàm chi phí bậc hai không hiệu quả trong đào tạo mạng lưới thần kinhtừ tác giả@varunnakra1
2,637 lượt đọc
2,637 lượt đọc

Tại sao hàm chi phí bậc hai không hiệu quả trong đào tạo mạng lưới thần kinh

từ tác giả Varun Nakra6m2024/06/03
Read on Terminal Reader

dài quá đọc không nổi

Một trong những câu hỏi phổ biến nhất được đặt ra trong các cuộc phỏng vấn kiến thức về deep learning là - “Tại sao chúng ta không thể sử dụng hàm chi phí bậc hai để huấn luyện Mạng nơ-ron?**” Chúng ta sẽ đi sâu vào câu trả lời cho câu hỏi đó. Sẽ có rất nhiều môn Toán liên quan nhưng không có gì điên rồ cả! và tôi sẽ giữ mọi thứ đơn giản nhưng chính xác.
featured image - Tại sao hàm chi phí bậc hai không hiệu quả trong đào tạo mạng lưới thần kinh
Varun Nakra HackerNoon profile picture
0-item

Một trong những câu hỏi phổ biến nhất được đặt ra trong các cuộc phỏng vấn kiến thức về deep learning là - “ Tại sao chúng ta không thể sử dụng hàm chi phí bậc hai để huấn luyện Mạng nơ-ron? ”. Trong bài viết này, chúng ta sẽ thảo luận về câu trả lời cho câu hỏi này. Sẽ có rất nhiều môn Toán liên quan nhưng không có gì điên rồ cả! Tôi sẽ giữ mọi thứ đơn giản và chính xác.


Hãy bắt đầu với việc xem xét kiến trúc chung của mạng nơ-ron


Kiến trúc chung của mạng lưới thần kinh

Kiến trúc mạng lưới thần kinh để phân loại nhị phân


Chúng ta có một loạt các đầu vào tạo thành một “lớp đầu vào”, một loạt các nơ-ron trong “lớp ẩn” và một nơ-ron tạo thành “lớp đầu ra” cho bài toán phân loại nhị phân. Đối với câu hỏi này, chúng tôi sẽ giả định rằng chúng tôi đang xử lý một bộ phân loại nhị phân, vì vậy chúng tôi chỉ có một giá trị đầu ra ngoài mạng.


Bây giờ, hãy nhìn vào hình sau, trong đó chúng tôi đã đánh dấu lớp đầu vào màu xanh lá cây, nơ-ron đầu ra màu đỏ và một nơ-ron của lớp ẩn màu cam. Từ tất cả các màu xanh lá cây đến màu cam, chúng ta thấy rằng tất cả các đầu vào đều được kết nối với nơ-ron màu cam. Nói cách khác, việc “kích hoạt” nơ-ron màu cam xảy ra bằng cách “tổng hợp” tất cả các nơ-ron màu xanh lá cây trong lớp đầu vào. Quá trình này được sao chép trên tất cả các nơ-ron trên tất cả các lớp cho đến khi chúng ta đạt được nơ-ron đầu ra màu đỏ cuối cùng.



Điều gì sẽ xảy ra nếu chúng ta thay thế nơ-ron màu cam bằng nơ-ron màu đỏ, tức là chúng ta loại bỏ lớp ẩn và kết nối trực tiếp nơ-ron màu đỏ với nơ-ron màu xanh lá cây?



Chúng ta sẽ nhận được những điều sau đây:

Đối với câu hỏi này, chúng tôi sẽ giả sử 'kiến trúc đơn giản' đã nói ở trên và kết quả cũng có thể được khái quát hóa thành kiến trúc hoàn chỉnh.


Bây giờ hãy giới thiệu một số môn Toán theo từng bước.


Những gì chúng ta thấy ở trên là phương trình “cập nhật trọng số” cơ bản cho mạng nơ-ron. Tôi đã loại bỏ các siêu tham số bổ sung như hệ số học và lấy mẫu phụ (lô tối thiểu), v.v. w_k là vectơ trọng số và trọng số là 'tham số' của mô hình mạng nơ-ron của chúng tôi. w_k bao gồm các trọng số riêng lẻ được tập hợp trong một vectơ cột. Các trọng số này được liên kết với đầu vào của mô hình (đó là các nơ-ron màu xanh lá cây trong kiến trúc của chúng ta). Chúng tôi có hàm chi phí C_i trong đó i = 1 đến n là số lượng phiên bản dữ liệu trong mẫu của chúng tôi. Hàm chi phí C là “lỗi” giữa đầu ra thực tế y và đầu ra từ mạng nơ-ron (nơ-ron đỏ). Mỗi phiên bản dữ liệu sẽ tạo ra một đầu ra dự đoán so với đầu ra thực tế, do đó, sẽ có chi phí hoặc lỗi cho mỗi phiên bản dữ liệu. Mục tiêu của mô hình là giảm thiểu trung bình hàm chi phí này trên toàn bộ tập dữ liệu. Và như chúng ta đã biết, bước giảm thiểu bao gồm việc lấy đạo hàm theo các tham số mô hình (trọng số). Chúng tôi thực hiện điều này bằng cách sử dụng đạo hàm riêng của vectơ w_k. Tất cả điều này có nghĩa là chi phí C sẽ là biểu thức/tập hợp các trọng số w_1 đến w_q và chúng tôi sẽ vi phân theo từng trọng số w và thu thập giá trị đó trong một vectơ. Đây được gọi là “vectơ gradient” âm. Nó được sử dụng để cập nhật vectơ trọng số từ lần lặp thứ k đến lần lặp thứ (k+1). Phương pháp này là giảm dần độ dốc ngẫu nhiên nhưng chúng tôi sẽ bỏ qua phương pháp đó trong bài viết này.


Tóm lại, mạng nơ-ron học bằng cách cập nhật các trọng số thông qua vectơ gradient âm tính trung bình trên tất cả các mẫu và được tính cho w_k. Điều này giúp chúng tôi chuyển sang giảm thiểu hàm chi phí và giúp mạng tìm hiểu và cải thiện độ chính xác của nó. Rõ ràng là nếu việc cập nhật trọng số không xảy ra do gradient âm đang tiến về 0 thì quá trình học đã dừng lại. Điều này không nhất thiết có nghĩa là chúng ta đã đạt đến mức tối thiểu! Bởi vì hàm chi phí của chúng ta rất phức tạp và chúng ta cần tìm mức tối thiểu trong không gian nhiều chiều. Do đó, có thể có nhiều cực tiểu cục bộ trong đó độ dốc bằng 0 và mạng ngừng học. Dù sao đi nữa, chúng ta không phải lo lắng về vấn đề này.


Chúng ta hãy xem biểu thức sau:


Biểu thức này định nghĩa z_i là tổng có trọng số của các đầu vào x_ji. Lưu ý rằng những đầu vào này là các nơ-ron màu xanh lá cây trong kiến trúc của chúng ta. Vì không có lớp ẩn, nên chúng tôi kết hợp các đầu vào x_ji và các trọng số w_j, đồng thời thêm thuật ngữ sai lệch để có được z_i, được biểu thị bằng các mũi tên kết nối từ nơ-ron màu xanh lá cây đến nơ-ron màu đỏ trong kiến trúc của chúng tôi. Vì chúng ta có q đầu vào nên chúng ta có x_j và w_j trong đó j = 1 đến q

Tuy nhiên, chúng ta không chuyển z_i cho nơron đỏ. Chúng tôi áp dụng “chức năng kích hoạt” cho nó. Chức năng kích hoạt này có thể khác nhau đối với các mạng thần kinh khác nhau. Với mục đích của bài toán này, chúng tôi giả sử hàm kích hoạt là “Sigmoid” hoặc “hậu cần”. Ở đây tôi sẽ giả định rằng người đọc nhận thức được chức năng này và tiếp tục đi sâu hơn.


Tiếp theo là tuyên bố vấn đề chính của chúng ta - Làm cách nào để xác định hàm Chi phí (C)? Người ta biết rằng đối với phân loại nhị phân, hàm chi phí là “Entropy chéo” nhưng câu hỏi ở đây là tại sao nó không thể là “Quadratic”.


Hãy xác định biểu thức của cả hai hàm chi phí:


Hàm chi phí bậc hai – Hàm chi phí Entropy chéo –


Mặc dù hàm chi phí bậc hai rất đơn giản (hãy nghĩ đến việc tối thiểu hóa bình phương tối thiểu giữa đầu ra thực tế y_i và đầu ra dự đoán a_i), chúng ta có thể đưa ra một số giải thích cho hàm chi phí entropy chéo. Điều này giống với khả năng ghi nhật ký âm trong các mô hình hồi quy của chúng tôi. Lưu ý rằng có một dấu âm bên ngoài dấu ngoặc, được sử dụng để giữ giá dương (vì a_i sẽ nằm trong khoảng từ 0 đến 1 - một đầu ra của sigmoid, do đó, số hạng bên trong dấu ngoặc sẽ luôn âm). Cũng lưu ý rằng khi a_i thực sự gần với y_i, chi phí sẽ thực sự gần bằng 0. Điều này là do, khi y_i = 1 và a_i ~ 1, ln(a_i) sẽ xấp xỉ 0. Tương tự, khi y_i= 0 và a_i ~ 0, ln(1-a_i) sẽ xấp xỉ 0. Do đó, hàm này giữ nguyên giá trị chi phí dương và tối thiểu khi mô hình dự đoán tốt. Tuy nhiên, điều tương tự cũng có thể nói về hàm chi phí bậc hai. Nhưng, chúng tôi không sử dụng nó. Tại sao? Đây là lời giải thích


Chúng ta quay lại phương trình cập nhật trọng số cơ bản mà chúng ta đã thấy trước đó và nhập hàm chi phí bậc hai vào đó. Chúng tôi nhận được những điều sau đây

Bây giờ để đơn giản, chúng ta sẽ chỉ xem xét một điểm dữ liệu, đó là i=1 và n=1. Và chúng tôi phân biệt một phần cho mỗi trọng số w_j. Chúng tôi nhận được những điều sau đây:

Nhớ lại rằng vì i = 1 nên ta có

Thay thế giá trị của z, chúng ta nhận được

Đó là vectơ gradient của chúng ta chịu trách nhiệm cập nhật các trọng số của mạng sẽ có đạo hàm của hàm sigmoid khi chúng ta sử dụng hàm chi phí bậc hai.


Bây giờ chúng ta hãy xem xét hành vi của đạo hàm của hàm sigmoid:


Từ biểu đồ trên, rõ ràng đạo hàm, biểu thị độ dốc của hàm sigmoid, tiến tới 0 ngay khi z đầu vào trở nên lớn! Điều đó có nghĩa là gì? Điều này có nghĩa là vectơ gradient sẽ bằng 0 khi đầu vào kích hoạt z lớn. Do đó, mạng sẽ ngừng học vì trọng số không được cập nhật. Hãy nhớ lại rằng điều này không có nghĩa là chúng ta đã đạt đến mức tối thiểu. Điều này có nghĩa là chúng ta bị mắc kẹt ở một điểm không mong muốn và trong không gian hàm có thể cách xa giá trị tối thiểu. Điều này được gọi là “học chậm lại”. Tuy nhiên, điều này KHÔNG xảy ra với hàm chi phí entropy chéo.


Chúng tôi thực hiện phép thay thế tương tự bằng cách sử dụng hàm chi phí entropy chéo và nhận được kết quả sau:

Thật thú vị khi lưu ý rằng thuật ngữ:

cũng xảy ra trong gradient đối với chi phí bậc hai. Tuy nhiên, có một thủ thuật mà chúng tôi sẽ sử dụng để đơn giản hóa nó. Độ dốc của hàm sigmoid có thể được biểu thị như sau

Chúng tôi thay thế nó vào biểu thức ban đầu của chúng tôi và nhận được những điều sau đây:

Đó là vectơ gradient của chúng tôi chịu trách nhiệm cập nhật các trọng số của mạng không có đạo hàm của hàm sigmoid khi chúng tôi sử dụng hàm chi phí entropy chéo. Do đó, việc học với hàm chi phí này không bị chậm lại.


Chúng ta đặt các gradient lại cạnh nhau để nhìn rõ hơn:

Điều này trả lời câu hỏi ban đầu của chúng tôi - chúng tôi không sử dụng hàm chi phí bậc hai vì nó dẫn đến việc học tập bị chậm lại.


Lưu ý rằng phân tích trên chỉ được thực hiện trên lớp đầu ra (của một nơron), tuy nhiên, nó cũng có thể được khái quát hóa cho mạng nơron nói chung!