วิธีสร้างโครงข่ายประสาทเทียม: สถาปัตยกรรม พารามิเตอร์ & รหัส

เผยแพร่แล้ว: 2021-02-12

Neural Networks ตามชื่อคือวงจรของเซลล์ประสาท โครงข่ายประสาทเทียมมีหลายประเภท โครงข่ายประสาทเทียมชีวภาพสร้างจากเซลล์ประสาทชีวภาพจริง ในขณะที่โครงข่ายประสาทเทียม (ANN) เป็นระบบที่ใช้โครงข่ายประสาทเทียมทางชีววิทยาเช่นเดียวกับในสมอง จำนวนเซลล์ประสาทโดยประมาณในสมองอยู่ที่ประมาณ 100 พันล้าน ซึ่งสื่อสารผ่านสัญญาณไฟฟ้าเคมี

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

สารบัญ

สถาปัตยกรรมโครงข่ายประสาทเทียม

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

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

แหล่งที่มา

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

ความแตกต่างระหว่างค่าที่คาดคะเนและค่าจริง (ข้อผิดพลาด) จะแพร่กระจายไปข้างหลัง โครงข่ายประสาทเทียมจะเรียนรู้จากข้อผิดพลาดที่เกิดขึ้นและพยายามปรับน้ำหนักตามแนวทางอัตราการเรียนรู้ที่กำหนด

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

กำหนดพารามิเตอร์

ฟังก์ชั่นการเปิดใช้งาน

มีฟังก์ชั่นการเปิดใช้งานต่างๆ ให้เลือกซึ่งสามารถใช้ใน Neural Network โดยพิจารณาจากปัญหาในมือ

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

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

การทำงานของฟังก์ชันการเปิดใช้งาน
ไม่มีลิงค์

ฟังก์ชันการเปิดใช้งานมี 3 ประเภท:
ไบนารี- x<0 y=0 , x>0 y=1
เชิงเส้น- x=y
Non Linear – ประเภทต่างๆ : Sigmoid, TanH, Logistic, ReLU, Softmax เป็นต้น

ที่มา: Blog

ประเภท: ReLU
ไม่มีลิงค์

อัลกอริทึม

โครงข่ายประสาทมีหลายประเภท แต่มักจะแบ่งออกเป็นเครือข่าย feed-forward และ feed-back (backpropagation)

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

กระบวนการนี้จะดำเนินต่อไปจนกว่าจะผ่านชั้นทั้งหมดและกำหนดผลลัพธ์ บางครั้งใช้ฟังก์ชัน Limit Transfer เพื่อวัดเอาต์พุตของเซลล์ประสาทในเลเยอร์เอาต์พุต เครือข่าย Feed Forward เป็นที่รู้จักและรวมถึงเครือข่าย Perceptron (ทางตรงและทางอ้อม) เครือข่ายฟีดฟอร์เวิร์ดมักใช้สำหรับการทำเหมืองข้อมูล

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

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

การฝึกอบรม

feed-forward pass หมายถึงการรับอินพุตและน้ำหนักวิธีคำนวณเอาต์พุต หลังจากการฝึกอบรมเสร็จสิ้น เราจะเรียกใช้การส่งต่อเพื่อสร้างการคาดการณ์เท่านั้น

แต่ก่อนอื่นเราต้องฝึกโมเดลของเราให้เรียนรู้น้ำหนักอย่างแท้จริง ดังนั้นขั้นตอนการฝึกอบรมจึงมีดังต่อไปนี้:

  1. สุ่มเลือกและเริ่มต้นน้ำหนักสำหรับโหนดทั้งหมด มีวิธีการเริ่มต้นที่ชาญฉลาดซึ่งมีอยู่ใน TensorFlow และ Keras (Python)
  2. สำหรับตัวอย่างการฝึกทุกครั้ง ให้ทำการส่งต่อโดยใช้น้ำหนักปัจจุบัน และคำนวณผลลัพธ์ของทุกโหนดที่เคลื่อนจากซ้ายไปขวา ผลลัพธ์สุดท้ายคือค่าของโหนดสุดท้าย
  3. เปรียบเทียบผลลัพธ์สุดท้ายกับเป้าหมายจริงภายในข้อมูลการฝึก และวัดข้อผิดพลาดโดยใช้ฟังก์ชันการสูญเสีย
  4. ดำเนินการย้อนกลับจากขวาไปซ้ายและเผยแพร่ข้อผิดพลาดที่คำนวณในขั้นตอนสุดท้ายไปยังแต่ละโหนดโดยใช้ backpropagation
  5. คำนวณน้ำหนักของเซลล์ประสาทแต่ละส่วนที่ทำให้เกิดข้อผิดพลาด และปรับน้ำหนักของการเชื่อมต่อตามนั้นโดยใช้การไล่ระดับสี เผยแพร่การไล่ระดับข้อผิดพลาดกลับตั้งแต่เลเยอร์สุดท้าย

