Lớp ẩn trong một mạng lưới thần kinh là gì?


187

Tôi chắc chắn nhiều người sẽ phản hồi với các liên kết đến 'hãy để tôi google cho bạn', vì vậy tôi muốn nói rằng tôi đã cố gắng tìm hiểu điều này vì vậy xin vui lòng tha thứ cho sự thiếu hiểu biết của tôi ở đây, nhưng tôi không thể hiểu làm thế nào thực hiện thực tế của một mạng lưới thần kinh thực sự hoạt động.

Tôi hiểu lớp đầu vào và cách bình thường hóa dữ liệu, tôi cũng hiểu đơn vị thiên vị, nhưng khi nói đến lớp ẩn, tính toán thực tế trong lớp đó là gì và cách nó ánh xạ tới đầu ra chỉ là một chút sương mù. Tôi đã thấy các sơ đồ có dấu chấm hỏi trong lớp ẩn, các hàm boolean như AND / OR / XOR, các hàm kích hoạt và các nút đầu vào ánh xạ tới tất cả các đơn vị ẩn và các nút đầu vào chỉ ánh xạ tới một vài đơn vị ẩn Tôi chỉ có một vài câu hỏi về khía cạnh thực tế. Tất nhiên, một lời giải thích đơn giản về toàn bộ quá trình mạng lưới thần kinh như bạn sẽ giải thích cho một đứa trẻ, sẽ rất tuyệt vời.

Những tính toán nào được thực hiện trong lớp ẩn?

Làm thế nào là những tính toán được ánh xạ đến lớp đầu ra?

Làm thế nào để lớp ouput hoạt động? Khử bình thường dữ liệu từ lớp ẩn?

Tại sao một số lớp trong lớp đầu vào được kết nối với lớp ẩn và một số thì không?


13
Mọi người xung quanh đều rất tuyệt, tôi chưa bao giờ thấy một câu hỏi nào, hãy để tôi trả lời cho bạn câu trả lời nhưng rất nhiều câu trả lời sâu sắc và đáng ngạc nhiên về những gì ban đầu là những câu hỏi cơ bản. Thật không may, tôi không thể giúp bạn với bạn nhưng nó có vẻ khá phù hợp vì vậy tôi rất vui khi bỏ phiếu.
Gala

4
Cảm ơn vì bình luận và bình chọn của Gael, có lẽ tôi đã bị cộng đồng SO làm phiền một chút vì tất cả chúng ta đều biết những người đó có thể nhận được như thế nào :) Vui mừng khi thấy nhiều hơn về tinh thần hợp tác ở đây, trái ngược với việc cố gắng kiếm huy hiệu và điểm bằng cách chỉnh sửa / đóng câu hỏi.
FAtBalloon

1
Tôi không phải là chuyên gia về mạng lưới thần kinh, mặc dù tôi có liên quan đến các ứng dụng và phương pháp của họ. Câu trả lời có lẽ không hữu ích của tôi sẽ là các tính toán cụ thể trong ẩn phụ thuộc vào 'hàm chi phí' mà bạn đang áp đặt cho mục tiêu của mình, tức là những gì bạn cố gắng đạt được. Ví dụ: nếu bạn muốn nhóm các phần tử đầu vào thành các nhóm được nhóm, bạn sẽ tính khoảng cách giữa các phần tử trong lớp ẩn. Điều này có thể trải qua các vòng lặp và chu trình tối ưu hóa khác nhau trong lớp này, cho đến khi bạn gặp một tiêu chí lỗi cho phép quá trình 'rời khỏi' lớp này.
Lucozade

Câu trả lời:


230

Phiên bản ba câu:

  • Mỗi lớp có thể áp dụng bất kỳ chức năng nào bạn muốn cho lớp trước đó (thường là một phép biến đổi tuyến tính theo sau là một phi tuyến squashing).

  • Công việc của các lớp ẩn là biến đổi các đầu vào thành một thứ mà lớp đầu ra có thể sử dụng.

  • Lớp đầu ra biến đổi các kích hoạt lớp ẩn thành bất kỳ tỷ lệ nào bạn muốn đầu ra của mình được bật.

