“What you get by achieving your goals is not as important as what you become by achieving your goals.”
—Johann Wolfgang von Goethe
“สิ่งที่คุณได้จากการบรรลุจุดมุ่งหมายไม่สำคัญเท่า สิ่งที่คุณเป็นจากการบรรลุจุดหมาย.”
—โยฮันน์ โวล์ฟกัง วอน เกอเธ่
โครงข่ายประสาทเทียมความลึกสองชั้นนั้น แม้จะสามารถทำงานหลาย ๆ อย่างได้ดี ดังที่แสดงในตัวอย่างบท [chapter: ANN] และในทางทฤษฎีนั้น โครงข่ายประสาทเทียมความลึกสองชั้นนั้น จะสามารถฝึกให้ประมาณฟังก์ชันอะไรก็ได้ แต่ในทางปฏิบัติแล้ว สำหรับงานที่ซับซ้อนมาก ๆ ทั้งจำนวนหน่วยซ่อนที่ต้องเพิ่มจำนวนมหาศาล และการฝึกที่ใช้ทรัพยากรการคำนวณมาก รวมถึงข้อมูลพร้อมฉลากที่ต้องมีจำนวนมากพอ ทำให้ การประยุกต์กับงานการรู้จำรูปแบบของโครงข่ายประสาทเทียมสองชั้น จำกัดอยู่มาก โดยเฉพาะกับงานที่ซับซ้อนมาก ๆ เช่น งานรู้จำภาพ เสียงพูด หรือภาษาธรรมชาติ.
จนกระทั่ง ความก้าวหน้าล่าสุด ก็คือ แนวทางของการเรียนรู้เชิงลึก (Deep Learning) ที่ได้ขยายความสามารถของการประยุกต์ใช้โครงข่ายประสาทเทียมไปแบบก้าวกระโดด การเรียนรู้เชิงลึก แม้จะมีโครงสร้างพื้นฐานเป็นโครงข่ายประสาทเทียม แต่มีกลไกสำคัญหลายอย่างที่ช่วยขยายความสามารถ ซึ่งหนึ่งในนั้นคือ การใช้โครงสร้างเชิงลึก หรือการใช้โครงข่ายประสาทเทียมที่มีจำนวนชั้นคำนวณมาก 1.
หากจะเริ่มต้นกล่าวถึงการเรียนรู้แบบลึก แม้แนวคิดจะมีมานานมากพอ ๆ กับจุดกำเนิดของโครงข่ายประสาทเทียมเอง และวิธีการแพร่กระจายย้อนกลับ (ฺหัวข้อ [sec: ann training]) ก็มีความทั่วไปมากพอ ที่จะใช้ในกระบวนการฝึกของโครงข่ายประสาทเทียมกี่ชั้นก็ได้. แต่การประยุกต์ใช้โครงข่ายประสาทเทียมแบบลึกในช่วงก่อนศตวรรษที่ยี่สิบเอ็ดนั้นจำกัดอยู่มาก. อุปสรรคที่ที่สำคัญสำหรับการประยุกต์ใช้โครงข่ายประสาทเทียมแบบลึก ก็คือ ปัญหาการเลือนหายของเกรเดียนต์.
จนกระทั่งงานศึกษาที่สำคัญของฮินตันและซาลาคูทดินอฟ ที่พบวิธีการฝึกโครงข่ายประสาทเทียมแบบลึกได้อย่างมีประสิทธิภาพ. หลังจากนั้น ก็มีการศึกษาการเรียนรู้เชิงลึกอย่างกว้างขว้าง และการเรียนรู้เชิงลึกก็กลายเป็นศาสตร์และศิลป์ที่สำคัญสำหรับศาสตร์หลาย ๆ แขนง เช่น คอมพิวเตอร์วิทัศน์ (Computer Vision), การรู้จำคำพูด (Speech Recognition), การประมวลผลภาษาธรรมชาติ (Natural Language Processing), การค้นหายา (Drug Discovery), และ จีโนมิกส์ (Genomics). ความสนใจในการเรียนรู้เชิงลึกและโครงข่ายประสาทเทียมมีสูงมาก จนทำให้เกิดการศึกษาและพัฒนาอุปกรณ์คำนวณ สำหรับโครงข่ายประสาทเทียมโดยเฉพาะ ได้แก่ หน่วยประมวลผลเชิงประสาทแปลง (Neuromorphic Processing Unit คำย่อ NPU).
ปัจจัยของความสำเร็จของการเรียนรู้เชิงลึก หรือโครงข่ายประสาทเทียมแบบลึก มีอยู่หลายประการ ตั้งแต่ ฮาร์ดแวร์ที่เร็วขึ้น, ข้อมูลที่มากและหลากหลายขึ้น, วิธีการเตรียมข้อมูลที่ดีขึ้น รวมถึงการทำการฝึกก่อน, ขั้นตอนวิธีการหาค่าดีที่สุดที่มีประสิทธิภาพมากขึ้น, การฝึกทีละหมู่เล็ก, การใช้แบบจำลองที่จับลักษณะสำคัญของข้อมูลได้ดีขึ้น เช่น โครงข่ายคอนโวลูชั่น และโครงข่ายประสาทเวียนกลับ, การใช้กลไกการตกออก, การใช้กลไกความใส่ใจ, การใช้กลไกโครงข่ายปรปักษ์เชิงสร้าง ไปจนถึงการเปลี่ยนฟังก์ชันกระตุ้นจากซิกมอยด์ไปเป็นฟังก์ชันกระตุ้นที่ลดช่วงค่าอิ่มตัว เช่น เรลู.
บทที่ 1 นี้ อภิปรายการแก้ปัญหาการเลือนหายของเกรเดียนต์ ด้วยฟังก์ชันกระตุ้นเรลู (หัวข้อ 1.1), เทคนิคการจัดการฝึกกับข้อมูลขนาดใหญ่ด้วยการฝึกทีละหมู่เล็ก (หัวข้อ 1.2), เทคนิคการตกออก (หัวข้อ 1.3), วิธีการกำหนดค่าน้ำหนักเริ่มต้น (หัวข้อ 1.4), และขั้นตอนวิธีการฝึกที่มีประสิทธิภาพมากขึ้น (หัวข้อ 1.5). นอกจากนั้น ปัจจัยหนึ่งที่มีส่วนอย่างมาก ในพัฒนาการ และความสนใจ ไปจนถึงการประยุกต์ใช้ที่กว้างขวาง ก็คือเครื่องมือที่ช่วยให้การใช้งานเทคนิคต่าง ๆ เหล่านี้ทำได้สะดวกมากขึ้น หัวข้อ [section: deep exercises] อภิปรายตัวอย่างเครื่องมือที่ได้รับความนิยมอย่างสูง สำหรับการประยุกต์ใช้การเรียนรู้เชิงลึก.
การใช้โครงข่ายคอนโวลูชั่น ที่เหมาะกับข้อมูลที่มีลักษณะเชิงท้องถิ่นสูง เช่น ข้อมูลภาพ รวมไปจนถึงเทคนิคการฝึกก่อน และตัวอย่างโครงสร้างของโครงข่ายคอนโวลูชั่นที่รู้จักกันอย่างกว้างขวาง อภิปรายในบทที่ [chapter: Convolution]. การนำโครงข่ายคอนโวลูชั่น ไปประยุกต์ใช้กับงานการรู้จำทัศนรูปแบบ เป็นเนื้อหาหลักที่อภิปรายในบทที่ [chapter: Convolution Applications].
บทที่ [chapter: RNN] อภิปรายโครงข่ายประสาทเวียนกลับ ที่เหมาะกับข้อมูลที่มีลักษณะเชิงลำดับ. ตัวอย่างการประยุกต์ใช้โครงข่ายประสาทเวียนกลับ กับงานการรู้จำรูปแบบเชิงลำดับ เช่น การประมวลผลภาษาธรรมชาติ รวมไปถึงกลไกความใส่ใจ เป็นเนื้อหาหลักที่อภิปรายในบทที่ [chapter: NLP].
ปัญหาสำคัญที่ทำให้โครงข่ายลึกไม่ได้รับความนิยมในยุคต้นของพัฒนาการ คือ การฝึกโครงข่ายประสาทเทียมที่ลึกมากนั้นทำได้ยากมาก.
รูป 1.1 แสดงความก้าวหน้าของการฝึก เมื่อใช้ความลึกต่าง ๆ. แนวโน้มรวม ก็คือ ยิ่งความลึกมาก ดูเหมือนจะต้องการจำนวนสมัยฝึกที่มากขึ้น ค่าฟังก์ชันสูญเสียต่อสมัยของความลึกที่มากขึ้น ลู่ลงที่จำนวนสมัยมากขึ้น. . สังเกต ความก้าวหน้าของการฝึกเมื่อใช้ความลึกสิบชั้น (เส้นทึบหนาสีดำ) ซึ่งมีลักษณะลู่ลงราบเรียบร้อย แสดงถึงการฝึกที่สมบูรณ์ แต่ผลการฝึกได้คุณภาพการทำนายแย่มาก. นั่นคือ การฝึกเสร็จสิ้น แต่ฝึกไม่สำเร็จ ซึ่งยืนยันอย่างชัดเจนจากรูป 1.2 ที่สรุปค่าฟังก์ชันสูญเสียของการฝึก เมื่อใช้ความลึกต่าง ๆ.
ปัญหาของการฝึกโครงข่ายลึกแบบนี้ ภายหลังพบว่า สาเหตุคือ ขนาดเกรเดียนต์ในชั้นต้น ๆ ของโครงข่ายที่เล็กมากเกินกว่าจะที่ปรับค่าน้ำหนักและไบอัสได้อย่างมีประสิทธิภาพ. รูป 1.3 แสดงตัวอย่างขนาดเฉลี่ยของเกรเดียนต์ที่ชั้นต่าง ๆ ของโครงข่ายประสาทเทียมสิบชั้น. รูป 1.4 สรุปค่าใหญ่ที่สุดของขนาดเฉลี่ยเกรเดียนต์ในชั้นต่าง ๆ. สังเกตว่า ขนาดเฉลี่ยเกรเดียนต์แต่ละชั้นแตกต่างกันอย่างมาก. (แบบฝึกหัด [ex: vanishing gradient]).
การฝึกโครงข่ายประสาทเทียม ก็คือการหาค่าน้ำหนักที่เหมาะสม ซึ่งแนวทางที่ใช้ก็คือใช้เกรเดียนต์ของฟังก์ชันจุดประสงค์ต่อค่าน้ำหนัก. แต่หากเกรเดียนต์มีขนาดเล็กมาก การหาค่าน้ำหนักที่เหมาะสมก็ทำได้ยาก และในหลายสถานการณ์ก็คือความล้มเหลวของการฝึกโครงข่าย. ปัญหาการฝึกโครงข่ายลึก ดังที่อภิปรายนี้ รู้จักกันในชื่อปัญหาการเลือนหายของเกรเดียนต์ (vanishing gradient problem). นั่นคือ ค่าเกรเดียนต์ที่คำนวณจากวิธีแพร่กระจายย้อยกลับสำหรับค่าน้ำหนักในชั้นต้น ๆ (ใกล้อินพุต) จะมีขนาดเล็กลงมาก จนแทบไม่สามารถปรับค่าน้ำหนักได้ ซึ่งส่งผลให้ การฝึกโครงข่ายลึกล้มเหลว.
![]() |
![]() |
![]() |
การเลือนหายของเกรเดียนต์เอง ก็พบว่าสาเหตุหลักมาจากการใช้ฟังก์ชันกระตุ้นซิกมอยด์ ที่มีช่วงพลวัตรแคบ. เพื่อแก้ปัญหาช่วงพลวัตรของฟังก์ชันกระตุ้นซิกมอยด์ ฟังก์ชันกระตุ้นเรคติไฟด์ลิเนียร์ (rectified linear ซึ่งมักย่อว่า เรลู relu สำหรับ rectified linear unit) ถูกเสนอขึ้นมา. การเปลี่ยนไปใช้ฟังก์ชันกระตุ้น ที่เป็นฟังก์ชันเรคติไฟด์ลิเนียร์ หรือเรลู เป็นปัจจัยที่สำคัญ ที่ช่วยให้การฝึกโครงข่ายประสาทเทียมเชิงลึกทำได้ง่ายขึ้น และช่วยลดปัญหาการเลือนหายของเกรเดียนต์. สมการ \(\eqref{eq: deep rectified linear}\) แสดงการคำนวณของฟังก์ชันกระตุ้นเรลู \[\mathrm{relu}(a) = \left\{ \begin{array}{l l} a & \quad \mbox{เมื่อ } a \geq 0, \\ 0 & \quad \mbox{เมื่อ } a < 0. \end{array} \right. \label{eq: deep rectified linear}\] ซึ่งอนุพันธ์สามารถคำนวณได้จาก \[\frac{d \mathrm{relu}}{da} = \left\{ \begin{array}{l l} 1 & \quad \mbox{เมื่อ } a \geq 0, \\ 0 & \quad \mbox{เมื่อ } a < 0. \end{array} \right. \label{eq: deep rectified linear derivative}\]
รูป 1.5 ภาพบนซ้ายแสดงการกระตุ้นของฟังก์ชันซิกมอยด์ เมื่อเปรียบเทียบกับการกระตุ้นของฟังก์ชันเรลู (ภาพบนขวา) และค่าอนุพันธ์ของฟังก์ชันซิกมอยด์ (ภาพล่างซ้าย) และค่าอนุพันธ์ของฟังก์ชันเรลู (ภาพล่างขวา). สังเกตว่า ค่าอนุพันธ์ของฟังก์ชันซิกมอยด์ จะมีช่วงพลวัตรอยู่ในบริเวณแคบ ๆ ใกล้ ๆ ศูนย์ ในขณะที่ ค่าอนุพันธ์ของฟังก์ชันเรลู จะมีช่วงพลวัตรครอบคลุมบริเวณที่มีค่าเป็นบวกทั้งหมด. การที่ค่าอนุพันธ์ของฟังก์ชันซิกมอยด์มีช่วงพลวัตรแคบ ทำให้การฝึกโครงข่ายประสาทเทียมที่ใช้ฟังก์ชันกระตุ้นเป็นซิกมอยด์ทำได้ยาก. ในที่นี้ ช่วงพลวัตร หมายถึง ช่วงบริเวณของอินพุตที่ค่าอนุพันธ์มีขนาดใหญ่. จากรูป 1.5 เราจะเห็นว่าค่าอนุพันธ์ของฟังก์ชันเรลู มีขนาดเป็นหนึ่ง ตลอดช่วงอินพุตที่มีค่าเป็นบวก เปรียบเทียบกับอนุพันธ์ของฟังก์ชันซิกมอยด์ ที่มีค่ามากกว่าศูนย์อย่างชัดเจน อยู่แค่บริเวณที่อินพุตมีค่าใกล้ ๆ ศูนย์เท่านั้น.
รูป 1.6 และ 1.7 แสดงให้เห็นว่า การเปลี่ยนฟังก์ชันกระตุ้นจากซิกมอยด์มาเป็นเรลู ช่วยแก้ปัญหาการเลื่อนหายของเกรเดียนต์ได้อย่างชัดเจน. เปรียบเทียบรูป 1.4 (ใช้ฟังก์ชันกระตุ้นซิกมอยด์) กับรูป 1.7 (ใช้ฟังก์ชันกระตุ้นเรลู) ซึ่งทั้งคู่ เป็นโครงข่ายประสาทเทียมสิบชั้นเหมือนกัน เพียงแต่ใช้ฟังก์ชันกระตุ้นต่างกัน. จะเห็นว่า เมื่อใช้ฟังก์ชันกระตุ้นซิกมอยด์ ขนาดของเกรเดียนต์จะลดลงเรื่อย ๆ จากชั้นสุดท้ายไปสู่ชั้นต้น. นอกจากขนาดเกรเดียนต์ลดลงเรื่อย ๆ แล้ว ขนาดเกรเดียนต์ยังลดลงไปอยู่ในระดับใกล้ศูนย์ด้วย (เส้นประสีเทา แสดงแนวค่าศูนย์). ขณะที่ เมื่อใช้ฟังก์ชันกระตุ้นเรลู (รูป 1.7) นอกจาก จะไม่เห็นแนวโน้มการลดลงของเกรเดียนต์จากชั้นสุดท้ายไปชั้นต้นแล้ว (1) ขนาดเกรเดียนต์มีค่าใหญ่ขึ้นมาก และ (2) ขนาดเกรเดียนต์มีค่าอยู่ในระดับมากกว่าศูนย์อย่างเห็นได้ชัด (อยู่เหนือเส้นประสีเทา).
รูป 1.8 แสดงให้เห็นว่า เมื่อแก้ปัญหาการเลื่อนหายของเกรเดียนต์ได้ การฝึกโครงข่ายลึกก็สามารถทำได้ดีขึ้นมาก.
![]() |
![]() |
![]() |
การมีข้อมูลจำนวนมาก แม้เป็นโอกาสที่ดี แต่ก็ต้องการกลไกที่ช่วยในการจัดการข้อมูลมหาศาล เพื่อการใช้งานหน่วยประมวลผลและหน่วยความจำได้อย่างมีประสิทธิภาพ. หนึ่งในกลไกที่สำคัญนั้น คือ การฝึกทีละหมู่เล็ก (minibatch training).
บท [chapter: ANN] ได้อภิปรายถึง ทางเลือกในการฝึก โดย การฝึกที่ใช้ข้อมูลทั้งหมดในการปรับปรุงค่าน้ำหนักพร้อม ๆ กันทีเดียว ซึ่งเรียกว่า การฝึกแบบออฟไลน์ (offline training) หรือ การฝึกแบบหมู่ และ การฝึกที่ใช้ข้อมูลทีละจุดข้อมูลและปรับปรุงค่าน้ำหนักทีละครั้งสำหรับแต่ละจุดข้อมูล ซึ่งเรียกว่า การฝึกแบบออนไลน์ (online training) หรือ การฝึกแบบส่วนเพิ่ม (incremental mode). นอกจากนั้น ยังได้อภิปรายถึงข้อดีและข้อเสียต่าง ๆ ของทางเลือกทั้งสองนี้ นั่นคือ การฝึกแบบออฟไลน์ สามารถทำการคำนวณได้อย่างรวดเร็ว และยังสามารถใช้การประมวลผลแบบขนาน (parallel processing) มาช่วยทำให้การคำนวณมีประสิทธิภาพมากขึ้นได้ แต่ข้อเสียคือ ต้องการหน่วยความจำมาก. ในขณะที่ ข้อดีของการฝึกแบบออนไลน์ นอกจากต้องการใช้หน่วยความจำปริมาณน้อยกว่า คือ เมื่อทำร่วมกับการสลับลำดับของข้อมูลแต่ละสมัยฝึก จะช่วยลดความเสี่ยงในการเข้าไปติดอยู่ในค่าตัวทำต่ำสุดท้องถิ่นได้ หรือ กล่าวอีกอย่างอาจช่วยปรับปรุงคุณภาพของการฝึกได้. ประเด็นเรื่องการฝึกแบบออนไลน์ช่วยคุณภาพของการฝึกนี้ กูดเฟโลและคณะ เสริมว่า การฝึกโดยใช้ข้อมูลทีละน้อย ๆ อาจจะช่วยให้ผลคล้ายการทำเรกูลาไรซ์ ซึ่งอาจจะเพราะสัญญาณรบกวนที่ปนเข้ามาในกระบวนการฝึก.
การฝึกทีละหมู่เล็ก (minibatch) เป็นเทคนิคที่ประณีประนอม ระหว่างแนวทางการฝึกแบบหมู่ และการฝึกแบบออนไลน์ เพื่อใช้เวลาในการฝึกไม่นานเกินไป ใช้หน่วยความจำไม่มากเกินไป และได้คุณภาพการฝึกที่ดี. นั่นคือ การฝึกทีละหมู่เล็ก จะแบ่งข้อมูลออกเป็นกลุ่มเล็ก ๆ โดยที่ แต่ละกลุ่มมีจำนวนข้อมูลมากกว่าหนึ่งจุดข้อมูล แต่น้อยกว่าจำนวนข้อมูลฝึกทั้งหมด. การฝึกแต่ละสมัย จะปรับค่าน้ำหนักและไบอัสสำหรับการคำนวณกับแต่ละหมู่เล็กนี้ จนครบทุกหมู่. สมการ \(\eqref{eq: deep minibatch}\) แสดงการคำนวณของค่าน้ำหนักสำหรับแต่ละหมู่เล็ก (การคำนวณไบอัสก็ทำได้ในลักษณะเดียวกัน)
\[\begin{eqnarray} w^{(l)}_{ji} \leftarrow w^{(l)}_{ji} - \alpha \frac{1}{|B_m|} \sum_{n \in B_m} \frac{\partial E_n}{\partial w^{(l)}_{ji}}, \label{eq: deep minibatch} \end{eqnarray}\] สำหรับ \(m = 1, 2, \ldots, \left\lceil\frac{N}{|B|}\right\rceil\) เมื่อ \(w^{(l)}_{ji}\) เป็นค่าน้ำหนักระหว่างหน่วย \(j\) ของชั้น \(l\) และหน่วย \(i\) ของชั้นก่อนหน้า. พจน์ \(\frac{\partial E_n}{\partial w^{(l)}_{ji}}\) คือ ค่าอนุพันธ์ของฟังก์ชันจุดประสงค์ คำนวณจากจุดข้อมูลที่ \(n^{th}\) จากจำนวนทั้งหมด \(N\) จุดข้อมูล. ตัวแปร \(m\) แทนดัชนีของหมู่เล็ก. สัญกรณ์ \(|B_m|\) และ \(|B|\) แทน ขนาดของหมู่เล็กที่ \(m^{th}\) และขนาดของหมู่เล็กส่วนใหญ่ ตามลำดับ. ขนาดของหมู่เล็ก (batch size) คือ จำนวนจุดข้อมูลในหมู่เล็ก. เซต \(B_m\) เป็นเซตของดัชนีของจุดข้อมูลที่ถูกจัดอยู่ในหมู่เล็กที่ \(m^{th}\) โดยดัชนีของจุดข้อมูล จะถูกสุุ่มจัดเข้าหมู่เล็ก และหากจำนวนข้อมูลทั้งหมดไม่อาจแบ่งได้เท่า ๆ กันทุกหมู่เล็ก จะมีหมู่เล็กหนึ่งหมู่ที่มีจำนวนต่างจากหมู่อื่น ๆ (หรือหมู่เศษนี้อาจถูกตัดทิ้ง เพื่อประสิทธิภาพของการคำนวณ).
การทำลักษณะเช่นนี้ จะคล้ายกับการฝึกแบบหมู่ ในแง่ที่ว่า แต่ละการคำนวณกับหมู่เล็กจะเป็นการคำนวณกับจุดข้อมูลหลาย ๆ จุดพร้อม ๆ กัน และก็จะคล้ายกับการฝึกแบบออนไลน์ ในแง่ที่ว่า ค่าน้ำหนักจะถูกปรับหลาย ๆ ครั้งในหนึ่งสมัย (แต่ละครั้ง ปรับสำหรับแต่ละหมู่เล็ก).
กูดเฟโลและคณะ อภิปรายว่า ขนาดของหมู่เล็กที่เหมาะสม ขึ้นกับทั้งฮาร์ดแวร์และขั้นตอนวิธีการหาค่าดีที่สุดที่เลือกใช้ เช่น หากใช้การคำนวณด้วยหน่วยประมวลผลกราฟิกส์ (Graphics Processing Unit หรือ GPU) การเลือกขนาดหมู่เล็กเป็นจำนวนของสองยกกำลัง เช่น \(16, 32, 64, 128, 256\) จะช่วยให้ได้เวลาประมวลผลที่เร็ว. ขั้นตอนวิธีการหาค่าดีที่สุดที่ใช้แค่ค่าเกรเดียนต์ เช่น วิธีลงเกรเดียนต์ โดยทั่วไปแล้ว มักจะทนทานและสามารถได้งานได้ดีกับขนาดต่าง ๆ ของหมู่เล็กได้.
หมายเหตุ แต่ขั้นตอนวิธีการหาค่าดีที่สุดที่ใช้ทั้งค่าเกรเดียนต์และเฮเชี่ยน 2 ต้องการขนาดหมู่เล็กที่ใหญ่พอที่จะสามารถประมาณค่าเฮเชี่ยนได้อย่างมีประสิทธิภาพ เช่น \(10000\).
รูป 1.9 แสดงเวลาที่ใช้ในการฝึก เมื่อใช้ขนาดหมู่เล็กต่าง ๆ. หมายเหตุ การใช้ขนาดหมู่เล็กเป็นหนึ่ง เทียบเท่าการฝึกแบบออนไลน์ และการใช้ขนาดหมู่เล็กเท่ากับหรือมากกว่าจำนวนข้อมูล (ซึ่งในตัวอย่างแสดงในรูป คือ \(150\)) เทียบเท่าการฝึกแบบหมู่. สังเกตว่า ขนาดหมู่ที่เล็กลง จะใช้เวลาในการฝึกนานขึ้น. แม้ว่า การใช้ขนาดหมู่ที่เล็กลง จะทำให้เวลาในการฝึกนานขึ้น แต่ขนาดหมู่ที่เล็กลง ทำให้ในการคำนวณทำงานกับเมทริกซ์ขนาดเล็กลงด้วย. การเลือกขนาดหมู่ เป็นเสมือนการหาสมดุลระหว่างเวลาฝึกและขนาดหน่วยความจำ.
นอกจากนั้น ผลทางอ้อมของการฝึกหมู่เล็ก ยังช่วยให้คุณภาพการฝึกดีขึ้นได้ด้วย (ถ้าทำอย่างเหมาะสม) ดังแสดงในรูป 1.10. กูดเฟโลและคณะ อภิปรายว่า ขนาดหมู่เล็ก อาจจะช่วยให้ผลในเชิงการเรกูลาไรซ์ หรือคุมความซับซ้อนของแบบจำลอง ช่วยลดโอกาสการโอเวอร์ฟิตข้อมูลลง ซึ่งอาจจะเป็น เพราะผลจากสัญญาณรบกวนจากการฝึกหมู่เล็ก ในกระบวนการหาค่าดีที่สุด. ในทางปฏิบัติ การใช้ขนาดหมู่ที่เล็กลง มักจะทำให้ต้องการจำนวนสมัยฝึกน้อยลง (ถึงแม้แต่ละสมัย อาจจะใช้เวลาฝึกนานขึ้น).
![]() |
![]() |
กลไกที่สำคัญในการฝึกหมู่เล็ก คือการสุ่มลำดับของข้อมูล. การสุ่มนี้อาจจะสุ่มครั้งเดียว และใช้ลำดับนั้นตลอด หรือจะสุ่มทุกสมัยฝึกก็ได้. ในทางปฏิบัติ กูดเฟโลและคณะ อภิปรายว่า ผลจากการสุ่มแค่ครั้งเดียว กับการสุ่มทุกสมัยฝึก ไม่ได้ต่างกันมาก แต่สำคัญมาก ๆ ที่ต้องทำการสุ่ม. รูป 1.12 ภาพซ้าย แสดงเวลาในการฝึก เมื่อฝึกหมู่เล็กด้วยลำดับข้อมูลแบบต่าง ๆ ได้แก่ ไม่มีการสุ่มลำดับ, สุ่มลำดับครั้งเดียว, และสุ่มลำดับทุกสมัยฝึก. ภาพขวา แสดงผลความแม่นยำของการทำนาย. จากภาพ เวลาในการฝึกเมื่อทำการสุ่มครั้งเดียว ไม่ได้ต่างจากการไม่สุ่มมาก แต่การสุ่มทุกรอบฝึกมีผลในการเพิ่มเวลาฝึกอย่างชัดเจน ในขณะที่ คุณภาพของการฝึก (ความแม่นยำในการทำนาย) การสุ่มครั้งเดียว และการสุ่มทุกสมัย ไม่ได้ต่างกันมาก แต่มีผลดีกว่าการไม่สุ่มอย่างชัดเจน.
![]() |
![]() |
เทคนิคการตกออก (drop out) เป็นกลไกสำหรับการทำเรกูลาไรซ์สำหรับโครงข่ายประสาทเทียม โดยได้รับแรงบันดาลใจ จากการทำงานของโครงข่ายประสาททางชีววิทยา ที่ผลการทำงานเชื่อถือได้สูง ในขณะที่ เซลล์ประสาทต่าง ๆ ที่เป็นส่วนประกอบของโครงข่าย แต่ละเซลล์มีการทำงานที่เชื่อถือไม่ค่อยได้. นั่นคือ ในขณะที่ แต่ละเซลล์ บางครั้งอาจจะทำงาน บางครั้งอาจจะไม่ทำงาน แต่ด้วยการที่โครงข่ายมีเซลล์จำนวนมาก และการเชื่อมต่อได้เตรียมสำหรับความไม่แน่นอนนี้ไว้ ทำให้ผลโดยรวม ยังคงรักษาการทำงานที่เชื่อถือได้สูง.
สำหรับโครงข่ายประสาทเทียม การตกออก สามารถทำได้โดยการสุ่มเลือกหน่วยคำนวณ ที่จะปิดการทำงาน ซึ่ง ทางการคำนวณ สามารถทำได้ง่ายๆ โดยคูณด้วยค่าศูนย์. ดังนั้น อาจมองได้ว่า การตกออก เป็นเสมือน การใช้หน้ากาก หรือค่าสัมประสิทธิ์ของการตกออก \(m\) ไปคูณกับค่าหน่วยคำนวณ \(z\) โดย ค่าของ \(m\) สุ่มมาจากค่าศูนย์หรือหนึ่ง.
นั่นคือ ค่าหน่วยคำนวณหลังทำการตกออก \(\tilde{z}\) คำนวณได้จาก \(\tilde{z} = m \cdot z\) เมื่อ \(m \sim \mathrm{Bernoulli}(p)\) โดย \(\mathrm{Bernoulli}(p)\) หมายถึง การแจกแจงแบบแบร์นูลลี่ (Bernoulli distribution) ที่โอกาสที่ค่า \(m=1\) คือ \(p\) นอกนั้น (โอกาส \(1-p\)) \(m = 0\). การคำนวณการตกออก เขียนในรูปเวกเตอร์ได้เป็น \[\begin{eqnarray} \tilde{\boldsymbol{z}} &=& \boldsymbol{m} \odot \boldsymbol{z} \label{eq: drop out} \end{eqnarray}\] เมื่อ หน้ากาก \(\boldsymbol{m}\) มีส่วนประกอบแต่ละตัวเป็นค่าที่สุ่มมาจากหนึ่งหรือศูนย์ (การแจกแจงแบบแบร์นูลลี่).
การตกออก จะให้ผลในลักษณะคล้ายกับการทำเรกูลาไรซ์ นั่นคือ ช่วยคุณสมบัติความทั่วไปของแบบจำลอง. นอกจากนั้น ยังเชื่อว่า การตกออก ยังช่วยเพิ่มความยืดหยุ่น ความทนทานในการเชื่อมต่อ ในลักษณะที่ช่วยลดการพึ่งพาคุณลักษณะที่สำคัญไม่กี่อย่างลง และเพิ่มโอกาสที่ทำให้แบบจำลองได้เรียนรู้คุณลักษณะที่สำคัญต่าง ๆ ของรูปแบบได้ครบถ้วนมากขึ้น. การสุ่มปิดการทำงานของหน่วยคำนวณ เชื่อว่า น่าจะช่วยหยุดการปรับตัวร่วมกัน (break co-adaptation) และน่าจะส่งผลให้เกิดความหลากหลายในการเชื่อมต่อมากขึ้น. และเพราะความหลากหลายในการเชื่อมต่อ สัมพันธ์โดยตรงกับความยืดหยุ่นกับความทนทานของระบบโดยรวม จึงเชื่อว่า การตกออก จะช่วยให้แบบจำลองมีความยืดหยุ่น และทนทาน(ต่ออินพุตที่หลากหลาย)ได้ดีขึ้น.
การสุ่มปิดการทำงาน มักจะใช้เฉพาะตอนฝึกเท่านั้น. ตอนใช้งานอนุมาน จะเปิดการทำงานของทุกส่วน. เนื่องจาก หากฝึกได้ดีพอ ส่วนย่อยต่าง ๆ ในโครงข่ายจะทำงานได้ดีพอสมควร ดังนั้น หากเปิดทุกส่วนหมดพร้อมกัน จะต้องทำการชดเชย เพื่อไม่ให้เอาต์พุตที่ได้มีค่ามากเกินไป. การชดเชยนี้ มักถูกเรียกว่า การปรับส่วนค่าน้ำหนัก (weight scaling). นั่นคือ หากสุ่มด้วยความน่าจะเป็น \(0.5\) หมายถึง โดยประมาณ หน่วยคำนวณต่าง ๆ ในโครงข่ายจะทำงานแค่ครึ่งเดียว. ถ้าหากเปิดทุกหน่วยคำนวณพร้อม ๆ กัน จะต้องชดเชยด้วยการลดความแรงของค่าหน่วยคำนวณลงครึ่งหนึ่ง. และในกรณีทั่ว ๆ ไป สำหรับความน่าจะเป็นของการคงอยู่ \(p\) แล้ว ค่าหน่วยคำนวณ \[\begin{eqnarray} \boldsymbol{z}' &=& p \cdot \boldsymbol{z} \label{eq: dropout eval1} \end{eqnarray}\] เมื่อ \(\boldsymbol{z}'\) คือค่าหน่วยคำนวณหลังการปรับส่วนค่าน้ำหนัก และ \(p\) เป็นค่าความน่าจะเป็นของการคงอยู่ และ \(\boldsymbol{z}\) คือค่าหน่วยคำนวณ (ก่อนการปรับส่วนค่าน้ำหนัก).
![]() |
รูป 1.13 แสดงภาพประกอบแนวคิดของการตกออก. ขณะฝึก จะมีหน่วยคำนวณบางส่วนถูกปิดไป และส่งผลเสมือนว่า กำลังใช้งานโครงข่ายย่อยอยู่ โดยที่โครงข่ายย่อยจะเปลี่ยนไปแบบสุ่มในการคำนวณเกรเดียนต์แต่ละครั้ง. ขณะใช้งาน ทุกหน่วยคำนวณจะทำงานพร้อมกัน ดังนั้น เพื่อไม่ให้เอาต์พุตมีค่ามากเกินไป ค่าหน่วยคำนวณจะถูกปรับขนาดลงอย่างเหมาะสม. สังเกตว่า การตกออก จะไม่ทำกับชั้นเอาต์พุต.
ในทางปฏิบัติ การคำนวณค่าอนุมาน โดยชดเชยการตกออกที่ทำในขณะฝึก ค่อนข้างเทอะทะ และทำให้การใช้งานแบบจำลองต้องระมัดระวังมากในการนำค่าน้ำหนักที่ฝึกแล้วมาใช้. นั่นคือ หากระหว่างการฝึก ไม่ได้ใช้การตกออก ก็ต้องไม่ทำการปรับส่วนค่าน้ำหนัก แต่หากระหว่างการฝึก ทำการตกออก ก็ต้องทำการปรับส่วนค่าน้ำหนักและปรับส่วนค่าน้ำหนักด้วยค่า \(p\) ที่ใช้ (และแต่ละชั้นคำนวณสามารถทำการตกออก ด้วยค่า \(p\) ที่ต่างกันได้). ดังนั้น การนำค่าน้ำหนักที่ฝึกจากหลาย ๆ วิธีมาใช้ จะค่อนข้างยุ่งยากและมีความเสี่ยงมาก รวมถึงยังจำกัดการฝึกด้วยว่า หากฝึกด้วยการตกออก แล้วต้องทำตลอดทุกสมัยฝึก และใช้ค่า \(p\) เท่าเดิมตลอด.
เพื่อลดปัญหาดังกล่าว การทำการตกออก จึงอาจเลือกทำ \[\begin{eqnarray} \tilde{\boldsymbol{z}} &=& \frac{1}{p} \cdot \boldsymbol{m} \odot \boldsymbol{z} \label{eq: drop out 2} \end{eqnarray}\] ขณะฝึก และไม่ต้องทำการปรับส่วนค่าน้ำหนัก ขณะใช้งานอนุมาน (นั่นคือ \(\boldsymbol{z}' = \boldsymbol{z}\)). แนวทางนี้ ยืดหยุ่น สะดวก และลดความเสี่ยงของการชดเชยผิดลง. การใช้ \(\frac{1}{p}\) (ซึ่งมากกว่าหรือเท่ากับหนึ่ง) เทียบเท่าการขยายขนาดของหน่วยคำนวณ ขณะทำการตกออก ซึ่งจะบังคับให้แบบจำลองเรียนรู้ค่าน้ำหนัก ที่จะไม่ทำให้เอาต์พุตมีค่ามากเกินไป ในอัตราส่วนที่สัมพันธ์กับโอกาสการคงอยู่. ดังนั้น ค่าน้ำหนักที่ได้จึงสามารถนำไปใช้งานได้เลย โดยไม่ต้องทำการปรับส่วนค่าน้ำหนักอีก.
ประโยชน์ของการตกออก ยังถูกมองว่า เป็นเพิ่มความน่าเชื่อถือได้ของการอนุมาน ในลักษณะคล้ายแนวทางการจัดถุง (bagging). แนวทางการจัดถุง เป็นหนึ่งในแนวทางหลัก ของการประสานการเรียนรู้ (ensemble learning). การประสานการเรียนรู้ เป็นเทคนิคของการเรียนรู้ของเครื่อง เพื่อปรับปรุงคุณภาพการอนุมาน โดยใช้ค่าทำนายจากหลาย ๆ แบบจำลอง และนำค่าทำนายต่าง ๆ เหล่านั้นมาสรุปรวมเป็น ค่าทำนายของการประสานการเรียนรู้. วิธีการสรุปอาจทำได้หลายแบบ ขึ้นกับภารกิจการทำนาย เช่น หากเป็นการทำนายค่าถดถอย (เอาต์พุต \(y \in \mathbb{R}\)) อาจใช้ค่าเฉลี่ยจากค่าทำนายของแบบจำลองต่าง ๆ. แต่หากเป็นการจำแนกกลุ่ม (เอาต์พุต \(y \in \{1, \ldots, K\}\) เมื่อ \(K\) เป็นจำนวนกลุ่ม) อาจสรุปโดยการลงคะแนนเสียง (vote) นั่นคือ การใช้ค่าฐานนิยม หรือสรุปเป็นกลุ่มที่ถูกจำแนกมากที่สุด (ซึ่งอาจต้องการกลยุทธ์ในการจัดการกับกรณีเสมอกัน).
ในขณะที่ การประสานการเรียนรู้ เป็นเทคนิคแนวทางกว้างๆ ที่เน้นการนำผลทำนายจากหลาย ๆ แบบจำลอง มาสรุปร่วมกัน. แนวทางการจัดถุง เป็นแนวทางการเตรียมแบบจำลองต่างๆ สำหรับใช้ในการประสานการเรียนรู้.
แบบจำลองต่างๆ ที่กล่าวถึงในการประสานการเรียนรู้ หมายถึง ฟังก์ชันการทำนายใดๆ ที่สร้างมาต่างกัน อาจจะโดยมีโครงสร้างทางคณิตศาสตร์ที่ต่างกัน (เช่น โครงข่ายประสาทเทียมสามชั้น กับโครงข่ายประสาทเทียมห้าชั้น หรือโครงข่ายประสาทเทียม กับซัพพอร์ตเวกเตอร์แมชชีน) หรืออาจจะโดยมีโครงสร้างทางคณิตศาสตร์ที่เหมือนกัน แต่ผ่านกระบวนการฝึกที่ต่างกัน เช่น ใช้ข้อมูลในการฝึกที่ต่างกัน หรือต่างกันทั้งโครงสร้างทางคณิตศาสตร์และกระบวนการฝึก.
แนวทางการจัดถุง เน้นการเตรียมแบบจำลองที่ต่างกัน ด้วยการใช้ข้อมูลฝึกที่ต่างกัน นั่นคือ หากต้องการเตรียม \(M\) แบบจำลองสำหรับใช้ในการประสานการเรียนรู้ จากชุดข้อมูลฝึกที่มีจำนวนจุดข้อมูลเป็น \(N\) แนวทางการจัดถุง จะสร้างข้อมูลสำหรับฝึกขึ้นมา \(M\) ชุด โดยแต่ละชุด จะสุ่มจุดข้อมูลจากชุดฝึกมาแบบหยิบคืน (sample with replacement) โดยจำนวนข้อมูลในแต่ละชุด \(N'\) เป็นอภิมานพารามิเตอร์ของการจัดถุง. จากนั้น แบบจำลองแต่ละตัว จะถูกฝึกกับข้อมูลที่สร้างขึ้นแต่ละชุด และแบบจำลองทั้งหมดที่ฝึกเสร็จ ก็จะสามารถนำไปใช้ในการประสานการเรียนรู้ได้.
การตกออก ถูกมองว่า เป็นกลไกในลักษณะคล้ายแนวทางการจัดถุง จากการที่ ขณะฝึก การปรับค่าน้ำหนักแต่ละครั้ง จะมีเฉพาะบางส่วนของโครงข่ายเท่านั้นที่จะถูกปรับค่า ส่วนที่ถูกปิดการทำงาน จะไม่ได้ถูกปรับค่าน้ำหนัก. ดังนั้น เมื่อใช้งาน และเปิดการทำงานของทุกส่วน จึงคล้ายการประสาทการเรียนรู้ของส่วนย่อยต่าง ๆ ภายในโครงข่าย. แต่การตกออก ก็ไม่ได้ทำให้การใช้งานโครงข่ายประสาทเทียมเหมือนการประสานการเรียนรู้แบบดั้งเดิม. เพราะว่า โดยทั่วไปแล้ว ส่วนต่าง ๆ ของโครงข่ายที่เปิดและปิดขณะฝึกจากกลไกของการตกออก จะมีการซ้อนทับกันอยู่มาก ซึ่งต่างจาก การประสานการเรียนรู้แบบดั้งเดิม ที่แต่ละแบบจำลองมีความเป็นอิสระต่อกันสูงกว่ามาก. อย่างไรก็ตาม ด้วยเหตุผลดังอภิปรายนี้ ในมุมมองหนึ่ง การตกออก ถูกตีความว่า น่าจะช่วยปรับปรุงคุณภาพของแบบจำลอง ได้จากกลไกที่ให้ผลในลักษณะของการประสานการเรียนรู้.
โดยทั่วไป การตกออก นิยมใช้ความน่าจะเป็นของการคงอยู่ \(p\) เป็น \(0.8\) สำหรับชั้นอินพุต และ \(0.5\) สำหรับชั้นซ่อน และการตกออก จะใช้งานได้ดีกับแบบจำลองที่มีขนาดใหญ่พอ (ความซับซ้อนมากเพียงพอ). แต่การตกออก อาจทำให้การฝึกทำได้ช้าลง. การศึกษาของศรีวาสทาวาและคณะ รายงานว่า การตกออก ให้ผลช่วยการฝึกได้ดีกว่าการทำเรกูลาไรซ์หลาย ๆ วิธี รวมถึง วิธีค่าน้ำหนักเสื่อม. ข้อเสียของการใช้ การตกออกที่สำคัญ ก็เช่น อาจทำให้การฝึกทำได้ช้าลง และอาจทำให้ต้องการแบบจำลองที่ใหญ่ขึ้น. ลักษณะเดียวกับการทำเรกูลาไรซ์ การตกออก อาจไม่ได้ช่วยมาก หากข้อมูลที่ฝึกมีปริมาณมาก ซึ่งประโยชน์ที่ได้จากการทำการตกออก อาจจะน้อยกว่าข้อเสียที่จะทำให้ต้องการแบบจำลองใหญ่ขึ้น และทำให้การฝึกช้าลง.
นอกจากเทคนิคการตกออกแล้ว เทคนิคการตกออก ยังเป็นแรงบันดาลใจให้เกิดการพัฒนาเทคนิคอื่น ๆ ที่คล้าย ๆ กันจำนวนมาก เช่น การตกออกเร็ว (fast drop out), การส่งเสริมการตกออก (dropout boosting), การเชื่อมตกออก (DropConnect). อย่างไรก็ตาม ด้วยผลลัพธ์การทำงาน ประสิทธิภาพ และความสะดวกของการใช้งาน การตกออก เป็นแนวทางที่ได้รับความนิยมสูงกว่าวิธีที่พัฒนาต่อ ๆ ขึ้นมาเหล่านี้. กูดเฟโลและคณะ อภิปรายสรุปว่า กลไกสำคัญที่เทคนิคการตกออกเป็นตัวแทน คือ การใส่ความไม่แน่นอนเข้าไปในการฝึกโครงข่าย และทำการอนุมานโดยสรุปจากผลต่าง ๆ ที่ผ่านความไม่แน่นอน ซึ่งในผลในลักษณะการการจัดถุง โดยมีการใช้พารามิเตอร์ร่วมกัน. การใส่ความไม่แน่นอน เข้าไปจะช่วยให้แบบจำลองเรียนรู้ที่จะยืดหยุ่นขึ้น และครบถ้วนขึ้น ซึ่งอาจจะคล้ายกับคน ที่เรียนรู้ที่จะยืดหยุ่นขึ้นและรอบคอบขึ้น เมื่อคำนึงความไม่แน่นอนที่อาจเกิดขึ้น. ศรีวาสทาวาและคณะ ได้ทดลองใช้หน้ากากค่าจริง \(\boldsymbol{m} \sim \mathcal{N}(\boldsymbol{1}, \boldsymbol{I})\) (การแจกแจงปกติ ที่มีค่าเฉลี่ยและค่าเบี่ยงเบนมาตราฐานเป็นหนึ่ง ไม่มีสหสัมพันธ์ระหว่างตัวแปร) แทนการแจกแจงแบร์นูลลี่ (สมการ \(\eqref{eq: drop out}\)) และพบว่า ได้ผลการทำงานที่ดีเช่นกัน นอกจากนั้น หน้ากากค่าจริงนี้ มีค่าคาดหมาย \(E[\boldsymbol{m}] = \boldsymbol{1}\) จึงไม่ต้องทำการปรับส่วนค่าน้ำหนัก.
การฝึกโครงข่ายประสาทเทียมแบบลึก ใช้ขั้นตอนวิธีการหาค่าดีที่สุดที่อาศัยเกรเดียนต์. ค่าเริ่มต้นของตัวแปร มีผลอย่างมากต่อการทำงานการหาค่าดีที่สุด เช่นการเริ่มต้นในตำแหน่งที่ค่าเกรเดียนต์พอดี จะช่วยทำให้การฝึกโครงข่ายทำได้ง่ายและเร็วขึ้น. ในขณะที่การเริ่มต้นในตำแหน่งที่ค่าเกรเดียนต์เปลี่ยนแปลงอย่างรุนแรง อาจนำไปสู่ปัญหาเสถียรภาพของการฝึก หรือหากเริ่มต้นในตำแหน่งที่ค่าเกรเดียนต์มีค่าน้อยมาก (มักอ้างถึงด้วยคำว่า “ที่ราบ” หรือ plateau) อาจทำให้การฝึกไม่ก้าวหน้า หรือหยุดชะงักได้.
เนื่องจากความเข้าใจในกระบวนการเรียนรู้ของโครงข่ายประสาทเทียมยังไม่กระจ่างชัดสมบูรณ์ ปัจจัยต่าง ๆ ของการฝึก รวมถึงการกำหนดค่าน้ำหนักเริ่มต้น จึงยังไม่มีข้อสรุปที่แน่ชัด. นอกจาก สิ่งหนึ่งที่จำเป็น คือ ค่าน้ำหนักเริ่มต้น ต้องช่วยลดการปรับตัวไปเหมือน ๆ กัน (มักอ้างถึงเป็น break symmetry).
การปรับตัวไปเหมือน ๆ กัน มาจากการที่โครงข่ายประสาทเทียมมีวิธีการคำนวณแต่ละหน่วยคำนวณเหมือน ๆ กัน. ดังนั้นการที่แต่ละหน่วยคำนวณเริ่มต้นด้วยค่าเดียวกัน จะทำให้มันมีค่าเกรเดียนต์เท่ากัน และถูกปรับค่าไปเท่า ๆ กัน จนสุดท้าย แต่ละหน่วยคำนวณจะทำงานเหมือนกัน ตอบสนองกับรูปแบบย่อยเดียวกัน ไม่ได้แยกกันรับผิดชอบแต่ละรูปแบบย่อย ๆ ทำให้ความสามารถโดยรวมของโครงข่าย ที่แม้จะมีจำนวนหน่วยคำนวณมาก แต่ให้ประสิทธิผลการทำงานเหมือนโครงข่ายที่มีหน่วยคำนวณน้อย (หรือ ในกรณีสุดโต่ง อาจทำงานเหมือนมีหน่วยคำนวณเดียว).
นอกจากลดการปรับตัวไปเหมือนกัน อีกปัจจัยหนึ่งที่สำคัญในการกำหนดค่าเริ่มต้น คือ ขนาดของค่าน้ำหนักไม่ควรจะมากเกินไป จนผลต่อเนื่อง ให้เกรเดียนต์มีค่าน้อย (ฝึกยาก) หรือมากเกินไป (การคำนวณขาดเสถียรภาพ). แนวปฏิบัติคือ การใช้การสุ่มค่า เพื่อกำหนดค่าน้ำหนักเริ่มต้น. การกำหนดค่าน้ำหนักเริ่มต้นด้วยการสุ่มจากการแจกแจงที่มีเอนโทรปีสูง (เช่น การแจกแจงเอกรูป) สามารถทำได้ง่ายๆ และน่ามีโอกาสน้อยมาก ที่ค่าน้ำหนักจะไปเริ่มต้นที่เดียวกัน แม้ว่าจะมีพารามิเตอร์ค่าน้ำหนักจำนวนมาก.
กูดเฟโลและคณะ อภิปรายว่า แทนที่การสุ่ม เราอาจจะคำนวณหาชุดค่าน้ำหนัก ที่แต่ละชุดแตกต่างกันมาก ๆ ได้ เช่น ในกรณีที่เหมาะสม อาจใช้ขั้นตอนวิธีแกรมชมิดต์ 3 แต่แนวทางนี้ มักจะเพิ่มภาระการคำนวณก่อนการฝึกขึ้นมาก และภาระการคำนวณก่อนการฝึกที่เพิ่มขึ้นมากนี้ อาจไม่คุ้มกับผลประโยชน์ที่ช่วยลดการภาระการคำนวณระหว่างการฝึกลง เมื่อเปรียบเทียบกับการใช้แนวทางการสุ่ม.
ค่าพารามิเตอร์น้ำหนัก \(\boldsymbol{w}\) นิยมกำหนดค่าเริ่มต้นด้วยการสุ่ม ส่วนค่าพารามิเตอร์ไบอัส \(\boldsymbol{b}\) อาจกำหนดค่าเริ่มต้นเป็นค่าคงที่ หรืออาจจะสุ่มค่าเช่นเดียวกันก็ได้. การสุ่มค่าน้ำหนัก มักนิยมสุ่มจากการแจกแจงเอกรูป หรือการแจกแจงปกติ. ค่าการแจกแจงที่นิยม คือ กำหนดค่าเริ่มต้นน้ำหนักจากการแจกแจงเอกรูป \(\mathcal{U}\left(-\frac{1}{\sqrt{m_i}},\frac{1}{\sqrt{m_i}} \right)\) เมื่อ \(m_i\) เป็นจำนวนอินพุตของชั้นคำนวณ (อาจอ้างถึงว่าเป็น “จำนวนแผ่เข้า” หรือ a number of fan-in units). ค่า \(\frac{1}{\sqrt{m_i}}\) เพื่อป้องกันไม่ให้ผลคำนวณมีค่าใหญ่เกินไป จนผลเสียต่อเสถียรภาพของการฝึก สำหรับโครงข่ายขนาดใหญ่.
ตัวอย่างเช่น หากชั้นคำนวณ ทำ \(\boldsymbol{a} = \boldsymbol{w}^T \boldsymbol{x} + \boldsymbol{b}\) กับ \(\boldsymbol{z} = h(\boldsymbol{a})\) เมื่อ \(h\) เป็นฟังก์ชันกระตุ้น และอินพุตของชั้น \(\boldsymbol{x} \in \mathbb{R}^{m_i}\). ค่าน้ำหนักของชั้น \(\boldsymbol{w} \in \mathbb{R}^{m_o \times m_i}\). แล้ว ค่าเริ่มต้นของ \(\boldsymbol{w}\) กำหนดโดย \[\begin{eqnarray} w_{kj} &\sim& \mathcal{U}\left(-\frac{1}{\sqrt{m_i}},\frac{1}{\sqrt{m_i}} \right) \label{eq: standard init} \end{eqnarray}\] เมื่อ \(w_{kj}\) คือค่าน้ำหนักแต่ละค่า โดย \(k = 1, \ldots, m_o\) และ \(j = 1, \ldots, m_i\).
อย่างไรก็ตาม เซเวียร์ โกลโรต์ และโยชัว เบนจิโอ ศึกษาความยากของการฝึกโครงข่ายประสาทเทียม ตีความผลที่ได้ และเมื่อประกอบกับผลงานศึกษาของแบรดลีย์ ที่พบว่าความแปรปรวน (variance) ของค่าเกรเดียนต์ที่แพร่กระจายย้อนกลับ ลดลงเรื่อย ๆ ตามชั้นที่ย้อนกลับ ทั้งคู่สันนิษฐานว่า หากความแปรปรวน ของผลการกระตุ้น \(\boldsymbol{z}\) และความแปรปรวนค่าเกรเดียนต์ ของแต่ละชั้นคำนวณมีค่าพอ ๆ กัน จะช่วยให้สารสนเทศไหลผ่านได้ดีขึ้น และจะช่วยให้การฝึกโครงข่ายทำได้สะดวกขึ้น. จากข้อสันนิษฐานดังกล่าว ทั้งคู่วิเคราะห์ความแปรปรวนของของแต่ละชั้นคำนวณโดยประมาณ (อาศัยสมมติฐานหลายอย่าง รวมถึงสมมติฐานเชิงเส้น) และเสนอว่า ควรกำหนดค่าเริ่มต้นสำหรับค่าน้ำหนัก โดยให้ \[\begin{eqnarray} \forall l, \mathrm{var}[\boldsymbol{w}^{(l)}] &=& \frac{2}{m_i^{(l)} + m_o^{(l)}} \label{eq: premise xavier init} \end{eqnarray}\] เมื่อ \(\mathrm{var}[\boldsymbol{w}^{(l)}]\) คือความแปรปรวนของค่าน้ำหนักชั้นคำนวณที่ \(l^{th}\) และ \(m_i^{(l)}\) คือจำนวนแผ่เข้า และ \(m_o^{(l)}\) คือจำนวนหน่วยคำนวณในชั้น (หรือจำนวนเอาต์พุตของชั้นคำนวณ ที่อาจอ้างถึงเป็น “จำนวนแผ่ออก” หรือ a number of fan-out units). เมื่อนำเงื่อนไขนี้ไปใช้กับการแจกแจงเอกรูป จะได้ว่า \[\begin{eqnarray} w_{kj} &\sim& \mathcal{U}\left( -\sqrt{\frac{6}{m_i + m_o}}, \sqrt{\frac{6}{m_i + m_o}}\right) \label{eq: xavier initialization}. \end{eqnarray}\] การกำหนดค่าน้ำหนักด้วยนิพจน์ \(\eqref{eq: xavier initialization}\) นิยม เรียกว่า การกำหนดค่าน้ำหนักด้วยวิธีเซเวียร์ (Xavier weight initialization).
การวิเคราะห์ของโกลโรต์และเบนจิโอ คิดจากฟังก์ชันกระตุ้นไฮเปอร์บอลิกแทนเจนต์ (tanh) และฟังก์ชันกระตุ้นเครื่องหมายอ่อน (softsign, \(h(a) = \frac{a}{1+|a|}\)). ทั้งคู่เป็นฟังก์ชันที่สมมาตรที่ศูนย์ 4 ไคมิง เห้อ และคณะ พบว่า เงื่อนไขที่โกลโรต์และเบนจิโอวิเคราะห์ อาจจะไม่เหมาะ เมื่อพิจารณาฟังก์ชันกระตุ้นที่ไม่สมมาตรที่ศูนย์ เช่น ฟังก์ชันเรลู ที่นิยมใช้กับโครงข่ายลึก. ตามแนวทางของโกลโรต์และเบนจิโอ คณะของไคมิง เห้อ ทำการวิเคราะห์เงื่อนไขของค่าน้ำหนัก โดยพิจารณาฟังก์ชันกระตุ้นเรลู และฟังก์ชันอื่นในลักษณะคล้ายกัน. ฟังชั่งตระกูลเรลู ที่คณะของเห้อพิจารณา อาจเขียนเป็นรูปทั่วไปได้ดังสมการ \(\eqref{eq: PRelu}\). \[\begin{eqnarray} h(a) = \left\{\begin{array}{cc} a, & \mbox{เมื่อ } a > 0, \\ \alpha \cdot a, & \mbox{เมื่อ } a \leq 0. \end{array} \right. \label{eq: PRelu} \end{eqnarray}\] เมื่อ \(\alpha\) คือ พารามิเตอร์ของฟังก์ชัน. หาก \(\alpha = 0\) จะทำให้ \(h(a)\) เป็นฟังก์ชันเรลู. หาก \(\alpha > 0\) เป็นค่าคงที่ โดยเป็นอภิมานพารามิเตอร์ที่กำหนดโดยผู้ใช้ จะทำให้ \(h(a)\) เป็นฟังก์ชันเรลูรั่ว (leaky relu). นอกจากนั้น คณะของเห้อ ได้เสนอฟังก์ชันกระตุ้นที่สามารถปรับตัวได้ โดยให้ \(\alpha > 0\) เป็นค่าพารามิเตอร์ที่ถูกฝึกไปพร้อม ๆ กับค่าน้ำหนักและไบอัส และคณะของเห้อ เรียกฟังก์ชันกระตุ้นนี้ว่า ฟังก์ชันพีเรลู (PRelu).
เงื่อนไขที่คณะของเห้อเสนอ แสดงในสมการ \(\eqref{eq: premise kaiming init}\). \[\begin{eqnarray} \mathrm{var}[\boldsymbol{w}^{(l)}] &=& \frac{2}{(1 + \alpha^2) \cdot m_i^{(l)} } \label{eq: premise kaiming init} \end{eqnarray}\] เมื่อ \(\alpha\) เป็นพารามิเตอร์ของฟังก์ชันตระกูลเรลู.
เมื่อนำเงื่อนไขในสมการ \(\eqref{eq: premise kaiming init}\) ไปใช้กับการแจกแจงปกติ (ที่มักนิยมใช้กับเงื่อนไขของคณะของเห้อ) จะได้ว่า \[\begin{eqnarray} w_{kj} &\sim& \mathcal{N}\left(0, \sqrt{\frac{2}{(1 + \alpha^2) \cdot m_i}}\right) \label{eq: kaiming init}. \end{eqnarray}\] การกำหนดค่าน้ำหนักเริ่มต้น ด้วยนิพจน์ \(\eqref{eq: kaiming init}\) รู้จักกันทั่วไปในชื่อ การกำหนดค่าน้ำหนักด้วยวิธีไคมิง (Kaiming weight initialization). สังเกต หากพิจารณากรณีฟังก์ชันกระตุ้นเรลู (\(\alpha = 0\)) ความแปรปรวนของค่าน้ำหนัก จากเงื่อนไขไคมิง คือ \(\frac{2}{m_i}\). ในขณะที่นิพจน์ \(\eqref{eq: standard init}\) ส่งผลให้ ความแปรปรวนของค่าน้ำหนัก คือ \(\frac{1}{3 \cdot m_i}\) (โดยนิพจน์ \(\eqref{eq: standard init}\) ไม่คำนึงถึงฟังก์ชันกระตุ้น).
นอกจาก การกำหนดค่าน้ำหนักเริ่มต้น ด้วยการสุ่มดังอภิปรายนี้แล้ว การทำการฝึกก่อน (หัวข้อ 1.5.4) เพื่อได้ค่าน้ำหนักที่ดี ก่อนที่จะทำการฝึกแบบจำลองสำหรับภารกิจที่ต้องการจริงๆ เป็นแนวทางหนึ่งที่ให้ผลดีมากในทางปฏิบัติ.
ขณะที่วิธีลงเกรเดียนต์ หรือมักนิยมเรียก วิธีลงเกรเดียนต์สโทแคสติก (stochastic gradient descent) ที่เน้นถึงการสุ่มลำดับของการฝึกทีละหมู่เล็ก เป็นวิธีที่นิยมใช้ในการฝึกโครงข่ายประสาทเทียม.
แต่บ่อยครั้งที่อาจพบว่า วิธีลงเกรเดียนต์สโทแคสติก ทำให้การฝึกทำได้ช้า. หลาย ๆ เทคนิคจากศาสตร์การหาค่าดีที่สุด ได้ถูกนำมาใช้ เพื่อปรับปรุงประสิทธิภาพการฝึก. นอกจากนั้น ยังมีเทคนิคจำนวนมากที่พัฒนาขึ้นมาโดยเฉพาะสำหรับการเรียนรู้ของเครื่อง โดยเฉพาะการเรียนรู้เชิงลึก. หัวนี้ อภิปรายเทคนิคต่าง ๆ บางส่วน โดยเฉพาะ เทคนิคเด่น ๆ ที่มีการใช้อย่างกว้างขวางกับการเรียนรู้เชิงลึก.
ในสถานะการณ์ที่ค่าฟังก์ชันจุดประสงค์ต่อค่าตัวแปรตัดสินใจต่าง ๆ (ซึ่งหมายถึง ฟังก์ชันสูญเสียและค่าน้ำหนักและไบอัสทั้งหลาย ในกรณีโครงข่ายประสาทเทียม) มีลักษณะความสัมพันธ์ที่มีการเปลี่ยนแปลงเร็ว หรืออาจจะมีสัญญาณรบกวนมาก กลไกของโมเมนตัม (momentum) นิยมถูกนำมาใช้เพื่อช่วยเพิ่มประสิทธิภาพการทำงานของขั้นตอนวิธีการหาค่าดีที่สุด.
รูป 1.14 แสดงพฤติกรรมการทำงานของวิธีลงเกรเดียนต์ เมื่อ ความสัมพันธ์ของฟังก์ชันสูญเสียกับค่าน้ำหนัก ที่มีลักษณะโค้ง แต่ความโค้งแตกต่างกันมากระหว่างน้ำหนักแต่ละตัว. พฤติกรรมการทำงานปรับค่าน้ำหนัก ของวิธีลงเกรเดียนต์ จะแสดงออกในลักษณะส่ายเข้าหาคำตอบ.
แทนที่จะใช้ค่าเกรเดียนต์เพียงอย่างเดียว กลไกของโมเมนตัม เสนอที่จะใช้ ทิศทางเดิม ประกอบกับทิศทางใหม่ เพื่อลดการส่ายเข้าหาคำตอบ เพื่อปรับค่าตัวแปร. นั่นคือ \[\begin{eqnarray} \boldsymbol{v}^{(i+1)} &=& \beta \boldsymbol{v}^{(i)} - \alpha \nabla L(\boldsymbol{\theta}^{(i)}) \label{eq: momentum update} \\ \boldsymbol{\theta}^{(i+1)} &=& \boldsymbol{\theta}^{(i)} + \boldsymbol{v}^{(i+1)} \label{eq: gd with momentum} \end{eqnarray}\] เมื่อ \(\boldsymbol{v}\) เป็นเวกเตอร์สำหรับปรับค่าตัวแปร และ \(\beta\) เป็นค่าโมเมนตัม. ส่วน \(\nabla L(\boldsymbol{\theta}^{(i)})\) คือ เกรเดียนต์ต่อตัวแปรตัดสินใจ และ \(\alpha\) คืออัตราการเรียนรู้. และ \(\boldsymbol{\theta}\) เป็นตัวแปรตัดสินใจ เช่น ค่าน้ำหนักและไบอัส. ตัวยก ระบุสมัยฝึก. ค่าเริ่มต้นของ \(\boldsymbol{v}\) อาจกำหนดเป็น \(\boldsymbol{0}\).
เปรียบเทียบกับ \(\boldsymbol{\theta}^{(i+1)} = \boldsymbol{\theta}^{(i)} -\alpha \nabla L(\boldsymbol{\theta}^{(i)})\) ซึ่งเป็นวิธีลงเกรเดียนต์ที่ไม่มีกลไกโมเมนตัม จะเห็นว่า หากให้ \(\beta = 0\) นั่นเท่ากับปิดกลไกโมเมนตัม และการทำงานของสมการ \(\eqref{eq: momentum update}\) และ \(\eqref{eq: gd with momentum}\) จะลดรูปมาเป็นวิธีลงเกรเดียนต์ดั้งเดิม.
รูป 1.15 แสดงตัวอย่างที่กลไกโมเมนตัม ช่วยปรับปรุงประสิทธิภาพการฝึก โดยลดการส่ายเข้าหาคำตอบระหว่างการฝึกลง. นอกจาก กลไกของโมเมนตัม ซึ่งเป็นเทคนิคที่รู้จักกันดีในวงการการหาค่าดีที่สุดอยู่แล้ว อีเลีย ซุตส์เกเวอร์ (Ilya Sutskever) นักวิจัยการเรียนรู้ของเครื่องชั้นนำ ได้เสนอ เนสเตอรอฟโมเมนตัม (Nesterov momentum) ซึ่งคำนวณสมการ \(\eqref{eq: nesterov momentum update}\) แทนสมการ \(\eqref{eq: momentum update}\)
\[\begin{eqnarray} \boldsymbol{v}^{(i+1)} &=& \beta \boldsymbol{v}^{(i)} - \alpha \nabla L(\boldsymbol{\theta}^{(i)} + \beta \boldsymbol{v}^{(i)}) \label{eq: nesterov momentum update}. \end{eqnarray}\]
เปรียบเทียบกับสมการ \(\eqref{eq: momentum update}\) เนสเตอรอฟโมเมนตัม ใช้ค่าเกรเดียนต์ ที่คำนวณ ณ ตำแหน่งค่าตัวแปรที่ขยับต่อออกมาตามโมเมนตัม แทนตำแหน่งค่าตัวแปรปัจจุบัน. ดูแบบฝึกหัด [ex: deep momentum] เพิ่มเติมสำหรับการใช้งานกลไกโมเมนตัม.
![]() |
![]() |
อดาแกรต (AdaGrad) ปรับอัตราเรียนรู้สำหรับพารามิเตอร์แต่ละตัว โดยลดขนาดอัตราเรียนรู้ลง ตามขนาดรากที่สองของผลรวมกำลังสองของเกรเดียนต์ที่ผ่านมา. นั่นคือ พารามิเตอร์ \(\boldsymbol{\theta}\) จะถูกปรับค่าโดย \[\begin{aligned} \boldsymbol{\theta}^{(i+1)} = \boldsymbol{\theta}^{(i)} - \frac{\alpha}{\sqrt{\boldsymbol{r}^{(i+1)}} + \epsilon} \odot \boldsymbol{g} \label{eq: adagrad}\end{aligned}\] เมื่อ ผลรวมกำลังสองของเกรเดียนต์ที่ผ่านมา \(\boldsymbol{r}^{(i+1)} = \boldsymbol{r}^{(i)} + \boldsymbol{g} \odot \boldsymbol{g}\) และเกรเดียนต์ \(\boldsymbol{g} = \nabla L(\boldsymbol{\theta}^{(i)})\) โดย \(\alpha\) คืออัตราเรียนรู้(ฐาน) ที่ผู้ใช้กำหนด และ \(\epsilon\) คือค่าคงที่ขนาดเล็ก เช่น \(10^{-7}\) สำหรับเสถียรภาพการคำนวณ. ค่า \(\boldsymbol{r}^{(0)}\) อาจกำหนดเป็น \(\boldsymbol{0}\). สังเกตว่า อดาแกรต ปรับอัตราการเรียนรู้แยกกันสำหรับพารามิเตอร์แต่ละตัว. ในทางปฏิบัติพบว่า อดาแกรต ใช้งานได้ดีบางครั้ง และอาจลดอัตราเรียนรู้มากเกินไปในบางครั้ง.
อาร์เอมเอสพรอป (RMSProp) ปรับปรุงอดาแกรต ด้วยการใช้ค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนักแบบชี้กำลัง (exponentially weighted moving average). นั่นคือ พารามิเตอร์ \(\boldsymbol{\theta}\) จะถูกปรับค่าโดย \[\begin{aligned} \boldsymbol{\theta}^{(i+1)} = \boldsymbol{\theta}^{(i)} - \frac{\alpha}{\sqrt{\boldsymbol{r}^{(i+1)} + \epsilon}} \odot \boldsymbol{g} \label{eq: RMSprop}\end{aligned}\] เมื่อค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนักแบบชี้กำลัง \(\boldsymbol{r}^{(i+1)} = \rho \cdot \boldsymbol{r}^{(i)} + (1 - \rho) \cdot \boldsymbol{g} \odot \boldsymbol{g}\) โดยอัตราการเสื่อมน้ำหนัก \(\rho\) เป็นอภิมานพารามิเตอร์ที่เพิ่มขึ้นมา และค่าคงที่ \(\epsilon\) มักถูกเลือกเป็น \(10^{-6}\).
แม้ว่า การเสนออาร์เอมเอสพรอปครั้งแรกไม่ได้ถูกเผยแพร่ด้วยช่องทางปกติสำหรับงานวิชาการ (การตีพิมพ์ในวารสารหรือการประชุมวิชาการ) แต่เป็นส่วนหนึ่งของการบรรยายในการสอนออนไลน์ ในทางปฏิบัติ อาร์เอมเอสพรอปเป็นหนึ่งในขั้นตอนวิธีที่ใช้งานได้ดี และมีการใช้งานอย่างแพร่หลายสำหรับการฝึกแบบจำลองเชิงลึก.
อดัม (Adam ย่อจาก adaptive moments) รวมอาร์เอมเอสพรอป เข้ากับโมเมนตัม โดยเพิ่มกลไกค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนักแบบชี้กำลังกับการคำนวณโมเมนตัม และการปรับแก้ขนาดตามสมัยฝึก. นั่นคือ สำหรับสมัยฝึก \(i\) และเกรเดียนต์ \(\boldsymbol{g}\) การปรับค่าพารามิเตอร์สามารถทำได้ดังสมการ \(\eqref{eq: adam update}\). \[\begin{aligned} \boldsymbol{v}^{(i+1)} &= \rho_1 \cdot \boldsymbol{v}^{(i)} + (1-\rho_1) \cdot \boldsymbol{g} \label{eq: adam 1st moment} \\ \boldsymbol{r}^{(i+1)} &= \rho_2 \cdot \boldsymbol{r}^{(i)} + (1-\rho_2) \cdot \boldsymbol{g} \odot \boldsymbol{g} \label{eq: adam 2nd moment} \\ \boldsymbol{\hat{v}} &= \frac{\boldsymbol{v}^{(i+1)}}{1-\rho_1^i} \label{eq: adam bias correct 1st} \\ \boldsymbol{\hat{r}} &= \frac{\boldsymbol{r}^{(i+1)}}{1-\rho_2^i} \label{eq: adam bias correct 2nd} \\ \boldsymbol{\theta}^{(i+1)} &= \boldsymbol{\theta}^{(i)} - \frac{\alpha}{\sqrt{\boldsymbol{\hat{r}} + \epsilon}} \odot \boldsymbol{\hat{v}} \label{eq: adam update}\end{aligned}\] เมื่อ \(\boldsymbol{\theta}^{(i)}\) คือพารามิเตอร์หลังปรับค่าในสมัยฝึก \(i^{th}\). ค่าเริ่มต้นของ \(\boldsymbol{v}^{(0)}\) และ \(\boldsymbol{r}^{(0)}\) อาจกำหนดเป็น \(\boldsymbol{0}\). อภิมานพารามิเตอร์ \(\alpha\) คืออัตราเรียนรู้(ฐาน), \(\epsilon\) คือค่าคงที่ขนาดเล็ก (ซึ่งอาจใช้ \(10^{-8}\)), ค่า \(\rho_1 \in [0,1]\) และ \(\rho_2 \in [0,1]\) โดย ค่าที่แนะนำคือ \(\rho_1 = 0.9\) และ \(\rho_2 = 0.999\).
อดัม เป็นอีกขั้นตอนวิธีที่นิยมใช้กับแบบจำลองเชิงลึก และพบว่าค่อนข้างทนทานต่อค่าอภิมานพารามิเตอร์ที่เลือก แต่อาจจะต้องปรับค่าอัตราเรียนรู้ \(\alpha\) บ้างเท่านั้น.
ปัจจุบันยังไม่มีข้อสรุปถึงขั้นตอนวิธีที่ดีที่สุดโดยทั่วไป แต่ขั้นตอนวิธีที่นิยมใช้คือ วิธีลงเกรเดียนต์, วิธีลงเกรเดียนต์กับโมเมนตัม, อาร์เอมเอสพรอป, อาร์เอมเอสพรอปกับโมเมนตัม, และอดัม.
แบชนอร์มอไลเซชั่น (batch normalization) หรือเรียกสั้นว่า แบชนอร์ม (batch norm) จริง ๆ แแล้ว ไม่ใช่ขั้นตอนวิธีการหาค่าดีที่สุด แต่เป็นกลไกเพื่อช่วยให้การฝึกทำได้ง่ายขึ้น.
ไอโอฟีกับเซเจดี ตั้งข้อสังเกตว่า ความยากของการฝึกโครงข่ายเชิงลึก ส่วนหนึ่งมาจากการเปลี่ยนแปลงอยู่ตลอดของการแจกแจงของอินพุตสำหรับแต่ชั้นคำนวณ ซึ่งการเปลี่ยนแปลงนี้ เกิดจากการเปลี่ยนแปลงของค่าพารามิเตอร์ในชั้นคำนวณก่อนหน้า. ดังนั้น การฝึกจึงทำได้ช้า เพราะไม่สามารถเลือกค่าอัตราเรียนรู้ที่สูงได้ และยังต้องระวังอย่างมากในการกำหนดค่าพารามิเตอร์เริ่มต้น และยังสร้างปัญหาอย่างมากกับการใช้ฟังก์ชันกระตุ้นที่มีช่วงอิ่มตัว (เช่น ซิกมอยด์). ไอโอฟีกับเซเจดี เรียก การเปลี่ยนแปลงของการแจกแจงของอินพุตสำหรับแต่ชั้นคำนวณ จากการเปลี่ยนแปลงของค่าพารามิเตอร์ในชั้นคำนวณก่อนหน้า ว่า การเลื่อนของความแปรปรวนร่วมเกี่ยวภายใน (internal covariance shift) และเสนอกลไก แบชนอร์ม เพื่อลดการเลื่อนของความแปรปรวนร่วมเกี่ยวภายใน.
หากกำหนดให้ \(\boldsymbol{X} = [x_{ij}]\) เป็นอินพุตของชั้นคำนวณ โดย \(i = 1, \ldots, D;\) \(j \in B\) และ \(D\) เป็นจำนวนมิติ และ \(B\) เป็นเซตของดัชนีจุดข้อมูลในหมู่เล็ก แล้ว แบชนอร์ม เสนอแปลงอินพุตของชั้นคำนวณนี้ ดังสมการ \(\eqref{eq: batch norm 1}\) และ \(\eqref{eq: batch norm 2}\). ค่าคงที่ขนาดเล็ก \(\epsilon\) มีเพื่อรักษาเสถียรภาพของการคำนวณ (อาจกำหนดให้ \(\epsilon = 10^{-8}\)).
\[\begin{aligned} x'_{ij} &= \frac{x_{ij} - \mu_i}{ \sqrt{\sigma_j^2 + \epsilon}} \label{eq: batch norm 1} , \\ \hat{x}_{ij} &= \gamma_i \cdot x'_{ij} + \beta_i \label{eq: batch norm 2}.\end{aligned}\]
ค่า \(\gamma_i\) กับ \(\beta_i\) เป็นพารามิเตอร์ของแบชนอร์ม ที่เรียนรู้ระหว่างการฝึก. ส่วน \(\mu_i\) และ \(\sigma_i^2\) คือค่าเฉลี่ยและความแปรปรวน นั่นคือ ในระหว่างการฝึก \(\mu_i = \frac{1}{|B|}\sum_j x_{ij}\) กับ \(\sigma_i^2 = \frac{1}{|B|}\sum_j (x_{ij} - \mu_i)^2\). สำหรับ การใช้งานหลังฝึกเสร็จ ค่า \(\mu_i\) และ \(\sigma_i^2\) สามารถใช้ค่าที่ประมาณเตรียมไว้ระหว่างการฝึกได้.
ค่าประมาณ \(\hat{\mu}_i\) และ \(\hat{\sigma^2}_i\) นิยมประมาณด้วยค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนักแบบชี้กำลัง เช่น \(\hat{\mu}_i^{(new)} = \rho \cdot \mu_i + (1-\rho) \cdot \hat{\mu}_i^{(old)}\) และ \(\hat{\sigma^2}_i^{(new)} = \rho \cdot \sigma^2_i + (1-\rho) \cdot \hat{\sigma^2}_i^{(old)}\) เมื่อ ค่าเสื่อมน้ำหนัก \(\rho\) เป็นอภิมานพารามิเตอร์ และ \(\mu_i\) กับ \(\sigma_i^2\) เป็นค่าที่คำนวณจากหมู่เล็กที่กำลังฝึก.
ชั้นคำนวณ โดยทั่วไป ทำการคำนวณ \(h(\boldsymbol{W}^{(q)} \cdot \boldsymbol{Z}^{(q-1)} + \boldsymbol{b}^{(q)})\) เมื่อ \(h\) เป็นฟังก์ชันกระตุ้น และ \(\boldsymbol{W}^{(q)}\) กับ \(\boldsymbol{b}^{(q)}\) คือพารามิเตอร์ของชั้น. การทำแบชนอร์ม อาจทำกับค่า \(\boldsymbol{Z}^{(q-1)}\) โดยตรง หรืออาจทำกับ \(\boldsymbol{W}^{(q)} \cdot \boldsymbol{Z}^{(q-1)} + \boldsymbol{b}^{(q)}\) ก็ได้. ไอโอฟีและเซเจดี แนะนำให้ทำกับตัวกระตุ้น \(\boldsymbol{A}^{(q)} = \boldsymbol{W}^{(q)} \cdot \boldsymbol{Z}^{(q-1)} + \boldsymbol{b}^{(q)}\). การทำแบชนอร์มกับตัวกระตุ้นของชั้น ช่วยปรับค่าตัวกระตุ้นให้อยู่ในย่านที่ฟังก์ชันกระตุ้นทำงานง่ายขึ้นด้วย. นอกจากนั้น เมื่อรวมผลลัพธ์จาก การคำนวณผลคูณค่าน้ำหนัก กับสมการ \(\eqref{eq: batch norm 1}\) และ \(\eqref{eq: batch norm 2}\) แล้วจะเห็นว่า พารามิเตอร์ \(\gamma_i\) และ \(\beta_i\) ช่วยให้อิสระและความสะดวกในการเลือกปรับค่าความแปรปรวนและค่าเฉลี่ยได้. อีกเรื่องที่ควรกล่าวถึงคือ เมื่อรวมการคำนวณแบชนอร์มเข้าไปด้วยแล้ว จะเห็นว่า ไบอัส \(\boldsymbol{b}^{(q)}\) ซ้ำซ้อนและเกินความจำเป็น สามารถตัดออกได้.
กลไกของแบชนอร์ม ช่วยให้การฝึกของโครงข่ายประสาทเทียมทำได้ง่ายขึ้น ไอโอฟีและเซเจดี พบว่า แบชนอร์ม อาจช่วยให้การฝึกทำได้เร็วขึ้นถึงสิบสี่เท่า และช่วยให้การกำหนดค่าเริ่มต้นและการเลือกค่าอัตราเรียนรู้ทำได้ง่ายขึ้น (สามารถเลือกค่าได้ช่วงกว้างขึ้น โดยที่ผลลัพธ์ไม่แย่ลงมาก เมื่อเปรียบเทียบกับการเลือกค่าที่ดี).
หมายเหตุ การทำแบชนอร์ม ควรดำเนินการอย่างระมัดระวัง เพื่อไม่ใช้สูญเสียสารสนเทศที่สำคัญไป (ดูแบบฝึกหัด [ex: deep batch norm] ประกอบ). ดังเช่นที่ไอโอฟีและเซเจดี ได้แนะนำการประยุกต์ใช้กลไกของแบชนอร์ม กับโครงข่ายโครงข่ายคอนโวลูชั่นไว้เฉพาะ. โครงข่ายคอนโวลูชั่น (บทที่ [chapter: Convolution]) นิยมใช้กับงานคอมพิวเตอร์วิทัศน์ ซึ่งข้อมูลมีลักษณะเชิงโครงสร้างของพิกเซล. นั่นคือ แต่ละจุดข้อมูลประกอบด้วยค่าพิกเซลหลาย ๆ ค่าที่จัดเรียงกันในโครงสร้าง โดยความสัมพันธ์ของค่าพิกเซลกับตำแหน่งในโครงสร้างมีสารสนเทศที่สำคัญอยู่. หากกำหนดให้ อินพุต (ค่าการกระตุ้น) \(\boldsymbol{X} = [x_{ijc}(n)] \in \mathbb{R}^{H \times W \times C \times N}\) เป็นเทนเซอร์ลำดับชั้นสี่ แทนรูปภาพจำนวน \(N\) รูป แต่ละรูปขนาด \(H \times W\) และมีช่องสี \(C\) ช่อง (ภาพสเกลเทา \(C=1\). ภาพสี \(C=3\). ภาพหลายสเปกตรัม multi-spectral image หรือ multi-band image ซึ่งคือภาพถ่ายของฉากเหตุการณ์เดียวกัน แต่ใช้อุปกรณ์รับสัญญาณหลายตัว และแต่ละตัวทำงานกับช่วงความถี่สัญญาณคลื่นแม่เหล็กไฟฟ้าต่าง ๆ กัน \(C > 1\). ในกรณีทั่วไปจำนวนช่องสีอาจมองเป็นจำนวนลักษณะสำคัญ) แล้วการทำแบชนอร์มอาจทำได้ดังสมการ \(\eqref{eq: batch norm conv 1}\) และ \(\eqref{eq: batch norm conv 2}\) สำหรับ \(c = 1, \ldots, C\).
\[\begin{aligned} x'_{ijc}(n) &= \frac{x_{ijc}(n) - \mu_c}{ \sqrt{\sigma_c^2 + \epsilon}} \label{eq: batch norm conv 1} , \\ \hat{x}_{ijc}(n) &= \gamma_c \cdot x'_{ijc}(n) + \beta_c \label{eq: batch norm conv 2}\end{aligned}\] เมื่อ \(\mu_c = \frac{1}{|B| \cdot H \cdot W} \sum_{n \in B} \sum_i \sum_j x_{ijc}(n)\) และ \(\sigma_c^2 = \frac{1}{|B| \cdot H \cdot W} \sum_{n \in B} \sum_i \sum_j (x_{ijc}(n) - \mu_c)^2\). สังเกต แบชนอร์มสำหรับชั้นคำนวณคอนโวลูชั่น จะใช้พารามิเตอร์ \(\gamma_c\) และ \(\beta_c\) หนึ่งคู่ต่อหนึ่งช่องสี .
กลไกการฝึกก่อน (pre-training) ที่ใช้การฝึกแบบจำลองกับปัญหาที่ง่ายขึ้น หรือปัญหาที่ใกล้เคียง ก่อนจะนำค่าน้ำหนักที่ได้จากการฝึก(เบื้องต้น) มาฝึกต่อ (หรือบางครั้งนิยมอ้างถึงว่าเป็น การปรับละเอียด fine tuning) กับปัญหาที่ต้องการจริง ๆ ที่มักเรียกว่า ปัญหาเป้าหมาย.
การฝึกก่อน อาจทำโดยใช้แบบจำลองแบบเดียวกับแบบจำลองสุดท้ายที่ต้องการ แต่ฝึกกับข้อมูลอีกชุด หรือเป้าหมายอีกแบบ หรือ อาจจะฝึกแบบจำลองที่เล็กกว่า แล้วค่อยเพิ่มขยายเป็นแบบจำลองที่ต้องการ เมื่อนำมาใช้กับภารกิจเป้าหมาย เช่น ในงานคอมพิวเตอร์วิทัศน์ การทำแบบจำลองอาจจะเลือกแบบจำลองที่นิยมอยู่แล้ว เช่น อเล็กซ์เน็ต (หัวข้อ [sec: AlexNet]) พร้อม การเริ่มต้นด้วยค่าน้ำหนักของอเล็กซ์เน็ตที่ผ่านการฝึกมาแล้ว แทนที่จะเริ่มจากค่าน้ำหนักสุ่ม. แล้วจึงค่อยดำเนินการฝึกต่อกับข้อมูลและฟังก์ชันสูญเสียของภารกิจเป้าหมาย. บางครั้ง เพื่อให้แบบจำลองที่นำมา เหมาะกับภารกิจเป้าหมาย อาจมีการปรับแต่งแบบจำลองบ้าง ได้แก่ เปลี่ยนชั้นคำนวณท้าย ๆ เช่น เปลี่ยนชั้นสุดท้ายให้มีจำนวนเอาต์พุตสุดท้ายตามที่ต้องการ.
การนำค่าน้ำหนักที่ฝึกแล้วมาใช้ในการฝึกต่อ หากมีข้อมูลของภารกิจเป้าหมายมีปริมาณไม่มาก การดำเนินการ นิยมตรึงค่าน้ำหนักที่ฝึกมาก่อนไว้ (ไม่มีการปรับค่าน้ำหนักเหล่านี้) แต่ปรับค่าน้ำหนักเฉพาะกับชั้นคำนวณหลัง ๆ ซึ่งเชื่อว่าเกี่ยวข้องกับภารกิจเป้าหมายมากกว่า. แต่หากมีข้อมูลของภารกิจเป้าหมายมีปริมาณมาก อาจลดจำนวนชั้นคำนวณต้น ๆ ที่ตรึงค่าน้ำหนักที่ฝึกก่อนลง และเพิ่มจำนวนชั้นคำนวณหลัง ๆ ที่ปรับค่าน้ำหนักให้มากขึ้น หรือ อาจจะเพียงใช้ค่าน้ำหนักที่ฝึกก่อนมาแทนค่าน้ำหนักเริ่มต้น แล้วฝึกค่าน้ำหนักทั้งหมดในโครงข่ายเลย. รูป 1.16 แสดงแนวทางที่นิยมดำเนินการกับค่าน้ำหนักจากการฝึกก่อน.
ค่าน้ำหนักของการฝึกก่อน อาจได้มาโดยการเรียนรู้แบบมีผู้สอน ดังที่ได้อภิปรายไป หรืออาจได้มาโดยการเรียนรู้แบบไม่มีผู้สอน (unsupervised pre-training ดูเอรานและคณะ เพิ่มเติม). การฝึกก่อน จะช่วยทั้งในแง่ของลดเวลาในฝึกลง เพิ่มคุณภาพ รวมถึงคุณสมบัติความทั่วไป และยังมองได้ว่า เป็นความสามารถในการถ่ายโอนการเรียนรู้ (transfer learning) อีกด้วย. การถ่ายโอนการเรียนรู้ อ้างถึง สถานการณ์ที่เราสามารถใช้ประโยชน์ จากการเรียนรู้ในภารกิจหนึ่ง เพื่อช่วยการเรียนรู้ในอีกภารกิจได้ โดย การเรียนรู้ในภารกิจใหม่ ที่ได้รับการถ่ายโอนการเรียนรู้มา จะทำได้ดีหรือเร็วกว่า การเรียนรู้ในภารกิจใหม่ ที่ไม่มีการถ่ายโอนการเรียนรู้ และต้องเริ่มเรียนทุกอย่างจากศูนย์. ความสามารถในการถ่ายโอนการเรียนรู้ ในโครงข่ายลึก เป็นอีกปัจจัยที่ช่วยให้การประยุกต์ใช้การเรียนรู้เชิงลึกทำได้ง่ายขึ้น กว้างขวางขึ้น และมีส่วนอย่างมากที่ช่วยเร่งการพัฒนาของศาสตร์อย่างมาก.
แนวทางหรือกลไก ที่อาจมองว่าคล้ายการฝึกก่อน เช่น ฟิตเน็ต (FitNets) ที่ใช้แบบจำลองครู (teacher model) กับแบบจำลองนักเรียน (student model) โดยแบบจำลองครูเป็นแบบจำลองที่ตื้นแต่กว้าง (นั่นคือ มีจำนวนชั้นคำนวณน้อย แต่ว่าแต่ละชั้นมีจำนวนหน่วยคำนวณมาก) ซึ่งฝึกได้ง่ายกว่า. ส่วนแบบจำลองนักเรียนจะลึกแต่แคบ ทำให้มีประสิทธิภาพในการคำนวณมากกว่า แต่ฝึกยากกว่า. กลไกการฝึกแบบครูนักเรียนนี้ คือ ในการฝึกแบบจำลองนักเรียน นอกจากจะฝึกแบบจำลองนักเรียนสำหรับจุดประสงค์หลัก แล้วยังฝึกให้แบบจำลองนักเรียน โดยเฉพาะในชั้นคำนวณต้นๆ ทำนายค่าผลการกระตุ้นของชั้นคำนวณซ่อนในแบบจำลองครูด้วย. การทำดังนี้ คือการใช้ค่าผลการกระตุ้นของชั้นคำนวณซ่อนในแบบจำลองครู เป็นเสมือนตัวช่วยนำทาง สำหรับการฝึกชั้นคำนวณซ่อนของแบบจำลองนักเรียน.
การเรียนหลักสูตร (curriculum learning) เป็นอีกแนวทางหนึ่งของกลไกฝึกระดับสูง. กล่าวโดยทั่วไป การเรียนหลักสูตร จะจัดการฝึกเป็นหลาย ๆ ยก โดยเริ่มจากยกแรก ๆ ที่ทำการฝึกที่ง่าย แล้วเพิิ่มความยากในการฝึกขึ้นในแต่ละยก จนสุดท้าย คือการฝึกกับปัญหาที่ต้องการ. เบนจิโอ ทดลองเปรียบเทียบ การเรียนหลักสูตร ซึ่งทำการฝึกข้อมูลที่ง่ายก่อน ที่จะฝึกข้อมูลที่ยาก กับการฝึกปกติ ที่ใช้ข้อมูลที่ยาก ที่เป็นเป้าหมายตั้งแต่แรก ผลที่ได้พบว่า แบบจำลองสามารถเรียนรู้ได้ดีขึ้นอย่างชัดเจน.
นอกจากขั้นตอนวิธีและกลไกต่าง ๆ ที่ช่วยการฝึกแล้ว แนวทางที่ประสบความสำเร็จอย่างมากเลย คือ การออกแบบโครงสร้างแบบจำลอง เพื่อช่วยให้การฝึกทำได้ง่ายขึ้น. จริง ๆ แล้ว การเปลี่ยนฟังก์ชันกระตุ้น ก็เป็นการเปลี่ยนโครงสร้างของแบบจำลอง เพื่อช่วยให้การฝึกทำได้ง่ายขึ้น. กูดเฟโลและคณะ ตั้งข้อสังเกตว่า โครงสร้างที่มีลักษณะเชิงเส้นมากขึ้น จะช่วยให้การฝึกทำได้ง่ายขึ้น. กลไกของแบชนอร์ม ก็มีลักษณะเป็นการเปลี่ยนโครงสร้างของแบบจำลอง. แบบจำลองหลายชนิด ถูกออกแบบมาให้มีเส้นทางการเชื่อมต่อระหว่างชั้นคำนวณ โดยอาจมีการเชื่อมต่อข้ามชั้นคำนวณได้ เพื่อช่วยในการฝึก เช่น เรสเน็ต ResNet) ที่มีการเชื่อมต่อข้ามชั้นคำนวณ เพื่อช่วยให้การแพร่กระจายของเกรเดียนต์กลับไปหาชั้นคำนวณต้น ๆ ทำได้มีประสิทธิภาพขึ้น. โครงข่ายคอนโวลูชั่น (บทที่ [chapter: Convolution]) ก็เป็นลักษณะของการเปลี่ยนโครงสร้าง ซึ่งโครงสร้างของโครงข่ายคอนโวลูชั่น ช่วยลดจำนวนพารามิเตอร์ที่ต้องการลง โดยอาศัยคุณสมบัติที่เหมาะกับข้อมูลที่มีลักษณะเชิงท้องถิ่น เช่น ภาพ. การลดจำนวนพารามิเตอร์ที่ไม่จำเป็นลง ช่วยโดยตรงต่อกระบวนการฝึก. แบบจำลองความจำระยะสั้นที่ยาว (บทที่ [chapter: RNN]) ก็ถูกออกแบบมา สำหรับข้อมูลเชิงลำดับ เพื่อช่วยให้การฝึก เรียนรู้ ความสัมพันธ์เชิงลำดับระยะยาวทำได้มีประสิทธิภาพมากขึ้น.
การเรียนรู้ของเครื่องที่ใช้โครงข่ายประสาทเทียมจำนวนชั้นคำนวณมาก รวมไปจนถึงเทคนิคและกลไกอื่นๆที่เกี่ยวข้อง
ปัญหา หรือปรากฏการณ์ ที่ขนาดเฉลี่ยของเกรเดียนต์ลดลงอย่างมากที่ชั้นคำนวณต้น ๆ เมื่อเปรียบเทียบกับค่าเฉลี่ยชั้นคำนวณปลาย ๆ
ฟังก์ชันกระตุ้น \(\mathrm{relu}(a) = \max(a, 0)\)
ส่วนของข้อมูลที่ถูกแบ่งเป็นกลุ่มเล็ก ๆ สำหรับการฝึก โดยในหนึ่งสมัยฝึก จะต้องทำการปรับค่าน้ำหนักหลายครั้ง แต่ละครั้งสำหรับแต่ละหมู่เล็ก และการปรับแต่ละครั้ง คำนวณจากจุดข้อมูลต่างๆในหมู่เล็ก และจะใช้ค่าเฉลี่ยของเกรเดียนต์ภายในหมู่ในการปรับค่าน้ำหนัก เปรียบเทียบกับการฝึกแบบออน์ไลน์ ที่การปรับค่าน้ำหนักแต่ละครั้ง คำนวณจากหนึ่งจุดข้อมูล และเปรียบเทียบกับการฝึกแบบออฟไลน์ ที่การปรับค่าน้ำหนัก คำนวณจากข้อมูลทั้งหมดทีเดียว และปรับค่าแค่ครั้งเดียว ต่อสมัยฝึก
กลไกการทำเรกูลาไรซ์สำหรับโครงข่ายประสาทเทียม โดยการสุ่มปิดผลการกระตุ้น ของหน่วยคำนวณย่อยต่าง ๆ
กลไก เพื่อช่วยการฝึกโครงข่ายประสาทเทียม โดยปรับค่าเฉลี่ยและความแปรปรวนของตัวกระตุ้นในชั้นคำนวณ
การนับจำนวนชั้นของโครงข่าย ไม่ได้มีข้อตกลงสากล และอาจมีวิธีนับที่แตกต่างกันไป. ตัวอย่าง เช่น โครงข่ายสองชั้น \(\boldsymbol{y} =h^{(2)}(\boldsymbol{W}^{(2)} \boldsymbol{z}^{(1)} + \boldsymbol{b}^{(2)})\) โดย \(\boldsymbol{z}^{(1)} =h^{(1)}(\boldsymbol{W}^{(1)} \boldsymbol{x} + \boldsymbol{b}^{(1)})\) เมื่อ \(\boldsymbol{y}\) คือเอาต์พุตที่ทำนาย และ \(\boldsymbol{x}\) คืออินพุตที่ถาม. โครงข่ายลักษณะนี้ อาจนับเป็นสองชั้น ตามจำนวนชุดของค่าน้ำหนัก \(\boldsymbol{W}^{(2)}\) และ \(\boldsymbol{W}^{(1)}\) ซึ่ง ณ ที่นี้ ใช้แบบแผนนี้ในการนับ. แต่ผู้อ่านอาจพบ บางแห่งนับเป็นสามชั้น โดยนับชุดค่าของหน่วยย่อย ได้แก่ \(\boldsymbol{y}\), \(\boldsymbol{z}^{(1)}\), และ \(\boldsymbol{x}\) โดยมองเสมือนว่า อินพุตก็เป็นชุดค่าของหน่วยย่อย. บางแห่ง อาจเลือกอ้างถึงโครงข่ายนี้ ว่าเป็นโครงข่ายจำนวนหนึ่งชั้นซ่อน ได้แก่ ชั้นซ่อน \(\boldsymbol{z}^{(1)}\) เนื่องจากหากมองอินพุตกับเอาต์พุตเป็นชั้นของโครงข่าย อินพุตกับเอาต์พุตก็จะเป็นชั้นที่มีกันทุก ๆ โครงข่าย ฉะนั้น รายงานเฉพาะส่วนที่ต่าง ซึ่งก็คือจำนวนชั้นซ่อนก็พอ. วิธีการนับจำนวนชั้นของโครงข่าย จะมีความสำคัญน้อยลง เมื่อพิจารณาโครงข่ายที่มีความซับซ้อนมากขึ้น เช่น โครงข่ายอเล็กซ์เน็ต (หัวข้อ [sec: AlexNet]) ที่มีการแยกเส้นทางการคำนวณ และนำผลการคำนวณจากแต่ละเส้นทางกลับมารวมกันภายหลัง.↩︎
เฮเชี่ยน (Hessian) คือ เมทริกซ์ของอนุพันธ์อันดับที่สอง. ขั้นตอนวิธีการหาค่าดีที่สุดหลายอย่าง อาศัยเฮเชี่ยน เพื่อเพิ่มประสิทธิภาพในการทำงาน. ตัวอย่างเช่น วิธีนิวตัน (Newton method) และ วิธีบีเอฟจีเอส (BFGS method) ที่สามารถทำงานได้อย่างรวดเร็ว แต่ต้องการเฮเชี่ยน. ดู ชองและเซค เพิ่มเติมสำหรับรายละเอียดของขั้นตอนวิธีการหาค่าดีที่สุดที่อาศัยเฮเชี่ยน.↩︎
ขั้นตอนวิธีแกรมชมิดต์ (Gram-Schmidt algorithm) เป็นวิธีคำนวณหาเวกเตอร์ที่ตั้งฉากกับเวกเตอร์ที่กำหนด. ดู เพิ่มเติมสำหรับรายละเอียด.↩︎
ในแง่ที่ว่า ค่าห่างจากศูนย์ไปทางซ้ายและขวาเท่า ๆ กัน จะหักล้างกันได้.↩︎