kiến trúc perceptron (MLP) nhiều lớp: tiêu chí chọn số lớp ẩn và kích thước của lớp ẩn?


104

Nếu chúng ta có 10 eigenvector thì chúng ta có thể có 10 nút thần kinh trong lớp đầu vào, nếu chúng ta có 5 lớp đầu ra thì chúng ta có thể có 5 nút ở lớp đầu ra. các nút trong 1 lớp ẩn?



Câu trả lời:


216

có bao nhiêu lớp ẩn ?

một mô hình không có lớp ẩn sẽ giải quyết dữ liệu có thể phân tách tuyến tính . Vì vậy, trừ khi bạn đã biết dữ liệu của mình không thể phân tách tuyến tính, còn không thì việc xác minh điều này không có hại gì - tại sao lại sử dụng một mô hình phức tạp hơn nhiệm vụ yêu cầu? Nếu nó có thể phân tách tuyến tính thì một kỹ thuật đơn giản hơn sẽ hoạt động, nhưng Perceptron cũng sẽ thực hiện công việc.

Giả sử dữ liệu của bạn yêu cầu phân tách bằng kỹ thuật phi tuyến tính, thì hãy luôn bắt đầu với một lớp ẩn . Gần như chắc chắn đó là tất cả những gì bạn cần. Nếu dữ liệu của bạn có thể phân tách bằng MLP, thì MLP đó có thể chỉ cần một lớp ẩn duy nhất. Có lý do lý thuyết cho điều này, nhưng lý do của tôi hoàn toàn là theo kinh nghiệm: Nhiều vấn đề phân loại / hồi quy khó được giải quyết bằng cách sử dụng MLP một lớp ẩn, nhưng tôi không nhớ là đã gặp bất kỳ MLP nhiều lớp ẩn nào được sử dụng để lập mô hình dữ liệu thành công- - Cho dù trên bảng thông báo ML, Sách giáo khoa ML, bài báo học thuật, v.v. Chúng tồn tại, chắc chắn, nhưng các trường hợp chứng minh cho việc sử dụng chúng theo kinh nghiệm là khá hiếm.


Có bao nhiêu nút trong lớp ẩn?

Từ tài liệu học thuật MLP. kinh nghiệm của bản thân, v.v., tôi đã thu thập và thường dựa vào một số quy tắc ngón tay cái ( RoT ), và những quy tắc này tôi cũng nhận thấy là những hướng dẫn đáng tin cậy (tức là, hướng dẫn chính xác và ngay cả khi nó không đúng, nó thường rõ ràng phải làm gì tiếp theo):

RoT dựa trên việc cải thiện sự hội tụ:

Khi bạn bắt đầu xây dựng mô hình, hãy sai ở phía có nhiều nút hơn trong lớp ẩn.

Tại sao? Đầu tiên, một vài nút bổ sung trong lớp ẩn có khả năng không gây hại gì - MLP của bạn sẽ vẫn hội tụ. Mặt khác, quá ít nút trong lớp ẩn có thể ngăn cản sự hội tụ. Hãy nghĩ theo cách này, các nút bổ sung cung cấp một số dung lượng dư thừa - trọng số bổ sung để lưu trữ / giải phóng tín hiệu vào mạng trong quá trình lặp lại (đào tạo hoặc xây dựng mô hình). Thứ hai, nếu bạn bắt đầu với các nút bổ sung trong lớp ẩn của mình, thì thật dễ dàng để cắt bỏ chúng sau này (trong quá trình lặp lại). Điều này là phổ biến và có các kỹ thuật chẩn đoán để hỗ trợ bạn (ví dụ: Biểu đồ Hinton, chỉ là một mô tả trực quan của các ma trận trọng lượng, một 'bản đồ nhiệt' của các giá trị trọng lượng,).

RoT dựa trên kích thước của lớp đầu vào và kích thước của lớp đầu ra:

Một quy tắc chung là kích thước của lớp [ẩn] này nằm ở đâu đó giữa kích thước lớp đầu vào ... và kích thước lớp đầu ra ....

Để tính số nút ẩn, chúng ta sử dụng quy tắc chung là: (Số đầu vào + đầu ra) x 2/3

RoT dựa trên các thành phần chính:

