Keras: ความแตกต่างระหว่าง Kernel และ Activity regularizers


89

ฉันได้พบว่าweight_regularizerไม่มีมีมากขึ้นใน Keras และว่าในสถานที่ที่มีกิจกรรมและเคอร์เนล regularizer ผมอยากจะรู้ว่า:

  • อะไรคือความแตกต่างที่สำคัญระหว่างเคอร์เนลและกิจกรรม regularizers?
  • ฉันสามารถใช้activity_regularizerแทนweight_regularizer ได้หรือไม่?

คำตอบ:


87

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

การkernel_regularizerแทนที่ใหม่weight_regularizer- แม้ว่าจะไม่ชัดเจนจากเอกสาร

จากคำจำกัดความของkernel_regularizer:

kernel_regularizer: ฟังก์ชัน Regularizer ที่ใช้กับkernelเมทริกซ์น้ำหนัก (ดูตัวกำหนดค่าปกติ)

และactivity_regularizer:

activity_regularizer: ฟังก์ชัน Regularizer ใช้กับเอาต์พุตของเลเยอร์ ("การเปิดใช้งาน") (ดูตัวปรับแต่ง)

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

คุณสามารถดูการกระทำบนGitHub

เมื่อห้าเดือนก่อนFrançois Chollet ได้จัดเตรียมการแก้ไขให้กับตัวกำหนดกิจกรรมซึ่งรวมอยู่ใน Keras 2.1.4 แล้ว


คุณแน่ใจเกี่ยวกับการkernel_regularizerแทนที่weight_regularizerหรือไม่?
Simone

3
ฉันพบตัวอย่างมากมายที่ใช้ kernel_regularizer แต่ไม่ใช่สำหรับ activity_regularizer คุณสามารถแสดงความคิดเห็นเกี่ยวกับกรณีการใช้งานของ activity_regularizer ได้หรือไม่?
Milad M

1
เหตุใดคุณจึงต้องการทำให้เอาต์พุตของเลเยอร์ที่ซ่อนอยู่เป็นประจำ เป็นเพราะเหตุผลเดียวกันหรือไม่ที่เราทำให้อินพุตเป็นช่วง (-1, 1) หรือ (0, 1) เป็นปกติ นั่นคือการทำให้อินพุตไปยังเลเยอร์ที่ตามมามีขนาดเล็กลงเพื่อช่วยในกระบวนการ SGD?
Nagabhushan Baddi

1
@NagabhushanBaddi ดูคำตอบนี้: datascience.stackexchange.com/a/15195/32811
Michele Tonutti

1
@FinncentPrice ฉันสามารถสันนิษฐานได้ว่ามันเคยอยู่ที่นั่นและตอนนี้มันไม่มีอีกแล้ว
Michele Tonutti

39

คำตอบนี้ค่อนข้างช้า แต่มีประโยชน์สำหรับผู้อ่านในอนาคต ดังนั้นความจำเป็นจึงเป็นแม่ของการประดิษฐ์อย่างที่พวกเขาพูด ฉันเข้าใจมันเมื่อฉันต้องการเท่านั้น
คำตอบข้างต้นไม่ได้ระบุถึงความแตกต่างอย่างแท้จริงทำให้ทั้งคู่มีผลต่อน้ำหนักดังนั้นอะไรคือความแตกต่างระหว่างการลงโทษสำหรับน้ำหนักตัวเองหรือผลลัพธ์ของเลเยอร์
นี่คือคำตอบ: ฉันพบกรณีที่น้ำหนักของตาข่ายมีขนาดเล็กและดีอยู่ระหว่าง [-0.3] ถึง [+0.3]
ดังนั้นฉันไม่สามารถลงโทษพวกเขาได้จริงๆไม่มีอะไรผิดปกติกับพวกเขา เคอร์เนล Regularizer ไม่มีประโยชน์ อย่างไรก็ตามผลลัพธ์ของเลเยอร์นั้นใหญ่มากใน 100
โปรดทราบว่าอินพุตไปยังเลเยอร์มีขนาดเล็กเช่นกันโดยน้อยกว่าหนึ่งเสมอ แต่ค่าเล็กน้อยเหล่านั้นมีปฏิสัมพันธ์กับน้ำหนักในลักษณะที่ให้ผลลัพธ์จำนวนมหาศาลเหล่านั้น ที่นี่ฉันได้ตระหนักว่าสิ่งที่ฉันต้องการคือตัวกำหนดกิจกรรมแทนที่จะเป็นเคอร์เนลตัวควบคุม ด้วยสิ่งนี้ฉันกำลังลงโทษเลเยอร์สำหรับผลลัพธ์ขนาดใหญ่เหล่านั้นฉันไม่สนใจว่าน้ำหนักตัวเองจะเล็กหรือไม่ฉันแค่ต้องการป้องกันไม่ให้มันไปถึงสถานะดังกล่าวทำให้การกระตุ้นซิกมอยด์ของฉันอิ่มตัวและทำให้เกิดปัญหาอื่น ๆ มากมายเช่นการหายตัวไป การไล่ระดับสีและความเมื่อยล้า


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