Skip to content

AI -> ML -> DL -> NLP

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

Вот основные термины и концепции, которые вам нужно знать:

Основные концепции

  1. Искусственный интеллект (ИИ):

    • Общий термин, обозначающий машины или системы, которые могут выполнять задачи, требующие человеческого интеллекта, такие как понимание естественного языка, распознавание изображений, принятие решений и т. д.
  2. Машинное обучение (ML):

    • Подмножество ИИ, в котором используются алгоритмы, позволяющие системам обучаться и улучшать свои функции на основе данных. В машинном обучении выделяют несколько типов:
      • Обучение с учителем: Алгоритм обучается на размеченных данных, где каждому входу соответствует правильный выход.
      • Обучение без учителя: Алгоритм анализирует данные без предварительной разметки, выявляя скрытые структуры или закономерности.
      • Обучение с подкреплением: Алгоритм обучается на основе обратной связи от среды, получая награды или штрафы за свои действия.
  3. Глубокое обучение (DL):

    • Подмножество машинного обучения, основанное на искусственных нейронных сетях с большим количеством слоев (глубокие нейронные сети). Оно используется для задач, таких как обработка изображений, распознавание речи и понимание текста.
  4. Обработка естественного языка (NLP):

    • Подобласть ИИ, занимающаяся взаимодействием между компьютерами и человеческими языками. Задачи включают понимание, генерацию и перевод текста.

Основная терминология

  1. Алгоритмы:

    • Последовательность инструкций, используемых для решения задач или выполнения вычислений.
  2. Данные и датасеты:

    • Информация, на которой обучаются и тестируются алгоритмы ИИ. Датасеты могут быть размеченными (с метками) или неразмеченными.
  3. Нейронные сети:

    • Модели, вдохновленные биологическими нейронными сетями, состоящие из узлов (нейронов) и соединений (синапсов). Включают слои: входной, скрытые и выходной.
  4. Гиперпараметры:

    • Параметры модели, которые настраиваются до обучения и не изменяются в процессе обучения, такие как скорость обучения, число слоев и число нейронов в каждом слое.
  5. Обратное распространение (Backpropagation):

    • Алгоритм для обучения нейронных сетей, который использует градиентный спуск для минимизации ошибки, корректируя веса сети.
  6. Градиентный спуск:

    • Оптимизационный метод, используемый для минимизации функции ошибки путем обновления параметров модели в направлении, противоположном градиенту.
  7. Регуляризация:

    • Техники, используемые для предотвращения переобучения модели, такие как L1 и L2 регуляризация, dropout и другие.
  8. Переобучение и недообучение:

    • Переобучение (Overfitting): Модель хорошо обучается на тренировочных данных, но плохо обобщает на новых данных.
    • Недообучение (Underfitting): Модель не может хорошо обучиться даже на тренировочных данных.
  9. Точность (Accuracy) и погрешность (Error):

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

    • Специализированные нейронные сети для обработки данных с сетчатой топологией, таких как изображения. Используют сверточные слои для автоматического выделения признаков.
  11. Рекуррентные нейронные сети (RNN):

    • Нейронные сети, предназначенные для работы с последовательными данными, такими как временные ряды и текст. Включают механизмы, такие как LSTM и GRU, для хранения долгосрочных зависимостей.
  12. Автокодировщики (Autoencoders):

    • Нейронные сети, используемые для обучения эффективного кодирования данных. Состоят из двух частей: кодировщика и декодировщика.
  13. Генеративно-состязательные сети (GAN):

    • Модели, состоящие из двух нейронных сетей: генератора и дискриминатора, которые обучаются одновременно. Генератор создает фальшивые данные, дискриминатор пытается отличить фальшивые данные от настоящих.
  14. Трансформеры (Transformers):

    • Архитектуры для обработки последовательных данных, особенно в NLP, которые используют механизм внимания для параллельной обработки данных.

Домашнее задание

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

