วิธีที่รวดเร็วในการจดจำข้อความ คำไม่กี่คำเกี่ยวกับการจดจำรูปแบบ ส่วนประกอบโครงข่ายประสาทเทียม

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

วิดีโอแรกเป็นเรื่องเกี่ยวกับโครงสร้างส่วนประกอบ โครงข่ายประสาทเทียมประการที่สอง - การฝึกอบรม ประการที่สาม - อัลกอริธึมของกระบวนการนี้ งานคลาสสิกในการจดจำตัวเลขที่เขียนด้วยลายมือถือเป็นงานฝึกอบรม

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

1. ส่วนประกอบโครงข่ายประสาทเทียม

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

คำชี้แจงปัญหาการรับรู้จำนวน

สมมติว่าคุณมีหมายเลข 3 ซึ่งแสดงผลด้วยความละเอียดต่ำมากที่ 28x28 พิกเซล สมองของคุณสามารถจดจำตัวเลขนี้ได้อย่างง่ายดาย

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

แต่ถ้าคุณถูกขอให้เขียนโปรแกรมที่ใช้เป็นอินพุตรูปภาพของตัวเลขใด ๆ ในรูปแบบของอาร์เรย์ 28x28 พิกเซลและส่งออก "สาระสำคัญ" เอง - ตัวเลขตั้งแต่ 0 ถึง 9 งานนี้จะไม่ง่ายอีกต่อไป .

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

การเปิดใช้งานของเซลล์ประสาท เลเยอร์โครงข่ายประสาทเทียม

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

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

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

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

วัตถุประสงค์ของชั้นที่ซ่อนอยู่

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

สร้างเลเยอร์รูปภาพ

ในกระบวนการจดจำตัวเลขเรานำมารวมกัน ส่วนประกอบต่างๆ- ตัวอย่างเช่น เลขเก้าประกอบด้วยวงกลมด้านบนและมีเส้นทางด้านขวา รูปที่แปดก็มีวงกลมอยู่ด้านบนด้วย แต่แทนที่จะเป็นเส้นทางด้านขวา กลับมีวงกลมคู่อยู่ด้านล่างแทน ทั้งสี่สามารถแสดงเป็นสามบรรทัดที่เชื่อมต่อกันด้วยวิธีใดวิธีหนึ่ง และอื่นๆ

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

เลเยอร์รูปภาพของหน่วยโครงสร้าง

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

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

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

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

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

การกำหนดพื้นที่การรับรู้

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

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

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

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

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

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

กำลังปรับขนาดการเปิดใช้งานตามช่วงเวลา

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

บ่อยครั้งที่มีการใช้ฟังก์ชันโลจิสติกซิกมอยด์สำหรับการปรับขนาดนี้ ยิ่งมาก. ค่าสัมบูรณ์หมายเลขอินพุตลบ ค่าซิกมอยด์เอาต์พุตก็จะยิ่งใกล้ศูนย์มากขึ้นเท่านั้น ยิ่งตัวเลขอินพุตบวกมาก ค่าฟังก์ชันก็จะยิ่งเข้าใกล้ 1 มากขึ้นเท่านั้น

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

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

การเชื่อมต่อระหว่างเลเยอร์อื่นๆ ยังมีน้ำหนักและคำแปลที่เกี่ยวข้องด้วย ดังนั้นสำหรับตัวอย่างที่กำหนด น้ำหนักและการเปลี่ยนแปลงประมาณ 13,000 รายการที่กำหนดพฤติกรรมของโครงข่ายประสาทเทียมจะทำหน้าที่เป็นพารามิเตอร์ที่กำหนดค่าได้

การฝึกโครงข่ายประสาทเทียมให้จดจำตัวเลขหมายถึงการบังคับให้คอมพิวเตอร์ค้นหาค่าที่ถูกต้องสำหรับตัวเลขเหล่านี้ทั้งหมดเพื่อแก้ไขปัญหา ลองนึกภาพการปรับน้ำหนักทั้งหมดเหล่านั้นและขยับด้วยมือ นี่เป็นหนึ่งในข้อโต้แย้งที่มีประสิทธิภาพสำหรับการรักษาโครงข่ายประสาทเทียมเหมือนกล่องดำ - แทบจะเป็นไปไม่ได้เลยที่จะติดตามพฤติกรรมร่วมของพารามิเตอร์ทั้งหมดทางจิตใจ

คำอธิบายของโครงข่ายประสาทเทียมในแง่ของพีชคณิตเชิงเส้น

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

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

ชี้แจงเกี่ยวกับการกระตุ้นเซลล์ประสาท

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

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

นอกจากนี้ เราจะหารือกันว่าฟังก์ชันการเปิดใช้งานใดบ้างที่ใช้ในการเขียนโปรแกรมโครงข่ายประสาทเทียม

นอกจากนี้: เล็กน้อยเกี่ยวกับฟังก์ชั่นการเปิดใช้งาน การเปรียบเทียบซิกมอยด์และ ReLU

ให้เราพูดถึงหัวข้อฟังก์ชันที่ใช้ในการ "บีบอัด" ช่วงของค่าการเปิดใช้งานโดยย่อ ฟังก์ชันซิกมอยด์เป็นตัวอย่างที่เลียนแบบเซลล์ประสาทชีวภาพ และถูกนำมาใช้ในงานแรกๆ บนโครงข่ายประสาทเทียม แต่ฟังก์ชัน ReLU ที่ง่ายกว่านั้นกลับถูกนำมาใช้เพื่อทำให้การฝึกอบรมโครงข่ายประสาทเทียมง่ายขึ้น

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

ปรากฎว่าสำหรับเครือข่ายหลายชั้นเชิงลึก ฟังก์ชัน ReLU ทำงานได้ดีมากและบ่อยครั้งที่ไม่มีประโยชน์ในการใช้ฟังก์ชัน sigmoid ที่ยากกว่าในการคำนวณ

2. ฝึกอบรมโครงข่ายประสาทเทียมเพื่อจดจำตัวเลข

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

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

ในแง่ทั่วไป

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

ข้อมูลการฝึกอบรมมาจากไหน? ปัญหาที่อยู่ระหว่างการพิจารณานั้นพบได้บ่อยมากและเพื่อแก้ปัญหานี้จึงมีการสร้างฐานข้อมูล MNIST ขนาดใหญ่ซึ่งประกอบด้วยข้อมูลที่ติดป้ายกำกับ 60,000 รายการและรูปภาพทดสอบ 10,000 ภาพ

