Tại sao áp dụng PCA vào các mục tiêu gây ra thiếu hụt?


7

Mục đích:

Tôi chưa quen với việc học máy và thử nghiệm với các mạng lưới thần kinh. Tôi muốn xây dựng một mạng lấy đầu vào là một chuỗi gồm 5 hình ảnh và dự đoán hình ảnh tiếp theo. Tập dữ liệu của tôi là hoàn toàn nhân tạo, chỉ cho thử nghiệm của tôi. Như một minh họa, đây là một vài ví dụ về đầu vào và đầu ra dự kiến:

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

Hình ảnh của các điểm dữ liệu và của các mục tiêu là từ cùng một nguồn: hình ảnh mục tiêu của một điểm dữ liệu xuất hiện trong các điểm dữ liệu khác và ngược lại.

Những gì tôi đã làm xong:

Hiện tại tôi đã xây dựng một perceptron với một lớp ẩn và lớp đầu ra cho các pixel của dự đoán. Hai lớp dày đặc và được tạo thành từ các nơ-ron sigmoid và tôi đã sử dụng sai số bình phương trung bình làm mục tiêu. Vì hình ảnh khá đơn giản và không thay đổi nhiều, điều này thực hiện rất tốt: với 200-300 ví dụ và 50 đơn vị ẩn, tôi nhận được giá trị lỗi tốt (0,06) và dự đoán tốt về dữ liệu thử nghiệm. Mạng được đào tạo với độ dốc giảm dần (với tỷ lệ học tập). Dưới đây là các loại đường cong học tập tôi nhận được và quá trình phát triển lỗi với số lượng kỷ nguyên:

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

Những gì tôi đang cố gắng làm:

Điều này là tốt, nhưng bây giờ tôi muốn giảm tính chiều của tập dữ liệu để nó sẽ mở rộng thành hình ảnh lớn hơn và nhiều ví dụ hơn. Vì vậy, tôi đã áp dụng PCA. Tuy nhiên tôi không áp dụng nó trong danh sách các điểm dữ liệu mà trong danh sách các hình ảnh , vì hai lý do:

  1. Trên toàn bộ dữ liệu được đặt, ma trận đối lưu sẽ là 24000x24000, không phù hợp với bộ nhớ của máy tính xách tay của tôi;
  2. Bằng cách thực hiện trên các hình ảnh, tôi cũng có thể nén các mục tiêu, vì chúng được làm từ cùng một hình ảnh.

Khi các hình ảnh trông giống nhau, tôi đã giảm kích thước của chúng từ 4800 (40x40x3) xuống 36 trong khi chỉ mất 1e-6 của phương sai.

Những gì không hoạt động:

Khi tôi cung cấp tập dữ liệu giảm và các mục tiêu giảm của nó vào mạng, độ dốc giảm dần hội tụ rất nhanh đến một lỗi cao (khoảng 50!). Bạn có thể thấy các ô tương đương như các ô trên:

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

Tôi đã không tưởng tượng rằng một đường cong học tập có thể bắt đầu ở một giá trị cao, sau đó đi xuống và sao lưu ... Và những nguyên nhân thông thường của việc giảm độ dốc dừng quá nhanh là gì? Nó có thể được liên kết với khởi tạo tham số (tôi sử dụng GlorotUniform, mặc định của thư viện lasagne).

Sau đó, tôi nhận thấy rằng nếu tôi cung cấp dữ liệu giảm nhưng các mục tiêu ban đầu (không nén), tôi sẽ lấy lại hiệu suất ban đầu. Vì vậy, có vẻ như áp dụng PCA trên hình ảnh mục tiêu không phải là một ý tưởng tốt. Tại sao vậy? Rốt cuộc, tôi chỉ nhân các đầu vào và các mục tiêu theo cùng một ma trận, vì vậy đầu vào và mục tiêu đào tạo vẫn được liên kết theo cách mà mạng lưới thần kinh có thể tìm ra, phải không? Tôi đang thiếu gì?

