Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ทำไมนักพัฒนาเว็บควรเชี่ยวชาญ Machine Learning

ผมยังไม่มีลูก แต่เมื่อมี ผมอยากให้ลูกเรียนรู้ 2 เรื่อง:

  • การเงินส่วนตัว
  • Machine Learning

ไม่ว่าคุณจะเชื่อว่า singularity ใกล้เข้ามาหรือไม่ ไม่สามารถปฏิเสธได้ว่าลูกโลกนี้วิ่งด้วยข้อมูล การเข้าใจว่าข้อมูลถูกเปลี่ยนเป็นความรู้อย่างไร สำคัญสำหรับทุกคนในยุคนี้ — และสำคัญกว่านั้นสำหรับนักพัฒนา

นี่คือบทความแรกในซีรีส์ที่พยายามทำให้ Machine Learning (ML) เข้าถึงได้สำหรับ full-stack Ruby developers ด้วยการเข้าใจเครื่องมือ ML ที่มีอยู่ คุณจะช่วย stakeholders ตัดสินใจได้ดีขึ้น บทความหน้าจะเน้นเทคนิคและตัวอย่างปฏิบัติ แต่บทนี้เราจะวางเวที — แสดงแผนที่และตอกป้ายว่า "คุณอยู่ที่นี่"

จุดเริ่มต้นที่ย่อมเยาว์

ทำไมนักพัฒนาเว็บควรเชี่ยวชาญ Machine Learning

Artificial Intelligence (AI) และ Machine Learning ไม่ใช่เรื่องใหม่ ในปี 1950 Arthur Samuel สร้างโปรแกรมคอมพิวเตอร์เล่นเช็คเกอร์ ใช้ "alpha-beta pruning" — อัลกอริทึมค้นหาทั่วไป

ทศวรรษ 1960 เห็น neural networks หลายชั้นและ nearest-neighbor algorithm ที่ใช้หา optimal pathing ในคลังสินค้า

ถ้า AI เก่าแล้ว ทำไม AI startups จึงเป็นที่นิยม? ตามความคิดผม มี 2 เหตุผล:

  • กำลังคอมพิวติ้ง (ดู Moore's Law)
  • ปริมาณข้อมูลที่เพิ่มขึ้นบนอินเทอร์เน็ตทุกวัน

มีสถิติ 2 อย่างเกี่ยวกับข้อมูลที่สร้างขึ้นทุกวันที่ทำให้ผมหैरลึกทุกครั้งที่คิดถึง:

  • ณ ปี 2018 เราสร้างข้อมูล 2.5 quintillion bytes ต่อวัน หมายเลขนี้เพิ่มขึ้นแน่นอนตั้งแต่ Forbes ตีพิมพ์
  • สองปีที่ผ่านมาเพียงอย่างเดียว สร้างข้อมูล 90% ของข้อมูลทั้งโลก

รวมกันหมายความว่า (1) ฮาร์ดแวร์สำหรับเก็บข้อมูลและรันอัลกอริทึมยิ่งไปยิ่งราคาถูก และ (2) ข้อมูลสำหรับ train ML models เพิ่มขึ้นอย่างรวดเร็ว

ทุกวันเราโต้ตอบ ถูกอิทธิพล และมีส่วนร่วมกับโลก AI และ ML ตัวอย่างเช่น คุณขอขอบคุณ (หรือโทษ) อัลกอริทึมสำหรับ:

  • วงเงินเครดิตของคุณ
  • ช่วยวินิจฉัยโรค
  • อาจรวมถึงว่าคุณได้งานหรือไม่
  • ช่วยหาเส้นทางมีประสิทธิภาพตามสภาพจราจร
  • Alexa เข้าใจว่าคุณแค่จามเมื่อคุณบอกเธอ
  • Spotify แนะนำเพลงโปรดใหม่

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

ในส่วนที่เหลือ ผมจะให้ภาพรวม 3 ประเภทของ ML ที่ศึกษา: supervised learning, unsupervised learning, และ reinforcement learning เราจะพูดถึงความแตกต่างและปัญหาที่แต่ละอย่างแก้ได้ดี

Supervised Learning (การเรียนรู้ภายใต้การดูแล)

ทำไมนักพัฒนาเว็บควรเชี่ยวชาญ Machine Learning

Supervised learning คือ... ถูกดูแลโดยมนุษย์ :) จินตนาการว่าเราสร้างระบบ supervised learning เพื่อตัดสินใจอนุมัติสินเชื่อที่อยู่อาศัย นี่คือวิธีที่อาจทำงาน:

  1. ธนาคารรวบรวม dataset ที่ map แอตทริบิวต์ลูกค้า (อายุ เงินเดือน ฯลฯ) ไปยังผลลัพธ์ (ชำระคืน 違约 ฯลฯ)
  2. เรา train ระบบด้วยข้อมูล
  3. ระบบใช้สิ่งที่เรียนรู้ทายผลลัพธ์ในอนาคตจากแอตทริบิวต์ผู้สมัคร
  4. ถ้าอัลกอริทึมทายถูก เราบอกว่า "เก่งมาก! ถูกต้อง" แต่ถ้าผิด เราบอกว่า "ไม่ถูกต้อง โปรดปรับปรุงและลองอีกครั้ง"