Giống như bạn 5:

Nếu bạn muốn một máy tính cho bạn biết nếu có một chiếc xe buýt trong ảnh, máy tính có thể có thời gian dễ dàng hơn nếu nó có các công cụ phù hợp.

Vì vậy, máy dò xe buýt của bạn có thể được làm bằng máy dò bánh xe (để giúp bạn biết đó là xe) và máy dò hộp (vì xe buýt có hình dạng như một hộp lớn) và máy dò kích thước (để nói với bạn rằng nó quá lớn để là một chiếc xe hơi ). Đây là ba yếu tố của lớp ẩn của bạn: chúng không phải là một phần của hình ảnh thô, chúng là các công cụ bạn thiết kế để giúp bạn xác định các bus.

Nếu cả ba máy dò đó đều bật (hoặc có lẽ nếu chúng đặc biệt hoạt động), thì rất có thể bạn có xe buýt trước mặt.

Mạng lưới thần kinh rất hữu ích vì có các công cụ tốt (như backpropagation) để xây dựng nhiều máy dò và đặt chúng lại với nhau.


Giống như bạn là người lớn

Mạng thần kinh chuyển tiếp nguồn cấp dữ liệu áp dụng một loạt các chức năng cho dữ liệu. Các hàm chính xác sẽ phụ thuộc vào mạng nơ ron mà bạn đang sử dụng: thường xuyên nhất, các hàm này mỗi hàm tính toán một phép biến đổi tuyến tính của lớp trước đó, sau đó là một phi tuyến bị đè bẹp. Đôi khi các hàm sẽ làm một cái gì đó khác (như tính toán các hàm logic trong ví dụ của bạn hoặc lấy trung bình trên các pixel liền kề trong một hình ảnh). Vì vậy, vai trò của các lớp khác nhau có thể phụ thuộc vào chức năng nào đang được tính toán, nhưng tôi sẽ cố gắng rất chung chung.

Hãy gọi vectơ đầu vào , kích hoạt lớp ẩn và kích hoạt đầu ra . Bạn có một số hàm ánh xạ từ đến và một hàm khác ánh xạ từ đến . h y f x h g h yxhyfxhghy

Vì vậy, kích hoạt của lớp ẩn là và đầu ra của mạng là .g ( f ( x ) )f(x)g(f(x))

Tại sao có hai hàm ( và ) thay vì chỉ một?gfg

Nếu mức độ phức tạp trên mỗi hàm bị giới hạn, thì có thể tính toán những thứ mà và không thể làm riêng lẻ. f gg(f(x))fg


Một ví dụ với các hàm logic:

Ví dụ: nếu chúng ta chỉ cho phép và là các toán tử logic đơn giản như "VÀ", "HOẶC" và "NAND", thì bạn không thể tính các hàm khác như "XOR" chỉ với một trong số chúng. Mặt khác, chúng ta có thể tính toán "XOR" nếu chúng ta sẵn sàng xếp các hàm này lên nhau:gfg

Chức năng lớp đầu tiên:

  • Đảm bảo rằng ít nhất một yếu tố là "TRUE" (sử dụng OR)
  • Đảm bảo rằng chúng không phải là tất cả "TRUE" (sử dụng NAND)

Chức năng lớp thứ hai:

  • Đảm bảo rằng cả hai tiêu chí của lớp đầu tiên đều được thỏa mãn (sử dụng AND)

Đầu ra của mạng chỉ là kết quả của chức năng thứ hai này. Lớp đầu tiên biến đổi các đầu vào thành một cái gì đó mà lớp thứ hai có thể sử dụng để toàn bộ mạng có thể thực hiện XOR.


Một ví dụ với hình ảnh:

Slide 61 từ bài nói chuyện này - cũng có sẵn ở đây dưới dạng một hình ảnh - hiển thị (một cách để hình dung) những gì các lớp ẩn khác nhau trong một mạng thần kinh cụ thể đang tìm kiếm.

Lớp đầu tiên tìm kiếm các cạnh ngắn trong hình ảnh: chúng rất dễ tìm thấy từ dữ liệu pixel thô, nhưng chúng không hữu ích lắm khi nói với bạn nếu bạn nhìn vào mặt hoặc xe buýt hoặc voi .

