Swift для машинного обучения: возможности и ограничения

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Swift для машинного обучения: возможности и ограничения

Мир машинного обучения (ML) традиционно ассоциируется с Python и его библиотеками (TensorFlow, PyTorch, scikit-learn). Однако разработчики экосистемы Apple всё чаще задаются вопросом: можно ли использовать Swift для задач машинного обучения? Swift — мощный, быстрый и безопасный язык, который лежит в основе всех современных приложений для iOS, macOS, watchOS и tvOS. В этой статье мы подробно разберём, какие инструменты доступны для ML на Swift, в чём их сила, а где они пока уступают Python.

Мы рассмотрим как нативные фреймворки Apple (Create ML, Core ML), так и сторонние решения (Swift for TensorFlow). Вы узнаете, подходит ли Swift для продакшн-моделей, обучения нейросетей или только для инференса на устройствах.

1. Нативные инструменты Apple: Create ML и Core ML

Apple активно развивает собственную экосистему для машинного обучения. Основные фреймворки — Create ML и Core ML — полностью написаны на Swift и оптимизированы для работы на устройствах Apple.

Create ML — обучение моделей без Python

Create ML — это фреймворк, позволяющий обучать модели машинного обучения прямо на macOS, используя только Swift. Он идеально подходит для задач классификации изображений, анализа текста, регрессии и рекомендательных систем. Главное преимущество — минимальный порог входа: не нужно устанавливать Python, настраивать CUDA или разбираться в сложных математических абстракциях.

Пример кода: обучение классификатора текста на Swift

import CreateML
import Foundation

// Загрузка данных из JSON
let data = try MLDataTable(contentsOf: URL(fileURLWithPath: "reviews.json"))

// Разделение на обучающую и тестовую выборки
let (trainingData, testingData) = data.randomSplit(by: 0.8, seed: 5)

// Создание и обучение модели
let sentimentClassifier = try MLTextClassifier(trainingData: trainingData,
                                               textColumn: "text",
                                               labelColumn: "label")

// Оценка точности
let evaluationMetrics = sentimentClassifier.evaluation(on: testingData)
print("Точность: \(evaluationMetrics.classificationError)")

// Сохранение модели в .mlmodel
let metadata = MLModelMetadata(author: "PythonLib User",
                               shortDescription: "Модель для анализа тональности",
                               version: "1.0")
try sentimentClassifier.write(to: URL(fileURLWithPath: "SentimentClassifier.mlmodel"),
                              metadata: metadata)

Этот код обучает модель на размеченных отзывах и сохраняет её в формате .mlmodel, который затем можно интегрировать в любое iOS/macOS приложение.

Core ML — инференс на устройствах

Core ML — это движок для выполнения моделей машинного обучения на устройствах Apple. Он поддерживает модели, обученные как в Create ML, так и в TensorFlow или PyTorch (через конвертацию в формат .mlpackage). Core ML использует аппаратное ускорение (Neural Engine, GPU, CPU) и обеспечивает работу модели офлайн, без задержек сети.

Пример: использование готовой модели Core ML в приложении

import CoreML
import Vision

// Загрузка модели
guard let model = try? VNCoreMLModel(for: ResNet50(configuration: MLModelConfiguration()).model) else {
    fatalError("Не удалось загрузить модель")
}

// Создание запроса
let request = VNCoreMLRequest(model: model) { request, error in
    guard let results = request.results as? [VNClassificationObservation],
          let topResult = results.first else {
        return
    }
    print("Распознано: \(topResult.identifier) с уверенностью \(topResult.confidence)")
}

// Выполнение на изображении
let handler = VNImageRequestHandler(url: URL(fileURLWithPath: "cat.jpg"))
try? handler.perform([request])

Этот код использует предобученную модель ResNet50 для классификации изображений. Всё работает на устройстве, без отправки данных на сервер.

2. Swift for TensorFlow: амбициозный, но замороженный проект

В 2018 году Google анонсировала Swift for TensorFlow (S4TF) — попытку создать первоклассный язык для глубокого обучения на базе Swift. Проект предлагал автоматическое дифференцирование, интеграцию с Python и высокую производительность. Однако в 2021 году Google прекратила активную разработку S4TF, передав сообществу наработки.

Сегодня S4TF существует как Swift Numerics и swift-ml пакеты, но они не имеют официальной поддержки. Для обучения сложных нейросетей на Swift это означает серьёзные ограничения:

  • Нет готовых оптимизаторов (Adam, SGD) из коробки.
  • Нет поддержки распределённого обучения.
  • Мало предобученных моделей (в отличие от PyTorch Hub или TF Hub).

Тем не менее, для простых экспериментов и обучения основам дифференцирования S4TF всё ещё может быть полезен.

Пример: линейная регрессия на Swift с автодиффом (S4TF)

import TensorFlow

// Генерация данных
let x: Tensor<Float> = Tensor(randomNormal: [100, 1])
let y: Tensor<Float> = 3 * x + 2 + Tensor(randomNormal: [100, 1]) * 0.1

// Параметры модели
var w = Tensor<Float>(randomNormal: [1, 1])
var b = Tensor<Float>(zeros: [1])

// Обучение
for _ in 0..<1000 {
    let ŷ = x • w + b
    let loss = (ŷ - y).squared().mean()
    
    let (∇w, ∇b) = gradient(at: w, b) { w, b in
        return (x • w + b - y).squared().mean()
    }
    w -= 0.01 * ∇w
    b -= 0.01 * ∇b
}

print("w = \(w.scalarized()), b = \(b.scalarized())")

Код демонстрирует базовое автоматическое дифференцирование, но для реальных проектов потребуется написать много вспомогательного кода вручную.

3. Ограничения Swift для машинного обучения

Несмотря на удобство для iOS-разработчиков, Swift значительно уступает Python в ML-экосистеме. Вот основные ограничения:

  • Меньше библиотек и сообщества. В Python есть тысячи готовых пакетов (scikit-learn, XGBoost, LightGBM, Hugging Face). В Swift — только базовый набор.
  • Сложность обучения сложных моделей. Create ML не поддерживает кастомные архитектуры нейросетей (трансформеры, GAN). Для этого придётся использовать S4TF или оборачивать Python-код.

Блоги

Рекомендаций по книгам