ฟังก์ชันต้นทุน

ตามแนวคิดแล้ว งานฝึกอบรมโครงข่ายประสาทเทียมคือการค้นหาฟังก์ชันขั้นต่ำบางอย่าง นั่นคือฟังก์ชันต้นทุน มาอธิบายว่ามันคืออะไร

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

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

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

การตั้งค่าฟังก์ชันต้นทุนสำหรับการจดจำตัวเลข

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

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

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

นี่เป็นงานที่ค่อนข้างยาก หากโครงข่ายประสาทเทียมของเรามีอินพุต 784 พิกเซล 10 ค่าเป็นเอาต์พุตและต้องใช้พารามิเตอร์ 13,000 ตัวในการคำนวณ ดังนั้นฟังก์ชันต้นทุนจะเป็นฟังก์ชันของพารามิเตอร์ 13,000 ตัวเหล่านี้ สร้างมูลค่าต้นทุนเดียวที่เราต้องการลดให้เหลือน้อยที่สุด และในเวลาเดียวกัน ตัวอย่างการฝึกอบรมทั้งหมดจะทำหน้าที่เป็นพารามิเตอร์

จะเปลี่ยนน้ำหนักและการเปลี่ยนแปลงทั้งหมดเหล่านี้เพื่อให้โครงข่ายประสาทเทียมเรียนรู้ได้อย่างไร

การไล่ระดับโคตร

เริ่มต้นด้วย แทนที่จะแสดงฟังก์ชันที่มีค่าอินพุต 13,000 ค่า เราจะเริ่มต้นด้วยฟังก์ชันของตัวแปร C(w) หนึ่งตัว อย่างที่คุณอาจจำได้จากหลักสูตร การวิเคราะห์ทางคณิตศาสตร์เพื่อที่จะหาค่าต่ำสุดของฟังก์ชัน คุณต้องหาอนุพันธ์

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

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

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

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

ส่วนประกอบของการไล่ระดับโคตร

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

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

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

การทดสอบสมมติฐานเกี่ยวกับวัตถุประสงค์ของเลเยอร์ที่ซ่อนอยู่

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

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

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

การเรียนรู้จากข้อมูลที่มีโครงสร้างและข้อมูลแบบสุ่ม

ลองพิจารณาตัวอย่างโครงข่ายประสาทเทียมสมัยใหม่เพื่อการจดจำ วัตถุต่างๆโลกแห่งความเป็นจริง

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

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

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

3. วิธีการ การขยายพันธุ์กลับข้อผิดพลาด

Backpropagation เป็นอัลกอริธึมการฝึกอบรมโครงข่ายประสาทเทียมที่สำคัญ เรามาพูดคุยกันก่อนใน โครงร่างทั่วไป, วิธีการคืออะไร.

การควบคุมการเปิดใช้งานเซลล์ประสาท

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

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

ตัวเลือกการกำหนดค่าโครงข่ายประสาทเทียม

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

ดังนั้น เพื่อเพิ่มมูลค่าของการเปิดใช้งานนี้ เราสามารถ:

  1. เพิ่มกะข.
  2. เพิ่มน้ำหนักด้วย
  3. เปลี่ยนการเปิดใช้งานของเลเยอร์ก่อนหน้า a i

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

อีกวิธีที่คล้ายกันคือการเปลี่ยนการกระตุ้นของเซลล์ประสาทของเลเยอร์ก่อนหน้า a i ตามสัดส่วนของน้ำหนัก w i เราไม่สามารถเปลี่ยนการกระตุ้นการทำงานของเซลล์ประสาทได้ แต่เราสามารถเปลี่ยนน้ำหนักและการเปลี่ยนแปลงที่สอดคล้องกันได้ และส่งผลต่อการกระตุ้นการทำงานของเซลล์ประสาท

การขยายพันธุ์กลับ

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

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

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

การไล่ระดับแบบคลาสสิก

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

ผลลัพธ์ของการหาค่าเฉลี่ยนี้แสดงถึงเวกเตอร์คอลัมน์ของการไล่ระดับสีเชิงลบของฟังก์ชันต้นทุน

โคตรลาดสุ่ม

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

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

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

ถ้าเราวางกราฟการเรียนรู้ของการลงเนินแบบไล่ระดับที่ทันสมัย ​​มันจะดูไม่เหมือนการลงเนินที่มีจุดมุ่งหมายและสม่ำเสมอ แต่จะเหมือนกับวิถีโคจรที่คดเคี้ยวของคนเมา แต่ทำมากกว่านั้น ขั้นตอนด่วนและยังมาถึงหน้าที่ขั้นต่ำสุดด้วย

วิธีการนี้เรียกว่าการไล่ระดับสีแบบสุ่ม

ส่วนที่เพิ่มเข้าไป. คณิตศาสตร์เบื้องหลังการขยายพันธุ์

ตอนนี้ให้เราดูอย่างเป็นทางการอีกเล็กน้อยเกี่ยวกับพื้นหลังทางคณิตศาสตร์ของอัลกอริธึมการเผยแพร่กลับ

โมเดลโครงข่ายประสาทเทียมดั้งเดิม

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

เริ่มจากการเชื่อมต่อระหว่างเซลล์ประสาทสองตัวสุดท้ายกันก่อน เรามาแสดงเลเยอร์สุดท้าย L, เลเยอร์สุดท้าย L-1 และการเปิดใช้งานของเซลล์ประสาทที่มีปัญหาซึ่งอยู่ในนั้น (L) , a (L-1) .

ฟังก์ชันต้นทุน

ลองจินตนาการว่าค่าการเปิดใช้งานที่ต้องการของเซลล์ประสาทสุดท้ายที่กำหนดโดยตัวอย่างการฝึกคือ y เท่ากับ เช่น 0 หรือ 1 ดังนั้น ฟังก์ชันต้นทุนจึงถูกกำหนดไว้สำหรับตัวอย่างนี้เป็น

C 0 = (ก (ย) - ย) 2.

โปรดจำไว้ว่าการเปิดใช้งานของเซลล์ประสาทสุดท้ายนี้กำหนดโดยผลรวมถ่วงน้ำหนัก หรือค่อนข้างจะเป็นฟังก์ชันมาตราส่วนของผลรวมถ่วงน้ำหนัก:

ก(ล) = σ (ว (L) ก (L-1) + ข (L))

เพื่อความกระชับ อาจแสดงผลรวมถ่วงน้ำหนักด้วยตัวอักษรที่มีตัวห้อยที่เหมาะสม เช่น z(L):

ก(ล) = σ (z(ล))

ลองพิจารณาว่าการเปลี่ยนแปลงเล็กน้อยของน้ำหนัก w (L) ส่งผลต่อค่าของฟังก์ชันต้นทุนอย่างไร หรือ ภาษาคณิตศาสตร์, อนุพันธ์ของฟังก์ชันต้นทุนเทียบกับน้ำหนัก ∂C 0 /∂w (L) คืออะไร?

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

∂C 0 /∂w (L) = ∂z (L) /∂w (L) ∂a (L) /∂z (L) ∂C 0 /∂a (L)

คำจำกัดความของอนุพันธ์

มาคำนวณอนุพันธ์ที่สอดคล้องกัน:

∂C 0 /∂a (L) = 2(ก (L) - y)

นั่นคืออนุพันธ์นั้นเป็นสัดส่วนกับความแตกต่างระหว่างมูลค่าการเปิดใช้งานปัจจุบันกับค่าที่ต้องการ

อนุพันธ์เฉลี่ยในสายโซ่เป็นเพียงอนุพันธ์ของฟังก์ชันสเกล:

∂a (L) /∂z (L) = σ"(z (L))

และสุดท้าย ปัจจัยสุดท้ายคืออนุพันธ์ของผลรวมถ่วงน้ำหนัก:

∂z (L) /∂w (L) = ก (L-1)

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

การแสดงออกครั้งสุดท้าย:

∂C 0 /∂w (L) = 2(ก (L) - y) σ"(z (L)) ก (L-1)

การขยายพันธุ์กลับ

โปรดจำไว้ว่าอนุพันธ์ที่แน่นอนนั้นมีไว้สำหรับต้นทุนของตัวอย่างแยกต่างหากของตัวอย่างการฝึก C 0 เท่านั้น สำหรับฟังก์ชันต้นทุน C อย่างที่เราจำได้ เราจำเป็นต้องหาค่าเฉลี่ยจากตัวอย่างทั้งหมดของชุดการฝึก:

∂C/∂w (L) = 1/n Σ ∂C k /∂w (L)

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

เมื่อได้รับอนุพันธ์ที่สอดคล้องกันแล้ว เราก็สามารถพิจารณาเลเยอร์ก่อนหน้าต่อไปได้

แบบจำลองที่มีเซลล์ประสาทจำนวนมากในชั้นเดียว

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

อนุพันธ์ขั้นสุดท้ายมีส่วนประกอบที่จำเป็นในการกำหนดองค์ประกอบของเกรเดียนต์ ∇C

คุณสามารถฝึกงานการรู้จำหลักที่อธิบายไว้ได้โดยใช้พื้นที่เก็บข้อมูลการฝึกอบรมบน GitHub และชุดข้อมูลการรู้จำหลัก MNIST ที่กล่าวถึง

  • บทช่วยสอน

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

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

บทความนี้มีจุดมุ่งหมายเพื่อให้บุคคลที่ไม่เคยทำงานกับวิธีการจดจำภาพสามารถสร้างภาพพื้นฐานของโลกที่สอดคล้องกับหัวข้อในหัวของเขาภายใน 10-15 นาทีและเข้าใจว่าจะขุดไปในทิศทางใด เทคนิคหลายอย่างที่อธิบายไว้ที่นี่ใช้ได้กับการประมวลผลเรดาร์และเสียง
ฉันจะเริ่มต้นด้วยหลักการสองสามข้อที่เรามักจะเริ่มบอกผู้มีโอกาสเป็นลูกค้า หรือบุคคลที่ต้องการเริ่มทำการจดจำด้วยแสง:

  • เมื่อแก้ไขปัญหา ให้เริ่มจากวิธีที่ง่ายที่สุดเสมอ การติดแท็กสีส้มให้กับบุคคลนั้นง่ายกว่าการติดตามบุคคลโดยเน้นให้เขาเป็นน้ำตก การใช้กล้องที่มีความละเอียดสูงกว่าการพัฒนาอัลกอริธึมที่มีความละเอียดสูงนั้นง่ายกว่ามาก
  • การกำหนดปัญหาที่เข้มงวดในวิธีการรู้จำด้วยแสงคือลำดับความสำคัญที่สำคัญมากกว่าปัญหาในการเขียนโปรแกรมระบบ: หนึ่ง คำพิเศษสามารถเพิ่มงาน 50% ให้กับข้อกำหนดทางเทคนิคได้
  • ไม่มีการรับรู้ในงาน โซลูชั่นที่เป็นสากล- คุณไม่สามารถสร้างอัลกอริธึมที่จะ "จดจำคำจารึกใด ๆ " ป้ายบนถนนและแผ่นข้อความเป็นวัตถุที่แตกต่างกันโดยพื้นฐาน อาจเป็นไปได้ที่จะสร้างอัลกอริทึมทั่วไป (นี่คือตัวอย่างที่ดีจาก Google) แต่จะต้องอาศัยการทำงานจำนวนมากจากทีมขนาดใหญ่และประกอบด้วยรูทีนย่อยที่แตกต่างกันหลายสิบรายการ
  • OpenCV เป็นพระคัมภีร์ที่มีหลายวิธีและสามารถแก้ปัญหาได้เกือบ 50% แต่ OpenCV เป็นเพียงส่วนเล็กๆ ของสิ่งที่สามารถทำได้จริง ในการศึกษาชิ้นหนึ่ง มีการเขียนข้อสรุปว่า “ปัญหาไม่สามารถแก้ไขได้โดยใช้วิธี OpenCV ดังนั้นจึงแก้ไม่ได้” พยายามหลีกเลี่ยงสิ่งนี้ อย่าเกียจคร้านและประเมินงานปัจจุบันตั้งแต่ต้นในแต่ละครั้งอย่างมีสติ โดยไม่ต้องใช้เทมเพลต OpenCV