Lớp tiếp theo tổng hợp các cạnh: nếu các cạnh từ lớp ẩn phía dưới khớp với nhau theo một cách nhất định, thì một trong những máy dò mắt ở giữa cột ngoài cùng bên trái có thể bật. Thật khó để tạo ra một lớp duy nhất rất tốt trong việc tìm kiếm thứ gì đó quá cụ thể từ các pixel thô: máy dò mắt dễ dàng hơn nhiều để tạo ra các máy dò cạnh so với các pixel thô.

Lớp tiếp theo kết hợp các máy dò mắt và máy dò mũi vào mặt. Nói cách khác, những thứ này sẽ sáng lên khi máy dò mắt và máy dò mũi từ lớp trước bật lên với các mẫu phù hợp. Chúng rất tốt trong việc tìm kiếm các loại khuôn mặt cụ thể: nếu một hoặc nhiều trong số chúng sáng lên, thì lớp đầu ra của bạn sẽ báo cáo rằng có một khuôn mặt.

Điều này rất hữu ích vì máy dò tìm khuôn mặt rất dễ chế tạo từ máy dò mắt và máy dò mũi, nhưng thực sự khó để tạo ra cường độ điểm ảnh.

Vì vậy, mỗi lớp giúp bạn càng ngày càng xa các pixel thô và gần hơn với mục tiêu cuối cùng của bạn (ví dụ như phát hiện khuôn mặt hoặc phát hiện xe buýt).


Câu trả lời cho các loại câu hỏi khác

"Tại sao một số lớp trong lớp đầu vào được kết nối với lớp ẩn và một số thì không?"

Các nút bị ngắt kết nối trong mạng được gọi là các nút "bias". Có một lời giải thích thực sự tốt đẹp ở đây . Câu trả lời ngắn gọn là chúng giống như các thuật ngữ chặn trong hồi quy.

"Những hình ảnh" máy dò mắt "trong ví dụ hình ảnh đến từ đâu?"

Tôi đã không kiểm tra kỹ các hình ảnh cụ thể mà tôi đã liên kết, nhưng nói chung, những hình ảnh này cho thấy tập hợp các pixel trong lớp đầu vào giúp tối đa hóa hoạt động của nơron tương ứng. Vì vậy, nếu chúng ta nghĩ về tế bào thần kinh như một máy dò mắt, thì đây là hình ảnh mà tế bào thần kinh coi là giống mắt nhất. Mọi người thường tìm thấy các bộ pixel này với quy trình tối ưu hóa (leo đồi).

Trong bài báo này của một số người Google có một trong những mạng lưới thần kinh lớn nhất thế giới, họ cho thấy một tế bào thần kinh "máy dò tìm khuôn mặt" và tế bào thần kinh "máy dò mèo" theo cách này, cũng như cách thứ hai: Họ cũng hiển thị hình ảnh thực tế kích hoạt tế bào thần kinh mạnh nhất (hình 3, hình 16). Cách tiếp cận thứ hai rất hay vì nó cho thấy mạng linh hoạt và phi tuyến như thế nào - những "máy dò" cấp cao này nhạy cảm với tất cả các hình ảnh này, mặc dù chúng không đặc biệt trông giống nhau ở mức pixel.


Hãy cho tôi biết nếu có bất cứ điều gì ở đây không rõ ràng hoặc nếu bạn có thêm bất kỳ câu hỏi nào.


2
Vì vậy, chỉ có một thuật toán được xác định cho mỗi nút đơn trên một lớp nhất định và các trọng số là những gì làm cho đầu ra khác nhau? Hoặc bạn có thể lập trình mọi nút trên lớp để khác nhau?
FAtBalloon

3
@GeorgeMcDowd điều này gặp phải vấn đề chính: nhìn vào pixel và xác định các bus là khó, như bạn đề xuất. May mắn thay, nhìn vào pixel và tìm các cạnh rất dễ dàng - đó là tất cả các lớp ẩn đầu tiên cố gắng thực hiện. Lớp tiếp theo cố gắng thực hiện suy luận dựa trên các cạnh, dễ dàng hơn nhiều so với cố gắng làm như vậy dựa trên pixel.
David J. Harris