Thông thường, chúng tôi chỉ định bao nhiêu nút ẩn làm thứ nguyên [thành phần chính] cần thiết để nắm bắt 70-90% phương sai của tập dữ liệu đầu vào .

Tuy nhiên, tác giả của NN FAQ gọi những Quy tắc này là "vô nghĩa" (theo nghĩa đen) bởi vì chúng: bỏ qua số lượng các trường hợp huấn luyện, nhiễu trong các mục tiêu (giá trị của các biến phản hồi) và độ phức tạp của không gian đặc trưng.

Theo quan điểm của anh ấy (và với tôi dường như anh ấy luôn biết mình đang nói gì), hãy chọn số lượng tế bào thần kinh trong lớp ẩn dựa trên việc MLP của bạn có bao gồm một số hình thức chính quy hóa hay dừng lại sớm .

Kỹ thuật hợp lệ duy nhất để tối ưu hóa số lượng tế bào thần kinh trong Lớp ẩn:

Trong quá trình xây dựng mô hình của bạn, hãy kiểm tra một cách ám ảnh; thử nghiệm sẽ tiết lộ các chữ ký của kiến ​​trúc mạng "không chính xác". Ví dụ: nếu bạn bắt đầu với MLP có một lớp ẩn bao gồm một số lượng nhỏ các nút (bạn sẽ tăng dần khi cần thiết, dựa trên kết quả thử nghiệm), lỗi đào tạo và tổng quát của bạn sẽ cao do thiên vị và trang bị thiếu.

Sau đó, tăng số lượng nút trong lớp ẩn, từng nút một, cho đến khi lỗi tổng quát bắt đầu tăng lên, lần này là do trang bị quá mức và phương sai cao.


Trong thực tế, tôi làm theo cách này:

lớp đầu vào : kích thước của vactor dữ liệu của tôi (số lượng tính năng trong mô hình của tôi) + 1 cho nút thiên vị và tất nhiên là không bao gồm biến phản hồi

lớp đầu ra : soley được xác định bởi mô hình của tôi: hồi quy (một nút) so với phân loại (số nút tương đương với số lớp, giả sử softmax)

lớp ẩn : để bắt đầu , một lớp ẩnvới số lượng nút bằng kích thước của lớp đầu vào. Kích thước "lý tưởng" có nhiều khả năng nhỏ hơn (tức là một số nút giữa số ở lớp đầu vào và số ở lớp đầu ra) hơn là lớn hơn - một lần nữa, đây chỉ là một quan sát thực nghiệm và số lượng lớn quan sát này là kinh nghiệm của riêng tôi. Nếu dự án biện minh cho thời gian bổ sung cần thiết, thì tôi bắt đầu với một lớp ẩn duy nhất bao gồm một số lượng nhỏ các nút, sau đó (như tôi đã giải thích ở trên) tôi thêm các nút vào Lớp ẩn, mỗi lần một nút, trong khi tính toán tổng quát lỗi, lỗi đào tạo, độ chệch và phương sai. Khi lỗi tổng quát hóa đã giảm xuống và ngay trước khi nó bắt đầu tăng trở lại, số lượng nút tại điểm đó là lựa chọn của tôi. Xem hình bên dưới.

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


1
Tôi muốn thêm một số kết quả liên quan đến RoT # 1: Trong SVMs thành công, bạn thực sự ánh xạ đầu vào của mình tới một không gian chiều cao hơn (nhiều nút ẩn hơn các nút trong lớp đầu vào theo cách nói của NN). Công việc của lớp đầu ra là lấy quyết định từ biểu diễn quá đầy đủ này. Có thể có một kết nối với Phép chiếu ngẫu nhiên. Bài báo xuất sắc của Adam Coates & Andrew Y. Ng (2011) thảo luận về các chủ đề liên quan.
Vladislavs Dovgalecs

Lời giải thích hay. Bất kỳ ý tưởng nào về cách tôi có thể vẽ một hình như trên khi sử dụng sklearn và MLPClassifier?
seralouk

1
@sera ý bạn là kiểu xkcd?
denfromufa

Về nguyên tắc, bạn có thể tự động hóa quá trình tối ưu hóa số lượng tế bào thần kinh trong lớp ẩn không? Ngoài ra, bạn có thể tự động tối ưu hóa số lượng lớp ẩn không?
Addison

