Продолжим тему использования искусственного интеллекта в кибербезопасности. Сегодня мы не будем много говорить о проблемах инфобеза. Нашей задачей будет разобраться с машинным обучением и тем, как его можно использовать. Сразу замечу, что мы будем говорить прежде всего об основах ML, так как глубокое погружение в эту тему потребовало бы не один десяток статей. В качестве основного инструмента у нас будет применяться Python и библиотеки, используемые в нем для работы с ML.
Но прежде давайте поговорим о том, как вообще работает машинное обучение, какие основные принципы и механизмы заложены в его основу. И для начала мы поговорим о том, как информация используется в ML.
Данные как топливо ML
Именно данные приводят в действие механизм машинного обучения, помогая анализировать потоки информации и выявлять в них различные закономерности. Эти данные могут быть в любой форме (текст, картинка, видео и т. д.) и поступать с разной частотой из любого источника. В зависимости от источника входного потока и конкретного варианта использования, данные могут быть либо структурированными, то есть их можно легко сопоставить с идентифицируемыми заголовками столбцов по типу таблиц в Excel, либо неструктурированными, то есть их невозможно сопоставить с какой-либо идентифицируемой моделью данных. Сочетание неструктурированных и структурированных данных называется полуструктурированными.
Этапы машинного обучения
Общий подход к решению задач машинного обучения состоит из четырех основных этапов: анализа, обучения, тестирования и применения.
На этапе анализа в полученных данных выявляются закономерности, которые помогают создавать явные функции или параметры, и эти параметры могут быть использованы для обучения модели.
На этапе обучения параметры данных, сгенерированные на предыдущих этапах, используются для создания моделей машинного обучения. Этап обучения представляет собой итеративный процесс, в ходе которого данные постепенно улучшают качество прогнозирования. При этом можно столкнуться с проблемой переобучения. В таких случаях система словно запоминает ответы для учебных данных. Например, в случае использования нейросети, если мы подаем в учебном наборе фото автомобилей, нейросеть хорошо распознает эти фото. Но когда мы затем подадим на вход другие фото, результат будет значительно хуже — нейросеть будет много ошибаться, так как эти данные ей будут незнакомы.
Другая проблема, это снижение точности работы модели из-за недостаточного обучения.
Для обеспечения идеальной работы нужно предотвратить как переобучение, так и недостаточную подготовку, выполнив процедуры машинного обучения, некоторые из которых мы рассмотрим далее.
Важно, чтобы на этапе обучения данные были достаточного качества. Если мы обучаем модель распознавать марки автомобилей на фотографиях, то будет не очень здорово, если вместо фото машины Tesla, модель получит фотографию ученого Николы Теслы или фото ягуара вместо одноименного автомобиля. Этим иногда грешат фрилансеры, которых нанимают для подготовки наборов данных для обучения нейросетей.
На этапе тестирования модели машинного обучения, созданные на предыдущем этапе, тестируются с использованием большего количества данных и в результате оценивается точность работы модели. Здесь важно обратить внимание на то, что на этапе обучения и тестирования должны обязательно использоваться разные наборы данных. Так как этап тестирования, это по сути проверка того, как нейросеть обучилась, то здесь данные должны обязательно отличаться от предыдущих. Оценка результатов обучения модели на этом этапе может потребовать, а может и не потребовать дополнительное изменение параметров обучения.
И, наконец, этап применения. На этом этапе в уже настроенные модели, вводятся реальные данные и модель разворачивается в рабочей среде.
С данными думаю все понятно и теперь поговорим о методах машинного обучения.
Обучение: контролируемое и не очень
Контролируемое обучение — это процесс, при котором известный набор данных используется для классификации или прогнозирования на основе имеющихся данных. Методы контролируемого обучения изучают учебные данные, а затем используют полученные данные для принятия решений на основе данных тестирования. Есть также активное обучение, в котором система машинного обучения получает активные запросы, отправленные пользователю, и учится на ходу. Это особый случай контролируемого обучения.
Также существуют неконтролируемые методы обучения, при которых структура исходных данных неизвестна заранее и выводы делаются путем обработки данных. Это более сложный процесс, поскольку система обучается сама по себе, без какого-либо вмешательства. На практике неконтролируемые методы обучения могут использоваться для анализа поведения пользователей. Здесь используются неклассифицированные данные о различных человеческих качествах и взаимодействии с людьми. Затем эти данные используются для разделения действий каждого человека на различные группы на основе их моделей поведения.
Вызываем подкрепление
Еще один метод машинного обучения — это обучение с подкреплением (Reinforcement learning). По сути — это динамически модифицирующаяся система, в которой модель обучается на основе данных от своего окружения. При этом настройка модели происходит на основе наиболее подходящих результатов. Здесь программное обеспечение не нуждается во внешнем агенте, а учится на основе окружающих процессов в среде. Здесь в качестве примера можно привести автомобили с автономным управлением, система управления которых принимает решения на основе данных из окружения: информации о других машинах, пешеходах, знаках, разметки и т.д.
Алгоритмы ML
До этого мы говорили о данных и тех методах, которые используются для машинного обучения. И теперь самое время поговорить уже непосредственно об алгоритмах ML. Начнем с метода опорных векторов (SVM). Метод опорных векторов — это обучающие алгоритмы с контролем, особым свойством метода опорных векторов является непрерывное уменьшение эмпирической ошибки классификации и увеличение зазора, поэтому метод также известен как метод классификатора с максимальным зазором. После обучения SVM практически не требуют настройки. Они используются в высокопроизводительных системах из-за своей надежности. SVM также используются в регрессионном анализе, ранжировании и категоризации.
Байесовские сети (BN) — это вероятностные модели, которые в основном используются для прогнозирования и принятие решений. Это сети утверждений, которые используют принципы теории вероятностей наряду со статистикой. В BN используется направленный ациклический граф (DAG) для представления взаимосвязи переменных и любых других соответствующих зависимостей.
Изучение дерева решений — это метод машинного обучения с прогнозированием, который использует деревья решений.
Деревья решений — это простые реализации задач классификации, которые широко используются в различных исследовательских операциях. Решения принимаются на основе выходного значения, предсказанного условной переменной.
Случайные леса являются расширениями дерева принятия решений. Здесь для составления прогнозов используются несколько деревьев решений. Поскольку это группа, они более стабильны и надежны. Случайные леса могут использоваться для принятия нестандартных решений. Популярным вариантом использования случайных лесов является оценка качества текстовых документов.
Наши инструменты
В качестве средств разработки могут использоваться различные языки программирования и библиотеки. Мы будем использовать Python, так как на нем относительно просто писать код и он поддерживает широкий спектр инструментов и пакетов, предназначенных для работы с искусственным интеллектом.
Для удобства работы можно использовать интерактивные среды разработки на Python (IDE), такие как Spyder, Rodeo, Pycharm и Jupyter.
В целях разработки мы будем использовать IPython Jupyter Notebook из-за его удобной интерактивной среды. По сути, это программа-блокнот для записи, передачи и запуска кода. Она представляет собой веб-сервис, то есть доступна через интернет и позволяет передавать код другим разработчикам.
Для работы с Jupyter Notebook понадобится Python. В рамках данной статьи мы не будем рассматривать установку интерпретатора Python, так как он уже идет в составе большинства дистрибутивов Linux.
Jupyter Notebook можно установить с помощью pip, выполнив следующие команды:
pip install --upgrade pip, pip3 install jupiter
Если пользователь использует Python 2, pip3 необходимо заменить на pip с соответствующим индексом.
После установки вы можете просто ввести jupyter notebook, чтобы запустить его. В результате откроется приложение Jupiter.
Теперь поговорим о тех пакетах Python, которые можно использовать для работы с искусственным интеллектом.
Начнем с бесплатного пакета NumPy. Данный пакет содержит сложные функции для решения задач линейной алгебры и других численных расчетов. NumPy можно установить, выполнив следующее:
pip install numpy
Основным объектом NumPy является однородный многомерный массив. Это таблица элементов (обычно чисел), все они одного типа, проиндексированные набором неотрицательных целых чисел. В NumPy измерения называются осями.
В примере ниже с помощью функций NumPy мы узнаем количество строк и столбцов, размерность массива, типы используемых данных.
import numpy as np
a = np.arange(15).reshape(3, 5)
a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
a.shape
(3, 5)
a.ndim
2
a.dtype.name
'int64'
a.itemsize
8
a.size
15
type(a)
<class 'numpy.ndarray'>
b = np.array([6, 7, 8])
b
array([6, 7, 8])
type(b)
<class 'numpy.ndarray'>
Как видно, работать с функциями этого пакета достаточно просто и при необходимости можно легко получить нужные данные с помощью несложных запросов.
Поверх NumPy можно установить пакет SciPy, который содержит множество функций, таких как интеграция, линейная алгебра и функции обработки сигналов.
Хотя NumPy и SciPy обычно используются вместе, основным преимуществом последнего является наличие большого количества математических функций. Например, ниже представлено нахождение обратной матрицы (вспоминаем линейную алгебру в ВУЗе).
import numpy as np
from scipy import linalg
A = np.array([[1,2], [4,3]])
B = linalg.inv(A)
print(B)
Результат:
И еще один, достаточно широко распространенный пакет с открытым исходным кодом — Pandas. Этот пакет предоставляет различные удобные структуры для обработки и анализа данных. Они эффективны для анализа данных и используются в статистическом обучении.
В примере ниже мы создаем фрейм данных с помощью Pandas.
import pandas as pd
data = {
"calories": [420, 380, 390],
"duration": [50, 40, 45]
}
#load data into a DataFrame object:
df = pd.DataFrame(data)
print(df)
В результате получаем структуру данных из трех строк и двух столбцов.
Рассмотрим подробнее отличие NumPy от Pandas. NumPy работает с числовыми данными, то есть с массивами, тогда как Pandas позволяет работать с табличными данными разного типа. Pandas прожорливее, при обработке данных этот пакет потребляет больше аппаратных мощностей, в отличие от Numpy. При этом, последние обладают лучшей точностью на объеме данных менее 50 тысяч строк. Если же вы собираетесь обрабатывать более 500 тыс. строк, то здесь уже “панды” будут быстрее. Индексация массивов Numpy происходит очень быстро.
В целом, Pandas полезен для организации табличного представления данных, что упрощает очистку, анализ и манипулирование данными, в то время как NumPy полезен для эффективной математики необработанных чисел.
На самом деле пакетов для работы с ML в Python намного больше и здесь приведены только самые распространенные, которые потребуются нам в дальнейшем.
Настройка точности
В завершении поговорим о настройке точности работы и обнаружении ошибок в системах машинного обучения.
Считается, что системы машинного обучения обладают оптимальной производительностью, если обобщенная функция алгоритма дает низкую ошибку обобщения с высокой вероятностью. Обычно это называется теорией вероятной приближенной корректности (PAC).
Для вычисления ошибки обобщения, которая представляет собой точность классификации или ошибку для прогнозирования регрессионной модели мы используем различные показатели, представленные далее.
Начнем с среднеквадратичной ошибки. Представьте, что для задачи регрессии у нас есть линия наилучшего соответствия, и мы хотим измерить расстояние каждой точки от линии регрессии. Среднеквадратичная ошибка (MSE) — это статистический показатель, с помощью которого можно вычислить эти отклонения. Компьютерные ошибки MSE вычисляются путем нахождения среднего значения квадратов для каждого из таких отклонений. Ниже показана диаграмма для MSE:
Еще один важный параметр — это средняя абсолютная погрешность (MAE). Это еще один статистический метод, который помогает измерить расстояние (ошибку) между двумя непрерывными переменными. Непрерывную переменную можно определить, как переменную, которая может иметь бесконечное число изменяющихся значений.
Хотя MAE сложно вычислить, они считаются более эффективными, чем MSE, поскольку не зависят от квадратичной функции, которая оказывает большее влияние на ошибки. Ниже показан MAE в действии:
Еще одним критерием для вычисления производительности в задачах классификации является оценка точности, повторное использование и безошибочность модели. Точность определяется как количество истинных положительных результатов, присутствующих во всех извлеченных экземплярах:
Отзыв — это количество выявленных истинных положительных результатов из общего числа истинных положительных результатов, присутствующих во всех соответствующих документах:
Точность измеряет процентную близость измеренного значения к стандартному значению:
Ознакомившись с тем, какие есть параметры, давайте посмотрим, как можно улучшить точность модели. Модели с низкой степенью точности и большими ошибками обобщения нуждаются в доработке для достижения лучших результатов. Эффективность можно повысить, улучшив качество данных, переключившись на другой алгоритм или настроив текущую точность алгоритма с помощью изменения параметров. Выборка большего количества данных для обучения модели может привести к повышению производительности. Снижение точности также может быть связано с нехваткой чистых данных, поэтому данные необходимо очистить, повторная выборка и надлежащая нормализация.
Переключение алгоритмов машинного обучения
Точность работы модели часто бывает не на должном уровне, потому что мы неправильно выбрали алгоритм. В таких случаях выполнение базового тестирования с использованием различных алгоритмов помогает нам сделать правильный выбор. Методы базового тестирования включают, помимо прочего, k-кратные перекрестные проверки.
Также эффективность модели можно повысить, объединив работу нескольких алгоритмов. Комбинирование прогнозов и наборов данных может помочь в составлении правильных прогнозов.
Заключение
Статья получилась насыщенной различной технической информацией, хотя по факту мы лишь рассмотрели основные моменты, связанные с реализацией задач ML с помощью Python. Далее мы вернемся к рассмотрению проблем ИБ и методов их решения с помощью искусственного интеллекта.