4
VẬY nên cho bạn một số phần thưởng khác (không chỉ là điểm) cho thời gian và công sức bạn bỏ ra cho câu trả lời này!
samsamara

1
@JoshuaEnfield Tôi nghĩ rằng logic trong những năm 1980 là sự kết hợp tương tự như cách mọi người nghĩ bộ não hoạt động, nó khác biệt ở mọi nơi và các giá trị bị ràng buộc như bạn đã đề cập. Kể từ đó, mọi người đã thấy rằng f(x) = max(x, 0)("đơn vị tuyến tính được chỉnh lưu") thường hoạt động tốt hơn, mặc dù nó không có nhiều thuộc tính đó.
David J. Harris

2
Ví dụ về bus và chuỗi các hàm chỉ đóng đinh nó. Không hiểu tại sao sách giáo khoa không thể mô tả này.
khai quật

12

Tôi sẽ cố gắng thêm vào mô tả hoạt động trực quan ...

Một cách trực quan tốt để suy nghĩ về một mạng lưới thần kinh là suy nghĩ về những gì một mô hình hồi quy tuyến tính cố gắng làm. Hồi quy tuyến tính sẽ lấy một số đầu vào và đưa ra một mô hình tuyến tính, mỗi lần lấy một giá trị nhân với một số hệ số trọng số tối ưu của mô hình và cố gắng ánh xạ tổng của các kết quả đó vào một phản ứng đầu ra khớp với đầu ra thực. Các hệ số được xác định bằng cách tìm các giá trị sẽ giảm thiểu một số số liệu lỗi giữa giá trị đầu ra mong muốn và giá trị mà mô hình học được. Một cách khác để nói rằng mô hình tuyến tính sẽ cố gắng tạo hệ số nhân cho mỗi đầu vào và tổng hợp tất cả chúng để cố gắng xác định mối quan hệ giữa các giá trị đầu ra (nhiều) và (thường là đơn). Mô hình tương tự đó gần như có thể được coi là khối xây dựng cơ bản của mạng lưới thần kinh;

Nhưng perceptionron đơn vị có thêm một phần sẽ xử lý tổng dữ liệu có trọng số theo cách phi tuyến tính. Nó thường sử dụng hàm squashing (sigmoid hoặc tanh) để thực hiện điều này. Vì vậy, bạn có đơn vị cơ bản của lớp ẩn, đó là một khối sẽ tổng hợp một tập hợp các đầu vào có trọng số-- sau đó chuyển đáp ứng tổng hợp cho hàm phi tuyến tính để tạo phản hồi nút đầu ra (lớp ẩn). Đơn vị thiên vị giống như trong hồi quy tuyến tính, phần bù không đổi được thêm vào mỗi nút cần xử lý. Do khối xử lý phi tuyến tính, bạn không còn bị giới hạn trong các phản hồi chỉ tuyến tính (như trong mô hình hồi quy tuyến tính).

Ok, nhưng khi bạn có nhiều đơn vị perceptron duy nhất hoạt động cùng nhau, mỗi đơn vị có thể có hệ số nhân trọng lượng đầu vào khác nhau và phản hồi khác nhau (mặc dù TẤT CẢ xử lý cùng một bộ đầu vào với cùng một khối phi tuyến tính được mô tả trước đó). Điều làm cho các câu trả lời khác nhau là mỗi có trọng số hệ số khác nhau được học bởi mạng lưới thần kinh thông qua đào tạo (một số hình thức bao gồm giảm độ dốc). Kết quả của tất cả các tri giác sau đó được xử lý lại và chuyển đến một lớp đầu ra, giống như các khối riêng lẻ được xử lý. Câu hỏi sau đó là làm thế nào các trọng số chính xác được xác định cho tất cả các khối?

