เลเยอร์ที่ซ่อนอยู่ในคอมพิวเตอร์คำนวณจากอะไร


187

ฉันแน่ใจว่าหลายคนจะตอบสนองด้วยลิงก์เพื่อ 'ให้ฉัน google สำหรับคุณ' ดังนั้นฉันอยากจะบอกว่าฉันพยายามที่จะคิดออกดังนั้นโปรดยกโทษให้ฉันขาดความเข้าใจที่นี่ แต่ฉันไม่สามารถหาวิธี การใช้งานจริงของเครือข่ายประสาทใช้งานได้จริง

ฉันเข้าใจเลเยอร์อินพุตและวิธีทำให้ข้อมูลเป็นมาตรฐานฉันยังเข้าใจหน่วยอคติ แต่เมื่อพูดถึงเลเยอร์ที่ซ่อนอยู่การคำนวณที่แท้จริงคืออะไรในเลเยอร์นั้นและวิธีที่แมปกับเอาต์พุตเป็นเพียงหมอกเล็กน้อย ฉันเห็นไดอะแกรมที่มีเครื่องหมายคำถามในเลเยอร์ที่ซ่อนอยู่ฟังก์ชันบูลีนเช่น AND / OR / XOR ฟังก์ชั่นการเปิดใช้งานและโหนดอินพุตที่แมปไปยังหน่วยที่ซ่อนอยู่ทั้งหมดและโหนดอินพุตที่แมปหน่วยที่ซ่อนอยู่เพียงไม่กี่ตัวเท่านั้น ฉันมีคำถามสองสามข้อเกี่ยวกับการใช้งานจริง แน่นอนคำอธิบายง่ายๆเกี่ยวกับกระบวนการโครงข่ายประสาททั้งหมดเหมือนกับที่คุณจะอธิบายให้เด็กฟังจะน่ากลัว

การคำนวณอะไรที่ทำในเลเยอร์ที่ซ่อนอยู่?

การคำนวณเหล่านั้นถูกแม็พกับเลเยอร์เอาต์พุตอย่างไร

เลเยอร์ ouput ทำงานอย่างไร ยกเลิกการทำให้ข้อมูลเป็นปกติจากเลเยอร์ที่ซ่อนอยู่หรือไม่

ทำไมบางเลเยอร์ในเลเยอร์อินพุตเชื่อมต่อกับเลเยอร์ที่ซ่อนอยู่และบางเลเยอร์ไม่ได้?


13
ผู้คนรอบ ๆ ที่นี่ดีฉันไม่เคยเห็นคำตอบแบบ "ให้ฉัน google ทำเพื่อคุณ" แต่หลายคำตอบที่ละเอียดอ่อนและน่าประหลาดใจต่อสิ่งที่ดูเหมือนจะเป็นคำถามพื้นฐานในตอนแรก น่าเสียดายที่ฉันไม่สามารถช่วยคุณได้ แต่ดูเหมือนว่ามีความเกี่ยวข้องดังนั้นฉันจึงลงคะแนนอย่างมีความสุข
Gala

4
ขอบคุณสำหรับความคิดเห็นและการโหวต Gael ฉันอาจจะน่าเบื่อเล็กน้อยโดยชุมชน SO ที่เราทุกคนรู้ว่าคนเหล่านั้นจะได้รับ :) ดีใจที่ได้เห็นจิตวิญญาณของการทำงานร่วมกันมากกว่าที่นี่แทนที่จะพยายามรับป้ายและ คะแนนโดยการแก้ไข / ปิดคำถาม
FAtBalloon

