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