Một cách phổ biến để tìm hiểu các trọng số chính xác là bằng cách bắt đầu với các trọng số ngẫu nhiên và đo lường phản ứng lỗi giữa đầu ra thực tế thực và đầu ra mô hình đã học. Lỗi thường sẽ được truyền ngược qua mạng và thuật toán phản hồi sẽ riêng lẻ tăng hoặc giảm các trọng số đó theo tỷ lệ với lỗi. Mạng sẽ lặp đi lặp lại bằng cách chuyển tiếp, đo phản hồi đầu ra, sau đó cập nhật (chuyển điều chỉnh trọng lượng ngược) và sửa trọng số cho đến khi đạt được mức lỗi thỏa đáng. Tại thời điểm đó, bạn có một mô hình hồi quy có thể linh hoạt hơn mô hình hồi quy tuyến tính, đó là mô hình thường được gọi là xấp xỉ hàm phổ quát.

Một trong những cách thực sự giúp tôi tìm hiểu làm thế nào một mạng lưới thần kinh thực sự hoạt động là nghiên cứu mã của việc triển khai mạng thần kinh và xây dựng nó. Một trong những giải thích mã cơ bản tốt nhất có thể được tìm thấy trong chương mạng thần kinh của (có sẵn miễn phí) 'Hướng dẫn của Nhà khoa học và Kỹ sư về DSP' Ch. 26. Nó chủ yếu được viết bằng ngôn ngữ rất cơ bản (tôi nghĩ đó là fortran) thực sự giúp bạn thấy những gì đang diễn ra.


12

Tôi sẽ mô tả quan điểm của tôi về điều này theo hai bước: Bước đầu vào ẩn và bước ẩn đầu ra. Trước tiên tôi sẽ thực hiện bước ẩn đầu ra vì nó có vẻ ít thú vị hơn (với tôi).

Ẩn đầu ra

Đầu ra của lớp ẩn có thể là những thứ khác nhau, nhưng bây giờ hãy giả sử rằng chúng ra khỏi các chức năng kích hoạt sigmoidal . Vì vậy, chúng là các giá trị từ 0 đến 1 và đối với nhiều đầu vào, chúng có thể chỉ là 0 và 1.

Tôi thích nghĩ về sự biến đổi giữa các đầu ra của các nơ-ron ẩn này và lớp đầu ra chỉ là một bản dịch (theo nghĩa ngôn ngữ, không phải là ý nghĩa hình học). Điều này chắc chắn đúng nếu sự biến đổi là không thể đảo ngược , và nếu không thì điều gì đó đã bị mất trong bản dịch. Nhưng về cơ bản, bạn chỉ có các đầu ra của các nơ-ron ẩn nhìn từ một khía cạnh khác.

Nhập vào ẩn

Giả sử bạn có 3 nơ-ron đầu vào (để tôi có thể dễ dàng viết một số phương trình ở đây) và một số nơ-ron ẩn. Mỗi nơ-ron ẩn được lấy làm đầu vào tổng số đầu vào, vì vậy, ví dụ có thể

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Điều này có nghĩa là giá trị của hidden_1rất nhạy cảm với giá trị của input_1, hoàn toàn không nhạy cảm input_2và chỉ hơi nhạy cảm với input_3.

Vì vậy, bạn có thể nói rằng hidden_1đang nắm bắt một khía cạnh cụ thể của đầu vào, mà bạn có thể gọi input_1là khía cạnh "quan trọng".

Đầu ra từ hidden_1thường được hình thành bằng cách chuyển đầu vào qua một số chức năng, vì vậy giả sử bạn đang sử dụng chức năng sigmoid . Hàm này nhận các giá trị từ 0 đến 1; vì vậy hãy nghĩ về nó như một công tắc nói rằng điều đó input_1quan trọng hoặc không.

Vì vậy, đó là những gì lớp ẩn làm! Nó trích xuất các khía cạnh , hoặc các tính năng của không gian đầu vào.

Bây giờ trọng lượng có thể là tiêu cực quá! Điều đó có nghĩa là bạn có thể có được các khía cạnh như " input_1rất quan trọng NHƯNG CSONG input_2lấy đi tầm quan trọng đó":

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

hay input_1input_3có "chia sẻ" quan trọng:

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

Thêm hình học

Nếu bạn biết một số đại số tuyến tính, bạn có thể suy nghĩ về mặt hình học theo cách chiếu theo các hướng nhất định. Trong ví dụ trên, tôi chiếu dọc theo input_1hướng.