เป็นเรื่องยากมากที่จะให้คำแนะนำที่เป็นสากลหรือบอกวิธีสร้างโครงสร้างบางประเภทซึ่งคุณสามารถสร้างวิธีแก้ปัญหาตามอำเภอใจได้ วิสัยทัศน์คอมพิวเตอร์- วัตถุประสงค์ของบทความนี้คือเพื่อจัดโครงสร้างสิ่งที่สามารถใช้ได้ ฉันจะพยายามแบ่งวิธีการที่มีอยู่ออกเป็นสามกลุ่ม กลุ่มแรกคือการกรองเบื้องต้นและการเตรียมภาพ กลุ่มที่สองคือการประมวลผลผลลัพธ์การกรองเชิงตรรกะ กลุ่มที่สามคืออัลกอริธึมการตัดสินใจตามการประมวลผลเชิงตรรกะ ขอบเขตระหว่างกลุ่มมีความเด็ดขาดมาก ในการแก้ปัญหา ไม่จำเป็นต้องใช้วิธีการจากทุกกลุ่มเสมอไป บางครั้งสองวิธีก็เพียงพอแล้ว และบางครั้งก็อาจหนึ่งวิธีด้วยซ้ำ

รายการวิธีการที่ระบุไว้ที่นี่ไม่สมบูรณ์ ฉันขอแนะนำให้เพิ่มวิธีการที่สำคัญในความคิดเห็นที่ฉันไม่ได้เขียนและระบุคำประกอบ 2-3 คำให้กับแต่ละคำ

ส่วนที่ 1 การกรอง

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




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

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

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


มากที่สุด ตัวอย่างง่ายๆตัวกรองที่ใช้การขีดเส้นใต้ ความถี่ต่ำ(ตัวกรองแบบเกาส์เซียน) และ ความถี่สูง(ตัวกรองกาบอร์).
สำหรับแต่ละจุดภาพ หน้าต่างจะถูกเลือกและคูณด้วยฟิลเตอร์ที่มีขนาดเท่ากัน ผลลัพธ์ของการบิดดังกล่าวคือค่าจุดใหม่ เมื่อใช้ฟิลเตอร์ Low-pass และ High-pass filter จะได้รูปภาพประเภทต่อไปนี้:



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


ด้านบนนี้คือ 4 ตัวอย่างของเวฟเล็ตคลาสสิก เวฟเล็ต Haar 3 มิติ, เวฟเล็ตเมเยอร์ 2 มิติ, เวฟเล็ตหมวกเม็กซิกัน, เวฟเล็ต Daubechies เป็นตัวอย่างที่ดีการใช้การตีความเวฟเล็ตแบบขยายคือปัญหาในการค้นหาแสงสะท้อนในดวงตา ซึ่งเวฟเล็ตคือแสงสะท้อนนั่นเอง:

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

ฟังก์ชั่นการกรอง
คลาสตัวกรองที่น่าสนใจคือการกรองฟังก์ชัน สิ่งเหล่านี้เป็นตัวกรองทางคณิตศาสตร์ล้วนๆ ที่ช่วยให้คุณตรวจจับแบบง่ายได้ ฟังก์ชันทางคณิตศาสตร์บนภาพ (เส้นตรง พาราโบลา วงกลม) มีการสร้างภาพที่สะสมซึ่งในแต่ละจุดของภาพต้นฉบับจะมีการวาดชุดฟังก์ชันที่สร้างภาพนั้นขึ้นมา การแปลงที่คลาสสิกที่สุดคือการแปลง Hough สำหรับเส้น ในการแปลงนี้ สำหรับแต่ละจุด (x;y) จะมีการวาดเซตของจุด (a;b) ของเส้นตรง y=ax+b ซึ่งความเท่าเทียมกันเป็นจริง คุณจะได้ภาพที่สวยงาม:


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

ส่วนใหญ่มักจะเป็น Canny ที่ใช้งานซึ่งทำงานได้ดีและมีการใช้งานใน OpenCV (Sobel ก็อยู่ที่นั่นเช่นกัน แต่จะค้นหารูปทรงที่แย่กว่านั้น)



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

แต่การเปลี่ยนแปลงเหล่านี้มีความเฉพาะเจาะจงและได้รับการปรับแต่งมาสำหรับงานที่หายาก

ส่วนที่ 2 การประมวลผลผลลัพธ์การกรองเชิงตรรกะ

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

พูดตามตรง ฉันไม่เคยสามารถนำการวิเคราะห์รูปร่างไปใช้กับปัญหาจริงได้เลย จำเป็นต้องมีเงื่อนไขที่เหมาะสมเกินไป ไม่มีขอบเขตหรือมีเสียงรบกวนมากเกินไป แต่หากคุณต้องการจดจำบางสิ่งภายใต้สภาวะที่เหมาะสม การวิเคราะห์รูปร่างก็เป็นตัวเลือกที่ดี มันทำงานเร็วมาก คณิตศาสตร์ที่สวยงามและตรรกะที่ชัดเจน
จุดพิเศษ
จุดเอกพจน์เป็นคุณลักษณะเฉพาะของวัตถุที่ช่วยให้วัตถุสามารถเปรียบเทียบกับตัวมันเองหรือกับคลาสของวัตถุที่คล้ายกันได้ มีหลายวิธีในการระบุประเด็นดังกล่าว วิธีการบางวิธีจะระบุจุดพิเศษในเฟรมที่อยู่ติดกัน บางวิธีจะระบุจุดพิเศษหลังจากผ่านไปเป็นเวลานานและเมื่อแสงเปลี่ยนไป บางวิธีช่วยให้คุณค้นหาจุดพิเศษที่ยังคงอยู่ได้แม้ว่าวัตถุจะหมุนก็ตาม เริ่มจากวิธีการที่ช่วยให้คุณค้นหาจุดพิเศษซึ่งไม่เสถียรนัก แต่คำนวณได้เร็ว จากนั้นเราจะเพิ่มความซับซ้อน:
ชั้นเฟิร์สคลาส คะแนนพิเศษที่คงที่ในช่วงเวลาไม่กี่วินาทีจุดดังกล่าวใช้เพื่อนำทางวัตถุระหว่างเฟรมวิดีโอที่อยู่ติดกัน หรือเพื่อรวมภาพจากกล้องข้างเคียง จุดดังกล่าวรวมถึงจุดสูงสุดของภาพ มุมในภาพ (บางทีเครื่องตรวจจับที่ดีที่สุดคือเครื่องตรวจจับ Charis) จุดที่ทำให้เกิดการกระจายตัวสูงสุด การไล่ระดับสีบางอย่าง เป็นต้น
ชั้นสอง. จุดพิเศษที่มีความเสถียรเมื่อมีการเปลี่ยนแปลงแสงและการเคลื่อนไหวเล็กน้อยของวัตถุประเด็นดังกล่าวมีไว้เพื่อการฝึกอบรมและการจำแนกประเภทของวัตถุเป็นหลัก ตัวอย่างเช่น เครื่องแยกประเภททางเท้าหรือเครื่องแยกประเภทใบหน้าเป็นผลิตภัณฑ์ของระบบที่สร้างขึ้นบนจุดดังกล่าวอย่างแม่นยำ เวฟเล็ตที่กล่าวถึงก่อนหน้านี้บางส่วนอาจเป็นพื้นฐานสำหรับประเด็นดังกล่าว ตัวอย่างเช่น Haar primitives ค้นหาไฮไลท์ ค้นหาฟังก์ชันเฉพาะอื่นๆ จุดเหล่านี้รวมถึงจุดที่พบในฮิสโตแกรมของวิธีไล่ระดับทิศทาง (HOG)
ชั้นประถมศึกษาปีที่ 3 จุดที่มั่นคงฉันรู้เพียงสองวิธีที่ให้ความเสถียรอย่างสมบูรณ์และเกี่ยวกับการแก้ไข เหล่านี้คือ SURF และ SIFT ช่วยให้คุณสามารถค้นหาจุดพิเศษได้แม้ในขณะที่คุณหมุนภาพ การคำนวณคะแนนดังกล่าวจะใช้เวลานานกว่าเมื่อเทียบกับวิธีอื่นแต่ก็เพียงพอแล้ว มีเวลาจำกัด- น่าเสียดายที่วิธีการเหล่านี้ได้รับการจดสิทธิบัตรแล้ว แม้ว่าในรัสเซียจะเป็นไปไม่ได้ที่จะจดสิทธิบัตรอัลกอริธึม ดังนั้นควรใช้สำหรับตลาดภายในประเทศ

