CNTK - แนวคิดโครงข่ายประสาทเทียม (NN)

บทนี้เกี่ยวข้องกับแนวคิดของ Neural Network เกี่ยวกับ CNTK

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

ฟังก์ชันเลเยอร์

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

ตัวอย่าง

ด้วยความช่วยเหลือของขั้นตอนพื้นฐานต่อไปนี้เราสามารถสร้างประเภทเลเยอร์พื้นฐานที่สุด -

Step 1 - ขั้นแรกเราต้องนำเข้าฟังก์ชันเลเยอร์หนาแน่นจากแพ็คเกจเลเยอร์ของ CNTK

from cntk.layers import Dense

Step 2 - ถัดจากแพ็กเกจราก CNTK เราต้องนำเข้าฟังก์ชัน input_variable

from cntk import input_variable

Step 3- ตอนนี้เราต้องสร้างตัวแปรอินพุตใหม่โดยใช้ฟังก์ชัน input_variable เราต้องระบุขนาดของมันด้วย

feature = input_variable(100)

Step 4 - ในที่สุดเราจะสร้างเลเยอร์ใหม่โดยใช้ฟังก์ชัน Dense ควบคู่ไปกับการระบุจำนวนเซลล์ประสาทที่เราต้องการ

layer = Dense(40)(feature)

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

ตัวอย่างการใช้งานที่สมบูรณ์

from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)

การปรับแต่งเลเยอร์

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

ขั้นตอนในการกำหนดค่าเลเยอร์หนาแน่น

แต่ละเลเยอร์ใน NN มีตัวเลือกการกำหนดค่าที่ไม่ซ้ำกันและเมื่อเราพูดถึงเลเยอร์ Dense เรามีการตั้งค่าที่สำคัญต่อไปนี้เพื่อกำหนด -

  • shape - ตามความหมายของชื่อจะกำหนดรูปร่างผลลัพธ์ของชั้นซึ่งจะกำหนดจำนวนเซลล์ประสาทในชั้นนั้น ๆ

  • activation - กำหนดฟังก์ชันการเปิดใช้งานของเลเยอร์นั้นดังนั้นจึงสามารถแปลงข้อมูลอินพุตได้

  • init- เป็นการกำหนดฟังก์ชันการเริ่มต้นของเลเยอร์นั้น มันจะเริ่มต้นพารามิเตอร์ของเลเยอร์เมื่อเราเริ่มฝึก NN

มาดูขั้นตอนด้วยความช่วยเหลือซึ่งเราสามารถกำหนดค่าไฟล์ Dense ชั้น -

Step1 - ขั้นแรกเราต้องนำเข้าไฟล์ Dense ฟังก์ชันเลเยอร์จากแพ็คเกจเลเยอร์ของ CNTK

from cntk.layers import Dense

Step2 - ถัดจากแพ็คเกจ CNTK ops เราต้องนำเข้าไฟล์ sigmoid operator. จะถูกใช้เพื่อกำหนดค่าเป็นฟังก์ชันการเปิดใช้งาน

from cntk.ops import sigmoid

Step3 - ตอนนี้จากแพ็คเกจ initializer เราจำเป็นต้องนำเข้าไฟล์ glorot_uniform initializer.

from cntk.initializer import glorot_uniform

Step4 - ในที่สุดเราจะสร้างเลเยอร์ใหม่โดยใช้ฟังก์ชัน Dense พร้อมกับการระบุจำนวนเซลล์ประสาทเป็นอาร์กิวเมนต์แรก นอกจากนี้ยังให้ไฟล์sigmoid ตัวดำเนินการเป็น activation ฟังก์ชันและ glorot_uniform เป็น init ฟังก์ชันสำหรับเลเยอร์

layer = Dense(50, activation = sigmoid, init = glorot_uniform)

ตัวอย่างการใช้งานที่สมบูรณ์ -

from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)

การปรับพารามิเตอร์ให้เหมาะสม

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

ส่วนประกอบผู้ฝึกสอน

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

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

องค์ประกอบของผู้เรียน

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

ผู้เรียนรวมอยู่ในห้องสมุด CNTK

ต่อไปนี้เป็นรายชื่อผู้เรียนที่น่าสนใจบางส่วนที่รวมอยู่ในห้องสมุด CNTK -

  • Stochastic Gradient Descent (SGD) - ผู้เรียนนี้แสดงถึงการสืบเชื้อสายการไล่ระดับสีสุ่มขั้นพื้นฐานโดยไม่มีสิ่งพิเศษใด ๆ

  • Momentum Stochastic Gradient Descent (MomentumSGD) - ด้วย SGD ผู้เรียนคนนี้ใช้แรงผลักดันเพื่อเอาชนะปัญหาของ maxima ในท้องถิ่น

  • RMSProp - ผู้เรียนคนนี้เพื่อควบคุมอัตราการสืบเชื้อสายใช้อัตราการเรียนรู้ที่ลดลง

  • Adam - ผู้เรียนคนนี้เพื่อลดอัตราการสืบเชื้อสายเมื่อเวลาผ่านไปใช้โมเมนตัมที่สลายตัว

  • Adagrad - ผู้เรียนรายนี้สำหรับคุณลักษณะที่เกิดขึ้นบ่อยและไม่บ่อยนักจะใช้อัตราการเรียนรู้ที่แตกต่างกัน