Hãy nhìn hidden_1lại, từ trên cao. Khi giá trị tại input_1đủ lớn, đầu ra của hàm kích hoạt sigmoid sẽ chỉ ở mức 1, nó sẽ không lớn hơn nữa . Nói cách khác, càng nhiều input_1sẽ không tạo ra sự khác biệt cho đầu ra. Tương tự, nếu nó di chuyển theo hướng ngược lại (tức là âm), thì sau một điểm, đầu ra sẽ không bị ảnh hưởng.

Được rồi Nhưng giả sử chúng ta không muốn độ nhạy theo hướng vô cực theo một hướng nhất định và chúng ta muốn nó chỉ được kích hoạt cho một phạm vi nhất định trên một dòng. Có nghĩa là cho các giá trị rất tiêu cực không có hiệu lực và đối với các giá trị rất tích cực thì không có hiệu lực, nhưng đối với các giá trị giữa nói, 5 và 16 bạn muốn nó thức dậy. Đây là nơi bạn sẽ sử dụng hàm cơ sở xuyên tâm cho chức năng kích hoạt của mình.

Tóm lược

Lớp ẩn trích xuất các tính năng của không gian đầu vào và lớp đầu ra chuyển chúng sang ngữ cảnh mong muốn. Có thể có nhiều hơn thế so với điều này, những gì với mạng nhiều lớp và như vậy, nhưng đây là những gì tôi hiểu cho đến nay.

EDIT: Trang này với các biểu đồ tương tác tuyệt vời của nó thực hiện công việc tốt hơn câu trả lời dài và rườm rà của tôi ở trên có thể làm: http://neuralnetworksanddeeplearning.com/chap4.html


1
Giống như OP, tôi hơi bối rối về lớp ẩn trong các mạng thần kinh. Trong ví dụ của bạn, làm thế nào để thuật toán NN tìm ra các trọng số cho các nơ-ron ẩn_1, hidden_2 và hidden_3? Và vì hidden_1, hidden_2 và hidden_3 có nguồn gốc từ cùng một biến đầu vào, nên các trọng số sẽ hội tụ đến cùng một giải pháp?
RobertF

5

Hãy để chúng tôi lấy trường hợp phân loại. Điều mà lớp đầu ra đang cố gắng làm là ước tính xác suất có điều kiện rằng mẫu của bạn thuộc về một lớp nhất định, nghĩa là khả năng mẫu đó thuộc về một lớp nhất định. Theo thuật ngữ hình học, việc kết hợp các lớp theo kiểu phi tuyến tính thông qua các hàm ngưỡng cho phép các mạng thần kinh giải quyết các vấn đề không lồi (nhận dạng giọng nói, nhận dạng đối tượng, v.v.), đó là những điều thú vị nhất. Nói cách khác, các đơn vị đầu ra có thể tạo ra các hàm quyết định không lồi như các hàm được mô tả ở đây .

Người ta có thể xem các đơn vị trong các lớp ẩn khi học các tính năng phức tạp từ dữ liệu cho phép lớp đầu ra có thể phân biệt rõ hơn lớp này với lớp khác, để tạo ranh giới quyết định hiệu quả hơn. Ví dụ, trong trường hợp nhận dạng khuôn mặt, các đơn vị ở các lớp đầu tiên học các tính năng như cạnh (phát hiện các cạnh tại các hướng và vị trí nhất định) và lớp cao hơn học cách kết hợp chúng để trở thành máy dò tìm các đặc điểm trên khuôn mặt như mũi, miệng hoặc mắt. Các trọng số của mỗi đơn vị ẩn đại diện cho các tính năng đó và đầu ra của nó (giả sử đó là một sigmoid) đại diện cho xác suất mà tính năng đó có trong mẫu của bạn.

Nói chung, ý nghĩa của đầu ra của các lớp đầu ra và các lớp ẩn phụ thuộc vào vấn đề bạn đang cố gắng giải quyết (hồi quy, phân loại) và hàm mất mát bạn sử dụng (entropy chéo, lỗi bình phương nhỏ nhất, ...)

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.