ส่วนที่ 3 การฝึกอบรม

ส่วนที่สามของเรื่องราวจะกล่าวถึงวิธีการที่ไม่ได้ผลโดยตรงกับภาพ แต่ช่วยให้คุณสามารถตัดสินใจได้ โดยพื้นฐานแล้วมันเป็น วิธีการต่างๆการเรียนรู้ของเครื่องและการตัดสินใจ เมื่อเร็ว ๆ นี้ Yandyx โพสต์หลักสูตรในหัวข้อนี้ใน Habr มันดีมาก การเลือกที่ดี- นี่คือในเวอร์ชันข้อความ สำหรับการศึกษาหัวข้อนี้อย่างจริงจัง ฉันขอแนะนำให้ดูพวกเขาเป็นอย่างยิ่ง ที่นี่ฉันจะพยายามสรุปวิธีการหลักๆ หลายวิธีที่ใช้โดยเฉพาะในการจดจำรูปแบบ
ใน 80% ของสถานการณ์ สาระสำคัญของการเรียนรู้ในงานการจดจำมีดังนี้:
มีตัวอย่างทดสอบที่มีออบเจ็กต์หลายคลาส ปล่อยให้เป็นการมีอยู่/ไม่มีบุคคลในภาพ สำหรับแต่ละภาพ จะมีชุดคุณสมบัติที่ถูกเน้นโดยคุณสมบัติบางอย่าง ไม่ว่าจะเป็น Haar, HOG, SURF หรือเวฟเล็ตบางส่วน อัลกอริธึมการเรียนรู้จะต้องสร้างแบบจำลองเพื่อให้สามารถวิเคราะห์รูปภาพใหม่และตัดสินใจว่าวัตถุใดอยู่ในรูปภาพ
วิธีนี้ทำอย่างไร? รูปภาพทดสอบแต่ละภาพเป็นจุดในพื้นที่ฟีเจอร์ พิกัดของมันคือน้ำหนักของแต่ละจุดในภาพ ให้สัญญาณของเราเป็น: "มีตา" "มีจมูก" "มีมือทั้งสองข้าง" "มีหู" ฯลฯ... เราจะเน้นสัญญาณเหล่านี้ทั้งหมดโดยใช้เครื่องตรวจจับที่มีอยู่ของเรา ซึ่งได้รับการฝึกฝนเกี่ยวกับ ส่วนของร่างกายคล้ายกับมนุษย์ สำหรับคนในพื้นที่ดังกล่าว จุดที่ถูกต้องจะเป็น สำหรับลิง จุดสำหรับม้า ตัวแยกประเภทได้รับการฝึกอบรมโดยใช้ตัวอย่างตัวอย่าง แต่ไม่ใช่ทุกภาพถ่ายที่แสดงให้เห็นมือ ภาพถ่ายอื่นๆ ไม่มีตา และในภาพที่สาม ลิงมีจมูกมนุษย์เนื่องจากข้อผิดพลาดในการจำแนกประเภท ตัวแยกประเภทของมนุษย์ที่ได้รับการฝึกอบรมจะแบ่งพาร์ติชันพื้นที่ของฟีเจอร์โดยอัตโนมัติในลักษณะที่บอกว่า: หากฟีเจอร์แรกอยู่ในช่วง 0.5 โดยพื้นฐานแล้ว เป้าหมายของตัวแยกประเภทคือการวาดพื้นที่ในพื้นที่คุณลักษณะที่เป็นคุณลักษณะของออบเจ็กต์การจำแนกประเภท นี่คือลักษณะการประมาณคำตอบตามลำดับสำหรับหนึ่งในตัวแยกประเภท (AdaBoost) ในพื้นที่สองมิติ:


มีตัวแยกประเภทจำนวนมาก แต่ละคนทำงานได้ดีขึ้นในบางงานโดยเฉพาะ งานในการเลือกลักษณนามสำหรับงานเฉพาะนั้นเป็นศิลปะเป็นส่วนใหญ่ นี่คือภาพที่สวยงามในหัวข้อ
กรณีง่ายๆ การแยกมิติเดียว
ลองดูตัวอย่างกรณีที่ง่ายที่สุดของการจำแนกประเภท เมื่อพื้นที่คุณลักษณะเป็นแบบมิติเดียว และเราต้องแยก 2 คลาสออกจากกัน สถานการณ์เกิดขึ้นบ่อยกว่าที่คุณคิด เช่น เมื่อคุณต้องการแยกแยะสัญญาณสองสัญญาณ หรือเปรียบเทียบรูปแบบกับตัวอย่าง ขอให้เรามีตัวอย่างการฝึกอบรม ซึ่งจะสร้างภาพที่แกน X เป็นหน่วยวัดความคล้ายคลึง และแกน Y คือจำนวนเหตุการณ์ที่มีหน่วยวัดดังกล่าว เมื่อวัตถุที่ต้องการคล้ายกับตัวมันเอง จะได้เกาส์เซียนด้านซ้าย เมื่อดูไม่เหมือนก็เป็นสิ่งที่ใช่ ค่า X=0.4 จะแยกกลุ่มตัวอย่างเพื่อให้การตัดสินใจที่ผิดจะลดความน่าจะเป็นในการตัดสินใจที่ผิด การค้นหาตัวคั่นดังกล่าวเป็นหน้าที่ในการจำแนกประเภท


บันทึกเล็กๆ น้อยๆ เกณฑ์ที่ลดข้อผิดพลาดให้น้อยที่สุดนั้นอาจไม่เหมาะสมเสมอไป กราฟต่อไปนี้เป็นกราฟของระบบการรับรู้ม่านตาจริง สำหรับระบบดังกล่าว เกณฑ์จะถูกเลือกเพื่อลดความน่าจะเป็นในการรับบุคคลที่ไม่ได้รับอนุญาตเข้าสถานที่อย่างไม่ถูกต้อง ความน่าจะเป็นนี้เรียกว่า "ข้อผิดพลาดประเภท 1", "ความน่าจะเป็นสัญญาณเตือนที่ผิดพลาด", "ผลบวกลวง" ในวรรณคดีภาษาอังกฤษ "อัตราการเข้าถึงที่ผิดพลาด"
) AdaBusta เป็นหนึ่งในตัวแยกประเภทที่พบบ่อยที่สุด ตัวอย่างเช่น มีการสร้างน้ำตก Haar ไว้บนนั้น โดยปกติจะใช้เมื่อจำเป็นต้องมีการจำแนกประเภทไบนารี แต่ไม่มีสิ่งใดขัดขวางการฝึกอบรมสำหรับชั้นเรียนจำนวนมากขึ้น
SVM ( , , , ) หนึ่งในตัวแยกประเภทที่ทรงพลังที่สุดซึ่งมีการใช้งานมากมาย โดยพื้นฐานแล้ว ในงานการเรียนรู้ที่ฉันได้พบ มันทำงานคล้ายกับ Adabusta ถือว่าค่อนข้างเร็ว แต่การฝึกนั้นยากกว่าของ Adabusta และต้องเลือกคอร์ที่เหมาะสม

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

และสุดท้าย

สิ่งที่จะอ่าน?
1) ครั้งหนึ่งฉันชอบหนังสือ “Digital Image Processing” ของ B. Yane มาก ซึ่งเขียนอย่างเรียบง่ายและชัดเจน แต่ในขณะเดียวกันก็ให้คณิตศาสตร์เกือบทั้งหมดด้วย ดีสำหรับการทำความรู้จักกับวิธีการที่มีอยู่
2) ประเภทคลาสสิกคือ R. Gonzalez, R. Woods "การประมวลผลภาพดิจิทัล" ด้วยเหตุผลบางอย่างมันยากสำหรับฉันมากกว่าครั้งแรก คณิตศาสตร์น้อยกว่ามาก แต่มีวิธีการและรูปภาพมากกว่า
3) “ การประมวลผลและการวิเคราะห์ภาพในปัญหาการมองเห็นของคอมพิวเตอร์” - เขียนบนพื้นฐานของหลักสูตรที่สอนในแผนกฟิสิกส์และเทคโนโลยีแห่งใดแห่งหนึ่ง มีวิธีการมากมายและคำอธิบายโดยละเอียด แต่ในความคิดของฉัน หนังสือเล่มนี้มีข้อเสียใหญ่สองประการ: หนังสือเล่มนี้เน้นไปที่ชุดซอฟต์แวร์ที่มาพร้อมกับหนังสือ บ่อยครั้งที่คำอธิบายของวิธีการง่ายๆ กลายเป็นป่าทางคณิตศาสตร์ซึ่งเป็นเรื่องยาก ได้มาซึ่งแผนผังโครงสร้างของวิธีการ แต่ผู้เขียนได้สร้างเว็บไซต์ที่สะดวกซึ่งนำเสนอเนื้อหาเกือบทั้งหมด - wiki.technicalvision.ru เพิ่มแท็ก

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

ความรู้เบื้องต้นเกี่ยวกับคุณลักษณะออยเลอร์ของภาพ

แนวคิดพื้นฐานคือคุณถ่ายภาพขาวดำ และสมมติว่า 0 คือพิกเซลสีขาว และ 1 คือพิกเซลสีดำ รูปภาพทั้งหมดจะเป็นเมทริกซ์ที่มีศูนย์และหนึ่ง ในกรณีนี้ ภาพขาวดำสามารถแสดงเป็นชุดของชิ้นส่วนที่มีขนาด 2 x 2 พิกเซล ชุดค่าผสมที่เป็นไปได้ทั้งหมดจะแสดงในรูป:

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


ความคิดเห็น:ในทางปฏิบัติ จะไม่ใช้ค่า F0 (สำหรับภาพต้นฉบับ ค่านี้คือ 8) เนื่องจากเป็นพื้นหลังของภาพ ดังนั้นจะใช้ 15 ค่า เริ่มตั้งแต่ F1 ถึง F15

คุณสมบัติของคุณลักษณะออยเลอร์ของรูปภาพ

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

อัลกอริธึมการรู้จำข้อความคืออะไร?

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