2

Rất khó để chọn số lượng nơ-ron trong một lớp ẩn và chọn số lớp ẩn trong mạng nơ-ron của bạn.

Thông thường, đối với hầu hết các ứng dụng, một lớp ẩn là đủ. Ngoài ra, số lượng tế bào thần kinh trong lớp ẩn đó phải nằm giữa số lượng đầu vào (10 trong ví dụ của bạn) và số đầu ra (5 trong ví dụ của bạn).

Nhưng cách tốt nhất để chọn số lượng tế bào thần kinh và các lớp ẩn là thử nghiệm. Đào tạo một số mạng nơ-ron với số lượng lớp ẩn và nơ-ron ẩn khác nhau, đồng thời đo lường hiệu suất của các mạng đó bằng cách sử dụng xác thực chéo . Bạn có thể gắn bó với số mang lại mạng hoạt động tốt nhất.


1

Để tự động hóa việc lựa chọn số lượng lớp tốt nhất và số lượng tế bào thần kinh tốt nhất cho mỗi lớp, bạn có thể sử dụng tính năng tối ưu hóa di truyền .

Các phần quan trọng sẽ là:

  1. Nhiễm sắc thể : Vectơ xác định có bao nhiêu đơn vị trong mỗi lớp ẩn (ví dụ [20,5,1,0,0] có nghĩa là 20 đơn vị ở lớp ẩn đầu tiên, 5 ở lớp thứ hai, ..., thiếu lớp 4 và 5). Bạn có thể đặt giới hạn về số lớp tối đa để thử và số lượng đơn vị tối đa trong mỗi lớp. Bạn cũng nên đặt ra các hạn chế về cách các nhiễm sắc thể được tạo ra. Ví dụ: [10, 0, 3, ...] không nên được tạo, bởi vì bất kỳ đơn vị nào sau lớp bị thiếu ('3, ...') sẽ không liên quan và sẽ lãng phí chu kỳ đánh giá.
  2. Hàm Fitness : Một hàm trả về nghịch đảo của lỗi luyện tập thấp nhất trong tập hợp xác nhận chéo của mạng được xác định bởi một nhiễm sắc thể nhất định. Bạn cũng có thể bao gồm tổng số đơn vị hoặc thời gian tính toán nếu bạn muốn tìm "mạng nhỏ nhất / nhanh nhất nhưng chính xác nhất".

Bạn cũng có thể xem xét:

  • Cắt tỉa : Bắt đầu với một mạng lớn, sau đó giảm các lớp và các đơn vị ẩn, đồng thời theo dõi hiệu suất của bộ xác nhận chéo.
  • Đang phát triển : Bắt đầu với một mạng rất nhỏ, sau đó thêm các đơn vị và lớp, đồng thời theo dõi hiệu suất của bộ CV.

0

Gần đây có công trình lý thuyết trên https://arxiv.org/abs/1809.09953 này . Giả sử bạn sử dụng RELU MLP, tất cả các lớp ẩn đều có cùng số lượng nút và hàm mất mát và hàm true mà bạn đang tính gần đúng với mạng nơ-ron tuân theo một số đặc tính kỹ thuật (trong bài báo), bạn có thể chọn độ sâu của mình là đặt hàng $ \ log (n) $ và chiều rộng lớp ẩn của bạn theo thứ tự $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Đây $ n $ là kích thước mẫu của bạn, $ d $ là kích thước của vectơ đầu vào của bạn và $ \ beta $ là tham số độ mượt cho hàm thực của bạn. Vì $ \ beta $ chưa được biết nên có thể bạn sẽ muốn coi nó như một siêu tham số.

Làm điều này, bạn có thể đảm bảo rằng với xác suất hội tụ thành $ 1 $ dưới dạng hàm của kích thước mẫu, lỗi xấp xỉ của bạn chuyển thành $ 0 $ dưới dạng hàm của kích thước mẫu. Họ đưa ra tỷ lệ. Lưu ý rằng đây không được đảm bảo là kiến ​​trúc 'tốt nhất', nhưng ít nhất nó có thể cung cấp cho bạn một nơi tốt để bắt đầu. Hơn nữa, kinh nghiệm của riêng tôi cho thấy rằng những thứ như bỏ học vẫn có thể hữu ích trong thực 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.