พบกับ "สวัสดีโลกและโควต้าของแมชชีนเลิร์นนิง

1. ข้อควรทราบก่อนที่จะเริ่มต้น

ใน Codelab นี้ คุณจะได้เรียนรู้ &&tt พื้นฐาน &สวัสดี โลก และ ML ที่แทนที่จะเขียนกฎที่ชัดแจ้งในภาษาต่างๆ เช่น Java หรือ C++ คุณจะต้องสร้างระบบที่ผ่านการฝึกอบรมเพื่ออนุมานกฎที่กําหนดความสัมพันธ์ระหว่างตัวเลข

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

cc3628d9a1547597.png

if(speed<4){
  status=WALKING;
}

คุณขยายระยะเวลานั้นให้ทํางานได้กับเงื่อนไขอื่น

f2cc3929221107b8.png

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

ในเงื่อนไขสุดท้าย คุณจะตรวจพบการปั่นจักรยานที่คล้ายกันได้

aeb282cf03d5cff.png

if(speed<4){
    status=WALKING;
} else if(speed<12){
    status=RUNNING;
} else {
    status=BIKING;
}

ตอนนี้ ให้พิจารณาถึงสิ่งที่เกิดขึ้นเมื่อคุณต้องการใส่กิจกรรม เช่น กอล์ฟ วิธีสร้างกฎเพื่อกําหนดกิจกรรมนั้นไม่ชัดเจน

fc772abb6fee2804.png

// Now what?

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

ข้อกำหนดเบื้องต้น

ก่อนที่จะลองใช้ Codelab นี้ คุณจะต้องมีสิ่งต่อไปนี้

  • ความรู้ที่ดีเกี่ยวกับ Python
  • ทักษะการเขียนโปรแกรมพื้นฐาน

สิ่งที่จะได้เรียนรู้

  • ข้อมูลเบื้องต้นเกี่ยวกับแมชชีนเลิร์นนิง

สิ่งที่คุณจะสร้าง

  • แมชชีนเลิร์นนิงรุ่นแรกของคุณ

สิ่งที่ต้องมี

หากไม่เคยสร้างโมเดล ML โดยใช้ TensorFlow คุณจะใช้ Colaboratory ซึ่งเป็นสภาพแวดล้อมของเบราว์เซอร์ที่มีทรัพยากร Dependency ที่จําเป็นทั้งหมดได้ คุณค้นหาโค้ดสําหรับส่วนที่เหลือของ Codelab ได้อยู่ใน Colab

หากใช้ IDE อื่น โปรดตรวจสอบว่าติดตั้ง Python แล้ว นอกจากนี้คุณยังต้องใช้ TensorFlow และไลบรารี NumPy ด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับและติดตั้ง TensorFlow ได้ที่นี่ ติดตั้ง NumPy ที่นี่

2. ML คืออะไร

ลองพิจารณาวิธีสร้างแอปแบบดั้งเดิมตามที่แสดงในแผนภาพต่อไปนี้

c72f871306134e45.png

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

กระบวนการตรวจหาสถานะกิจกรรมผ่าน ML นั้นคล้ายกันมาก โดยมีเฉพาะแกนเท่านั้น

ไฟล์ 9b85a337ee816e1b.png

แทนที่จะให้คําตอบและกําหนดกฎเหล่านี้ด้วยภาษาโปรแกรม คุณจะต้องตอบคําถาม (โดยทั่วไปเรียกว่าป้ายกํากับ) พร้อมกับข้อมูล แล้วเครื่องโดยการอนุมานกฎที่กําหนดความสัมพันธ์ระหว่างคําตอบกับข้อมูล ตัวอย่างสถานการณ์ในการตรวจหากิจกรรมอาจมีลักษณะดังนี้ในบริบทของ ML

6ff58697a85931f4.png

คุณรวบรวมข้อมูลจํานวนมากและติดป้ายกํากับเพื่อกล่าวอย่างมีประสิทธิภาพ "นี่คือลักษณะของการเดิน&&tt; หรือ"นี่คือการวิ่งมีลักษณะอย่างไร" จากนั้น คอมพิวเตอร์จะสามารถอนุมานกฎที่ระบุรูปแบบที่บ่งบอกกิจกรรมเฉพาะเจาะจงหนึ่งๆ จากข้อมูล

นอกจากจะเป็นอีกวิธีหนึ่งในการจัดโปรแกรมสถานการณ์แบบนั้นแล้ว ยังช่วยให้คุณเปิดสถานการณ์ใหม่ๆ ได้ด้วย เช่น การเล่นกอล์ฟที่ไม่อาจทําได้ภายใต้แนวทางการจัดโปรแกรมแบบดั้งเดิมที่อิงตามกฎ

ในการเขียนโปรแกรมทั่วไป โค้ดของคุณจะรวมเป็นไบนารีที่มักเรียกว่าโปรแกรม ใน ML สินค้าที่คุณสร้างจากข้อมูลและป้ายกํากับจะเรียกว่าโมเดล

ดังนั้น หากคุณกลับไปที่แผนภาพนี้