Ngay cả khi tôi giới thiệu và thêm lớp 4800 đơn vị để có cùng số lượng tế bào thần kinh sigmoid, tôi cũng nhận được kết quả tương tự. Tóm lại, tôi đã thử:

  1. 24000 pixel => 50 sigmoids => 4800 sigmoids (= 4800 pixel)
  2. 180 "pixel" => 50 sigmoids => 36 sigmoids (= 36 "pixel")
  3. 180 "pixel" => 50 sigmoids => 4800 sigmoids (= 4800 pixel)
  4. 180 "pixel" => 50 sigmoids => 4800 sigmoids => 36 sigmoids (= 36 "pixel")
  5. 180 "pixel" => 50 sigmoids => 4800 sigmoids => 36 tuyến tính (= 36 "pixel")

(1) và (3) hoạt động tốt; nhưng không phải (2), (4) và (5) và tôi không hiểu tại sao. Cụ thể, vì (3) hoạt động, (5) sẽ có thể tìm thấy các tham số tương tự như (3) và các vectơ riêng trong lớp tuyến tính cuối cùng. Điều đó là không thể đối với một mạng lưới thần kinh?


1
Bạn đã xem các ví dụ đầu ra giảm PCA chưa? Bất kỳ giá trị nào trên 1 hoặc dưới 0,0 trong bất kỳ "pixel" nào? (Ồ, chờ đã, mạng 5 đáng lẽ phải đối phó với điều đó ..)
Neil Slater

Đó là một điểm tốt, các giá trị không còn trong [0,1] nữa. Bằng cách nào đó tôi đã nghĩ đến đầu vào không còn được chuẩn hóa nữa (điều này không ngăn nó hoạt động trong mạng 3), nhưng không nghĩ về điều này ... Nhưng vâng, bạn đã đúng, 5 nên đã đối phó với điều đó. Tôi đã kiểm tra lại bằng cách tạo tuyến tính đầu ra trong mạng 2, kết quả tương tự.
Djizeus

Câu trả lời:


4

Trước tiên, cảm ơn bạn đã chỉnh sửa câu hỏi ban đầu của bạn vì bây giờ chúng tôi biết rằng bạn đang áp dụng cùng một chuyển đổi cho tất cả dữ liệu của mình.

Q: Tại sao perceptronsthực hiện tốt hơn nhiều so generalized linear modelsvới một số vấn đề? A: Bởi vì chúng vốn là những mô hình phi tuyến tính, với rất nhiều tính linh hoạt. Hạn chế là các nút bổ sung yêu cầu nhiều dữ liệu hơn để điều chỉnh chính xác.

Bức tranh lớn:

Ít dữ liệu có thể gây ra high-bias. High-biascó thể được khắc phục bằng nhiều dữ liệu hơn. Bạn đã giảm dữ liệu của mình từ bộ dữ liệu tính năng 4800 xuống bộ dữ liệu tính năng 38, do đó, bạn sẽ thấy sự thiên vị tăng lên. Neural networksyêu cầu nhiều dữ liệu hơn các mô hình không có lớp ẩn.

Tuyến tính so với phi tuyến

Của bạn artificial neural network( perceptron) là một mô hình vốn đã phi tuyến, nhưng bạn quyết định để loại bỏ các tính năng từ bộ dữ liệu của bạn với một mô hình tuyến tính ( PCA). Sự hiện diện của một lớp ẩn duy nhất tạo ra các thuật ngữ bậc hai trong dữ liệu của bạn một cách rõ ràng và có hai phép biến đổi phi tuyến bổ sung (input ==> hidden và hidden ==> dự đoán), điều này sẽ thêm tính phi tuyến sigmoidal ở mỗi bước.

Thực tế là cả dữ liệu huấn luyện và dữ liệu đích đều được nhân với cùng một ma trận để đạt được chiều giảm thực sự chỉ có nghĩa là bạn perceptroncần học ma trận nếu muốn tái tạo các khía cạnh phi tuyến của dữ liệu gốc. Điều này đòi hỏi nhiều dữ liệu hơn hoặc để bạn giảm bớt tính chiều.

Một thí nghiệm:

