TensorFlow용 Swift(보관 모드)

Swift for TensorFlow는 기계 학습, 컴파일러, 미분 가능 프로그래밍, 시스템 설계 등에 대한 최신 연구를 통합한 차세대 기계 학습 플랫폼의 실험이었습니다. 2021년 2월에 보관되었습니다. 이 프로젝트의 몇 가지 중요한 성과는 다음과 같습니다.

이 사이트는 더 이상 업데이트를 받지 않습니다. API 문서와 바이너리 다운로드는 물론 Open Design Review 회의 녹음에도 계속 액세스할 수 있습니다.

빠른

Swift는 대규모 사용자 기반을 보유하고 있는 오픈 소스 범용 프로그래밍 언어입니다. 우리는 Swift가 개방형 언어 설계 프로세스를 갖고 있고 " Why Swift for TensorFlow " 문서에 자세히 설명된 특정 기술적인 이유로 Swift를 선택했습니다. 우리는 대부분의 독자가 이에 대해 익숙하지 않다고 가정하므로 여기서는 이에 대한 몇 가지 추가 중요한 사항을 간략하게 다루겠습니다.

Swift의 개발은 2010년에 시작되었으며 학문적 참신함을 추구하거나 프로그래밍 방법론을 종교적으로 전파하기보다는 프로그래밍 언어 설계의 모범 사례를 하나의 시스템으로 통합하는 것을 목표로 했습니다. 결과적으로 다중 패러다임 개발(예: 기능적, OOP, 일반, 절차적 등)을 하나의 시스템에서 모두 지원하고 학술 언어에서 잘 알려진 많은 개념(예: 패턴 일치 , 대수 데이터 유형 및 유형 클래스)을 가져옵니다. 최전선에. 개발자가 Swift에서 모든 코드를 다시 작성하도록 강력하게 권장하는 대신, 다른 언어와의 상호 운용성에 실용적으로 중점을 둡니다. 예를 들어 C 헤더 파일을 직접 가져와 FFI 없이 사용할 수 있도록 허용하고 (현재) 래퍼 없이 Python API를 사용할 수 있는 기능을 제공합니다. .

Swift는 배우고 사용하기 쉬운 것에 중점을 두고 낮은 수준의 시스템 프로그래밍부터 높은 수준의 스크립팅까지 모든 과정을 포괄한다는 대담한 목표를 가지고 있습니다. Swift는 배우고 사용하기 쉬워야 하지만 강력해야 하기 때문에 복잡성의 점진적인 공개 원칙에 의존합니다. 이는 복잡성으로 인해 혜택을 받는 사람들에게 복잡성 비용을 적극적으로 고려하는 것입니다. 고성능과 결합된 "스크립팅 언어 느낌"은 기계 학습에 매우 유용합니다.

Swift 디자인의 마지막 관련 측면은 Swift 언어의 대부분이 실제로 표준 라이브러리에서 구현된다는 것입니다. IntBool 과 같은 "내장" 유형은 실제로 매직 유형 및 작업을 래핑하는 표준 라이브러리에 정의된 구조체일 뿐입니다. 따라서 때때로 우리는 Swift가 단지 "LLVM의 구문 설탕"일 뿐이라는 농담을 합니다.

Swift에 대한 멋진 점과 온라인에서 사용할 수 있는 수많은 콘텐츠가 있습니다. 일반적인 Swift 프로그래밍 개념에 대해 더 자세히 알아보고 싶다면 시작하기 위한 몇 가지 링크가 있습니다.

한 가지 경고: Swift는 초기에 빠르게 발전했으므로 Swift 3(2016년 출시) 이전에는 모든 것에 주의해야 합니다.

왜 TensorFlow에 Swift를 사용하나요?

Swift for TensorFlow는 머신러닝 모델을 개발하는 새로운 방법입니다. 이는 Swift 프로그래밍 언어 에 직접 통합된 TensorFlow 의 강력한 기능을 제공합니다. 우리는 기계 학습 패러다임이 매우 중요하므로 최고의 언어 및 컴파일러 지원을 받을 자격이 있다고 믿습니다.

기계 학습의 기본적인 기본 요소는 기울기 기반 최적화입니다. 즉, 매개변수를 최적화하기 위한 함수 파생어를 계산합니다. Swift for TensorFlow를 사용하면 gradient(of:) 같은 미분 연산자를 사용하여 함수를 쉽게 구별하거나, gradient(in:) 메소드를 호출하여 전체 모델을 기준으로 구별할 수 있습니다. 이러한 차별화 API는 Tensor 관련 개념에만 사용할 수 있는 것이 아니라 Float , Double , SIMD 벡터 및 자체 데이터 구조를 포함하여 Differentiable 프로토콜을 준수하는 모든 유형에 대해 일반화됩니다.

// 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 for TensorFlow 프로젝트에는 사용자의 생산성을 높일 수 있는 정교한 도구 체인이 함께 제공됩니다. Jupyter 노트북에서 Swift를 대화형으로 실행하고 최신 딥 러닝 라이브러리의 대규모 API 표면을 탐색하는 데 도움이 되는 유용한 자동 완성 제안을 얻을 수 있습니다. 몇 초 만에 브라우저에서 바로 시작할 수 있습니다!

Swift의 강력한 Python 통합 덕분에 TensorFlow용 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!