หากคุณเป็นคนรักเครื่องและคลั่งไคล้ AI คุณต้องเคยเจอคำว่า perceptron Perceptron ได้รับการสอนในบทแรกของหลักสูตรการเรียนรู้เชิงลึกหลายหลักสูตร แล้วมันคืออะไรกันแน่? อะไรคือแรงบันดาลใจเบื้องหลัง? มันแก้ปัญหาการจัดหมวดหมู่ได้อย่างไร? ในบทความนี้ เราจะเริ่มต้นด้วยแรงบันดาลใจทางชีววิทยาที่อยู่เบื้องหลังเพอร์เซปตรอน จากนั้นจึงเจาะลึกด้านเทคนิคทางคณิตศาสตร์ของมัน และสุดท้าย สร้างตัวแยกประเภทไบนารีตั้งแต่เริ่มต้นโดยใช้หน่วยเพอร์เซปตรอน
แรงบันดาลใจทางชีวภาพของ Neural Networks
เซลล์ประสาท (เซลล์ประสาท) เป็นส่วนประกอบพื้นฐานของระบบประสาท สมองของมนุษย์ประกอบด้วยเซลล์ประสาทหลายพันล้านเซลล์ที่เชื่อมต่อถึงกัน พวกเขามีหน้าที่ในการรับและส่งสัญญาณจากสมอง ดังที่เห็นในแผนภาพด้านล่าง เซลล์ประสาททั่วไปประกอบด้วยสามส่วนหลัก ได้แก่ เดนไดรต์ แอกซอน และตัวเซลล์หรือโสม Dendrites เป็นกิ่งก้านคล้ายต้นไม้ที่เกิดจากเซลล์ร่างกาย พวกเขารับข้อมูลจากเซลล์ประสาทอื่นๆ โสมเป็นแกนกลางของเซลล์ประสาท มีหน้าที่ในการประมวลผลข้อมูลที่ได้รับจากเดนไดรต์ แอกซอนเป็นเหมือนสายเคเบิลที่เซลล์ประสาทส่งข้อมูล ในตอนท้าย แอกซอนจะแตกออกเป็นหลายแขนงที่เชื่อมต่อกับเซลล์ประสาทอื่นๆ ผ่านเดนไดรต์ของพวกมัน เดอะ การเชื่อมต่อระหว่างแอกซอนกับเดนไดรต์ของเซลล์ประสาทอื่นๆ เรียกว่า ไซแนปส์
แหล่งที่มาของภาพ: Willems, K. (2017, 2 พฤษภาคม). Keras Tutorial: การเรียนรู้เชิงลึกใน Python.
เนื่องจาก ANN ได้รับแรงบันดาลใจจากการทำงานของสมอง เรามาดูกันว่าสมองทำงานอย่างไร สมองประกอบด้วยเครือข่ายเซลล์ประสาทหลายพันล้านเซลล์ พวกเขาสื่อสารด้วยสัญญาณไฟฟ้าและเคมีผ่านไซแนปส์ ซึ่งข้อมูลจากเซลล์ประสาทหนึ่งจะถูกส่งไปยังเซลล์ประสาทอื่นๆ กระบวนการส่งเกี่ยวข้องกับแรงกระตุ้นทางไฟฟ้าที่เรียกว่า 'ศักย์ไฟฟ้า' สำหรับข้อมูลที่จะส่ง สัญญาณอินพุต (แรงกระตุ้น) ควรจะแรงพอที่จะข้ามสิ่งกีดขวางเกณฑ์ที่กำหนด จากนั้นมีเพียงเซลล์ประสาทเท่านั้นที่เปิดใช้งานและส่งสัญญาณต่อไป (เอาต์พุต)
ได้รับแรงบันดาลใจจากการทำงานทางชีวภาพของเซลล์ประสาท นักวิทยาศาสตร์ชาวอเมริกัน Franck Rosenblatt ได้คิดค้นแนวคิดของ perceptron ที่ Cornell Aeronautical Laboratory ในปี 1957
- เซลล์ประสาทรับข้อมูลจากเซลล์ประสาทอื่นในรูปของแรงกระตุ้นทางไฟฟ้าที่มีความแรงต่างกัน
- เซลล์ประสาทรวมแรงกระตุ้นทั้งหมดที่ได้รับจากเซลล์ประสาทอื่นๆ
- หากผลรวมที่ได้มีค่ามากกว่าค่าเกณฑ์ที่กำหนด เซลล์ประสาทจะ 'ทำงาน' ซึ่งจะกระตุ้นศักยภาพในการดำเนินการที่ส่งไปยังเซลล์ประสาทที่เชื่อมต่ออื่นๆ
ส่วนประกอบหลักของ Perceptron
Perceptron ของ Rosenblatt นั้นเป็นลักษณนามแบบเลขฐานสอง Perceptron ประกอบด้วย 3 ส่วนหลัก:
- โหนดอินพุตหรือเลเยอร์อินพุต: เลเยอร์อินพุตจะนำข้อมูลเริ่มต้นเข้าสู่ระบบเพื่อประมวลผลต่อไป แต่ละโหนดอินพุตเชื่อมโยงกับค่าตัวเลข มันสามารถใช้มูลค่าจริงใด ๆ
- น้ำหนักและอคติ: พารามิเตอร์น้ำหนักแสดงถึงความแข็งแรงของการเชื่อมต่อระหว่างหน่วยต่างๆ ยิ่งน้ำหนักมาก อิทธิพลของเซลล์ประสาทอินพุตที่เกี่ยวข้องก็จะยิ่งแข็งแกร่งมากขึ้นในการตัดสินใจเลือกเอาต์พุต อคติเล่นเช่นเดียวกับการสกัดกั้นในสมการเชิงเส้น
- ฟังก์ชันการเปิดใช้งาน: ฟังก์ชันการเปิดใช้งานกำหนดว่าเซลล์ประสาทจะทำงานหรือไม่ อย่างง่ายที่สุด ฟังก์ชันการเปิดใช้งานคือฟังก์ชันขั้นตอน แต่ขึ้นอยู่กับสถานการณ์ ฟังก์ชันการเปิดใช้งานที่แตกต่างกันสามารถใช้ได้
เราจะดูเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ในส่วนถัดไป
การทำงานของ Perceptron
ในขั้นตอนแรก ค่าที่ป้อนทั้งหมดจะถูกคูณด้วยน้ำหนักที่เกี่ยวข้องและบวกเข้าด้วยกัน ผลลัพธ์ที่ได้เรียกว่าผลรวมถ่วงน้ำหนัก ∑วi*xi, หรือระบุไว้เป็นอย่างอื่น x1*w1 + x2*w2 +...wn*xn. ผลรวมนี้ให้การแสดงที่เหมาะสมของอินพุตตามความสำคัญ นอกจากนี้ คำที่มีอคติ b บวกเข้ากับผลรวมนี้ ∑wi*xi + b. อคติทำหน้าที่เป็นพารามิเตอร์แบบจำลองอื่น (นอกเหนือจากน้ำหนัก) ที่สามารถปรับเพื่อปรับปรุงประสิทธิภาพของแบบจำลอง
ในขั้นตอนที่สอง ฟังก์ชันการเปิดใช้งาน f นำไปใช้กับผลรวมข้างต้น ∑วิ*ซี + b เพื่อให้ได้ผลลัพธ์ Y = f(∑wi*xi + b). ขึ้นอยู่กับสถานการณ์และฟังก์ชันการเปิดใช้งานที่ใช้ เอาท์พุต เป็นทั้ง ไบนารี {1, 0} หรือค่าต่อเนื่อง
(บ่อยครั้งที่ทั้งสองขั้นตอนนี้แสดงเป็นขั้นตอนเดียวใน perceptron หลายชั้น ฉันได้แสดงเป็นสองขั้นตอนที่แตกต่างกันเพื่อความเข้าใจที่ดีขึ้น)
ฟังก์ชั่นการเปิดใช้งาน
เซลล์ประสาททางชีวภาพจะทำงานเมื่อเกินเกณฑ์ที่กำหนดเท่านั้น ในทำนองเดียวกัน เซลล์ประสาทเทียมจะทำงานก็ต่อเมื่อผลรวมของอินพุต (ผลรวมถ่วงน้ำหนัก) เกินค่าเกณฑ์ที่กำหนด เช่น 0 โดยสัญชาตญาณ เราสามารถนึกถึงแนวทางตามกฎเช่นนี้ได้
ถ้า ∑wi*xi + b > 0: เอาต์พุต = 1 อย่างอื่น: เอาต์พุต = 0
กราฟของมันจะเป็นดังนี้:
นี่คือฟังก์ชันการเปิดใช้งาน Unit Step (Threshold) ซึ่งเดิมที Rosenblatt ใช้อยู่ แต่อย่างที่คุณเห็น ฟังก์ชันนี้ไม่ต่อเนื่องที่ 0 ดังนั้นจึงทำให้เกิดปัญหาในการคำนวณทางคณิตศาสตร์ เวอร์ชันที่ราบรื่นกว่าของฟังก์ชันข้างต้นคือฟังก์ชันซิกมอยด์ มันแสดงผลระหว่าง 0 ถึง 1 อีกอันหนึ่งคือ Hyperbolic tangent(tanh) ซึ่งสร้างเอาต์พุตระหว่าง -1 และ 1 ทั้งฟังก์ชัน sigmoid และ tanh ประสบปัญหาการไล่ระดับสีที่หายไป ปัจจุบัน ReLU และ Leaky ReLU เป็นฟังก์ชันการเปิดใช้งานที่นิยมใช้กันมากที่สุด มีความเสถียรโดยเปรียบเทียบผ่านเครือข่ายระดับลึก
Perceptron เป็นตัวแยกประเภทไบนารี
จนถึงตอนนี้ เราได้เห็นแรงบันดาลใจทางชีวภาพและคณิตศาสตร์ของ perceptron ในส่วนนี้ เราจะมาดูกันว่า perceptron แก้ปัญหาการจำแนกเชิงเส้นได้อย่างไร
นำเข้าห้องสมุดบางส่วน -
จาก sklearn.datasets นำเข้า make_blobs นำเข้า matplotlib.pyplot เป็น plt นำเข้า numpy เป็น np %matplotlib แบบอินไลน์
การสร้างชุดข้อมูลจำลองโดยใช้ make_blobs ฟังก์ชันที่จัดทำโดย scikit learn –
# สร้างชุดข้อมูล X, Y = make_blobs(n_features = 2, centers = 2, n_samples = 1000, Random_state = 12)
# แสดงชุดข้อมูล plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Ground Truth', fontsize = 18) plt.show()
สมมติว่าจุดสีน้ำเงินคือ 1 และจุดสีเขียวคือ 0 การใช้ตรรกะของ perceptron เราสามารถสร้างขอบเขตการตัดสินใจได้ (ไฮเปอร์เพลน) สำหรับการจำแนกซึ่งแยกจุดข้อมูลต่างๆ บนกราฟ
ก่อนที่เราจะไปต่อ เรามาเพิ่ม bias term (อัน) ให้กับเวกเตอร์อินพุตกัน –
# เพิ่มอคติให้กับเวกเตอร์อินพุต X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X
ชุดข้อมูลจะมีลักษณะดังนี้ -
แต่ละแถวของชุดข้อมูลด้านบนนี้แทนเวกเตอร์อินพุต (จุดข้อมูล) เพื่อสร้างขอบเขตการตัดสินใจ เราต้องหาน้ำหนักที่เหมาะสม น้ำหนักนั้น 'เรียนรู้' จากการฝึกอบรมโดยใช้กฎด้านล่าง -
w = w + (คาดหวัง — คาดการณ์) * x
หมายความว่าการลบผลลัพธ์โดยประมาณออกจากความจริงพื้นฐานแล้วคูณด้วยเวกเตอร์อินพุตปัจจุบันและเพิ่มน้ำหนักเก่าเข้าไปเพื่อให้ได้ค่าใหม่ของน้ำหนัก หากเอาต์พุตของเราเหมือนกับคลาสจริง น้ำหนักจะไม่เปลี่ยนแปลง แต่ถ้าการคาดคะเนของเราไม่ตรงกับความเป็นจริง ค่าน้ำหนักก็จะเพิ่มขึ้นหรือลดลงตามนั้น นี่คือวิธีการปรับน้ำหนักอย่างต่อเนื่องในการวนซ้ำแต่ละครั้ง
เราเริ่มต้นด้วยการกำหนดค่าตามอำเภอใจให้กับเวกเตอร์น้ำหนัก จากนั้นเราค่อย ๆ ปรับค่าเหล่านั้นในการวนซ้ำแต่ละครั้งโดยใช้ข้อผิดพลาดและข้อมูลที่มีอยู่ –
# เริ่มต้นน้ำหนักด้วยค่าสุ่ม w = np.random.rand(3, 1) print(w)
Output:
[[0.37547448] [0.00239401] [0.18640939]]
กำหนดฟังก์ชันการเปิดใช้งานของ perceptron –
def activation_func(z): ถ้า z >= 1: ส่งคืน 1 อื่น: ส่งคืน 0
ต่อไป เราใช้กฎการเรียนรู้ของ perceptron –
สำหรับ _ ในช่วง (100): สำหรับ i ในช่วง (X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # อัปเดตน้ำหนัก w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)
ไม่รับประกันว่าน้ำหนักจะมาบรรจบกันในหนึ่งรอบ ดังนั้นเราจึงป้อนข้อมูลการฝึกทั้งหมดลงในอัลกอริทึมของ perceptron 100 ครั้งในขณะที่ใช้กฎการเรียนรู้อย่างต่อเนื่อง เพื่อให้ในที่สุดเราจัดการเพื่อให้ได้น้ำหนักที่เหมาะสมที่สุด
ตอนนี้เราได้น้ำหนักที่เหมาะสมแล้ว ทำนายคลาสสำหรับแต่ละจุดข้อมูลโดยใช้ Y = f(∑wi*xi + b) หรือ Y = wT.x ในรูปแบบเวกเตอร์
# ทำนายคลาสของ datapoints result_class = [activation_func(w.transpose().dot(x)) for x in X_bias]
เห็นภาพขอบเขตการตัดสินใจและป้ายกำกับคลาสที่คาดการณ์ไว้ –
# แปลงเป็นเวกเตอร์หน่วย w = w/np.sqrt(w.transpose().dot(w))
# แสดงผลลัพธ์ plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = result_class) plt.plot([-10, -1], ไฮเปอร์เพลน ([-10, -1], w), lw = 3, c = 'red') plt.title('การจำแนก Perceptron พร้อมขอบเขตการตัดสินใจ') plt.show()
คุณสามารถเปรียบเทียบภาพความจริงพื้นฐานกับภาพผลลัพธ์ที่คาดการณ์ไว้ และดูบางจุดที่จัดประเภทผิด หากเราคำนวณความแม่นยำก็จะอยู่ที่ประมาณ 98% (ฉันปล่อยให้นี่เป็นแบบฝึกหัดสำหรับผู้อ่าน)
หากคุณเห็น ข้อมูลเดิมของเราถูกแยกออกจากกันพอสมควร เราจึงได้รับความแม่นยำที่ดีเช่นนี้ แต่นี่ไม่ใช่กรณีของข้อมูลในโลกแห่งความเป็นจริง การใช้ perceptron ตัวเดียว เราสามารถสร้างขอบเขตการตัดสินใจเชิงเส้นได้เท่านั้น ดังนั้นหากข้อมูลถูกผสมกัน อัลกอริทึมของ perceptron ก็จะทำงานได้ไม่ดี นี่เป็นข้อจำกัดอย่างหนึ่งของโมเดลเพอร์เซปตรอนเดี่ยว
เชิงอรรถ
เราเริ่มต้นด้วยการทำความเข้าใจแรงบันดาลใจทางชีววิทยาที่อยู่เบื้องหลัง Perceptron ของ Rosenblatt จากนั้นเราก็พัฒนาไปสู่คณิตศาสตร์ของ perceptron และฟังก์ชันการเปิดใช้งาน ในที่สุดการใช้ชุดข้อมูลของเล่น เราเห็นว่า perceptron สามารถจัดหมวดหมู่พื้นฐานได้อย่างไรโดยการสร้างขอบเขตการตัดสินใจเชิงเส้นที่แยกจุดข้อมูลที่อยู่ในคลาสต่างๆ
เกี่ยวกับผู้เขียน
ประติก นบริยะ ปัจจุบันเป็นนักวิทยาศาสตร์ข้อมูลที่มีทักษะซึ่งทำงานให้กับบริษัท Analytics & AI ซึ่งตั้งอยู่ในเมืองนอยดา เขามีความเชี่ยวชาญในการเรียนรู้ของเครื่อง, การเรียนรู้เชิงลึก, NLP, การวิเคราะห์อนุกรมเวลา, การจัดการข้อมูล, SQL, Python และคุ้นเคยกับการทำงานในสภาพแวดล้อมคลาวด์ ในเวลาว่าง เขาชอบแข่งขันใน Hackathons และเขียนบทความเชิงเทคนิค
- "
- &
- 100
- การกระทำ
- AI
- ขั้นตอนวิธี
- ทั้งหมด
- อเมริกัน
- การวิเคราะห์
- การวิเคราะห์
- บทความ
- บทความ
- ร่างกาย
- สาขา
- สร้าง
- การก่อสร้าง
- เปลี่ยนแปลง
- สารเคมี
- การจัดหมวดหมู่
- เมฆ
- การเชื่อมต่อ
- การเชื่อมต่อ
- ปัจจุบัน
- ข้อมูล
- นักวิทยาศาสตร์ข้อมูล
- การเรียนรู้ลึก ๆ
- สิ่งแวดล้อม
- การออกกำลังกาย
- ในที่สุด
- ธรรมชาติ
- บริษัท
- ชื่อจริง
- ฟอร์ม
- ฟังก์ชัน
- ดี
- สีเขียว
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- HTTPS
- ภาพ
- เพิ่ม
- มีอิทธิพล
- ข้อมูล
- แรงบันดาลใจ
- IT
- Keras
- ป้ายกำกับ
- เรียนรู้
- การเรียนรู้
- เรียนรู้เครื่อง
- การจัดการ
- คณิตศาสตร์
- ภาพบรรยากาศ
- กลาง
- แบบ
- เครือข่าย
- เครือข่าย
- ประสาท
- เครือข่ายประสาท
- NLP
- โหนด
- ใบสั่ง
- อื่นๆ
- การปฏิบัติ
- หลาม
- ผู้อ่าน
- ผลสอบ
- So
- SQL
- เริ่มต้น
- ข้อความที่เริ่ม
- ระบบ
- วิชาการ
- กราฟ
- เวลา
- ของเล่น
- การฝึกอบรม
- เกี่ยวกับการสอน
- บันทึก
- us
- ความคุ้มค่า
- กับ
- W
- ความหมายของ
- โรงงาน
- X