Tôi khuyên bạn nên thử một thử nghiệm trong đó bạn thực hiện lệnh thứ hai polynomial feature extractiontrên tập dữ liệu đầy đủ và sau đó thực hiện PCAtrên tập dữ liệu nâng cao đó. Xem có bao nhiêu tính năng bạn kết thúc với trong khi vẫn giữ 99% phương sai của bộ dữ liệu nâng cao. Nếu nó lớn hơn kích thước của tập dữ liệu ban đầu của bạn thì hãy gắn với tập dữ liệu không tăng cường và không giảm. Nếu đó là betweeen tính chiều của dữ liệu gốc và 38 thì hãy thử đào tạo perceptronvới dữ liệu đó.

Một ý tưởng tốt hơn:

Thay vì sử dụng phương sai (tuyến tính) để xác định mức giảm tính năng của phép chiếu PCA của bạn, hãy thử đào tạo và xác thực chéo mô hình của bạn với các mức giảm kích thước PCA khác nhau. Bạn có thể sẽ thấy rằng có một điểm ngọt ngào cho một bộ hình ảnh nhất định. Chẳng hạn, một SVM trên dữ liệu chữ số MNIST hoạt động tốt nhất khi các tính năng 784 pixel được giảm xuống còn 50 tính năng độc lập tuyến tính bằng PCA. Mặc dù điều này không rõ ràng từ việc phân tích phương sai của các thành phần chính.

Sự lựa chọn khác:

Có các kỹ thuật giảm kích thước phi tuyến, như isomap . Bạn có thể điều tra việc sử dụng tính năng giảm tuyến tính vì bạn rõ ràng mất thông tin với PCA tuyến tính mà bạn đã áp dụng.

Bạn cũng có thể xem xét các feature extractionkỹ thuật cụ thể của hình ảnh để thêm một số phi tuyến trước khi giảm tính chiều.

Hi vọng điêu nay co ich!


Tôi nghĩ rằng nếu tôi có thể đi xuống dcác tính năng trong khi vẫn giữ được hầu hết phương sai (> 99,99% trong trường hợp của tôi), điều đó có nghĩa là dữ liệu gần như nằm trên một mặt phẳng siêu dkích thước. Và bất kể khía cạnh phi tuyến tính nào, chúng đều được giữ trong các dtính năng. Không? Nếu có, tại sao mạng lưới thần kinh cần phải xây dựng lại các khía cạnh phi tuyến tính như chúng vẫn còn?
Djizeus

Không, có lẽ bạn đang vứt bỏ những đóng góp phi tuyến tính.
AN6U5

2

Có thể là hầu hết phương sai trong tập dữ liệu tồn tại giữa các hình ảnh đầu vào (hoặc giữa hình ảnh đầu vào và đầu ra). Trong trường hợp đó, các thành phần chính có nhiều thông tin nhất sẽ phân tách các ví dụ đầu vào hoặc tách đầu vào khỏi đầu ra.

Nếu chỉ các PC ít thông tin mô tả các đầu ra b / w phương sai, sẽ khó phân biệt giữa các đầu ra hơn so với trong không gian tính năng ban đầu.

Điều đó nói rằng, PCA trong hình ảnh hiếm khi hữu ích. Trong ví dụ này tôi có thể thấy nó hấp dẫn, nhưng có lẽ sẽ có ý nghĩa và thân thiện với bộ nhớ hơn nhiều để học cách biểu diễn tính năng chiều thấp khác nhau. Bạn có thể thử một trình tự động mã hóa đơn giản, các tính năng SIFT / SURF hoặc các tính năng giống như haar.


Không tôi thực hiện PCA trên toàn bộ tập hợp hình ảnh, và sau đó trong các đầu vào đã thay thế từng hình ảnh bằng chuyển đổi PCA của nó. Nếu tôi thực hiện thay thế chỉ trong các đầu vào, tôi vẫn có thể học, nhưng nếu tôi cũng thay thế các mục tiêu, nó sẽ ngừng hoạt động. Dù sao, cảm ơn những lời đề nghị, tôi sẽ thử chúng. Tôi vẫn muốn hiểu tại sao cách tiếp cận của tôi sai (nếu có) mặc dù ...
Djizeus

Được rồi tôi đang cập nhật câu trả lời của mình bây giờ tôi biết những gì bạn đã làm
jamesmf