53ff9e2cb511936e.png

ให้คิดว่าผลลัพธ์ที่ได้คือโมเดลซึ่งใช้ในรูปแบบนี้ระหว่างรันไทม์

693430bb4d7fa001.png

คุณส่งผ่านโมเดลบางอย่างและโมเดลนั้นใช้กฎที่อนุมานจากการฝึกเพื่อคาดการณ์ เช่น "ข้อมูลนั้นดูเหมือนกําลังเดินอยู่ &&tt; หรือ "ข้อมูลนั้นดูคล้ายจักรยาน"

3. สร้างโมเดล ML แรก

พิจารณาชุดตัวเลขต่อไปนี้ คุณเห็นความสัมพันธ์ระหว่างทั้งคู่หรือไม่

X

-1

0

1

2

3

4

ใช่

-2

1

4

7

10

13

เมื่อพิจารณาประเภทต่างๆ คุณอาจสังเกตเห็นว่าค่า X เพิ่มขึ้น 1 เมื่ออ่านจากซ้ายไปขวา และค่า Y ที่เกี่ยวข้องเพิ่มขึ้น 3 คุณอาจคิดว่า Y เท่ากับ 3X บวกหรือลบ จากนั้น คุณอาจดูที่ 0 ใน X แล้วเห็นว่า Y คือ 1 และคุณได้ความสัมพันธ์ Y=3X+1

และนั่นก็คือโค้ดที่คุณจะใช้เพื่อฝึกโมเดลให้สังเกตรูปแบบในข้อมูลได้เกือบทั้งหมด

คราวหน้า ดูที่โค้ดเพื่อดําเนินการ

คุณจะฝึกโครงข่ายระบบประสาทเทียมให้ทํางานที่เทียบเท่ากันได้อย่างไร การใช้ข้อมูล การฟีดด้วยชุด X' และชุด Y' ควรค้นหาความสัมพันธ์ระหว่างแต่ละชุดได้

การนําเข้า

เริ่มต้นด้วยการนําเข้าของคุณ คุณกําลังนําเข้า TensorFlow แล้วเรียกใช้ tf เพื่อความสะดวก

ต่อไป ให้นําเข้าไลบรารีชื่อ numpy ซึ่งแสดงข้อมูลของคุณเป็นรายการได้อย่างง่ายดายและรวดเร็ว

เฟรมเวิร์กสําหรับการกําหนดเครือข่ายประสาทเทียมเป็นชุดเลเยอร์ตามลําดับเรียกว่า keras ดังนั้นให้นําเข้าเช่นกัน

import tensorflow as tf
import numpy as np
from tensorflow import keras

กําหนดและรวบรวมโครงข่ายระบบประสาทเทียม

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

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

จากนั้น เขียนโค้ดเพื่อคอมไพล์โครงข่ายระบบประสาทเทียม เมื่อดําเนินการดังกล่าว คุณต้องระบุฟังก์ชัน 2 อย่าง ได้แก่ loss และ optimizer

ในตัวอย่างนี้ คุณรู้ว่าความสัมพันธ์ระหว่างตัวเลขคือ Y=3X+1

เมื่อคอมพิวเตอร์พยายามเรียนรู้ คอมพิวเตอร์อาจเดาได้ ซึ่งอาจเป็น Y=10X+10 ฟังก์ชัน loss จะวัดคําตอบที่เดาได้กับคําตอบที่ถูกต้องที่ทราบ และวัดว่าได้ไม่ดีหรือไม่ดี

ถัดไป โมเดลใช้ฟังก์ชัน optimizer เพื่อเดาอีกครั้ง ระบบจะพยายามลดการสูญเสียให้เหลือน้อยที่สุด ทั้งนี้ขึ้นอยู่กับฟังก์ชันการสูญเสีย ณ จุดนี้ อาจมีการแสดงข้อความอย่าง Y=5X+5 ถึงแม้เนื้อหาจะแย่มาก แต่ก็ใกล้เคียงผลลัพธ์ที่ถูกต้องมากกว่า (สูญเสียน้อยกว่า)

โมเดลนี้ซ้ํากับจํานวน Epoch ซึ่งคุณจะเห็นในไม่ช้า

ขั้นแรก นี่คือวิธีบอกให้ใช้ mean_squared_error สําหรับการสูญเสียและการไล่สีแบบไล่ระดับสี(sgd) สําหรับเครื่องมือเพิ่มประสิทธิภาพ คุณยังไม่ต้องเข้าใจการคํานวณของโจทย์เหล่านั้น แต่คุณจะเห็นว่าคําตอบเหล่านั้นก็ใช้ได้

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

model.compile(optimizer='sgd', loss='mean_squared_error')

ให้ข้อมูล

ต่อไปให้ป้อนข้อมูลบางอย่าง ในกรณีนี้ คุณจะใช้ตัวแปร X และ 6 Y ก่อนหน้านี้ คุณจะเห็นว่าความสัมพันธ์ระหว่างค่าเหล่านั้นคือ Y=3X+1 ดังนั้น X คือ -1, Y คือ -2

