Swift สำหรับ TensorFlow (ในโหมดเก็บถาวร)

Swift สำหรับ TensorFlow เป็นการทดลองในแพลตฟอร์มเจเนอเรชั่นถัดไปสำหรับการเรียนรู้ของเครื่อง โดยผสมผสานการวิจัยล่าสุดเกี่ยวกับการเรียนรู้ของเครื่อง คอมไพเลอร์ การเขียนโปรแกรมที่สร้างความแตกต่าง การออกแบบระบบ และอื่นๆ มันถูกเก็บถาวรในเดือนกุมภาพันธ์ 2021 ความสำเร็จที่สำคัญบางประการจากโครงการนี้ ได้แก่:

ไซต์นี้จะไม่ได้รับการอัปเดตเพิ่มเติม เอกสาร 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 พัฒนาอย่างรวดเร็วในช่วงปีแรก ๆ ดังนั้นคุณควรระวังสิ่งใด ๆ ก่อน 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!