ขั้นตอนการรับรู้:

  1. รูปภาพอาจเป็นได้ทั้งขาวดำหรือสี ดังนั้นขั้นตอนแรกคือการประมาณรูปภาพ นั่นคือจะได้ขาวดำจากรูปภาพนั้น
  2. เราส่งผ่านภาพทั้งหมดแบบพิกเซลต่อพิกเซลเพื่อค้นหาพิกเซลสีดำ เมื่อตรวจพบพิกเซลที่แรเงา การดำเนินการแบบเรียกซ้ำจะเริ่มขึ้นเพื่อค้นหาพิกเซลที่แรเงาทั้งหมดที่อยู่ติดกับพิกเซลที่พบและพิกเซลที่ตามมา เป็นผลให้เราจะได้รับส่วนของภาพซึ่งอาจเป็นได้ทั้งตัวละครหรือบางส่วนหรือ "ขยะ" ที่ควรทิ้ง
  3. หลังจากค้นหาส่วนที่ไม่เชื่อมโยงกันทั้งหมดของภาพแล้ว คุณลักษณะออยเลอร์จะถูกคำนวณสำหรับแต่ละส่วน
  4. จากนั้น เครื่องวิเคราะห์จะเริ่มทำงาน และพิจารณาแต่ละส่วนเพื่อพิจารณาว่าค่าของคุณลักษณะออยเลอร์นั้นอยู่ในฐานความรู้หรือไม่ หากเราพบคุณค่าเราจะพิจารณาว่าเป็นส่วนที่ได้รับการยอมรับของภาพ ไม่เช่นนั้นเราจะทิ้งไว้เพื่อการศึกษาต่อไป
  5. ส่วนที่ไม่รู้จักของรูปภาพนั้นต้องได้รับการวิเคราะห์ตามฮิวริสติก กล่าวคือ ฉันพยายามค้นหาค่าที่เหมาะสมที่สุดในฐานความรู้โดยพิจารณาจากคุณค่าของคุณลักษณะออยเลอร์ หากไม่สามารถค้นหาได้ ให้พยายาม "ติดกัน" ชิ้นส่วนใกล้เคียงและค้นหาผลลัพธ์ในฐานความรู้สำหรับชิ้นส่วนเหล่านั้น "การติดกาว" มีไว้เพื่ออะไร? ความจริงก็คือไม่ใช่ทุกตัวอักษรที่จะมีรูปภาพต่อเนื่องกันเพียงรูปเดียว เช่น "!" เครื่องหมายอัศเจรีย์ประกอบด้วย 2 ส่วน (แท่งและจุด) ดังนั้นก่อนที่จะค้นหาในฐานความรู้ คุณจะต้องคำนวณมูลค่ารวมของคุณลักษณะออยเลอร์จากทั้งสองส่วน หากแม้หลังจากติดกาวกับส่วนที่อยู่ติดกันแล้ว แต่ไม่พบผลลัพธ์ที่ยอมรับได้ เราก็ถือว่าแฟรกเมนต์นั้นเป็นขยะและข้ามไป

องค์ประกอบของระบบ:

  1. ฐานความรู้- ไฟล์หรือไฟล์ที่สร้างขึ้นโดยฉันหรือบุคคลอื่นซึ่งมีชุดอักขระที่มีลักษณะเฉพาะและจำเป็นสำหรับการจดจำ
  2. แกนกลาง- มีฟังก์ชันพื้นฐานที่ทำหน้าที่จดจำ
  3. เครื่องกำเนิดไฟฟ้า- โมดูลสำหรับการสร้างฐานความรู้

ClearType และการป้องกันนามแฝง

ดังนั้น ตามที่ป้อนเข้ามา เรามีภาพที่จดจำได้ และเป้าหมายคือการทำให้เป็นภาพขาวดำ เหมาะสำหรับการเริ่มกระบวนการจดจำ ดูเหมือนว่าสิ่งที่อาจง่ายกว่านี้ เรานับพิกเซลสีขาวทั้งหมดเป็น 0 และส่วนที่เหลือทั้งหมดเป็น 1 แต่ไม่ใช่ทุกอย่างจะง่ายนัก ข้อความบนรูปภาพสามารถเป็นแบบ anti-aliased หรือ non-anti-aliased ได้ อักขระที่ไม่เรียบจะดูเรียบเนียนและไม่มีมุม ในขณะที่อักขระที่ไม่เรียบจะดูบนจอภาพสมัยใหม่ที่มีพิกเซลปรากฏตามโครงร่าง ด้วยการถือกำเนิดของหน้าจอ LCD (ผลึกเหลว) ClearType (สำหรับ Windows) และการป้องกันนามแฝงประเภทอื่น ๆ ได้ถูกสร้างขึ้น ซึ่งใช้ประโยชน์จากคุณสมบัติของเมทริกซ์จอภาพ พิกเซลของรูปภาพข้อความจะเปลี่ยนสี หลังจากนั้นจะดู "นุ่มนวลขึ้น" มาก หากต้องการดูผลลัพธ์ของการปรับให้เรียบ คุณสามารถพิมพ์ตัวอักษร (หรือข้อความ) เช่น mspaintซูมเข้า และข้อความของคุณก็กลายเป็นโมเสกหลากสี

เกิดอะไรขึ้น?ทำไมเราถึงเห็นสัญลักษณ์ธรรมดาๆ ในระดับเล็กๆ? ดวงตาของเราหลอกลวงเราหรือเปล่า? ความจริงก็คือพิกเซลของจอภาพ LCD ไม่ได้ประกอบด้วยพิกเซลเดียวที่สามารถรับสีที่ต้องการได้ แต่มี 3 พิกเซลย่อย 3 สีซึ่งเพียงพอที่จะได้สีที่ต้องการ ดังนั้น เป้าหมายของ ClearType คือการได้รับข้อความที่ดูสบายตาที่สุดโดยใช้คุณสมบัติของเมทริกซ์ของจอภาพ LCD และสามารถทำได้โดยใช้การเรนเดอร์พิกเซลย่อย ใครก็ตามที่มี "แว่นขยาย" เพื่อการทดลอง สามารถขยายตำแหน่งใดๆ บนหน้าจอที่เปิดอยู่และดูเมทริกซ์ได้ดังภาพด้านล่าง

รูปนี้แสดงสี่เหลี่ยมจัตุรัสขนาด 3x3 พิกเซลของเมทริกซ์ LCD

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


เพื่อให้ได้ภาพขาวดำ

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

ฐานความรู้

