Làm thế nào để tôi làm cho mạng lưới thần kinh của mình tốt hơn trong việc dự đoán sóng hình sin?


21

Ở đây, hãy xem: Tạo sóng hình sin Bạn có thể thấy chính xác nơi dữ liệu đào tạo kết thúc. Dữ liệu đào tạo đi từ đến 111 .

Tôi đã sử dụng Keras và một mạng lưới dày đặc 1-100-100-2 với kích hoạt tanh. Tôi tính kết quả từ hai giá trị, p và q là p / q. Bằng cách này, tôi có thể đạt được bất kỳ kích thước số nào chỉ bằng cách sử dụng nhỏ hơn 1 giá trị.

Xin lưu ý rằng tôi vẫn là người mới bắt đầu trong lĩnh vực này, vì vậy hãy dễ dàng với tôi.


1
Để làm rõ, dữ liệu đào tạo của bạn là từ khoảng -1,5 đến +1,5, vậy mạng đã học được điều đó một cách chính xác? Vì vậy, câu hỏi của bạn là về ngoại suy kết quả để không nhìn thấy số ngoài phạm vi dữ liệu đào tạo?
Neil Slater

11
Bạn có thể thử Fourier chuyển đổi mọi thứ và làm việc trong miền tần số.
Nick Alger

4
Đối với những người đánh giá trong tương lai: Tôi không biết tại sao điều này lại được gắn cờ để đóng cửa. Nó có vẻ hoàn toàn rõ ràng đối với tôi: đó là về các chiến lược mô hình hóa dữ liệu định kỳ với các mạng thần kinh.
Sycorax nói phục hồi Monica

1
Tôi nghĩ đó là một câu hỏi hợp lý cho người mới bắt đầu trong lĩnh vực học máy, mà chúng ta nên có ở đây. Tôi sẽ không đóng nó
Aksakal

1
Tôi không biết điều này có giúp ích gì không, nhưng ngoài hộp, vanilla NN sẽ chỉ có thể học một hàm đa thức. Trong thực tế điều đó là tốt vì bạn có thể thực hiện một đa thức tùy ý đóng trên một khoảng thời gian cố định. Nhưng nó có nghĩa là bạn không bao giờ có thể học được một sóng hình sin kéo dài qua các đầu của khoảng. Thủ thuật như các câu trả lời khác đã chỉ ra dưới đây là biến vấn đề thành vấn đề có thể được giải quyết theo cách đó. Đó là những gì biến đổi Fourier đề xuất, và trong trường hợp đó, học một sóng hình sin chỉ là học một hằng số.
Ukko

Câu trả lời:


19

Bạn đang sử dụng mạng chuyển tiếp; các câu trả lời khác là chính xác rằng FFNN không tuyệt vời khi ngoại suy ngoài phạm vi của dữ liệu đào tạo.

Tuy nhiên, do dữ liệu có chất lượng định kỳ, vấn đề có thể được chấp nhận khi lập mô hình với LSTM. LSTM là một loạt các tế bào mạng thần kinh hoạt động theo trình tự và có "bộ nhớ" về những gì chúng đã "thấy" trước đó. Bản tóm tắt của chương sách này cho thấy cách tiếp cận LSTM là đủ điều kiện thành công về các vấn đề định kỳ.

Trong trường hợp này, dữ liệu đào tạo sẽ là một chuỗi các tuples , và các nhiệm vụ để đưa ra dự đoán chính xác cho các đầu vào mới x i + 1 ... x i + n đối với một số ni(xi,sin(xi))xi+1xi+nntôi chỉ số trình tự tăng dần. Độ dài của mỗi chuỗi đầu vào, độ rộng của khoảng mà chúng bao phủ và khoảng cách của chúng tùy thuộc vào bạn. Theo trực giác, tôi mong muốn một mạng lưới thông thường bao gồm 1 giai đoạn sẽ là một nơi tốt để bắt đầu, với các chuỗi đào tạo bao gồm một loạt các giá trị, thay vì bị giới hạn trong một khoảng thời gian.