1
ฉันไม่เชี่ยวชาญในเครือข่ายประสาทเทียมโดยเฉพาะแม้ว่าฉันจะมีส่วนร่วมในแอปพลิเคชันและวิธีการของพวกเขา คำตอบที่ไม่เป็นประโยชน์ของฉันอาจเป็นไปได้ว่าการคำนวณเฉพาะในที่ซ่อนอยู่นั้นขึ้นอยู่กับ 'ฟังก์ชั่นต้นทุน' ที่คุณกำลังจัดเก็บใน ouput ของคุณเช่นสิ่งที่คุณพยายามบรรลุ ตัวอย่างเช่นหากคุณต้องการจัดกลุ่มองค์ประกอบอินพุตเป็นชุดคลัสเตอร์คุณจะคำนวณระยะทางระหว่างองค์ประกอบในเลเยอร์ที่ซ่อนอยู่ สิ่งนี้อาจทำซ้ำหลายรอบและปรับให้เหมาะสมภายในเลเยอร์นี้จนกว่าคุณจะได้พบกับข้อผิดพลาดที่อนุญาตให้กระบวนการ `ปล่อย 'เลเยอร์นี้
Lucozade

คำตอบ:


230

ประโยคสามประโยค:

  • แต่ละเลเยอร์สามารถใช้ฟังก์ชั่นใด ๆ ที่คุณต้องการกับเลเยอร์ก่อนหน้า (โดยปกติคือการแปลงเชิงเส้นตามด้วยการบีบอัดแบบไม่เชิงเส้น)

  • หน้าที่ของเลเยอร์ที่ซ่อนอยู่คือการแปลงอินพุตเป็นสิ่งที่เลเยอร์เอาท์พุทสามารถใช้ได้

  • เลเยอร์เอาท์พุทแปลงการเปิดใช้งานเลเยอร์ที่ซ่อนอยู่ในระดับใดก็ตามที่คุณต้องการให้เอาต์พุตของคุณเปิดอยู่

เช่นเดียวกับคุณ 5:

ถ้าคุณต้องการให้คอมพิวเตอร์บอกคุณว่ามีรถบัสอยู่ในรูปภาพหรือไม่คอมพิวเตอร์อาจมีเวลาได้ง่ายขึ้นถ้ามีเครื่องมือที่เหมาะสม

ดังนั้นเครื่องตรวจจับบัสของคุณอาจทำจากเครื่องตรวจจับล้อ (เพื่อช่วยบอกคุณว่าเป็นยานพาหนะ) และเครื่องตรวจจับกล่อง (เนื่องจากบัสมีรูปร่างเหมือนกล่องใหญ่) และเครื่องตรวจจับขนาด (เพื่อบอกคุณว่าใหญ่เกินไปที่จะเป็นรถ ) เหล่านี้คือองค์ประกอบสามส่วนของเลเยอร์ที่ซ่อนอยู่ของคุณ: พวกเขาไม่ได้เป็นส่วนหนึ่งของภาพดิบเครื่องมือที่คุณออกแบบมาเพื่อช่วยคุณระบุบัส

หากเครื่องตรวจจับทั้งสามตัวเปิด (หรือบางทีอาจทำงานโดยเฉพาะอย่างยิ่ง) ก็มีโอกาสดีที่คุณมีรถบัสต่อหน้าคุณ

ตาข่ายประสาทมีประโยชน์เพราะมีเครื่องมือที่ดี (เช่น backpropagation) สำหรับการสร้างเครื่องตรวจจับจำนวนมากและรวมเข้าด้วยกัน


เหมือนคุณเป็นผู้ใหญ่

เครือข่ายประสาทส่งต่อไปใช้ชุดของฟังก์ชั่นกับข้อมูล ฟังก์ชั่นที่แน่นอนจะขึ้นอยู่กับเครือข่ายประสาทที่คุณใช้บ่อยที่สุดฟังก์ชั่นเหล่านี้แต่ละเครื่องคำนวณการแปลงเชิงเส้นของเลเยอร์ก่อนหน้าตามด้วยการบีบอัดแบบไม่เชิงเส้น บางครั้งฟังก์ชันจะทำอย่างอื่น (เช่นการคำนวณฟังก์ชันแบบลอจิคัลในตัวอย่างของคุณหรือเฉลี่ยเหนือพิกเซลที่อยู่ติดกันในภาพ) ดังนั้นบทบาทของเลเยอร์ที่แตกต่างกันอาจขึ้นอยู่กับฟังก์ชั่นการคำนวณ แต่ฉันจะพยายามให้กว้างมาก

ขอเรียกการป้อนข้อมูลเวกเตอร์ , ที่ซ่อนอยู่ชั้นเปิดใช้งานและการเปิดใช้งานการส่งออกปีคุณมีบางฟังก์ชั่นที่แผนที่จากไปและฟังก์ชั่นอื่นที่แผนที่จากที่จะY h y f x h g h y yxhYxชั่วโมงก.ชั่วโมงY

ดังนั้นการเปิดใช้งานชั้นที่ซ่อนอยู่คือและการส่งออกของเครือข่ายที่มีการ(x))g ( f ( x ) )(x)ก.((x))

ทำไมมีสองฟังก์ชั่น (และ ) แทนที่จะเป็นเพียงหนึ่ง?กรัมก.

หากระดับความซับซ้อนต่อฟังก์ชั่นถูก จำกัด ดังนั้นสามารถคำนวณสิ่งต่าง ๆ ที่และไม่สามารถทำทีละรายการได้ f gก.((x))ก.


ตัวอย่างที่มีฟังก์ชั่นตรรกะ:

ตัวอย่างเช่นหากเราอนุญาตให้และเป็นตัวดำเนินการเชิงตรรกะอย่างง่ายเช่น "AND", "OR" และ "NAND" คุณจะไม่สามารถคำนวณฟังก์ชันอื่น ๆ เช่น "XOR" ด้วยหนึ่งในนั้น ในทางกลับกันเราสามารถคำนวณ "XOR" ถ้าเราเต็มใจที่จะเลเยอร์ฟังก์ชั่นเหล่านี้ที่ด้านบนของกันและกัน:กรัมก.

ฟังก์ชั่นชั้นแรก:

  • ตรวจสอบให้แน่ใจว่าอย่างน้อยหนึ่งองค์ประกอบคือ "TRUE" (โดยใช้ OR)
  • ตรวจสอบให้แน่ใจว่าไม่ใช่ "TRUE" ทั้งหมด (ใช้ NAND)

ฟังก์ชั่นชั้นที่สอง:

  • ตรวจสอบให้แน่ใจว่าเป็นไปตามเกณฑ์ของเลเยอร์ทั้งสอง (โดยใช้ AND)

เอาต์พุตของเครือข่ายเป็นเพียงผลลัพธ์ของฟังก์ชันที่สองนี้ เลเยอร์แรกแปลงอินพุตเป็นสิ่งที่เลเยอร์ที่สองสามารถใช้เพื่อให้เครือข่ายทั้งหมดสามารถทำงาน XOR ได้


ตัวอย่างที่มีรูปภาพ:

สไลด์ 61 จากการพูดคุย -มีให้ที่นี่เป็นภาพเดียว - แสดง (วิธีหนึ่งในการมองเห็น) สิ่งที่เลเยอร์ที่ซ่อนอยู่แตกต่างกันในเครือข่ายประสาทกำลังมองหา

เลเยอร์แรกจะมองหาส่วนสั้น ๆ ของภาพ: สิ่งเหล่านี้หาได้ง่ายจากข้อมูลพิกเซลแบบดิบ แต่พวกมันไม่ได้มีประโยชน์มากสำหรับพวกเขาในการบอกคุณว่าคุณกำลังมองหน้าหรือรถบัสหรือช้าง .

เลเยอร์ถัดไปจะเรียงขอบ: หากขอบจากชั้นที่ซ่อนอยู่ด้านล่างประกอบเข้าด้วยกันในบางวิธีดังนั้นหนึ่งในอุปกรณ์ตรวจจับสายตาที่อยู่ตรงกลางคอลัมน์ด้านซ้ายสุดอาจเปิดใช้งาน มันจะยากที่จะสร้างเลเยอร์เดี่ยวที่ดีในการค้นหาสิ่งที่เฉพาะเจาะจงจากพิกเซลดิบ: เครื่องตรวจจับดวงตานั้นง่ายกว่ามากในการสร้างเครื่องตรวจจับขอบออกมาได้ง่ายกว่าการใช้พิกเซลดิบ

เลเยอร์ถัดไปประกอบด้วยเครื่องตรวจจับดวงตาและเครื่องตรวจจับจมูกเข้าไปในใบหน้า กล่าวอีกนัยหนึ่งสิ่งเหล่านี้จะสว่างขึ้นเมื่อเครื่องตรวจจับดวงตาและเครื่องตรวจจับจมูกจากชั้นก่อนหน้าเปิดใช้งานด้วยรูปแบบที่ถูกต้อง สิ่งเหล่านี้ดีมากที่มองหาใบหน้าบางประเภท: หากมีใบหน้าหนึ่งใบหน้าหรือมากกว่าสว่างขึ้นเลเยอร์เอาต์พุตของคุณควรรายงานว่ามีใบหน้าอยู่

สิ่งนี้มีประโยชน์เพราะเครื่องตรวจจับใบหน้าสร้างจากเครื่องตรวจจับดวงตาและเครื่องตรวจจับจมูกได้ง่าย แต่จริงๆแล้วการสร้างความเข้มของพิกเซลนั้นยากมาก

ดังนั้นแต่ละเลเยอร์จะทำให้คุณไกลขึ้นและไกลขึ้นจากพิกเซลดิบและใกล้กับเป้าหมายสูงสุดของคุณ (เช่นการตรวจจับใบหน้าหรือการตรวจจับบัส)


คำตอบสำหรับคำถามอื่น ๆ ที่หลากหลาย

"ทำไมเลเยอร์บางอย่างในเลเยอร์อินพุตเชื่อมต่อกับเลเยอร์ที่ซ่อนอยู่และทำไมบางเลเยอร์ถึงไม่ได้?"

โหนดที่ถูกตัดการเชื่อมต่อในเครือข่ายเรียกว่าโหนด "อคติ" มีคำอธิบายที่ดีจริงๆเป็นที่นี่ คำตอบสั้น ๆ คือพวกเขาชอบดักคำศัพท์ในการถดถอย

"ภาพ" เครื่องตรวจจับนัยน์ตา "ในภาพตัวอย่างมาจากที่ใด"

ฉันไม่ได้ตรวจสอบภาพที่ฉันเชื่อมโยงด้วยซ้ำ แต่โดยทั่วไปแล้วการสร้างภาพข้อมูลเหล่านี้แสดงชุดของพิกเซลในเลเยอร์อินพุตที่เพิ่มกิจกรรมของเซลล์ประสาทที่เกี่ยวข้องให้ได้มากที่สุด ดังนั้นถ้าเราคิดว่าเซลล์ประสาทเป็นเครื่องตรวจจับดวงตานี่เป็นภาพที่เซลล์ประสาทพิจารณาว่าเป็นเหมือนตามากที่สุด คนมักจะพบว่าชุดพิกเซลเหล่านี้มีขั้นตอนการเพิ่มประสิทธิภาพ (ปีนเขา)

ในบทความนี้โดยคน Google บางคนที่มีหนึ่งในเครือข่ายประสาทที่ใหญ่ที่สุดในโลกพวกเขาแสดงเซลล์ประสาท "เครื่องตรวจจับใบหน้า" และ "เครื่องตรวจจับแมว" เซลล์ประสาทด้วยวิธีนี้เช่นเดียวกับวิธีที่สอง: พวกเขายังแสดงภาพจริงที่เปิดใช้งาน เซลล์ประสาทแรงที่สุด (รูปที่ 3 รูปที่ 16) วิธีที่สองนั้นดีเพราะมันแสดงให้เห็นว่าเครือข่ายมีความยืดหยุ่นและไม่เชิงเส้นอย่างไร "เครื่องตรวจจับ" ระดับสูงเหล่านี้มีความไวต่อภาพเหล่านี้ทั้งหมดแม้ว่าพวกเขาจะดูไม่คล้ายกับระดับพิกเซลก็ตาม


แจ้งให้เราทราบหากมีสิ่งใดที่นี่ไม่ชัดเจนหรือหากคุณมีคำถามเพิ่มเติม


2
ดังนั้นจึงมีเพียงหนึ่งอัลกอริทึมที่กำหนดไว้สำหรับทุก ๆ โหนดบนเลเยอร์ที่กำหนดและน้ำหนักเป็นสิ่งที่ทำให้ผลผลิตแตกต่างกันหรือไม่ หรือคุณสามารถตั้งโปรแกรมทุกโหนดบนเลเยอร์ให้แตกต่างกันได้หรือไม่?
FAtBalloon

3
@GeorgeMcDowd สิ่งนี้ทำให้เกิดปัญหาสำคัญ: การดูพิกเซลและการระบุบัสนั้นยากตามที่คุณแนะนำ โชคดีที่การดูพิกเซลและการหาขอบนั้นง่าย - นั่นเป็นเลเยอร์แรกที่ซ่อนอยู่ทั้งหมดพยายามทำ เลเยอร์ถัดไปพยายามทำการอนุมานโดยอิงตามขอบซึ่งง่ายกว่าการพยายามทำเช่นนั้นโดยใช้พิกเซล
David J. Harris

4
ดังนั้นควรให้รางวัลอื่น ๆ (นอกเหนือจากคะแนน) สำหรับเวลาและความพยายามที่คุณตอบคำถามนี้!
samsamara

1
@JoshuaEnfield ฉันคิดว่าตรรกะในปี 1980 คือการรวมกันของการคล้ายกับวิธีที่ผู้คนคิดว่าสมองทำงานว่ามันแตกต่างกันได้ทุกที่และค่าขอบเขตที่คุณกล่าวถึง ตั้งแต่นั้นมาผู้คนพบว่าf(x) = max(x, 0)("หน่วยเชิงเส้นที่แก้ไขแล้ว") มักจะทำงานได้ดีขึ้นแม้ว่าจะไม่มีคุณสมบัติเหล่านั้นมากมาย
David J. Harris

2
ตัวอย่างของบัสและเชนของฟังก์ชั่นเพียงแค่จับมัน ไม่เข้าใจว่าทำไมตำราจึงไม่สามารถสื่อความหมายได้
ลดขนาด

12

ฉันจะพยายามเพิ่มคำอธิบายการดำเนินงานที่ใช้งานง่าย ...

วิธีที่ง่ายในการคิดเกี่ยวกับโครงข่ายประสาทคือการคิดว่าตัวแบบการถดถอยเชิงเส้นพยายามทำอะไร การถดถอยเชิงเส้นจะรับอินพุตและเกิดขึ้นกับโมเดลเชิงเส้นซึ่งใช้ค่าอินพุตแต่ละครั้งคูณค่าสัมประสิทธิ์การถ่วงน้ำหนักที่เหมาะสมของโมเดลและพยายามแมปผลรวมของผลลัพธ์เหล่านั้นกับการตอบสนองเอาต์พุตที่ใกล้เคียงกับเอาต์พุตจริง สัมประสิทธิ์จะถูกกำหนดโดยการค้นหาค่าซึ่งจะลดตัวชี้วัดข้อผิดพลาดบางอย่างระหว่างค่าผลลัพธ์ที่ต้องการและค่าที่เรียนรู้โดยรูปแบบ อีกวิธีหนึ่งในการกล่าวคือโมเดลเชิงเส้นจะพยายามสร้างตัวคูณสัมประสิทธิ์สำหรับแต่ละอินพุตและหาผลรวมทั้งหมดเพื่อพยายามหาความสัมพันธ์ระหว่างอินพุต (หลาย) และค่าเอาต์พุต (โดยทั่วไป) โมเดลเดียวกันนั้นแทบจะคิดว่าเป็นโครงสร้างพื้นฐานพื้นฐานของเครือข่ายประสาท

แต่ตัวรับรู้หน่วยเดียวมีอีกหนึ่งชิ้นที่จะประมวลผลผลรวมของข้อมูลที่มีน้ำหนักในลักษณะที่ไม่ใช่เชิงเส้น โดยทั่วไปจะใช้ฟังก์ชัน squashing (sigmoid หรือ tanh) เพื่อทำสิ่งนี้ ดังนั้นคุณมีหน่วยพื้นฐานของเลเยอร์ที่ซ่อนอยู่ซึ่งเป็นบล็อกที่จะรวมชุดของอินพุตที่มีน้ำหนัก - จากนั้นจะผ่านการตอบกลับแบบรวมไปยังฟังก์ชันที่ไม่ใช่เชิงเส้นเพื่อสร้างการตอบสนองโหนดที่ซ่อนอยู่ หน่วย bias นั้นเหมือนกับการถดถอยเชิงเส้นซึ่งเป็นออฟเซ็ตคงที่ซึ่งถูกเพิ่มในแต่ละโหนดที่จะประมวลผล เนื่องจากบล็อกการประมวลผลที่ไม่ใช่เชิงเส้นคุณจึงไม่ จำกัด การตอบสนองเชิงเส้นเท่านั้น (เช่นเดียวกับในโมเดลการถดถอยเชิงเส้น)

ตกลง แต่เมื่อคุณมีหน่วย perceptron เดี่ยวจำนวนมากที่ทำงานร่วมกันแต่ละหน่วยสามารถมีตัวคูณน้ำหนักอินพุตที่แตกต่างกันและการตอบสนองที่แตกต่างกัน (แม้ว่าทั้งหมดจะประมวลผลชุดอินพุตเดียวกันกับบล็อกที่ไม่ใช่เชิงเส้นเดียวกันก่อนหน้านี้) สิ่งที่ทำให้การตอบสนองแตกต่างกันคือแต่ละคนมีน้ำหนักสัมประสิทธิ์ที่แตกต่างกันซึ่งเรียนรู้จากเครือข่ายประสาทผ่านการฝึกอบรม (บางรูปแบบรวมถึงการไล่ระดับสี) ผลลัพธ์ของ perceptrons ทั้งหมดจะถูกประมวลผลอีกครั้งและส่งไปยังเลเยอร์ผลลัพธ์เช่นเดียวกับที่ประมวลผลแต่ละบล็อก คำถามคือน้ำหนักที่ถูกต้องจะถูกกำหนดอย่างไรสำหรับบล็อคทั้งหมด?

วิธีทั่วไปในการเรียนรู้น้ำหนักที่ถูกต้องคือเริ่มต้นด้วยน้ำหนักแบบสุ่มและวัดการตอบสนองข้อผิดพลาดระหว่างเอาต์พุตจริงที่แท้จริงและเอาต์พุตโมเดลที่เรียนรู้ โดยทั่วไปแล้วข้อผิดพลาดจะถูกส่งผ่านกลับไปยังเครือข่ายและอัลกอริทึมข้อเสนอแนะจะเพิ่มหรือลดน้ำหนักเหล่านั้นทีละส่วนตามข้อผิดพลาด เครือข่ายจะวนซ้ำโดยการส่งต่อการวัดการตอบสนองของเอาต์พุตจากนั้นอัปเดต (ผ่านการปรับน้ำหนักย้อนหลัง) และแก้ไขน้ำหนักจนกว่าจะถึงระดับข้อผิดพลาดที่น่าพอใจ ณ จุดนี้คุณมีตัวแบบการถดถอยที่สามารถยืดหยุ่นได้มากกว่าตัวแบบการถดถอยเชิงเส้นมันเป็นสิ่งที่เรียกว่าตัวประมาณฟังก์ชั่นสากล

อีกวิธีหนึ่งที่ช่วยให้ฉันเรียนรู้วิธีการทำงานของโครงข่ายประสาทเทียมอย่างแท้จริงคือการศึกษารหัสของการนำโครงข่ายประสาทเทียมมาใช้และสร้างมันขึ้นมา หนึ่งในคำอธิบายรหัสพื้นฐานที่ดีที่สุดสามารถพบได้ในบทโครงข่ายประสาทของ (คู่มือที่มีให้ฟรี) 'คู่มือนักวิทยาศาสตร์และวิศวกรของ DSP' Ch 26. ส่วนใหญ่จะเขียนด้วยภาษาขั้นพื้นฐาน (ฉันคิดว่ามันเป็น Fortran) ที่ช่วยให้คุณเห็นว่าเกิดอะไรขึ้น


12

ฉันจะอธิบายมุมมองของฉันในสองขั้นตอน: ขั้นตอนการป้อนข้อมูลต่อการซ่อนและขั้นตอนการซ่อนผลลัพธ์ ฉันจะทำขั้นตอนที่ซ่อนไว้เพื่อผลลัพธ์ก่อนเพราะมันน่าสนใจน้อยกว่า (สำหรับฉัน)

ซ่อนเพื่อเอาท์พุท

ผลลัพธ์ของเลเยอร์ที่ซ่อนอยู่อาจเป็นสิ่งที่แตกต่างกัน แต่สำหรับตอนนี้สมมติว่าพวกมันออกมาจากฟังก์ชั่นการเปิดใช้งานsigmoidal ดังนั้นมันจึงเป็นค่าระหว่าง 0 ถึง 1 และสำหรับอินพุตจำนวนมากพวกเขาอาจเป็น 0 และ 1

ฉันชอบคิดถึงการเปลี่ยนแปลงระหว่างเอาท์พุทของเซลล์ประสาทที่ซ่อนอยู่และเลเยอร์เอาท์พุทเป็นเพียงการแปล (ในแง่ภาษาศาสตร์ไม่ใช่ความรู้สึกเชิงเรขาคณิต) นี่เป็นความจริงอย่างแน่นอนหากการแปลงกลับไม่ได้และถ้าไม่ใช่ก็มีบางอย่างสูญหายไปในการแปล แต่โดยทั่วไปคุณเพียงแค่เห็นเอาท์พุทของเซลล์ประสาทที่ซ่อนอยู่จากมุมมองที่แตกต่างกัน

ป้อนข้อมูลเพื่อซ่อน

สมมติว่าคุณมีเซลล์ประสาท 3 อินพุต (เพื่อให้ฉันสามารถเขียนสมการได้ที่นี่) และเซลล์ประสาทที่ซ่อนอยู่ เซลล์ประสาทที่ซ่อนอยู่แต่ละตัวจะได้รับผลรวมเป็นค่าอินพุตแบบอินพุทดังนั้นอาจเป็นเช่นนั้น

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

ซึ่งหมายความว่าค่าของการhidden_1มีความสำคัญมากค่าของinput_1ไม่ได้ทั้งหมดมีความไวต่อและมีเพียงเล็กน้อยเพื่อความละเอียดอ่อนinput_2input_3

ดังนั้นคุณสามารถพูดได้ว่าhidden_1กำลังจับภาพด้านใดด้านหนึ่งของอินพุตซึ่งคุณอาจเรียกว่า " input_1สำคัญ"

เอาต์พุตจากhidden_1มักจะเกิดจากการส่งอินพุตผ่านฟังก์ชั่นบางอย่างดังนั้นสมมติว่าคุณกำลังใช้ฟังก์ชันsigmoid ฟังก์ชันนี้ใช้กับค่าระหว่าง 0 ถึง 1 ดังนั้นให้คิดว่ามันเป็นสวิตช์ที่บอกว่าinput_1มีความสำคัญหรือไม่

นั่นคือสิ่งที่ชั้นซ่อนเร้นทำ! มันแยกด้านหรือคุณสมบัติของพื้นที่อินพุต

ตอนนี้น้ำหนักก็อาจเป็นลบเช่นกัน! ซึ่งหมายความว่าคุณจะได้รับลักษณะเช่น " input_1เป็นสิ่งสำคัญ แต่ยังinput_2นำความสำคัญนั้นออกไป":

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

หรือinput_1และinput_3มีความสำคัญ "แบ่งปัน":

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

เรขาคณิตเพิ่มเติม

ถ้าคุณรู้ว่าพีชคณิตเชิงเส้นคุณสามารถคิดเชิงเรขาคณิตในแง่ของการฉายตามทิศทางที่กำหนด ในตัวอย่างด้านบนฉันคาดการณ์ไปตามinput_1ทิศทาง

ลองดูhidden_1อีกครั้งจากข้างบน เมื่อค่าที่input_1มีขนาดใหญ่พอเอาท์พุทของฟังก์ชั่นการเปิดใช้งาน sigmoid จะอยู่ที่ 1 มันจะไม่ใหญ่ขึ้น กล่าวอีกนัยหนึ่งมากขึ้นเรื่อย ๆinput_1จะไม่สร้างความแตกต่างให้กับผลผลิต ในทำนองเดียวกันถ้ามันเคลื่อนที่ในทิศทางตรงกันข้าม (เช่นลบ) หลังจากนั้นจุดที่เอาต์พุตจะไม่ได้รับผลกระทบ

ตกลงไม่เป็นไร. แต่สมมติว่าเราไม่ต้องการความไวในทิศทางของอินฟินิตี้ในบางทิศทางและเราต้องการให้เปิดใช้งานสำหรับช่วงที่กำหนดบนบรรทัดเท่านั้น ความหมายสำหรับค่าลบมากไม่มีผลและสำหรับค่าบวกมากไม่มีผล แต่สำหรับค่าระหว่าง 5 และ 16 ที่คุณต้องการให้ปลุก นี่คือที่ที่คุณจะใช้ฟังก์ชันรัศมีพื้นฐานสำหรับฟังก์ชั่นการเปิดใช้งานของคุณ

สรุป

เลเยอร์ที่ซ่อนอยู่จะแยกคุณสมบัติของพื้นที่อินพุตและเลเยอร์เอาท์พุทแปลมันเป็นบริบทที่ต้องการ อาจมีมากไปกว่านี้สิ่งที่มีเครือข่ายหลายชั้นและเช่นนี้ แต่นี่คือสิ่งที่ฉันเข้าใจจนถึง

แก้ไข:หน้านี้ด้วยกราฟเชิงโต้ตอบที่ยอดเยี่ยมของมันทำงานได้ดีกว่าคำตอบที่ยุ่งยากและยาวนานของฉันข้างต้นที่ทำได้: http://neuralnetworksanddeeplearning.com/chap4.html


1
เช่นเดียวกับ OP ฉันสับสนเล็กน้อยเกี่ยวกับเลเยอร์ที่ซ่อนอยู่ในเครือข่ายประสาท ในตัวอย่างของคุณอัลกอริธึม NN จะหาน้ำหนักของเซลล์ประสาท hidden_1, hidden_2 และ hidden_3 อย่างไร และเนื่องจาก hidden_1, hidden_2 และ hidden_3 นั้นได้มาจากตัวแปรอินพุตเดียวกันน้ำหนักจะไม่รวมเข้ากับโซลูชันเดียวกันหรือไม่
RobertF

5

ให้เราพิจารณากรณีของการจำแนกประเภท สิ่งที่เลเยอร์เอาท์พุทพยายามทำคือประมาณความน่าจะเป็นแบบมีเงื่อนไขที่ตัวอย่างของคุณเป็นของคลาสที่กำหนดนั่นคือโอกาสที่กลุ่มตัวอย่างจะเป็นสมาชิกของคลาสที่กำหนด ในแง่เรขาคณิตการรวมเลเยอร์ในแบบที่ไม่เป็นเชิงเส้นผ่านฟังก์ชั่นขีด จำกัด ช่วยให้เครือข่ายนิวรัลสามารถแก้ปัญหาที่ไม่ใช่นูน (การรู้จำเสียงการรู้จำวัตถุและอื่น ๆ ) ซึ่งเป็นสิ่งที่น่าสนใจที่สุด ในคำอื่น ๆ หน่วยการส่งออกมีความสามารถในการสร้างฟังก์ชั่นการตัดสินใจที่ไม่นูนออกมาเช่นเดียวกับที่ปรากฎที่นี่

หนึ่งสามารถดูหน่วยในเลเยอร์ที่ซ่อนอยู่เป็นการเรียนรู้คุณสมบัติที่ซับซ้อนจากข้อมูลที่อนุญาตให้เลเยอร์เอาท์พุทสามารถแยกแยะชั้นหนึ่งจากอีกชั้นหนึ่งได้ดีขึ้นเพื่อสร้างขอบเขตการตัดสินใจที่แม่นยำยิ่งขึ้น ตัวอย่างเช่นในกรณีของการจดจำใบหน้าหน่วยในเลเยอร์แรกเรียนรู้ขอบเช่นคุณสมบัติ (ตรวจจับขอบที่ทิศทางและตำแหน่งที่กำหนด) และเลเยอร์ที่สูงขึ้นเรียนรู้ที่จะรวมสิ่งเหล่านั้นให้กลายเป็นเครื่องตรวจจับสำหรับใบหน้าเช่นจมูกปากหรือดวงตา น้ำหนักของหน่วยที่ซ่อนอยู่แต่ละหน่วยแสดงถึงคุณลักษณะเหล่านั้นและผลลัพธ์ (สมมติว่าเป็น sigmoid) แสดงถึงความน่าจะเป็นที่คุณสมบัตินั้นมีอยู่ในตัวอย่างของคุณ

โดยทั่วไปความหมายของผลลัพธ์ของเอาต์พุตและเลเยอร์ที่ซ่อนอยู่นั้นขึ้นอยู่กับปัญหาที่คุณพยายามแก้ไข (การถดถอยการจัดหมวดหมู่) และฟังก์ชันการสูญเสียที่คุณใช้ (เอนโทรปีข้ามข้อผิดพลาดกำลังสองน้อยที่สุด ... )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.