Có một phương pháp tiêu chuẩn và được chấp nhận để chọn số lượng lớp và số lượng nút trong mỗi lớp, trong mạng thần kinh chuyển tiếp nguồn cấp dữ liệu không? Tôi quan tâm đến các cách tự động xây dựng mạng lưới thần kinh.
Có một phương pháp tiêu chuẩn và được chấp nhận để chọn số lượng lớp và số lượng nút trong mỗi lớp, trong mạng thần kinh chuyển tiếp nguồn cấp dữ liệu không? Tôi quan tâm đến các cách tự động xây dựng mạng lưới thần kinh.
Câu trả lời:
Tôi nhận ra câu hỏi này đã được trả lời, nhưng tôi không nghĩ câu trả lời còn tồn tại thực sự thu hút câu hỏi ngoài việc chỉ ra một liên kết thường liên quan đến vấn đề của câu hỏi. Cụ thể, liên kết mô tả một kỹ thuật cho cấu hình mạng lập trình, nhưng đó không phải là " phương pháp chuẩn và được chấp nhận " cho cấu hình mạng.
Bằng cách tuân theo một tập hợp nhỏ các quy tắc rõ ràng, người ta có thể lập trình một kiến trúc mạng có thẩm quyền (nghĩa là số lượng và loại lớp tế bào thần kinh và số lượng tế bào thần kinh bao gồm mỗi lớp). Theo lược đồ này, nó sẽ cung cấp cho bạn một kiến trúc có thẩm quyền nhưng có lẽ không phải là một kiến trúc tối ưu.
Nhưng một khi mạng này được khởi tạo, bạn có thể điều chỉnh lại cấu hình trong quá trình đào tạo bằng một số thuật toán phụ trợ; một họ trong số này hoạt động bằng cách cắt tỉa các nút dựa trên các giá trị (nhỏ) của vectơ trọng lượng sau một số kỷ nguyên đào tạo nhất định - nói cách khác, loại bỏ các nút không cần thiết / dự phòng (nhiều hơn về điều này dưới đây).
Vì vậy, mỗi NN có ba loại lớp: đầu vào , ẩn và đầu ra .
Do đó, tạo kiến trúc NN có nghĩa là đưa ra các giá trị cho số lớp của từng loại và số nút trong mỗi lớp này.
Lớp đầu vào
Đơn giản - mỗi NN có chính xác một trong số họ - không có ngoại lệ mà tôi biết.
Đối với số lượng tế bào thần kinh bao gồm lớp này, tham số này được xác định hoàn toàn và duy nhất một khi bạn biết hình dạng của dữ liệu đào tạo của mình. Cụ thể, số lượng tế bào thần kinh bao gồm lớp đó bằng với số lượng tính năng (cột) trong dữ liệu của bạn . Một số cấu hình NN thêm một nút bổ sung cho thuật ngữ sai lệch.
Lớp đầu ra
Giống như lớp Input, mỗi NN có chính xác một lớp đầu ra. Xác định kích thước của nó (số lượng tế bào thần kinh) là đơn giản; nó hoàn toàn được xác định bởi cấu hình mô hình đã chọn.
Có phải NN của bạn đang chạy ở Chế độ máy hoặc Chế độ hồi quy (quy ước ML sử dụng thuật ngữ cũng được sử dụng trong thống kê nhưng việc gán một ý nghĩa khác cho nó rất khó hiểu). Chế độ máy: trả về nhãn lớp (ví dụ: "Tài khoản cao cấp" / "Tài khoản cơ bản"). Chế độ hồi quy trả về một giá trị (ví dụ: giá).
Nếu NN là một biến hồi quy, thì lớp đầu ra có một nút duy nhất.
Nếu NN là một bộ phân loại, thì nó cũng có một nút trừ khi sử dụng softmax trong trường hợp lớp đầu ra có một nút trên mỗi nhãn lớp trong mô hình của bạn.
Các lớp ẩn
Vì vậy, một vài quy tắc đặt số lượng lớp và kích thước (nơ-ron / lớp) cho cả lớp đầu vào và đầu ra. Điều đó để lại các lớp ẩn.
Có bao nhiêu lớp ẩn? Chà, nếu dữ liệu của bạn có thể phân tách tuyến tính (mà bạn thường biết khi bạn bắt đầu mã hóa NN) thì bạn không cần bất kỳ lớp ẩn nào cả. Tất nhiên, bạn cũng không cần NN để giải quyết dữ liệu của mình, nhưng nó vẫn sẽ thực hiện công việc.
Ngoài ra, như bạn có thể biết, có một núi bình luận về câu hỏi về cấu hình lớp ẩn trong NN (xem Câu hỏi thường gặp về NN cực kỳ kỹ lưỡng và sâu sắc để có bản tóm tắt xuất sắc về bài bình luận đó). Một vấn đề trong chủ đề này có sự đồng thuận là sự khác biệt về hiệu suất so với việc thêm các lớp ẩn bổ sung: các tình huống trong đó hiệu suất được cải thiện với lớp ẩn thứ hai (hoặc thứ ba, v.v.) là rất ít. Một lớp ẩn là đủ cho phần lớn các vấn đề.
Vậy kích thước của lớp ẩn - có bao nhiêu nơ-ron? Có một số quy tắc xuất phát theo kinh nghiệm, trong số này, thường được dựa vào nhất là " kích thước tối ưu của lớp ẩn thường nằm giữa kích thước của đầu vào và kích thước của các lớp đầu ra ". Jeff Heaton, tác giả của Giới thiệu về Mạng nơ-ron trong Java cung cấp thêm một số.
Tóm lại, đối với hầu hết các vấn đề, người ta có thể có được hiệu năng tốt (thậm chí không có bước tối ưu hóa thứ hai) bằng cách đặt cấu hình lớp ẩn chỉ bằng hai quy tắc: (i) số lớp ẩn bằng một; và (ii) số lượng tế bào thần kinh trong lớp đó là giá trị trung bình của các tế bào thần kinh trong các lớp đầu vào và đầu ra.
Tối ưu hóa cấu hình mạng
Cắt tỉamô tả một tập hợp các kỹ thuật để cắt giảm kích thước mạng (bởi các nút không phải lớp) để cải thiện hiệu suất tính toán và đôi khi hiệu suất phân giải. Ý chính của các kỹ thuật này là loại bỏ các nút khỏi mạng trong quá trình đào tạo bằng cách xác định các nút đó, nếu loại bỏ khỏi mạng, sẽ không ảnh hưởng đáng kể đến hiệu suất mạng (nghĩa là độ phân giải của dữ liệu). . bị loại bỏ trong quá trình cắt tỉa.) Rõ ràng, nếu bạn sử dụng thuật toán cắt tỉa trong quá trình đào tạo thì hãy bắt đầu với một cấu hình mạng có nhiều khả năng có các nút thừa (nghĩa là 'có thể cắt tỉa') - nói cách khác,
Nói cách khác, bằng cách áp dụng thuật toán cắt tỉa vào mạng của bạn trong quá trình đào tạo, bạn có thể tiếp cận cấu hình mạng tối ưu; cho dù bạn có thể làm điều đó trong một "phía trước" (chẳng hạn như thuật toán dựa trên thuật toán di truyền) tôi không biết, mặc dù tôi biết rằng bây giờ, tối ưu hóa hai bước này là phổ biến hơn.
@ doug 'câu trả lời đã làm việc cho tôi. Có một quy tắc bổ sung giúp giải quyết các vấn đề học tập có giám sát. Bạn thường có thể ngăn chặn sự phù hợp quá mức nếu bạn giữ số lượng tế bào thần kinh dưới đây:
Đối với quy trình tự động, bạn bắt đầu với alpha 2 (gấp đôi mức độ tự do trong dữ liệu đào tạo của bạn so với mô hình của bạn) và làm việc theo cách của bạn lên đến 10 nếu lỗi (mất) cho tập dữ liệu đào tạo của bạn nhỏ hơn đáng kể so với tập dữ liệu thử nghiệm của bạn.
N_h
(số lượng tế bào thần kinh ẩn trung bình trên mỗi lớp) cho giải pháp này N_s = (N_i + N_o) * N_h ^ N_hidden_layers
. Nhưng tôi vẫn không sử dụng công thức này. Nó chỉ dành cho các vấn đề rất cơ bản (vấn đề về đồ chơi) khi bạn không có kế hoạch thực hiện bất kỳ phương pháp tiếp cận chính quy nào khác.
Từ Giới thiệu về Mạng nơ-ron cho Java (ấn bản thứ hai) của Jeff Heaton - xem trước có sẵn miễn phí tại Google Sách và trước đây tại trang web của tác giả :
Số lớp ẩn
Thực sự có hai quyết định phải được đưa ra liên quan đến các lớp ẩn: có bao nhiêu lớp ẩn thực sự có trong mạng lưới thần kinh và có bao nhiêu tế bào thần kinh trong mỗi lớp này. Trước tiên chúng ta sẽ kiểm tra cách xác định số lượng các lớp ẩn để sử dụng với mạng thần kinh.
Các vấn đề đòi hỏi hai lớp ẩn hiếm khi gặp phải. Tuy nhiên, mạng lưới thần kinh với hai lớp ẩn có thể biểu diễn các hàm với bất kỳ loại hình dạng nào. Hiện tại không có lý do lý thuyết để sử dụng các mạng thần kinh với hơn hai lớp ẩn. Trong thực tế, đối với nhiều vấn đề thực tế, không có lý do để sử dụng nhiều hơn một lớp ẩn. Bảng 5.1 tóm tắt các khả năng của kiến trúc mạng thần kinh với các lớp ẩn khác nhau.
Bảng 5.1: Xác định số lượng các lớp ẩn
| Số lớp ẩn | Kết quả | 0 - Chỉ có khả năng đại diện cho các chức năng hoặc quyết định phân tách tuyến tính. 1 - Có thể xấp xỉ bất kỳ chức năng nào có chứa ánh xạ liên tục từ không gian hữu hạn này sang không gian hữu hạn khác. 2 - Có thể biểu thị một ranh giới quyết định tùy ý đến độ chính xác tùy ý với các chức năng kích hoạt hợp lý và có thể xấp xỉ bất kỳ trơn tru ánh xạ tới bất kỳ độ chính xác.Quyết định số lượng các lớp tế bào thần kinh ẩn chỉ là một phần nhỏ của vấn đề. Bạn cũng phải xác định có bao nhiêu tế bào thần kinh trong mỗi lớp ẩn này. Quá trình này được đề cập trong phần tiếp theo.
Số lượng tế bào thần kinh trong các lớp ẩn
Quyết định số lượng tế bào thần kinh trong các lớp ẩn là một phần rất quan trọng trong việc quyết định kiến trúc mạng thần kinh tổng thể của bạn. Mặc dù các lớp này không tương tác trực tiếp với môi trường bên ngoài, nhưng chúng có ảnh hưởng rất lớn đến đầu ra cuối cùng. Cả số lượng các lớp ẩn và số lượng tế bào thần kinh trong mỗi lớp ẩn này phải được xem xét cẩn thận.
Sử dụng quá ít tế bào thần kinh trong các lớp ẩn sẽ dẫn đến một thứ gọi là thiếu sáng. Sự thiếu hụt xảy ra khi có quá ít tế bào thần kinh trong các lớp ẩn để phát hiện đầy đủ các tín hiệu trong một tập dữ liệu phức tạp.
Sử dụng quá nhiều tế bào thần kinh trong các lớp ẩn có thể dẫn đến một số vấn đề. Đầu tiên, quá nhiều tế bào thần kinh trong các lớp ẩn có thể dẫn đến quá mức. Quá mức xảy ra khi mạng nơ-ron có khả năng xử lý thông tin lớn đến mức lượng thông tin hạn chế trong tập huấn luyện không đủ để huấn luyện tất cả các nơ-ron trong các lớp ẩn. Một vấn đề thứ hai có thể xảy ra ngay cả khi dữ liệu đào tạo là đủ. Một số lượng lớn tế bào thần kinh trong các lớp ẩn có thể làm tăng thời gian cần thiết để đào tạo mạng. Lượng thời gian đào tạo có thể tăng đến mức không thể đào tạo đầy đủ mạng lưới thần kinh. Rõ ràng, một số thỏa hiệp phải đạt được giữa quá nhiều và quá ít tế bào thần kinh trong các lớp ẩn.
Có nhiều phương pháp quy tắc để xác định số lượng tế bào thần kinh chính xác được sử dụng trong các lớp ẩn, chẳng hạn như sau:
- Số lượng tế bào thần kinh ẩn phải nằm giữa kích thước của lớp đầu vào và kích thước của lớp đầu ra.
- Số lượng tế bào thần kinh ẩn phải bằng 2/3 kích thước của lớp đầu vào, cộng với kích thước của lớp đầu ra.
- Số lượng tế bào thần kinh ẩn phải nhỏ hơn hai lần kích thước của lớp đầu vào.
Ba quy tắc này cung cấp một điểm khởi đầu để bạn xem xét. Cuối cùng, việc lựa chọn một kiến trúc cho mạng thần kinh của bạn sẽ đi vào thử nghiệm và lỗi. Nhưng chính xác có nghĩa là gì bởi thử nghiệm và lỗi? Bạn không muốn bắt đầu ném số lớp và tế bào thần kinh ngẫu nhiên vào mạng của mình. Làm như vậy sẽ rất tốn thời gian. Chương 8, Cắt tỉa một mạng nơ-ron thần kinh sẽ khám phá nhiều cách khác nhau để xác định cấu trúc tối ưu cho mạng thần kinh.
Tôi cũng thích đoạn trích sau đây từ một câu trả lời tôi tìm thấy tại Researchgate.net , nó truyền tải rất nhiều chỉ trong vài từ:
Steffen B Petersen · Đại học Aalborg
[...]
Để đảm bảo khả năng tổng quát hóa của mạng, số lượng nút phải được giữ ở mức thấp nhất có thể. Nếu bạn có quá nhiều nút, mạng của bạn sẽ trở thành ngân hàng bộ nhớ có thể gọi bộ huấn luyện trở nên hoàn hảo, nhưng không hoạt động tốt trên các mẫu không phải là một phần của tập huấn luyện.
Hiện tại tôi đang thực hiện một nghiên cứu thực nghiệm về vấn đề này (phê duyệt một thế kỷ mô phỏng của bộ xử lý trên cơ sở HPC của chúng tôi!). Lời khuyên của tôi là sử dụng mạng "lớn" và chính quy hóa, nếu bạn sử dụng chính quy thì kiến trúc mạng trở nên ít quan trọng hơn (miễn là nó đủ lớn để thể hiện chức năng cơ bản mà chúng ta muốn nắm bắt), nhưng bạn cần điều chỉnh chính quy tham số đúng.
Một trong những vấn đề với lựa chọn kiến trúc là nó là một điều khiển rời rạc, thay vì liên tục, kiểm soát độ phức tạp của mô hình, và do đó có thể là một công cụ cùn, đặc biệt là khi độ phức tạp lý tưởng thấp.
Tuy nhiên, đây là tất cả các định lý "không ăn trưa miễn phí", trong khi hầu hết các trường hợp chính quy có hiệu quả, sẽ luôn có trường hợp lựa chọn kiến trúc hoạt động tốt hơn và cách duy nhất để tìm hiểu xem điều đó có đúng với vấn đề trong tay không là thử cả hai cách tiếp cận và xác nhận chéo.
Nếu tôi xây dựng một công cụ xây dựng mạng nơ-ron tự động, tôi sẽ sử dụng phương pháp Bayesian dựa trên lấy mẫu Hybrid Monte Carlo (HMC) của Radford Neal, và sử dụng một mạng lớn và tích hợp trên các trọng số thay vì tối ưu hóa các trọng số của một mạng. Tuy nhiên, nó đắt tiền về mặt tính toán và một chút "nghệ thuật đen", nhưng kết quả mà giáo sư Neal đạt được cho thấy nó đáng giá!
Theo tôi biết, không có cách nào để tự động chọn số lượng lớp và tế bào thần kinh trong mỗi lớp. Nhưng có những mạng có thể tự động xây dựng cấu trúc liên kết của chúng, như EANN (Mạng thần kinh nhân tạo tiến hóa, sử dụng thuật toán di truyền để phát triển cấu trúc liên kết).
Có một số cách tiếp cận, một cách ít nhiều hiện đại dường như cho kết quả tốt là NEAT (Neuro Evolution of Augmented Topology) .
Các cách tự động để xây dựng mạng lưới thần kinh bằng cách sử dụng tìm kiếm siêu tham số toàn cầu:
Các lớp đầu vào và đầu ra có kích thước cố định.
Điều gì có thể thay đổi:
Nhiều phương pháp có thể được sử dụng cho vấn đề tối ưu hóa riêng biệt này, với mạng không có lỗi mẫu là hàm chi phí.
Xin lỗi tôi không thể đăng bình luận vì vậy xin vui lòng chịu đựng với tôi. Dù sao, tôi đã va vào chủ đề thảo luận này khiến tôi nhớ đến một bài báo mà tôi đã thấy gần đây. Tôi nghĩ rằng nó có thể được quan tâm đến những người tham gia ở đây:
AdaNet: Học tập cấu trúc thích ứng của mạng nơ ron nhân tạo
Corinna Cortes, Xavier Gonzalvo, Vitaly Kuznetsov, Mehryar Mohri, Scott Yang; Kỷ yếu hội thảo quốc tế lần thứ 34 về học máy, PMLR 70: 874-883, 2017.
Tóm tắt Chúng tôi trình bày một khung mới để phân tích và tìm hiểu các mạng lưới thần kinh nhân tạo. Cách tiếp cận của chúng tôi đồng thời và thích nghi tìm hiểu cả cấu trúc của mạng cũng như trọng lượng của nó. Phương pháp này dựa trên và kèm theo các đảm bảo học tập lý thuyết phụ thuộc dữ liệu mạnh mẽ, do đó kiến trúc mạng cuối cùng có thể thích nghi với sự phức tạp của bất kỳ vấn đề nào.
Tôi đã liệt kê nhiều cách học cấu trúc liên kết trong luận án thạc sĩ, chương 3 . Các loại lớn là:
Tôi muốn đề xuất một phương pháp ít phổ biến hơn nhưng siêu hiệu quả .
Về cơ bản, bạn có thể tận dụng một tập hợp các thuật toán gọi là "thuật toán di truyền" để thử một tập hợp con nhỏ của các tùy chọn tiềm năng (số lớp và nút ngẫu nhiên trên mỗi lớp). Sau đó, nó coi quần thể các lựa chọn này là "cha mẹ" tạo ra con cái bằng cách kết hợp / biến đổi một hoặc nhiều bố mẹ giống như các sinh vật tiến hóa. Những đứa trẻ tốt nhất và một số đứa trẻ ok ngẫu nhiên được giữ trong mỗi thế hệ và qua nhiều thế hệ, đứa trẻ khỏe mạnh nhất vẫn sống sót.
Đối với ~ 100 hoặc ít hơn các tham số (chẳng hạn như lựa chọn số lớp, loại lớp và số lượng tế bào thần kinh trên mỗi lớp), phương pháp này là siêu hiệu quả. Sử dụng nó bằng cách tạo ra một số kiến trúc mạng tiềm năng cho mỗi thế hệ và đào tạo chúng một phần cho đến khi có thể ước tính được đường cong học tập (các đợt nhỏ 100-10k thường phụ thuộc vào nhiều tham số). Sau một vài thế hệ, bạn có thể muốn xem xét điểm bắt đầu đào tạo và xác nhận có tỷ lệ lỗi khác nhau đáng kể (quá mức) là chức năng mục tiêu của bạn để chọn trẻ em. Có thể là một ý tưởng tốt để sử dụng một tập hợp con rất nhỏ của dữ liệu của bạn (10-20%) cho đến khi bạn chọn một mô hình cuối cùng để đi đến kết luận nhanh hơn. Ngoài ra, sử dụng một hạt giống để khởi tạo mạng của bạn để so sánh đúng kết quả.
10-50 thế hệ sẽ mang lại kết quả tuyệt vời cho một mạng có kích thước khá.
Số lớp ẩn và những gì họ có thể đạt được:
0 - Chỉ có khả năng đại diện cho các chức năng hoặc quyết định phân tách tuyến tính.
1 - Có thể xấp xỉ bất kỳ chức năng nào có chứa ánh xạ liên tục từ không gian hữu hạn này sang không gian hữu hạn khác.
2 - Có thể biểu thị một ranh giới quyết định tùy ý đến độ chính xác tùy ý với các hàm kích hoạt hợp lý và có thể xấp xỉ bất kỳ ánh xạ trơn tru nào với độ chính xác.
Hơn 2 - Các lớp bổ sung có thể học các biểu diễn phức tạp (loại kỹ thuật tính năng tự động) cho các lớp lớp.