Порядок выполнения ДЗ

  1. Сделайте копию данного блокнота себе на диск. Далее работайте со своей копией блокнота. Сохраняйте вносимые в неё изменения.
  2. Ознакомьтесь с теоретическим текстом и кодом из настоящего блокнота.
  3. Перенесите примеры кода в отдельные кодовые ячейки и выполните их.
  4. Создайте тестовую ячейку, куда запишите ответы на теоретические вопросы.
  5. Расшарьте блокнот и используйте ссылку как ответ на ДЗ.

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

В этом задании мы будем использовать набор данных MNIST, который содержит изображения рукописных цифр (от 0 до 9). Мы реализуем три различных подхода к классификации этих изображений:

  1. Машинное обучение: Используем метод k-ближайших соседей (k-NN).
  2. Глубокое обучение: Используем многослойный перцептрон (MLP).
  3. Нейронные сети: Используем сверточную нейронную сеть (CNN).

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

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

bash
pip install numpy pandas scikit-learn tensorflow keras

Шаг 2: Загрузка и предобработка данных

python
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.utils import to_categorical

# Загрузка данных MNIST
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist.data / 255.0, mnist.target.astype(int)

# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Шаг 3: Алгоритм машинного обучения (k-NN)

python
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# Создание и обучение модели k-NN
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Прогнозирование на тестовой выборке
y_pred_knn = knn.predict(X_test)
accuracy_knn = accuracy_score(y_test, y_pred_knn)

print(f'Accuracy of k-NN: {accuracy_knn:.4f}')

Шаг 4: Глубокое обучение (MLP)

python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

# Предобработка меток для MLP
y_train_mlp = to_categorical(y_train, 10)
y_test_mlp = to_categorical(y_test, 10)

# Создание модели MLP
model_mlp = Sequential([
    Flatten(input_shape=(784,)),
    Dense(128, activation='relu'),
    Dense(64, activation='relu'),
    Dense(10, activation='softmax')
])

# Компиляция и обучение модели MLP
model_mlp.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_mlp.fit(X_train, y_train_mlp, epochs=10, batch_size=32, validation_split=0.2)

# Оценка модели на тестовой выборке
loss_mlp, accuracy_mlp = model_mlp.evaluate(X_test, y_test_mlp)

print(f'Accuracy of MLP: {accuracy_mlp:.4f}')

Шаг 5: Нейронные сети (CNN)

python
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dropout

# Предобработка данных для CNN
X_train_cnn = X_train.values.reshape(-1, 28, 28, 1)
X_test_cnn = X_test.values.reshape(-1, 28, 28, 1)
y_train_cnn = to_categorical(y_train, 10)
y_test_cnn = to_categorical(y_test, 10)

# Создание модели CNN
model_cnn = Sequential([
    Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),
    MaxPooling2D(pool_size=(2, 2)),
    Dropout(0.25),
    Conv2D(64, kernel_size=(3, 3), activation='relu'),
    MaxPooling2D(pool_size=(2, 2)),
    Dropout(0.25),
    Flatten(),
    Dense(128, activation='relu'),
    Dropout(0.5),
    Dense(10, activation='softmax')
])

# Компиляция и обучение модели CNN
model_cnn.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_cnn.fit(X_train_cnn, y_train_cnn, epochs=10, batch_size=32, validation_split=0.2)

# Оценка модели на тестовой выборке
loss_cnn, accuracy_cnn = model_cnn.evaluate(X_test_cnn, y_test_cnn)

print(f'Accuracy of CNN: {accuracy_cnn:.4f}')

Заключение

В этом задании мы реализовали три различных подхода к классификации изображений рукописных цифр с использованием средств машинного обучения (k-NN), глубокого обучения (MLP) и нейронных сетей (CNN). Мы увидели, что каждый из этих подходов имеет свои преимущества и недостатки, и что сложные модели глубокого обучения могут значительно улучшить точность классификации по сравнению с простыми моделями машинного обучения.

Теоритические вопросы

  1. Какие преимущества и недостатки использованных методов вы увидели?
  2. В чем, на ваш взгляд, заключается принципиальная разница между многослойным перцептроном и сверточной нейронной сетью?
  3. Какие методы предобработки данных были использованы в этом задании?
python
# Создайте необходимое количество кодовых ячеек и исполните в них приведенный выше код

Contacts: teffal@mail.ru