11

Thuật toán di truyền là cách hiệu quả nhất để tối ưu hóa số lượng nút ẩn và lượng đào tạo được thực hiện trên mạng thần kinh nhân tạo?Tối ưu hóa mạng neural w/Thuật toán di truyền

Tôi đang mã hóa mạng nơron bằng NNToolbox trong Matlab. Tôi mở cho bất kỳ đề xuất nào khác về kỹ thuật tối ưu hóa, nhưng tôi quen thuộc nhất với GA.

Trả lời

11

Thực tế, có nhiều thứ bạn có thể tối ưu hóa bằng GA về NN. Bạn có thể tối ưu hóa cấu trúc (số lượng nút, lớp, chức năng kích hoạt, v.v.). Bạn cũng có thể đào tạo bằng GA, điều đó có nghĩa là đặt trọng số.

Thuật toán di truyền sẽ không bao giờ hiệu quả nhất, nhưng chúng thường được sử dụng khi bạn có ít đầu mối về số lượng cần sử dụng.

Đối với đào tạo, bạn có thể sử dụng các thuật toán khác bao gồm lan truyền ngược, nelder-mead vv ..

Bạn nói rằng bạn muốn tối ưu hóa số ẩn nút, cho điều này, thuật toán di truyền có thể là đủ, mặc dù xa "tối ưu". Không gian bạn đang tìm kiếm có lẽ quá nhỏ để sử dụng các thuật toán di truyền, nhưng chúng vẫn có thể hoạt động và afaik, chúng đã được triển khai trong MATLAB, do đó không có vấn đề gì.

Ý của bạn là gì bằng cách tối ưu hóa lượng đào tạo đã hoàn thành? Nếu bạn có nghĩa là số lượng kỷ nguyên, thì tốt thôi, chỉ cần nhớ rằng đào tạo là bằng cách nào đó phụ thuộc vào trọng lượng bắt đầu và chúng thường là ngẫu nhiên, vì vậy chức năng thể dục được sử dụng cho GA sẽ không thực sự là một chức năng.

+0

cảm ơn bạn. đây là thông tin chính xác mà tôi đang tìm kiếm. – ServAce85

+0

Tôi muốn mã hóa nó trong C/C++, sau đó bật 1000 máy chủ Amazon EC2 trong vài giờ. –

+0

Lợi ích của việc đào tạo ANN bằng GA chỉ sử dụng GP là gì? ANN có lợi ích là họ bắt chước một bộ não và họ có thể sử dụng các phương pháp để cập nhật trọng số một cách thông minh, chẳng hạn như backpropagation, để đảm bảo rằng mạng phát triển đúng hướng (giống như trong não). Nhưng khi sử dụng GA để cập nhật trọng số, bạn mất tất cả điều đó và dường như tôi không có lợi thế thực sự nào so với GP nữa, vì bây giờ nó chỉ có cơ hội nếu mạng sẽ cải thiện hay không. Bạn phải làm gì? – HelloGoodbye

0

Tôi không chắc liệu bạn có nên sử dụng thuật toán di truyền cho điều này hay không.

Tôi giả sử số lượng giải pháp ban đầu cho thuật toán di truyền của bạn sẽ bao gồm các tập huấn luyện cho mạng thần kinh của bạn (được đưa ra một phương pháp đào tạo cụ thể). Thông thường, số lượng giải pháp ban đầu bao gồm các giải pháp ngẫu nhiên cho vấn đề của bạn. Tuy nhiên, các bộ huấn luyện ngẫu nhiên sẽ không thực sự đào tạo mạng thần kinh của bạn.

Thuật toán đánh giá cho thuật toán di truyền của bạn sẽ là trọng số trung bình của lượng đào tạo cần thiết, chất lượng của mạng thần kinh trong việc giải quyết một vấn đề cụ thể và số lượng nút ẩn. Vì vậy, nếu bạn chạy điều này, bạn sẽ nhận được bộ đào tạo cung cấp kết quả tốt nhất về chất lượng mạng thần kinh (= thời gian đào tạo, số nút ẩn, khả năng giải quyết vấn đề của mạng).

Hoặc bạn đang xem xét một cách tiếp cận hoàn toàn khác?

0

Tôi không hoàn toàn chắc chắn về loại vấn đề bạn đang làm việc, nhưng GA có vẻ hơi quá mức ở đây. Tùy thuộc vào phạm vi của các thông số bạn đang làm việc, tìm kiếm đầy đủ (hoặc không thông minh) có thể hoạt động. Hãy thử vẽ biểu đồ hiệu suất của NN của bạn đối với số lượng các nút ẩn cho một vài giá trị đầu tiên, bắt đầu từ nhỏ và nhảy theo số lượng lớn hơn và lớn hơn. Theo kinh nghiệm của tôi, nhiều NN trong tình trạng hoạt động rất sớm; bạn có thể có được một bức tranh tốt về phạm vi số nút ẩn nào có ý nghĩa nhất.

