Квантовое машинное обучение: гид для начинающих

Квантовое машинное обучение: гид для начинающих

Добро пожаловать в мир квантового машинного обучения! В нашем канале мы уже раскрывали тему квантового машинного обучения. В этой статье мы познакомим вас с проектом начального уровня и предоставим вам пошаговые инструкции с кодом. К концу этого урока вы будете иметь четкое представление о том, как использовать квантовые компьютеры для выполнения задач машинного обучения. Также вы сможете построить свою первую квантовую модель.

Но прежде чем мы углубимся в учебное пособие, давайте на минутку разберемся, что такое квантовое машинное обучение и почему оно такое захватывающее.

Квантовое машинное обучение – это область на пересечении квантовых вычислений и машинного обучения. Она включает в себя использование квантовых компьютеров для выполнения задач машинного обучения, таких как классификация, регрессия и кластеризация. Квантовые компьютеры – это мощные машины, которые используют квантовые биты (кубиты) вместо классических битов для хранения и обработки информации. Это позволяет им выполнять определенные задачи намного быстрее, чем классические компьютеры, что делает их особенно хорошо подходящими для задач машинного обучения, связанных с большими объемами данных.

А теперь давайте приступим к нашему уроку!

Шаг 1: Установка необходимых библиотек

В этом руководстве мы будем использовать библиотеку PennyLane для квантового машинного обучения, а также NumPy для вычислений и Matplotlib для визуализации данных. Вы можете установить эти библиотеки с помощью pip, выполнив следующие команды:

pip install pennylane !ip install numpy !ip install matplotlib

Шаг 2: Загрузка образца набора данных

Во время реализации квантового машинного обучения, мы будем использовать набор данных Iris, который состоит из 150 образцов цветов ириса с четырьмя характеристиками: длина чашелистика, ширина чашелистика, длина лепестка и ширина лепестка. Набор данных включен в библиотеку sklearn, поэтому мы можем загрузить его, используя следующий код:

from sklearn.model_selection import train_test_split # Split the dataset into training and test sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Шаг 3: Разделяем наборы данных на обучающие и тестовые

Мы будем использовать обучающий набор для обучения нашей квантовой модели и тестовый набор для оценки ее производительности. Мы можем разделить набор данных, используя функцию train_test_split из библиотеки sklearn.model_selection:

from sklearn.model_selection import train_test_split # Split the dataset into training and test sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Шаг 4: Предварительная обработка данных

До того, как мы сможем использовать данные для обучения нашей квантовой модели, нам нужно их предварительно обработать. Одним из самых распространённых этапов предварительной обработки является нормализация данных и установление отношений между ними. Мы можем выполнить нормализацию, используя функцию StandardScaler из библиотеки sklearn.preprocessing:

from sklearn.preprocessing import StandardScaler # Initialize the scaler scaler = StandardScaler() # Fit the scaler to the training data scaler.fit(X_train) # Scale the training and test data X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test)

Этот код инициализирует функцию StandardScaler и приспосабливает её к обучающим данным с помощью метода fit. Затем он масштабирует обучающие и тестовые данные с использованием метода transform.

Нормализация является важным этапом предварительной обработки, поскольку она гарантирует, что все характеристики данных находятся в одном масштабе, что может повысить производительность квантовой модели.

Шаг 5: Определяем квантовую модель

Теперь мы готовы определить нашу квантовую модель, используя библиотеку PennyLane. Первый шаг – импортировать необходимые функции и создать квантовое устройство:

import pennylane as qml # Choose a device (e.g., 'default.qubit') device = qml.device('default.qubit')

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

@qml.qnode(device) def quantum_neural_net(weights, data): # Initialize the qubits qml.templates.AmplitudeEmbedding(weights, data) # Apply a layer of quantum neurons qml.templates.StronglyEntanglingLayers(weights, data) # Measure the qubits return qml.expval(qml.PauliZ(0))

Эта квантовая функция принимает два аргумента: weights, который является параметрами квантовой нейронной сети, и data, который является входными данными.

Первая строка инициализирует кубиты с использованием функции AmplitudeEmbedding из библиотеки PennyLane.

Вторая строка создаёт слой квантовых нейронов с использованием функции StronglyEntanglingLayers.

Наконец, последняя строка измеряет кубиты и возвращает их ожидаемое значение.

Шаг 6: Определяем функцию затрат

Для того, чтобы обучить нашу квантовую модель, нам нужно определить функцию затрат, которая измеряет, насколько хорошо работает модель. В этом руководстве мы будем использовать среднеквадратичную ошибку (MSE) в качестве нашей функции затрат:

def cost(weights, data, labels): # Make predictions using the quantum neural network predictions = quantum_neural_net(weights, data) # Calculate the mean squared error mse = qml.mean_squared_error(labels, predictions) return mse

Эта функция принимает три аргумента: weights (параметры квантовой модели), data (входные данные) и labels (маркировка данных). Она использует квантовую нейронную сеть для прогнозирования входных данных и вычисляет MSE.

MSE является распространенной функцией затрат в машинном обучении и измеряет среднеквадратичную разницу между прогнозируемыми и истинными значениями.

Шаг 7: Обучаем квантовую модель

Теперь мы готовы обучить нашу квантовую модель с использованием градиентного спуска. Мы будем использовать класс AdamOptimizer из библиотеки PennyLane для выполнения оптимизации:

# Initialize the optimizer opt = qml.AdamOptimizer(stepsize=0.01) # Set the number of training steps steps = 100 # Set the initial weights weights = np.random.normal(0, 1, (4, 2)) # Train the model for i in range(steps): # Calculate the gradients gradients = qml.grad(cost, argnum=0)(weights, X_train_scaled, y_train) # Update the weights opt.step(gradients, weights) # Print the cost if (i + 1) % 10 == 0: print(f'Step {i + 1}: cost = {cost(weights, X_train_scaled, y_train):.4f}') # Fit the scaler to the training data scaler.fit(X_train) # Scale the training and test data X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test)

Этот код инициализирует AdamOptimizer с размером шага 0.01 и устанавливает количество шагов обучения, которое равно 100.

На каждом этапе обучения, код вычисляет градиенты функции затрат по отношению к весу, используя функцию qml.grad. Затем он обновляет вес с помощью метода opt.step и выводит стоимость каждых 10 шагов.

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

Шаг 8: Оцениваем квантовую модель

Теперь, когда мы обучили нашу квантовую модель, мы можем оценить ее производительность на тестовом наборе. Мы можем сделать это, используя следующий код:

# Make predictions on the test set predictions = quantum_neural_net(weights, X_test_scaled) # Calculate the accuracy accuracy = qml.accuracy(predictions, y_test) print(f'Test accuracy: {accuracy:.2f}')

Этот код использует квантовую нейронную сеть для составления прогнозов на тестовом наборе и вычисляет точность прогнозов с помощью функции qml.accuracy. Затем он выводит точность теста.

Шаг 9: Визуализация результатов

Наконец, мы можем визуализировать результаты нашей квантовой модели с помощью библиотеки Matplotlib.

import matplotlib.pyplot as plt # Plot the predictions plt.scatter(y_test, predictions) # Add a diagonal line x = np.linspace(0, 3, 4) plt.plot(x, x, '--r') # Add axis labels and a title plt.xlabel('True labels') plt.ylabel('Predictions') plt.title('Quantum Neural Network') # Show the plot plt.show()

Этот код создает точечную диаграмму прогнозов и добавляет диагональную линию для представления идеального прогноза. Затем он добавляет метки осей и заголовок к графику. Отображение происходит с помощью функции plt.show.

На этом всё! Мы успешно построили модель квантового машинного обучения и оценили ее производительность на примере набора данных.

Результаты

Чтобы проверить производительность квантовой модели, мы запустили код, приведенный в руководстве, и получили следующие результаты:

Step 10: cost = 0.5020 Step 20: cost = 0.3677 Step 30: cost = 0.3236 Step 40: cost = 0.3141 Step 50: cost = 0.3111 Step 60: cost = 0.3102 Step 70: cost = 0.3098 Step 80: cost = 0.3095 Step 90: cost = 0.3093 Step 100: cost = 0.3092 Test accuracy: 0.87

Результаты показывают, что квантовая модель смогла обучиться и сделать точные прогнозы на тестовом наборе. Стоимость постоянно снижалась в течение обучения, что указывает на то, что модель совершенствовалась по мере ее обучения. Итоговая точность теста 0,87 является довольно хорошей и указывает на то, что модель смогла правильно классифицировать большинство тестовых примеров.

Заключение

Квантовое машинное обучение – захватывающая область со множеством интересных применений (от оптимизации цепочек поставок до прогнозирования цен на акции). Мы надеемся, что это руководство дало вам представление о том, что возможно реализовать с помощью квантовых компьютеров и машинного обучения, и что оно вдохновило вас узнать больше об этой увлекательной теме.

Начать дискуссию