รหัสหลามสำหรับโครงข่ายประสาทเทียม

ตอนนี้เราเข้าใจวิธีการสร้าง Neural Network ตามทฤษฎีแล้ว ให้เราใช้ Python เหมือนกัน

โครงข่ายประสาทเทียมใน Python
เราจะใช้ Keras API กับ Tensorflow หรือแบ็กเอนด์ Theano เพื่อสร้างเครือข่ายประสาทเทียมของเรา

การติดตั้งไลบรารี
ธีอาโน
>>> ติดตั้ง pip – อัพเกรด –no-deps git+git://github.com/Theano/Theano.git

Tensorflow และ Keras
>>> pip3 ติดตั้งเทนเซอร์โฟลว์
>>> ติดตั้ง pip – อัปเกรด Keras

นำเข้าห้องสมุด

นำเข้า keras
จาก keras.models นำเข้า Sequential
จาก keras.layers นำเข้าหนาแน่น

การเริ่มต้นโครงข่ายประสาทเทียม

รุ่น = ลำดับ ()

สร้างอินพุตและเลเยอร์ที่ซ่อนอยู่-

model.add (หนาแน่น (input_dim = 2, หน่วย = 10, การเปิดใช้งาน = 'relu', kernel_initializer = 'uniform'))

รหัสนี้เพิ่มเลเยอร์อินพุตและเลเยอร์ที่ซ่อนอยู่หนึ่งเลเยอร์ไปยังเครือข่ายตามลำดับ
Dense(): ให้เราสร้างโครงข่ายประสาทที่เชื่อมต่ออย่างหนาแน่น
input_dim: รูปร่างหรือจำนวนโหนดในเลเยอร์อินพุต
หน่วย: จำนวนเซลล์ประสาทหรือโหนดในเลเยอร์ปัจจุบัน (เลเยอร์ที่ซ่อนอยู่)
การเปิดใช้งาน: ฟังก์ชันการเปิดใช้งานที่ใช้กับแต่ละโหนด "relu" ย่อมาจาก Rectified Linear Unit
kernel_initializer: น้ำหนักสุ่มเริ่มต้นของเลเยอร์

เลเยอร์ที่ซ่อนอยู่ที่สอง
model.add(หนาแน่น(หน่วย = 20, การเปิดใช้งาน='relu', kernel_initializer='เครื่องแบบ'))

โค้ดสร้างและเพิ่มเลเยอร์ที่ซ่อนอยู่อีกชั้นหนึ่งให้กับโมเดลที่มีโหนด 20 โหนดและฟังก์ชันการเปิดใช้งาน 'rectified Linear' สามารถเพิ่มเลเยอร์ได้ในลักษณะเดียวกัน ขึ้นอยู่กับปัญหาและความซับซ้อน

ชั้นเอาท์พุท
model.add(หนาแน่น(หน่วย = 1, การเปิดใช้งาน='sigmoid', kernel_initializer='เครื่องแบบ'))

เอาต์พุตเลเยอร์เดียวที่มี Sigmoid หรือ softmax เป็นฟังก์ชันการเปิดใช้งานที่ใช้กันทั่วไปสำหรับเลเยอร์เอาต์พุต

การรวบรวม ANN:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

ANN ได้รับการคอมไพล์ด้วยฟังก์ชันเพิ่มประสิทธิภาพและฟังก์ชันการสูญเสียก่อนที่จะได้รับการฝึกอบรม

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

ติดตั้งโมเดลด้วยข้อมูลการฝึกอบรม:
model.fit(X_train,Y_train,batch_size=64,ยุค=30)

รหัสนี้จะสร้างโมเดล

บทสรุป

ตอนนี้เราสามารถสร้าง Artificial Neural Network (บน Python) ได้ตั้งแต่เริ่มต้น เนื่องจากเราเข้าใจพารามิเตอร์ต่างๆ ที่สามารถเปลี่ยนแปลงได้ตาม ปัญหาในมือ

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับเทคนิค การ เรียนรู้เชิงลึก แมชชีนเลิร์นนิง โปรดดูประกาศนียบัตร PG ของ IIIT-B & upGrad ในการเรียนรู้ด้วยเครื่องและ AI ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมอย่างเข้มงวดมากกว่า 450 ชั่วโมง กรณีศึกษามากกว่า 30 รายการ & การมอบหมายงาน, สถานะศิษย์เก่า IIIT-B, 5+ โครงการหลักที่ใช้งานได้จริง & ความช่วยเหลือด้านงานกับบริษัทชั้นนำ

เรียนรู้ หลักสูตร ML จากมหาวิทยาลัยชั้นนำของโลก รับ Masters, Executive PGP หรือ Advanced Certificate Programs เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

เป็นผู้นำการปฏิวัติเทคโนโลยีที่ขับเคลื่อนด้วย AI

สมัครโปรแกรมประกาศนียบัตรขั้นสูงในการเรียนรู้ของเครื่อง & NLP