Điều tương tự cũng đúng đối với các lần lặp đào tạo của NN. Đào tạo thêm giúp mạng lưới lên đến một điểm, nhưng sớm chấm dứt có nhiều hiệu ứng.

Trong phần lớn các trường hợp, các tham số NN này không ảnh hưởng đến hiệu suất theo cách rất phức tạp. Nói chung, tăng chúng làm tăng hiệu suất trong một thời gian nhưng sau đó giảm bớt lợi nhuận đá vào.GA không thực sự cần thiết để tìm một giá trị tốt trên loại đường cong đơn giản này; nếu số lượng nút ẩn (hoặc lặp lại đào tạo) thực sự làm cho hiệu suất biến động theo cách phức tạp, thì metaheuristics như GA có thể là apt. Nhưng hãy thử cách tiếp cận vũ phu trước khi đi theo con đường đó.

+0

lực lượng vũ phu không hoạt động cho ứng dụng của tôi vì dữ liệu của tôi rất ồn (nghĩ dữ liệu EEG). – ServAce85

0

Tôi có xu hướng nói rằng thuật toán di truyền là một ý tưởng tốt vì bạn có thể bắt đầu với một giải pháp tối thiểu và tăng số lượng tế bào thần kinh. Rất có thể là "chức năng chất lượng" mà bạn muốn tìm điểm tối ưu là trơn tru và chỉ có vài va chạm.

Nếu bạn phải tìm NN tối ưu này thường xuyên, tôi khuyên bạn nên sử dụng các thuật toán tối ưu và trong trường hợp mới của bạn như được mô tả trong công thức nấu ăn số tối ưu cho các vấn đề mà hàm đắt tiền để đánh giá.

2

Thuật toán di truyền có thể được áp dụng một cách hữu ích để tối ưu hóa mạng nơron, nhưng bạn phải suy nghĩ một chút về những gì bạn muốn làm.

Thuật toán đào tạo NN "cổ điển" nhất, chẳng hạn như Sao chép ngược, chỉ tối ưu hóa trọng số của các nơron. Thuật toán di truyền có thể tối ưu hóa trọng số, nhưng điều này thường sẽ không hiệu quả. Tuy nhiên, như bạn đã hỏi, họ có thể tối ưu hóa cấu trúc liên kết của mạng và cũng là các tham số cho thuật toán đào tạo của bạn. Bạn sẽ phải đặc biệt cảnh giác với việc tạo ra các mạng được "đào tạo quá mức".

Một kỹ thuật khác với thuật toán di truyền đã sửa đổi có thể hữu ích để khắc phục sự cố với Sao chép ngược. Back-Tuyên truyền thường tìm thấy minima địa phương, nhưng nó tìm thấy chúng một cách chính xác và nhanh chóng. Kết hợp một thuật toán di truyền với sự truyền lại, ví dụ, trong một Lamarckian GA, mang lại những lợi thế của cả hai. Kỹ thuật này được mô tả ngắn gọn trong GAUL tutorial

4

Một ví dụ điển hình về mạng nơron và lập trình di truyền là cấu trúc NEAT (Neuro-Evolution of Augmenting Topologies). Đây là một thuật toán di truyền tìm thấy cấu trúc liên kết tối ưu. Nó cũng được biết là tốt trong việc giữ số lượng các nút ẩn xuống.

Họ cũng đã tạo trò chơi bằng cách sử dụng tên gọi này là Nero. Khá kết quả hữu hình độc đáo và rất tuyệt vời.

trang chủ của Tiến sĩ Stanley:

http://www.cs.ucf.edu/~kstanley/

Ở đây bạn sẽ tìm thấy tất cả mọi thứ chỉ là về NEAT liên quan như ông là một trong những người phát minh ra nó.

+0

cũng có thư viện C# cho điều này -> SHARPNEAT http://sharpneat.sourceforge.net/ – JohnIdol

1

Đôi khi cũng hữu ích khi sử dụng thuật toán di truyền để huấn luyện mạng thần kinh khi hàm mục tiêu của bạn không liên tục.

+0

Tại sao không chỉ sử dụng GP trong trường hợp đó?Nếu bạn sử dụng GA để cập nhật trọng số trong mạng thần kinh, thay vì một số phương pháp thông minh để đảm bảo trọng lượng được cập nhật đúng hướng, có vẻ như bạn đã tận dụng lợi thế của việc sử dụng mạng neural qua chỉ sử dụng GP. – HelloGoodbye