(Jimenez-Guarneros, Magdiel và Gomez-Gil, Pilar và Fonseca-Delgado, Rigoberto và Ramirez-Cortes, Manuel và Alarcon-Aquino, Vicente, "Dự đoán Long-Term của một Function Sine Sử dụng Neural Network LSTM", trong Nature- Thiết kế lấy cảm hứng từ các hệ thống thông minh lai )


2
Trình tự đang được mô hình hóa ở đây là gì? Các bước thời gian là gì? Đây trông giống như một ứng dụng phù hợp với đường cong đơn giản đối với tôi.
David J. Harris

@ DavidJ.Harris Tôi đã cập nhật câu trả lời của mình.
Sycorax nói phục hồi Monica

1/(2π)

Đây có phải là cách họ làm dự đoán thị trường, ví dụ?
Markus Appel

3
Không, đó không phải là cách bạn dự đoán thị trường. Ít nhất không phải là cách bạn làm điều đó để kiếm tiền.
Aksakal

13

Nếu những gì bạn muốn làm là tìm hiểu các hàm tuần hoàn đơn giản như thế này, thì bạn có thể xem xét bằng cách sử dụng các quy trình Gaussian. GP cho phép bạn thực thi kiến ​​thức miền của mình ở một mức độ nào đó bằng cách chỉ định một hàm hiệp phương sai phù hợp; trong ví dụ này, vì bạn biết dữ liệu là định kỳ, bạn có thể chọn hạt nhân định kỳ, sau đó mô hình sẽ ngoại suy cấu trúc này. Bạn có thể thấy một ví dụ trong hình; Ở đây, tôi đang cố gắng để phù hợp với dữ liệu chiều cao thủy triều, vì vậy tôi biết rằng nó có cấu trúc định kỳ. Bởi vì tôi đang sử dụng một cấu trúc định kỳ, mô hình sẽ ngoại suy chính xác định kỳ này (ít nhiều). OFC nếu bạn đang cố gắng tìm hiểu về các mạng thần kinh thì điều này không thực sự phù hợp, nhưng đây có thể là một cách tiếp cận đẹp hơn một chút so với các tính năng kỹ thuật thủ công. Ngẫu nhiên, mạng lưới thần kinh và gp có liên quan chặt chẽ trong lý thuyết,nhập mô tả hình ảnh ở đây

GP không phải lúc nào cũng hữu ích vì không giống như mạng lưới thần kinh, chúng khó mở rộng thành các bộ dữ liệu lớn và mạng sâu, nhưng nếu bạn quan tâm đến các vấn đề chiều thấp như thế này thì có lẽ chúng sẽ nhanh hơn và đáng tin cậy hơn.

(trong ảnh, các chấm đen là dữ liệu huấn luyện và màu đỏ là mục tiêu; bạn có thể thấy rằng mặc dù nó không chính xác, nhưng mô hình học được tính tuần hoàn xấp xỉ. Các dải màu là khoảng tin cậy của mô hình dự đoán)


2
Cốt truyện này rất hay.
Sycorax nói Phục hồi lại

11

Các thuật toán học máy - bao gồm các mạng thần kinh - có thể học cách xấp xỉ các hàm tùy ý, nhưng chỉ trong khoảng thời gian có đủ mật độ dữ liệu đào tạo.

Các thuật toán học máy dựa trên thống kê hoạt động tốt nhất khi chúng thực hiện phép nội suy - dự đoán các giá trị gần hoặc giữa các ví dụ đào tạo.

Ngoài dữ liệu đào tạo của bạn, bạn đang hy vọng ngoại suy. Nhưng không có cách nào dễ dàng để đạt được điều đó. Một mạng lưới thần kinh không bao giờ học một chức năng phân tích, chỉ xấp xỉ thông qua các số liệu thống kê - điều này đúng với gần như tất cả các kỹ thuật ML được giám sát. Các thuật toán nâng cao hơn có thể tùy ý gần với một hàm được chọn với đủ ví dụ (và các tham số miễn phí trong mô hình), nhưng vẫn sẽ chỉ làm như vậy trong phạm vi dữ liệu đào tạo được cung cấp.

Cách mạng (hoặc ML khác) hoạt động bên ngoài phạm vi dữ liệu đào tạo của bạn sẽ phụ thuộc vào kiến ​​trúc của mạng bao gồm các chức năng kích hoạt được sử dụng.

