2016-02-21 17 views
7

Lý thuyết từ các liên kết này cho thấy thứ tự của mạng chuyển đổi là: Convolutional Layer - Non-liniear Activation - Pooling Layer.Chức năng kích hoạt sau khi lớp gộp hoặc lớp co giật?

  1. Neural networks and deep learning (equation (125)
  2. Deep learning book (page 304, 1st paragraph)
  3. Lenet (the equation)
  4. The source in this headline

Nhưng, trong việc thực hiện cuối cùng từ những trang web, nó nói rằng thứ tự là: Convolutional Layer - Pooling Layer - Non-liniear Activation

  1. network3.py
  2. The sourcecode, LeNetConvPoolLayer class

tôi đã cố gắng quá để khám phá một cú pháp hoạt động Conv2D, nhưng không có chức năng kích hoạt, nó chỉ chập với kernel lộn. Ai đó có thể giúp tôi giải thích tại sao điều này lại xảy ra?

Trả lời

10

Vâng, tính năng đa tuyến tăng tối đa và đơn điệu tăng lên, vì vậy kết quả là như nhau trong trường hợp đó. Vì vậy, tốt hơn hết cho mẫu con đầu tiên thông qua việc gộp gộp tối đa và sau đó áp dụng phi tuyến tính (nếu nó tốn kém, chẳng hạn như sigmoid).

Đối với conv2D, việc không phải là lật hạt nhân. Nó thực hiện chính xác định nghĩa của convolution. Đây là một phép toán tuyến tính, vì vậy bạn phải tự thêm bản thân phi tuyến tính trong bước tiếp theo, ví dụ: theano.tensor.nnet.relu.

+0

ah đúng, kết quả là như nhau (sau thử nghiệm ngày nay), và như một sự đoán, có thể nó được thực hiện như vậy bởi vì chi phí. Cảm ơn :) – malioboro

+0

convolution không phải là một hoạt động tuyến tính, đó là lý do tại sao nếu bạn loại bỏ tất cả các phi tuyến tính của bạn như Relu, sigmoid, vv bạn vẫn sẽ có một mạng làm việc. hoạt động chập được thực hiện như một hoạt động tương quan cho các chương trình nghị sự hiệu suất, và trong mạng nơron, vì các bộ lọc được học tự động, hiệu ứng cuối cùng cũng giống như bộ lọc chập. ngoài việc đó trong Bp, tính chất chập chững được tính đến. cho nó thực sự là một hoạt động chập chững, diễn ra và do đó một tuyến tính phi tuyến tính. – Breeze

+4

convolution * là * một phép toán tuyến tính, như là tương quan chéo. Tuyến tính cả trong dữ liệu và trong các bộ lọc. – eickenberg

4

Trong nhiều giấy tờ, mọi người sử dụng conv -> pooling -> non-linearity. Điều đó không có nghĩa là bạn không thể sử dụng một đơn đặt hàng khác và nhận được kết quả hợp lý. Trong trường hợp của lớp max-pooling và ReLU thứ tự không quan trọng (cả hai tính toán điều tương tự):

enter image description here

Bạn có bằng chứng cho thấy đây là trường hợp bằng cách ghi nhớ rằng ReLU là một hoạt động tố khôn ngoan và một chức năng không giảm nên

enter image description here

điều tương tự cũng xảy ra đối với hầu hết các chức năng kích hoạt (hầu hết trong số họ đều là phòng không giảm). Nhưng không làm việc cho một lớp tổng hợp chung (trung bình tổng hợp).


Tuy nhiên, cả hai đơn đặt hàng đều cho ra kết quả tương tự, Activation(MaxPool(x)) làm nhanh hơn đáng kể bằng cách thực hiện ít hoạt động hơn. Đối với một lớp tổng hợp có kích thước k, nó sử dụng số lần gọi ít hơn k^2 lần để kích hoạt chức năng.

Đáng buồn là tối ưu hóa này là không đáng kể đối với CNN, vì phần lớn thời gian được sử dụng trong các lớp chập chững.

Các vấn đề liên quan