Swift สำหรับ TensorFlow เป็นการทดลองในแพลตฟอร์มเจเนอเรชั่นถัดไปสำหรับการเรียนรู้ของเครื่อง โดยผสมผสานการวิจัยล่าสุดเกี่ยวกับการเรียนรู้ของเครื่อง คอมไพเลอร์ การเขียนโปรแกรมที่สร้างความแตกต่าง การออกแบบระบบ และอื่นๆ มันถูกเก็บถาวรในเดือนกุมภาพันธ์ 2021 ความสำเร็จที่สำคัญบางประการจากโครงการนี้ ได้แก่:
- เพิ่ม การเขียนโปรแกรมสร้างความแตกต่างแบบรวมภาษา ลงในภาษา Swift งานนี้ดำเนินต่อไปในคอมไพเลอร์ Swift อย่างเป็นทางการ
- พัฒนา API การเรียนรู้เชิงลึก ที่เน้นคุณค่าที่ไม่แน่นอน
- ส่งเสริมการพัฒนา สวนจำลอง ด้วยแบบจำลองมากกว่า 30 แบบจากสาขาวิชาการเรียนรู้เชิงลึกที่หลากหลาย
- เปิดใช้งานการวิจัยใหม่ที่ รวมการเรียนรู้เชิงลึกเข้ากับแบบจำลองกราฟิกที่น่าจะเป็น สำหรับการติดตามการเคลื่อนไหว 3 มิติและอื่นๆ
- ขับเคลื่อนต้นแบบ pure-Swift ของ รันไทม์ GPU+CPU ที่รองรับ pmap
- เลิกใช้ความพยายามด้านโอเพ่นซอร์สหลายประการซึ่งยังคงอยู่ภายใต้การพัฒนาอย่างต่อเนื่อง:
- PythonKit : การทำงานร่วมกันของ Python กับ Swift
- Swift-jupyter : เปิดใช้งานการใช้ Swift ภายในสมุดบันทึก Jupyter
- Swift-benchmark : มอบชุดการวัดประสิทธิภาพที่มีประสิทธิภาพสำหรับโค้ด Swift
- แยกความพยายามของโอเพ่นซอร์สอื่นๆ ออกไป:
- เพนกวิน : การเขียนโปรแกรมแบบขนาน โครงสร้างข้อมูล อัลกอริธึมกราฟ และอื่นๆ
- เทนเซอร์ที่พอดีอย่างสมบูรณ์แบบ : การวิเคราะห์แบบคงที่ของรูปร่างเทนเซอร์ที่ไม่ตรงกัน
- ข้อเสนอวิวัฒนาการที่รวดเร็วเสนอและดำเนินการ:
ไซต์นี้จะไม่ได้รับการอัปเดตเพิ่มเติม เอกสาร API และการดาวน์โหลดไบนารี่จะยังคงสามารถเข้าถึงได้ เช่นเดียวกับ การบันทึกการประชุม Open Design Review
สวิฟท์
Swift เป็นภาษาโปรแกรม โอเพ่นซอร์ส สำหรับใช้งานทั่วไป ซึ่งมีฐานผู้ใช้จำนวนมากและกำลังเติบโต เราเลือก Swift เนื่องจากมี กระบวนการออกแบบด้วยภาษาแบบเปิด และด้วยเหตุผลทางเทคนิคเฉพาะซึ่งมีรายละเอียดอยู่ในเอกสาร " เหตุใดจึงต้อง Swift สำหรับ TensorFlow " เราคิดว่าผู้อ่านส่วนใหญ่ไม่คุ้นเคยกับสิ่งนี้ ดังนั้นเราจะกล่าวถึงสิ่งสำคัญเพิ่มเติมบางอย่างเกี่ยวกับเรื่องนี้โดยย่อที่นี่
การพัฒนา Swift เริ่มต้นในปี 2010 และมุ่งเป้าที่จะนำแนวปฏิบัติที่ดีที่สุดในการออกแบบภาษาการเขียนโปรแกรมมารวมกันไว้ในระบบเดียว แทนที่จะลองใช้ความแปลกใหม่ทางวิชาการ หรือเผยแพร่วิธีการเขียนโปรแกรมอย่างเคร่งครัด ด้วยเหตุนี้ จึงสนับสนุนการพัฒนาหลายกระบวนทัศน์ (เช่น ฟังก์ชัน OOP ทั่วไป ขั้นตอน ฯลฯ) ทั้งหมดในระบบเดียว และนำแนวคิดที่เป็นที่รู้จักมากมายจากภาษาวิชาการ (เช่น การจับคู่รูป แบบ ชนิดข้อมูลพีชคณิต และคลาสประเภท) เข้าสู่แถวหน้า แทนที่จะสนับสนุนอย่างยิ่งให้นักพัฒนาเขียนโค้ดทั้งหมดใหม่ใน Swift แต่กลับเน้นในทางปฏิบัติไปที่ความสามารถในการทำงานร่วมกับภาษาอื่นๆ ได้ เช่น ช่วยให้คุณสามารถนำเข้าไฟล์ส่วนหัว C ได้โดยตรง และใช้งานได้โดยไม่ต้องใช้ FFI และ (ตอนนี้) ความสามารถในการใช้ Python API โดยไม่ต้องมี Wrappers .
Swift มีเป้าหมายที่กล้าหาญในการขยายตั้งแต่การเขียนโปรแกรมระบบระดับต่ำไปจนถึงการเขียนสคริปต์ระดับสูง โดยเน้นไปที่ การเรียนรู้และใช้งานที่ง่ายดาย เนื่องจาก Swift จำเป็นต้องเรียนรู้และใช้งานง่ายแต่ยังทรงพลังด้วย Swift จึงต้องอาศัยหลักการของ การเปิดเผยความซับซ้อนอย่างต่อเนื่อง ซึ่งจะพิจารณาต้นทุนของความซับซ้อนอย่างจริงจังให้กับผู้ที่ได้รับประโยชน์จากความซับซ้อนนั้น "ความรู้สึกของภาษาสคริปต์" รวมกับประสิทธิภาพสูงมีประโยชน์มากสำหรับการเรียนรู้ของเครื่อง
ลักษณะที่เกี่ยวข้องขั้นสุดท้ายของการออกแบบ Swift คือภาษา Swift ส่วนใหญ่ถูกนำไปใช้จริงในไลบรารีมาตรฐาน ประเภท "Builtin" เช่น Int และ Bool จริงๆ แล้วเป็นเพียงโครงสร้างที่กำหนดไว้ในไลบรารีมาตรฐานที่รวมประเภทและการดำเนินการของเวทย์มนตร์ ด้วยเหตุนี้ บางครั้งเราก็ล้อเล่นว่า Swift เป็นเพียง "น้ำตาลเชิงวากยสัมพันธ์สำหรับ LLVM"
มีอะไรเจ๋งๆ อีกมากมายเกี่ยวกับ Swift และเนื้อหามากมายที่มีให้ทางออนไลน์ หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับแนวคิดการเขียนโปรแกรม Swift ทั่วไป ต่อไปนี้เป็นลิงก์บางส่วนเพื่อเริ่มต้น:
- Swift Tour เป็นการทัวร์ชมไวยากรณ์ระดับสูงและความรู้สึกของ Swift แบบอ่านง่าย และเป็นส่วนหนึ่งของหนังสือ "The Swift Programming Language" เล่มใหญ่
- ความหมายของคุณค่านั้นทรงพลังและมีบทบาทสำคัญในโค้ด Swift ดังที่อธิบายไว้ใน " การสร้างแอปที่ดีขึ้นด้วยประเภทค่าใน Swift " [ YouTube ]
- Swift รองรับ OOP แบบคลาสสิก แต่ได้ดัดแปลงแนวคิดจากระบบประเภท Haskell มีอธิบายไว้ใน " การเขียนโปรแกรมเชิงโปรโตคอลใน Swift " [ YouTube ]
คำเตือนประการหนึ่ง: Swift พัฒนาอย่างรวดเร็วในช่วงปีแรก ๆ ดังนั้นคุณควรระวังสิ่งใด ๆ ก่อน Swift 3 (เปิดตัวในปี 2559)
ทำไมต้อง Swift สำหรับ TensorFlow?
Swift สำหรับ TensorFlow เป็นวิธีใหม่ในการพัฒนาโมเดลการเรียนรู้ของเครื่อง มันให้พลังของ TensorFlow ที่บูรณาการเข้ากับ ภาษาการเขียนโปรแกรม Swift โดยตรง เราเชื่อว่ากระบวนทัศน์การเรียนรู้ของเครื่องมีความสำคัญมากจนสมควรได้รับ การสนับสนุนด้านภาษาและคอมไพเลอร์ชั้นหนึ่ง
พื้นฐานเบื้องต้นในการเรียนรู้ของเครื่องคือการเพิ่มประสิทธิภาพตามการไล่ระดับสี: อนุพันธ์ของฟังก์ชันการคำนวณเพื่อปรับพารามิเตอร์ให้เหมาะสม ด้วย Swift สำหรับ TensorFlow คุณสามารถแยกความแตกต่างของฟังก์ชันได้อย่างง่ายดายโดยใช้ตัวดำเนินการดิฟเฟอเรนเชียล เช่น gradient(of:)
หรือสร้างความแตกต่างด้วยความเคารพต่อโมเดลทั้งหมดโดยการเรียกเมธอด gradient(in:)
API การแยกความแตกต่างเหล่านี้ไม่ได้มีไว้สำหรับแนวคิดที่เกี่ยวข้องกับ Tensor
เท่านั้น แต่ยังใช้ได้ทั่วไปสำหรับทุกประเภทที่สอดคล้องกับโปรโตคอล Differentiable
รวมถึงเวกเตอร์ Float
, Double
, SIMD และโครงสร้างข้อมูลของคุณเอง
// Custom differentiable type.
struct Model: Differentiable {
var w: Float
var b: Float
func applied(to input: Float) -> Float {
return w * input + b
}
}
// Differentiate using `gradient(at:_:in:)`.
let model = Model(w: 4, b: 3)
let input: Float = 2
let (𝛁model, 𝛁input) = gradient(at: model, input) { model, input in
model.applied(to: input)
}
print(𝛁model) // Model.TangentVector(w: 2.0, b: 1.0)
print(𝛁input) // 4.0
นอกเหนือจากอนุพันธ์แล้ว โปรเจ็กต์ Swift สำหรับ TensorFlow ยังมาพร้อมกับห่วงโซ่เครื่องมือที่ซับซ้อนเพื่อทำให้ผู้ใช้มีประสิทธิผลมากขึ้น คุณสามารถเรียกใช้ Swift แบบโต้ตอบได้ในสมุดบันทึก Jupyter และรับคำแนะนำในการเติมข้อความอัตโนมัติที่เป็นประโยชน์เพื่อช่วยคุณสำรวจพื้นผิว API ขนาดใหญ่ของไลบรารีการเรียนรู้เชิงลึกสมัยใหม่ คุณสามารถ เริ่มต้นได้ทันทีบนเบราว์เซอร์ของคุณในไม่กี่วินาที !
การโยกย้ายไปยัง Swift สำหรับ TensorFlow นั้นง่ายมาก ด้วยการผสานรวม Python อันทรงพลังของ Swift คุณสามารถย้ายโค้ด Python ของคุณทีละน้อยได้ (หรือใช้ไลบรารี Python ที่คุณชื่นชอบต่อไป) เนื่องจากคุณสามารถเรียกไลบรารี Python ที่คุณชื่นชอบได้อย่างง่ายดายด้วยไวยากรณ์ที่คุ้นเคย:
import TensorFlow
import Python
let np = Python.import("numpy")
let array = np.arange(100).reshape(10, 10) // Create a 10x10 numpy array.
let tensor = Tensor<Float>(numpy: array) // Seamless integration!