ไลบรารี Python ที่ชื่อว่า NumPy มีโครงสร้างข้อมูลประเภทอาร์เรย์มากมายสําหรับการดําเนินการนี้ ระบุค่าเป็นอาร์เรย์ใน NumPy ด้วย np.array[]

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

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

4. ฝึกโครงข่ายประสาท

กระบวนการฝึกเครือข่ายระบบประสาทเทียมจะเรียนรู้ความสัมพันธ์ระหว่าง X's และ Y's อยู่ในการเรียก model.fit นั่นคือสิ่งที่จะต้องผ่านช่วงวนซ้ําก่อนการคาดเดา กล่าวคือ วัดว่าดีหรือไม่ดี (การสูญเสีย) หรือใช้เครื่องมือเพิ่มประสิทธิภาพเพื่อคาดเดาอีกครั้ง โดยกําหนดจํานวน Epoch ที่คุณระบุ เมื่อคุณเรียกใช้โค้ดนั้น คุณจะเห็นว่างานพิมพ์ที่หายไปสําหรับ Epoch แต่ละรายการ

model.fit(xs, ys, epochs=500)

เช่น ใน 2-3 epoch แรก ค่าการสูญเสียจะค่อนข้างสูง แต่แต่ละขั้นตอนจะมีขนาดเล็กลง

f110d5abed07c1b9.png

เมื่อการฝึกอบรมดําเนินไป การสูญเสียจะน้อยลงในไม่ช้า

81ca5e71298b414b.png

เมื่อทําการฝึกอบรมเสร็จแล้ว การสูญเสียจะน้อยกว่ามาก ซึ่งแสดงให้เห็นว่าโมเดลของเราจะอนุมานความสัมพันธ์ระหว่างตัวเลขได้อย่างดีเยี่ยม

ไฟล์ 12b187014b639fd.png

คุณอาจไม่จําเป็นต้องใช้ Epoch ทั้ง 500 รายการและทดลองด้วยจํานวนเงินที่แตกต่างกันได้ จากตัวอย่างที่เห็นข้างต้น การสูญเสียจริงๆ เป็นเพียง 50 ตอนเท่านั้น จึงถือว่าเพียงพอแล้ว

5. ใช้โมเดล

คุณมีโมเดลที่ฝึกให้เรียนรู้ความสัมพันธ์ระหว่าง X และ Y คุณสามารถใช้เมธอด model.predict เพื่อระบุ Y สําหรับ X ที่ไม่รู้จักก่อนหน้านี้ เช่น หาก X เป็น 10 คุณคิดว่า Y จะเป็นอะไร โปรดคาดเดาก่อนที่จะเรียกใช้โค้ดต่อไปนี้

print(model.predict([10.0]))

คุณอาจเคยคิดวิธีที่ 31 แต่สุดท้ายแล้ว เหตุใดจึงคิดเช่นนั้น

เครือข่ายระบบประสาททําหน้าที่เกี่ยวกับความน่าจะเป็น จึงคํานวณได้ว่ามีความเป็นไปได้สูงมากที่ความสัมพันธ์ระหว่าง X และ Y คือ Y=3X+1 แต่ไม่ทราบด้วยจุดข้อมูลเพียง 6 จุดเท่านั้น ผลลัพธ์จะใกล้เคียงกับ 31 อย่างมาก แต่ไม่จําเป็นต้องเป็น 31

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

6. ยินดีด้วย

เชื่อหรือไม่ว่าคุณพูดถึงแนวคิดส่วนใหญ่ใน ML ที่จะใช้ในสถานการณ์ที่ซับซ้อนมากขึ้น คุณได้เรียนรู้วิธีฝึกเครือข่ายโครงข่ายประสาทเพื่อสังเกตความสัมพันธ์ระหว่างตัวเลข 2 ชุดแล้วด้วยการกําหนดเครือข่าย คุณกําหนดชุดของเลเยอร์ (ในกรณีนี้มีเพียงเลเยอร์หนึ่ง) ที่มีเซลล์ประสาท (ในกรณีนี้มีเพียงเซลล์เดียวเท่านั้น) ซึ่งจากนั้นคอมไพล์ด้วยฟังก์ชันการสูญเสียและเครื่องมือเพิ่มประสิทธิภาพ

การรวบรวมเครือข่าย ฟังก์ชันการสูญเสีย และเครื่องมือเพิ่มประสิทธิภาพจะจัดการกระบวนการในการคาดเดาความสัมพันธ์ระหว่างตัวเลข การวัดประสิทธิภาพของสัญญาณเหล่านั้น แล้วสร้างพารามิเตอร์ใหม่สําหรับการคาดการณ์ใหม่ ดูข้อมูลเพิ่มเติมที่ TensorFlow.org

ดูข้อมูลเพิ่มเติม

หากต้องการดูว่า ML และ TensorFlow จะช่วยโมเดลคอมพิวเตอร์คอมพิวเตอร์ได้อย่างไร โปรดไปที่สร้างโมเดลคอมพิวเตอร์วิทัศน์ด้วย TensorFlow