Cách duy nhất để có một thuật toán học máy dự đoán một hàm một cách phân tích, là xây dựng một cái gì đó thành các giả định của mô hình. Chẳng hạn (và có lẽ tầm thường), bạn có thể tạo các tính năng tương đương nhautội chức năng của đầu vào của bạn, vd tội(x),tội(2x+π/4). Mạng - hay thậm chí đơn giản hơn, hồi quy tuyến tính - sẽ học cách liên kết giá trị tiên đoán gần nhấttội chức năng.


"Một mạng lưới thần kinh không bao giờ học một chức năng phân tích, chỉ xấp xỉ thông qua số liệu thống kê." - điều tương tự có thể được nói gần như về bất cứ điều gì được sử dụng trong thực tế, ví dụ FFT cũng không học phân tích. Bạn có thể tăng tốc độ lấy mẫu và thời gian lên vô cùng và tiến gần đến chức năng thực sự, nhưng điều tương tự cũng đúng về NN.
Aksakal

@Aksakal: Vâng, đó là sự thật. Tuy nhiên tôi không muốn nói rằng "Tất cả các thuật toán ML không bao giờ học các hàm phân tích .." bởi vì ai đó không nghi ngờ gì sẽ đưa ra một ví dụ ngược lại của một số người học phân tích Bayes hoặc lập trình di truyền, v.v. Tôi sẽ cố gắng chỉnh sửa nó để làm cho nó tổng quát hơn
Neil Slater

9

Trong một số trường hợp, phương pháp đề xuất chuyển đổi các tính năng của bạn bằng chức năng định kỳ của @Neil Slater sẽ hoạt động rất tốt và có thể là giải pháp tốt nhất. Khó khăn ở đây là bạn có thể cần phải chọn chu kỳ / bước sóng bằng tay (xem câu hỏi này ).

Nếu bạn muốn tính định kỳ được nhúng sâu hơn vào mạng, cách dễ nhất là sử dụng sin / cos làm chức năng kích hoạt của bạn trong một hoặc nhiều lớp. Bài viết này thảo luận về những khó khăn tiềm năng và chiến lược để xử lý các chức năng kích hoạt định kỳ.

Ngoài ra, bài viết này có một cách tiếp cận khác, trong đó các trọng số của mạng phụ thuộc vào một chức năng định kỳ. Bài viết cũng đề nghị sử dụng spline thay vì sin / cos, vì chúng linh hoạt hơn. Đây là một trong những bài báo yêu thích của tôi năm ngoái, vì vậy nó đáng để đọc (hoặc ít nhất là xem video) ngay cả khi bạn không kết thúc bằng cách sử dụng nó.


9

Bạn đã thực hiện một cách tiếp cận sai, không có gì có thể được thực hiện với phương pháp này để khắc phục vấn đề.

Có một số cách khác nhau để giải quyết vấn đề. Tôi sẽ đề xuất một cái rõ ràng nhất thông qua kỹ thuật tính năng. Thay vì cắm thời gian như một tính năng tuyến tính, hãy đặt nó dưới dạng phần còn lại của mô đun T = 1. Chẳng hạn, t = 0,2, 1,2 và 2.2 sẽ trở thành một tính năng t1 = 0,1, v.v ... Miễn là T lớn hơn chu kỳ của sóng, điều này sẽ hoạt động. Cắm thứ này vào mạng của bạn và xem nó hoạt động như thế nào.

Tính năng kỹ thuật được đánh giá thấp. Có xu hướng này trong AI / ML nơi các nhân viên bán hàng tuyên bố rằng bạn đổ tất cả đầu vào của mình vào mạng và bằng cách nào đó, họ sẽ biết phải làm gì với họ. Chắc chắn, nó như, như bạn đã thấy trong ví dụ của bạn, nhưng sau đó nó dễ dàng bị phá vỡ. Đây là một ví dụ tuyệt vời cho thấy tầm quan trọng của việc xây dựng các tính năng tốt ngay cả trong một số trường hợp đơn giản nhất.

Ngoài ra, tôi hy vọng bạn nhận ra rằng đây là ví dụ điển hình nhất về kỹ thuật tính năng. Nó chỉ để cho bạn một ý tưởng về những gì bạn có thể làm với nó.

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.