ตัวอย่างนี้เป็นปัญหา "classification" เพราะ output ของอัลกอริทึมเป็นหมวดหมู่ — ในกรณีนี้ อนุมัติหรือไม่อนุมัติ ตัวอย่าง classification problems อื่นๆ:

  • บุคคลมีโรคหรือไม่
  • X-ray มีกระดูกหักหรือไม่
  • อีเมลเป็น spam หรือไม่

ถ้าสนใจคณิตศาสตร์เบื้องหลัง ML classification algorithms ค้นหา: naive Bayes classifiers, support vector machines, logistic regression, neural networks, random forests

นอกจาก classification problems ที่ให้ผล "ใช่/ไม่" supervised learning ยังแก้ regression problems ได้ — ทำนายบนสเกลต่อเนื่อง เช่น:

  • มูลค่าหุ้นในอนาคต
  • ความน่าจะเป็นที่ New England Patriots ชนะ Super Bowl
  • เงินเดือนเฉลี่ยที่บริษัทต้องเสนอให้ผู้สมัครยอมรับ

อัลกอริทึมสำหรับ supervised regression: linear regression, non-linear regression, Bayesian linear regression

Unsupervised Learning (การเรียนรู้โดยไม่มีการดูแล)

ทำไมนักพัฒนาเว็บควรเชี่ยวชาญ Machine Learning

ใน supervised learning เรากำหนดหมวดหมู่ไว้ล่วงหน้า ผู้สมัครสินเชื่อได้อนุมัติหรือปฏิเสธ

ใน unsupervised learning เราไม่ให้หมวดหมู่ มันไม่มีให้เรา อัลกอริทึมต้องสรุปเอง

ทำไมต้องใช้ unsupervised approach?

1) บางครั้งเราไม่รู้หมวดหมู่ล่วงหน้า ข้อมูลส่วนใหญ่บนอินเทอร์เน็ตเป็น unstructured — ไม่มี labels

2) บางครั้งเราไม่รู้ว่าต้องการอะไร จึงขอให้อัลกอริทึมหา patterns/features ที่มีประโยชน์สำหรับการจัดหมวดหมู่

อีกวิธีจัดการ unstructured data กับ ML คือให้มนุษย์ดูและ label เอง มีบริษัทจ้างคน label data

แนวทางการเรียนรู้แบบ Unsupervised

2 เทคนิคทั่วไปใน unsupervised learning คือ association และ clustering

Association: จินตนาการคุณคือ Amazon มีข้อมูลลูกค้า ประวัติซื้อ ด้วย unsupervised learning คุณอาจแบ่งลูกค้าเป็น "ประเภทผู้ซื้อ" — เช่น พบว่าซื้อร่มสีชมพู มักซื้อชา Matcha ด้วย

Clustering: Clustering ดูข้อมูลและแบ่งเป็นจำนวนกลุ่มที่กำหนด เช่น มีข้อมูลบ้านมากมาย อยากดูว่ามี features (อาจเป็นข้อมูลอาชญากรรม?) ที่ทายได้ว่าบ้านอยู่ย่านไหน หรือ cosine similarity สำหรับ text classification (เช่น บทความนี้เกี่ยวกับเทนนิส ปั่นอาหาร หรืออวกาศ?)

สนใจเทคนิค unsupervised learning เฉพาะเจาะจง ค้นหา: k-means clustering, cosine similarity, hierarchical clustering, k-nearest-neighbor clustering

Reinforcement Learning (การเรียนรู้แบบเสริมแรง)

ทำไมนักพัฒนาเว็บควรเชี่ยวชาญ Machine Learning

สาขา ML นี้ใช้ในเกมส์เพราะใช้อัลกอริทึมที่มุ่งเป้าหมาย ไม่เหมือน supervised learning แต่ละการตัดสินใจไม่ได้เป็นอิสระ — ให้ input ปัจจุบัน อัลกอริทึมตัดสินใจ และ input ถัดไปขึ้นอยู่กับการตัดสินใจนี้

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

การประยุกต์ที่ชัดเจนของ reinforcement learning:

  • เกมส์เช่นหมากรุกและ Go (แนะนำสารคดี AlphaGo บน Netflix ถ้ายังไม่ดู)
  • หุ่นยนต์ (สอนบอททำงานที่ต้องการ)
  • ยานยนต์อัตโนมัติ
  • Robo-advisors ที่ฝึกให้ชนะตลาดหุ้น

สนใจอัลกอริทึมเบื้องหลัง reinforcement learning ค้นหา: Q-learning, state-action-reward-state-action (SARSA), DQN, asynchronous advantage actor critic

สรุป

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