คำอธิบายสั้น ๆ
ด้วยการพัฒนาอินเทอร์เน็ตอย่างรวดเร็ว A (AI) B (BIGDATA) C (คลาวด์) ได้กลายเป็นทิศทางการพัฒนาหลักในปัจจุบัน หากทั้งสามรวมกันอย่างลึกซึ้ง AI เป็นส่วนสำคัญที่สุดของมัน ดังนั้นหากทุกคนต้องเรียนรู้การเขียนโปรแกรมในสังคมในอนาคตสำหรับโปรแกรมเมอร์ปัญญาประดิษฐ์เป็นเทคโนโลยีที่พวกเขาต้องเชี่ยวชาญ (การพัฒนาเทคโนโลยีนั้นเร็วมาก)
บทความนี้แนะนำและใช้ Java เพื่อใช้เครือข่าย Perceptron ที่ง่ายที่สุดโดยไม่ต้องพันกันด้วยสูตรที่ได้มาโดยมีวัตถุประสงค์เพื่อให้คุณมีแนวคิดสำหรับการเรียนรู้เครือข่ายประสาทและมีความเข้าใจอย่างคร่าวๆเกี่ยวกับเครือข่ายประสาท
การวิเคราะห์โมเดลเครือข่าย Perceptron
ดูภาพก่อน
หากคุณสนใจเครือข่ายประสาทคุณต้องคุ้นเคยกับภาพนี้ ภาพนี้เป็นแผนภาพโครงสร้างของเซลล์ประสาท
X1 ~ XM แสดงถึงอินพุต W1 ~ WM แสดงถึงน้ำหนัก synaptic, σหมายถึงโหนดการรวมฟังก์ชั่นการเปิดใช้งานแสดงถึงฟังก์ชั่นการเปิดใช้งานและจากนั้นส่งออกผลลัพธ์ กระบวนการเฉพาะคือ
เมื่อเซลล์ประสาทได้รับอินพุตแต่ละอินพุตจะถูกคูณด้วยน้ำหนักบนเส้นทางสัมพัทธ์ เมื่อถึงโหนดการรวมผลลัพธ์ของโหนดการรวมจะถูกตั้งค่าเป็น z:
z = x1 * w1 + x2 * w2 + x3 * w3 + ...... + xm * wm
จากนั้นส่ง Z ไปยังฟังก์ชั่นการเปิดใช้งาน (ที่นี่เราเรียกฟังก์ชันการเปิดใช้งาน f) สำหรับการจดจำรูปแบบไบนารี:
ถ้า f (x)> e, y = 1Else y = -1e เป็นเกณฑ์ y คือผลการจำแนกประเภท
จะเห็นได้ที่นี่ว่าหากค่าของ f (x) มากกว่าเกณฑ์การจำแนกประเภท y = 1 จะได้รับและในทางกลับกัน y = -1
หมายเหตุ: เมื่อเปรียบเทียบกับการตอบสนองที่ระบุโดยการกระตุ้นของเซลล์ประสาทชีวภาพหากการกระตุ้นอยู่ในช่วงที่ยอมรับได้เซลล์ประสาทจะยับยั้งการกระตุ้น (y = -1) และถ้ามันเกินช่วงมันจะตื่นเต้น (y = 1)
ศึกษา
เราพบว่าหากน้ำหนักและเกณฑ์ได้รับการแก้ไขแล้วเครือข่ายประสาทนี้ไม่มีความหมาย ดังนั้นเราจึงแนะนำแนวคิดของการเรียนรู้และปล่อยให้เครือข่ายประสาทปรับเปลี่ยนน้ำหนักและเกณฑ์ผ่านการเรียนรู้เพื่อให้ความถูกต้องของการจดจำรูปแบบสามารถแก้ไขได้แบบไดนามิก นี่คือสาระสำคัญของการเรียนรู้ของเครื่อง
แล้วจะเรียนรู้ได้อย่างไร? ก่อนที่เราจะใช้เราจำเป็นต้องจัดเตรียมชุดข้อมูลตัวอย่างให้กับเครือข่ายนี้ (ซึ่งนำมาที่นี่เพื่อเรียนรู้กับโหมดครู) ข้อมูลตัวอย่างรวมถึงข้อมูลอินพุต x และผลลัพธ์การระบุตัวตนที่ถูกต้อง y '
เมื่อเราป้อนข้อมูลการฝึกอบรม x และรับการจดจำรูปแบบ y ถ้า y! = y 'น้ำหนักและเกณฑ์ของเครือข่ายนี้จะถูกปรับ โปรดดูสูตรสำหรับการปรับ μหมายถึงอัตราการเรียนรู้ (อัตราการแก้ไข) และการอัปเดตแสดงถึงความจำเป็นที่จะต้องได้รับการแก้ไข:
update = μ * (yi - y ') update = (f (x) - y') mς wi += update * xii = 1e += update
เมื่อผลการจำแนกประเภท Perceptron เท่ากับการจำแนกประเภทที่ถูกต้อง UPDATE = 0 และเครือข่ายไม่ได้ปรับ หากไม่เท่ากับการจำแนกประเภทที่ถูกต้องจะมีการปรับน้ำหนักทั้งหมด (w) และเกณฑ์ (e)
ข้างต้นเป็นกระบวนการเรียนรู้ที่ง่ายที่สุดสำหรับ Perceptrons ที่ฉันแนะนำ:
ป้อนข้อมูล -> สรุปเพื่อรับ z-> รอผ่านฟังก์ชั่นการเปิดใช้งานเพื่อรอผลการจำแนกประเภท -> ผลลัพธ์การจำแนกประเภทไม่ตรงกับผลลัพธ์ที่ถูกต้องปรับเครือข่าย
มาใช้เครือข่ายประสาทแบบง่าย ๆ นี้กันเถอะ
การใช้งานรหัส Java
สิ่งที่ฉันได้นำไปใช้ที่นี่คือการเรียนรู้ที่จะรับรู้ถึงบวกและลบของจำนวนเต็มผ่านเครือข่ายประสาท ขั้นแรกให้กำหนดคลาสที่กำหนด Perceptron เป็นครั้งแรก
/*** สร้างโดย Cimzzz เมื่อวันที่ 12/2/17 **/คลาสสาธารณะ Perceptron {/*** อัตราการเรียนรู้*/การเรียนรู้ขั้นสุดท้ายภาคเอกชน / *** จำนวนครั้งการเรียนรู้*/ ส่วนตัว int final int studycount; / *** Threshold*/ Private Float E; / *** น้ำหนัก* เนื่องจากจำเป็นต้องมีอินพุตเพียงครั้งเดียวเพื่อกำหนดจำนวนเต็มบวกและลบมีน้ำหนักเพียงหนึ่งน้ำหนักที่นี่และอินพุตหลายตัวสามารถตั้งค่าเป็นอาร์เรย์*/ ลอยตัวส่วนตัว w; / *** อัตราที่ถูกต้องสำหรับการเรียนรู้แต่ละครั้ง*/ private float [] correctrate; /// ** * คอนสตรัคเตอร์เริ่มต้นอัตราการเรียนรู้จำนวนเวลาการเรียนรู้น้ำหนักและเกณฑ์จะเริ่มต้นเป็น 0 * @param การเรียนรู้อัตราการเรียนรู้ (ช่วงค่า 0 <เรียนรู้ <1) * @param studycount จำนวนครั้งการเรียนรู้ */ สาธารณะ perceptron this.studycount = studycount; this.e = 0; this.w = 0; this.cortrate = new float [studycount]; } / *** ฟังก์ชั่นการเรียนรู้ตัวอย่างเป็นอาร์เรย์สองมิติที่มีข้อมูลอินพุตและผลลัพธ์การจำแนกประเภท* ตัวอย่าง [] [0] แสดงข้อมูลอินพุต* ตัวอย่าง [] [1] แสดงผลลัพธ์การจำแนกประเภทที่ถูกต้อง* @param ตัวอย่างการฝึกอบรม* / โมฆะสาธารณะพอดี (int [] สำหรับ (int i = 0; i <studycount; i ++) {int errorCount = 0; สำหรับ (int [] ตัวอย่าง: ตัวอย่าง) {float update = เรียนรู้ * (ตัวอย่าง [1] -Predict (ตัวอย่าง [0])); // อัปเดตน้ำหนักและเกณฑ์ w += update * ตัวอย่าง [0]; E += อัปเดต; // คำนวณหมายเลขข้อผิดพลาดหาก (อัปเดต! = 0) ErrorCount ++; } // คำนวณความถูกต้องของการเรียนรู้นี้อย่างถูกต้อง [i] = 1 - ErrorCount * 1.0f /SampleLength; }} / *** ฟังก์ชั่นผลรวม, จำลองการรวมการทำงานของโหนดการดำเนินการข้อมูล* น้ำหนัก* @param num ข้อมูลอินพุต* @return ผลรวมผล z* / ผลรวมลอยตัวส่วนตัว (int num) {return num* w + e; } / *** เปิดใช้งานฟังก์ชั่นตัดสินโดยการรวมผลลัพธ์ z และ Threshold E* @param num ข้อมูลอินพุต* @return ผลการจำแนกประเภท* / public poster (int num) {return sum (num)> = 0? 1: -1; }/*** การพิมพ์ความแม่นยำ*/โมฆะสาธารณะ printcovertrate () {สำหรับ (int i = 0; i <studycount; i ++) system.out.printf ("ผลการเรียนรู้ที่ %d-> %.2f %%/n", i +1, crecrectrate [i]* 100); -จากนั้นเขียนฟังก์ชั่นที่สร้างข้อมูลการฝึกอบรม
/*** สร้างข้อมูลการฝึกอบรม* @return ข้อมูลการฝึกอบรม*/private static int [] [] genstudydata () {// ที่นี่เราใช้จำนวนเต็มระหว่าง -100 ถึง 100 และถ้ามากกว่า 0 ให้ตั้งค่าเป็นโหมด y = 1 มิฉะนั้น y = -1 int [] สำหรับ (int i = -100, j = 0; i <= 100; i ++, j ++) {data [j] [0] = i; ข้อมูล [j] [1] = i> = 0? 1: -1; } ส่งคืนข้อมูล; } /*** สร้างข้อมูลการฝึกอบรม* @return ข้อมูลการฝึกอบรม* /ส่วนตัวคงที่ int [] [] genstudydata2 () {// ที่นี่เราใช้จำนวนเต็มระหว่าง 1 ~ 250 และถ้ามากกว่า 125 ตั้งค่าเป็นโหมด y = 1 มิฉะนั้น y = -1 int [] สำหรับ (int i = 1, j = 0; i <= 250; i ++, j ++) {data [j] [0] = i; ข้อมูล [j] [1] = i> = 125? 1: -1; } ส่งคืนข้อมูล; -ในที่สุดฟังก์ชั่นหลัก
โมฆะคงที่สาธารณะหลัก (String [] args) {// อัตราการเรียนรู้และเวลาการฝึกอบรมที่นี่สามารถปรับได้ด้วยตนเองตามสถานการณ์ Perceptron Perceptron = ใหม่ Perceptron (0.4F, 500); Perceptron.fit (genstudydata ()); Perceptron.printcortrate (); System.out.println (Perceptron.predict (-1)); System.out.println (Perceptron.predict (126)); -คุณสามารถทดสอบได้
ข้อ จำกัด
เครือข่าย Neural Perceptron นี้ค่อนข้างง่ายและเหมาะสำหรับข้อมูลที่แบ่งเป็นเส้นตรงเช่นตัวเลขบวกและลบในหนึ่งมิติและการจำแนก Quadrant พิกัดสองมิติ ข้อมูลที่ไม่สามารถจำแนกได้อย่างถูกต้องไม่สามารถจำแนกได้เช่นการค้นหาจำนวนนายก ฯลฯ
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น