CNTK - การสร้างเครือข่ายประสาทเทียมครั้งแรก

บทนี้จะอธิบายรายละเอียดเกี่ยวกับการสร้างเครือข่ายประสาทเทียมใน CNTK

สร้างโครงสร้างเครือข่าย

เพื่อที่จะใช้แนวคิด CNTK ในการสร้าง NN แรกของเราเราจะใช้ NN เพื่อจำแนกชนิดของดอกไอริสตามคุณสมบัติทางกายภาพของความกว้างและความยาวกลีบเลี้ยงและความกว้างและความยาวของกลีบดอก ชุดข้อมูลที่เราจะใช้ชุดข้อมูลไอริสที่อธิบายคุณสมบัติทางกายภาพของดอกไอริสพันธุ์ต่างๆ -

  • ความยาวกลีบเลี้ยง
  • ความกว้างของกลีบเลี้ยง
  • ความยาวกลีบดอก
  • ความกว้างของกลีบดอก
  • ระดับ ได้แก่ iris setosa หรือ iris versicolor หรือ iris virginica

ที่นี่เราจะสร้าง NN ปกติที่เรียกว่า NN feedforward ให้เราดูขั้นตอนการใช้งานเพื่อสร้างโครงสร้างของ NN -

Step 1 - ขั้นแรกเราจะนำเข้าส่วนประกอบที่จำเป็นเช่นประเภทเลเยอร์ของเราฟังก์ชันการเปิดใช้งานและฟังก์ชันที่ช่วยให้เรากำหนดตัวแปรอินพุตสำหรับ NN ของเราจากไลบรารี CNTK

from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu

Step 2- หลังจากนั้นเราจะสร้างโมเดลของเราโดยใช้ฟังก์ชันลำดับ เมื่อสร้างแล้วเราจะป้อนด้วยเลเยอร์ที่เราต้องการ ที่นี่เราจะสร้างเลเยอร์ที่แตกต่างกันสองชั้นใน NN ของเรา หนึ่งเซลล์มีสี่เซลล์และอีกเซลล์หนึ่งมีเซลล์ประสาทสามเซลล์

model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])

Step 3- ในที่สุดเพื่อรวบรวม NN เราจะผูกเครือข่ายกับตัวแปรอินพุต มีชั้นอินพุตที่มีเซลล์ประสาทสี่เซลล์และชั้นเอาต์พุตที่มีเซลล์ประสาทสามเซลล์

feature= input_variable(4)
z = model(feature)

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

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

ที่เลเยอร์เอาต์พุต

การเลือกไฟล์ activation ฟังก์ชันที่เลเยอร์เอาต์พุตจะขึ้นอยู่กับประเภทของปัญหาที่เราจะแก้ไขด้วยโมเดลของเรา

  • สำหรับปัญหาการถดถอยเราควรใช้ไฟล์ linear activation function บนเลเยอร์เอาต์พุต

  • สำหรับปัญหาการจัดประเภทไบนารีเราควรใช้ไฟล์ sigmoid activation function บนเลเยอร์เอาต์พุต

  • สำหรับปัญหาการจำแนกหลายชั้นเราควรใช้ไฟล์ softmax activation function บนเลเยอร์เอาต์พุต

  • ที่นี่เราจะสร้างแบบจำลองสำหรับทำนายหนึ่งในสามคลาส หมายความว่าเราจำเป็นต้องใช้softmax activation function ที่ชั้นเอาต์พุต

ที่เลเยอร์ที่ซ่อนอยู่

การเลือกไฟล์ activation ฟังก์ชันที่เลเยอร์ที่ซ่อนอยู่จำเป็นต้องมีการทดลองบางอย่างเพื่อตรวจสอบประสิทธิภาพเพื่อดูว่าฟังก์ชันการเปิดใช้งานใดทำงานได้ดี

  • ในปัญหาการจำแนกประเภทเราจำเป็นต้องคาดการณ์ความน่าจะเป็นที่ตัวอย่างเป็นของคลาสเฉพาะ นั่นเป็นเหตุผลที่เราต้องการไฟล์activation functionที่ทำให้เรามีค่าความน่าจะเป็น เพื่อบรรลุเป้าหมายนี้sigmoid activation function สามารถช่วยเราได้

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

เลือกฟังก์ชั่นการสูญเสีย

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

ตัวอย่างเช่นในปัญหาการจำแนกประเภทเราควรใช้ฟังก์ชันการสูญเสียที่สามารถวัดความแตกต่างระหว่างคลาสที่คาดคะเนและคลาสจริง

ฟังก์ชั่นการสูญเสีย

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

label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)

เมตริก

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

cntk.metrics

CNTK มีชื่อแพคเกจ cntk.metricsซึ่งเราสามารถนำเข้าเมตริกที่เรากำลังจะใช้ ในขณะที่เรากำลังสร้างแบบจำลองการจำแนกประเภทเราจะใช้classification_error เมทริกที่จะสร้างตัวเลขระหว่าง 0 ถึง 1 จำนวนระหว่าง 0 ถึง 1 แสดงเปอร์เซ็นต์ของตัวอย่างที่ทำนายได้อย่างถูกต้อง -

ขั้นแรกเราต้องนำเข้าเมตริกจาก cntk.metrics แพ็คเกจ -

from cntk.metrics import classification_error
error_rate = classification_error(z, label)

ฟังก์ชันข้างต้นต้องการเอาต์พุตของ NN และเลเบลที่คาดไว้เป็นอินพุต