Bạn đã thử thực hiện PCA trên các hình ảnh mục tiêu riêng biệt chưa?
jamesmf

Là đầu ra của bạn cũng có trong các ví dụ đầu vào? Có vẻ như họ đại khái là trong dữ liệu ví dụ bạn đã đăng. Nếu đó là trường hợp, câu trả lời của tôi không liên quan.
jamesmf

Vâng, đúng vậy, đó là những gì tôi muốn nói trong câu ngay bên dưới hình ảnh ví dụ (tôi biết thật khó để hiểu những gì tôi đang cố gắng :))
Djizeus

0

Tôi đã đọc bài viết của bạn một vài lần bây giờ. Nhưng tôi không chắc chắn nếu tôi hiểu đầy đủ các Thử nghiệm của bạn. Nhưng tôi có một dự đoán những gì có thể xảy ra.

Tôi nghĩ rằng lỗi được ẩn trong phần mà bạn đạt được 0,06 phần trăm đáng kinh ngạc này. Bạn không chỉ khái quát hóa dữ liệu mới mà còn dự đoán tương lai theo một cách nào đó. Điều này không nên hoạt động, nhưng tôi nghĩ nó làm được vì mạng của bạn bị quá tải khủng khiếp. Vì vậy, để nói rằng mạng của bạn vẫn còn rất ngu ngốc. Nó chỉ học nếu bạn cho nó xem hình ảnh a, b nó sẽ trả lời c. Thí nghiệm thứ hai chứa một vòng xoắn, nếu tôi hiểu bạn chính xác. Tôi giả sử bạn vẫn trình bày hình ảnh hoàn chỉnh lên mạng, nhưng chúng được xây dựng dựa trên các hệ số của bản địa của chúng. Bây giờ nó phải nhổ ra các hệ số để xây dựng câu trả lời từ các nguồn gốc. Nhưng điều này sẽ đòi hỏi một số hiểu biết về quy trình, mà mạng không phải là nước.

Vì vậy, tôi nghĩ rằng có một số gợi ý để cải thiện thử nghiệm của bạn:

Việc học các đầu vào hoàn chỉnh chỉ là một vấn đề cực kỳ cao, đòi hỏi rất nhiều dữ liệu đào tạo. Xem xét tính toán các tính năng từ hình ảnh.

Tôi không chắc vấn đề học tập của bạn có phải là một vấn đề hay không. Vui lòng xem xét để tách dữ liệu đào tạo của bạn khỏi dữ liệu dự đoán của bạn và lấy dữ liệu thông thường hơn như chữ số viết tay.


Cảm ơn đã cố gắng để hiểu. Tôi đã chỉnh sửa câu hỏi với hy vọng nó rõ ràng hơn. Lưu ý rằng 0,06 không phải là tỷ lệ phần trăm, tôi không xây dựng trình phân loại mà là hồi quy vì mạng tạo ra hình ảnh. Ngoài ra, tôi không nghĩ rằng cấu hình ban đầu có quá nhiều, vì khi tôi vẽ đường cong học tập, lỗi xác nhận gần với lỗi đào tạo.
Djizeus

Thay vì chỉ chấp nhận câu trả lời @Djizeus và chỉnh sửa câu hỏi của bạn, bạn cần thực hiện một "phân tách phương sai sai lệch" chi tiết cross validationhơn hoặc tốt hơn . Sau đó, bạn sẽ biết liệu trường hợp đầu tiên có thực sự quá sức hay không. Bạn nên luôn luôn xác nhận chéo! Xin vui lòng cho chúng tôi biết những gì kết quả cho thấy. Tôi nghi ngờ rằng giải pháp này có nhiều sắc thái hơn và có liên quan chặt chẽ hơn với việc chuyển đổi một PCA khác nhau cho mọi hình ảnh thay vì thực hiện PCA trên toàn bộ kho dữ liệu.
AN6U5

1
Vâng, tôi đã thực hiện phân tách và nó trông ổn, và tôi không muốn làm cho câu hỏi thậm chí còn lớn hơn. Nhưng tôi đã thêm nó bây giờ. Đối với các trường hợp không hoạt động, nó trông thực sự kỳ lạ ...
Djizeus
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.