แนวคิดเริ่มต้นของการกรอกฐานความรู้คือสำหรับตัวอักษรแต่ละตัวของภาษาฉันจะคำนวณคุณลักษณะออยเลอร์ของภาพสัญลักษณ์ผลลัพธ์สำหรับแบบอักษร 140 แบบที่ติดตั้งบนคอมพิวเตอร์ของฉัน (C:\Windows\Fonts) ให้เพิ่มทั้งหมด ตัวเลือกสำหรับประเภทแบบอักษร (ปกติ เจ้าอ้วน, ตัวเอียง) และขนาดตั้งแต่ 8 ถึง 32 ดังนั้นจึงครอบคลุมรูปแบบตัวอักษรและฐานทั้งหมดหรือเกือบทั้งหมดจะกลายเป็นสากล แต่น่าเสียดายที่สิ่งนี้กลับกลายเป็นว่าไม่ดีเท่าที่ควร ด้วยเงื่อนไขเหล่านี้ นี่คือสิ่งที่ฉันได้รับ:

  1. ไฟล์ฐานความรู้มีขนาดค่อนข้างใหญ่ (ประมาณ 3 เมกะไบต์) สำหรับภาษารัสเซียและอังกฤษ แม้ว่าคุณลักษณะออยเลอร์จะถูกจัดเก็บเป็นสตริงธรรมดา 15 หลักและตัวไฟล์เองก็เป็นไฟล์บีบอัด (DeflateStream) ซึ่งจะถูกแตกไฟล์ในหน่วยความจำ
  2. ฉันใช้เวลาประมาณ 10 วินาทีในการดีซีเรียลไลซ์ฐานความรู้ ในเวลาเดียวกัน เวลาในการเปรียบเทียบชุดคุณลักษณะก็ประสบปัญหา ไม่สามารถค้นหาฟังก์ชันสำหรับคำนวณ GetHashCode() ได้ ดังนั้นฉันจึงต้องเปรียบเทียบทีละนิด และเมื่อเทียบกับฐานความรู้ 3-5 ฟอนต์ ระยะเวลาในการวิเคราะห์ข้อความด้วยฐานข้อมูล 140 ฟอนต์ เพิ่มขึ้น 30-50 เท่า ในเวลาเดียวกัน ชุดคุณลักษณะเดียวกันจะไม่ถูกบันทึกในฐานความรู้ แม้ว่าอักขระบางตัวในแบบอักษรที่แตกต่างกันอาจดูเหมือนกันและคล้ายกัน แม้ว่าจะมีแบบอักษรเช่น 20 และ 21 ก็ตาม

ดังนั้นฉันจึงต้องสร้างฐานความรู้ขนาดเล็กที่อยู่ภายในโมดูล Core และทำให้สามารถตรวจสอบการทำงานได้ มีปัญหาร้ายแรงมากในการกรอกฐานข้อมูล แบบอักษรบางแบบอาจไม่แสดงอักขระขนาดเล็กอย่างถูกต้อง สมมติว่าอักขระ "e" เมื่อแสดงผลเป็นฟอนต์ขนาด 8 ชื่อ "Franklin Gothic Medium" กลายเป็น:

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

อัลกอริธึมการค้นหาตัวละคร

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

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


รูปภาพของคำว่า "ใช่" นี้จะพยายามอธิบายความซับซ้อนของการวิเคราะห์ เราจะถือว่านี่เป็นสตริงที่สมบูรณ์ แต่ b13 และ i6 เป็นเศษขยะอันเป็นผลมาจากการประมาณ อักขระ "y" ขาดช่วง และไม่มีอักขระตัวใดอยู่ในฐานความรู้ที่จะพูดด้วยความมั่นใจว่าเรากำลังจัดการกับบรรทัดข้อความตั้งแต่บรรทัด "c" ถึงบรรทัด "i" และความสูงของเส้นเป็นสิ่งสำคัญมากสำหรับเรา เนื่องจากการติดกาวเราจำเป็นต้องรู้ว่าชิ้นส่วนควร "ติดกาวเข้าด้วยกัน" และวิเคราะห์อย่างไร ท้ายที่สุดอาจมีสถานการณ์ที่เราเริ่มรวมอักขระจากสองสายโดยไม่ได้ตั้งใจและผลลัพธ์ของการจดจำดังกล่าวจะอยู่ไกลจากอุดมคติ

การวิเคราะห์พฤติกรรมในการวิเคราะห์ภาพ


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

  1. ฉันพบชุดคุณลักษณะทั้งหมดในฐานความรู้ที่มีค่าจำนวนมากที่สุด แฟรกเมนต์ Fตรงกับภาพที่ได้รับการยอมรับ
  2. ต่อไป ฉันเลือกเฉพาะชุดคุณลักษณะเหล่านั้นซึ่งด้วยภาพที่ได้รับการยอมรับตามค่า F ที่ไม่เท่ากันของแฟรกเมนต์ ความแตกต่างจะไม่เกิน +- 1 หน่วย: -1< F < 1. И это все подсчитывается для каждой буквы алфавита.
  3. จากนั้นผมจะเจอสัญลักษณ์ที่มีจำนวนครั้งมากที่สุด เมื่อพิจารณาถึงผลลัพธ์ของการวิเคราะห์ฮิวริสติก
อัลกอริธึมนี้ไม่ได้ให้ผลลัพธ์ที่ดีที่สุดกับรูปภาพที่มีตัวอักษรขนาดเล็ก (ขนาดตัวอักษร 7 - 12) . แต่อาจเป็นเพราะฐานความรู้มีชุดคุณลักษณะสำหรับรูปภาพที่คล้ายกันซึ่งมีสัญลักษณ์ต่างกัน

ตัวอย่างการใช้งานในภาษา C#

ตัวอย่างการเริ่มต้นของการจดจำรูปภาพ ตัวแปรผลลัพธ์จะมีข้อความ:

ตัวจดจำ var = TextRecognizer ใหม่ (คอนเทนเนอร์); รายงาน var = รู้จักจดจำ (รูปภาพ); // ข้อความดิบ. ผลลัพธ์ var = report.RawText();// รายการแฟรกเมนต์และสถานะการจดจำทั้งหมดสำหรับแต่ละรายการ

var แฟรกเมนต์ = report.Symbols;

โครงการสาธิต ฉันเขียนเพื่อสาธิตการทำงานด้วยภาพดับบลิวพีเอฟ แอปพลิเคชัน. โดยเปิดตัวจากโครงการชื่อ “ Qocr.Application.Wpf

" ตัวอย่างของหน้าต่างพร้อมผลการจดจำอยู่ด้านล่าง:

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