Perceptron: การสร้างโครงข่ายประสาทเทียม

โหนดต้นทาง: 1216283

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

แรงบันดาลใจทางชีวภาพของ Neural Networks

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

1: เซลล์ประสาทชีวภาพกับโครงข่ายประสาทเทียม

แหล่งที่มาของภาพ: 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

(บ่อยครั้งที่ทั้งสองขั้นตอนนี้แสดงเป็นขั้นตอนเดียวใน 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()
Perceptron เป็นตัวแยกประเภทไบนารี

สมมติว่าจุดสีน้ำเงินคือ 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()
การจำแนก Perceptron พร้อมขอบเขตการตัดสินใจ

คุณสามารถเปรียบเทียบภาพความจริงพื้นฐานกับภาพผลลัพธ์ที่คาดการณ์ไว้ และดูบางจุดที่จัดประเภทผิด หากเราคำนวณความแม่นยำก็จะอยู่ที่ประมาณ 98% (ฉันปล่อยให้นี่เป็นแบบฝึกหัดสำหรับผู้อ่าน)

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

เชิงอรรถ

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

เกี่ยวกับผู้เขียน

ประติก นบริยะ ปัจจุบันเป็นนักวิทยาศาสตร์ข้อมูลที่มีทักษะซึ่งทำงานให้กับบริษัท Analytics & AI ซึ่งตั้งอยู่ในเมืองนอยดา เขามีความเชี่ยวชาญในการเรียนรู้ของเครื่อง, การเรียนรู้เชิงลึก, NLP, การวิเคราะห์อนุกรมเวลา, การจัดการข้อมูล, SQL, Python และคุ้นเคยกับการทำงานในสภาพแวดล้อมคลาวด์ ในเวลาว่าง เขาชอบแข่งขันใน Hackathons และเขียนบทความเชิงเทคนิค

สื่อที่แสดงในบทความนี้ไม่ได้เป็นของ Analytics Vidhya และถูกใช้ตามดุลยพินิจของผู้เขียน

ที่มา: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

ประทับเวลา:

เพิ่มเติมจาก การวิเคราะห์ วิทยา