- •Об авторе
- •Предисловие
- •Для кого эта книга
- •О чем эта книга
- •Что вам потребуется при чтении этой книги
- •Условные обозначения
- •От издательства
- •Глава 1. Обзор алгоритмов
- •Что такое алгоритм
- •Этапы алгоритма
- •Определение логики алгоритма
- •Псевдокод
- •Использование сниппетов
- •Создание плана выполнения
- •Введение в библиотеки Python
- •Библиотеки Python
- •Реализация Python с помощью Jupyter Notebook
- •Методы разработки алгоритмов
- •Параметры данных
- •Параметры вычислений
- •Анализ производительности
- •Анализ пространственной сложности
- •Анализ временной сложности
- •Оценка эффективности
- •Выбор алгоритма
- •«О-большое»
- •Проверка алгоритма
- •Точные, приближенные и рандомизированные алгоритмы
- •Объяснимость алгоритма
- •Резюме
- •Глава 2. Структуры данных, используемые в алгоритмах
- •Структуры данных в Python
- •Список
- •Кортеж
- •Словарь
- •Множество
- •DataFrame
- •Матрица
- •Абстрактные типы данных
- •Вектор
- •Стек
- •Очередь
- •Базовый принцип использования стеков и очередей
- •Дерево
- •Резюме
- •Глава 3. Алгоритмы сортировки и поиска
- •Алгоритмы сортировки
- •Обмен значений переменных в Python
- •Сортировка пузырьком
- •Сортировка вставками
- •Сортировка слиянием
- •Сортировка Шелла
- •Сортировка выбором
- •Алгоритмы поиска
- •Линейный поиск
- •Бинарный поиск
- •Интерполяционный поиск
- •Практическое применение
- •Резюме
- •Глава 4. Разработка алгоритмов
- •Знакомство с основными концепциями разработки алгоритма
- •Вопрос 1. Даст ли разработанный алгоритм ожидаемый результат?
- •Вопрос 2. Является ли данный алгоритм оптимальным способом получения результата?
- •Вопрос 3. Как алгоритм будет работать с большими наборами данных?
- •Понимание алгоритмических стратегий
- •Стратегия «разделяй и властвуй»
- •Стратегия динамического программирования
- •Жадные алгоритмы
- •Практическое применение — решение задачи коммивояжера
- •Использование стратегии полного перебора
- •Использование жадного алгоритма
- •Алгоритм PageRank
- •Постановка задачи
- •Реализация алгоритма PageRank
- •Знакомство с линейным программированием
- •Практическое применение — планирование производства с помощью линейного программирования
- •Резюме
- •Глава 5. Графовые алгоритмы
- •Представление графов
- •Типы графов
- •Особые типы ребер
- •Эгоцентрические сети
- •Анализ социальных сетей
- •Введение в теорию сетевого анализа
- •Кратчайший путь
- •Создание окрестностей
- •Показатели центральности
- •Вычисление показателей центральности с помощью Python
- •Понятие обхода графа
- •BFS — поиск в ширину
- •DFS — поиск в глубину
- •Практический пример — выявление мошенничества
- •Простой анализ мошенничества
- •Анализ мошенничества методом сторожевой башни
- •Резюме
- •Глава 6. Алгоритмы машинного обучения без учителя
- •Обучение без учителя
- •Обучение без учителя в жизненном цикле майнинга данных
- •Современные тенденции исследований в области обучения без учителя
- •Практические примеры
- •Алгоритмы кластеризации
- •Количественная оценка сходства
- •Иерархическая кластеризация
- •Оценка кластеров
- •Применение кластеризации
- •Снижение размерности
- •Метод главных компонент (PCA)
- •Ограничения PCA
- •Поиск ассоциативных правил
- •Примеры использования
- •Анализ рыночной корзины
- •Ассоциативные правила
- •Оценка качества правила
- •Алгоритмы анализа ассоциаций
- •Практический пример — объединение похожих твитов в кластеры
- •Тематическое моделирование
- •Кластеризация
- •Алгоритмы обнаружения выбросов (аномалий)
- •Использование кластеризации
- •Обнаружение аномалий на основе плотности
- •Метод опорных векторов
- •Резюме
- •Глава 7. Традиционные алгоритмы обучения с учителем
- •Машинное обучение с учителем
- •Терминология машинного обучения с учителем
- •Благоприятные условия
- •Различие между классификаторами и регрессорами
- •Алгоритмы классификации
- •Задача классификации
- •Оценка классификаторов
- •Этапы классификации
- •Алгоритм дерева решений
- •Ансамблевые методы
- •Логистическая регрессия
- •Метод опорных векторов (SVM)
- •Наивный байесовский алгоритм
- •Алгоритмы регрессии
- •Задача регрессии
- •Линейная регрессия
- •Алгоритм дерева регрессии
- •Алгоритм градиентного бустинга для регрессии
- •Среди алгоритмов регрессии победителем становится...
- •Практический пример — как предсказать погоду
- •Резюме
- •Глава 8. Алгоритмы нейронных сетей
- •Введение в ИНС
- •Эволюция ИНС
- •Обучение нейронной сети
- •Анатомия нейронной сети
- •Градиентный спуск
- •Функции активации
- •Инструменты и фреймворки
- •Keras
- •Знакомство с TensorFlow
- •Типы нейронных сетей
- •Перенос обучения
- •Практический пример — использование глубокого обучения для выявления мошенничества
- •Методология
- •Резюме
- •Глава 9. Алгоритмы обработки естественного языка
- •Знакомство с NLP
- •Терминология NLP
- •Библиотека NLTK
- •Мешок слов (BoW)
- •Эмбеддинги слов
- •Окружение слова
- •Свойства эмбеддингов слов
- •Рекуррентные нейросети в NLP
- •Использование NLP для анализа эмоциональной окраски текста
- •Практический пример — анализ тональности в отзывах на фильмы
- •Резюме
- •Глава 10. Рекомендательные системы
- •Введение в рекомендательные системы
- •Типы рекомендательных систем
- •Рекомендательные системы на основе контента
- •Рекомендательные системы на основе коллаборативной фильтрации
- •Гибридные рекомендательные системы
- •Ограничения рекомендательных систем
- •Проблема холодного старта
- •Требования к метаданным
- •Проблема разреженности данных
- •Предвзятость из-за социального влияния
- •Ограниченные данные
- •Области практического применения
- •Практический пример — создание рекомендательной системы
- •Резюме
- •Глава 11. Алгоритмы обработки данных
- •Знакомство с алгоритмами обработки данных
- •Классификация данных
- •Алгоритмы хранения данных
- •Стратегии хранения данных
- •Алгоритмы потоковой передачи данных
- •Применение потоковой передачи
- •Алгоритмы сжатия данных
- •Алгоритмы сжатия без потерь
- •Практический пример — анализ тональности твитов в режиме реального времени
- •Резюме
- •Глава 12. Криптография
- •Введение в криптографию
- •Понимание важности самого слабого звена
- •Основная терминология
- •Требования безопасности
- •Базовое устройство шифров
- •Типы криптографических методов
- •Криптографические хеш-функции
- •Симметричное шифрование
- •Асимметричное шифрование
- •Практический пример — проблемы безопасности при развертывании модели МО
- •Атака посредника (MITM)
- •Избежание маскарадинга
- •Шифрование данных и моделей
- •Резюме
- •Глава 13. Крупномасштабные алгоритмы
- •Введение в крупномасштабные алгоритмы
- •Определение эффективного крупномасштабного алгоритма
- •Терминология
- •Разработка параллельных алгоритмов
- •Закон Амдала
- •Гранулярность задачи
- •Балансировка нагрузки
- •Проблема расположения
- •Запуск параллельной обработки на Python
- •Разработка стратегии мультипроцессорной обработки
- •Введение в CUDA
- •Кластерные вычисления
- •Гибридная стратегия
- •Резюме
- •Глава 14. Практические рекомендации
- •Введение в практические рекомендации
- •Печальная история ИИ-бота в Твиттере
- •Объяснимость алгоритма
- •Алгоритмы машинного обучения и объяснимость
- •Этика и алгоритмы
- •Проблемы обучающихся алгоритмов
- •Понимание этических аспектов
- •Снижение предвзятости в моделях
- •Решение NP-трудных задач
- •Упрощение задачи
- •Адаптация известного решения аналогичной задачи
- •Вероятностный метод
- •Когда следует использовать алгоритмы
- •Практический пример — события типа «черный лебедь»
- •Резюме
238 |
Глава 8. Алгоритмы нейронных сетей |
Обратите внимание, что x — это nx-мерный вектор, где nx — количество входных переменных.
Эта нейронная сеть состоит из четырех слоев. Слои между входом и выходом называются скрытыми. Количество нейронов в первом скрытом слое обознача ется . Связи между различными узлами умножаются на параметры, называ емые весами. Обучение нейронной сети — это поиск правильных значений для весов.
Давайте узнаем, как обучить нейронную сеть.
ОБУЧЕНИЕ НЕЙРОННОЙ СЕТИ
Процесс построения нейронной сети с использованием заданного набора данных называется обучением нейронной сети. Рассмотрим анатомию типичной ней ронной сети. Когда мы говорим об обучении нейронной сети, мы говорим о вы числении наилучших значений для весов. Обучение проводится итеративно с использованием набора примеров в виде обучающих данных. Примеры в обу чающих данных содержат ожидаемые значения выходных данных для различных комбинаций входных значений. Процесс обучения нейронных сетей отличает ся от способа обучения традиционных моделей (которые обсуждались в главе 7).
Анатомия нейронной сети
Давайте разберем, из чего состоит нейронная сеть.
zz Слои. Основные строительные блоки нейронной сети. Каждый слой пред ставляет собой модуль обработки данных, который действует как фильтр. Он принимает один или несколько входных сигналов, обрабатывает их определенным образом, а затем выдает один или несколько выходных сиг налов. Каждый раз, когда данные проходят через слой, они проходят этап обработки и демонстрируют закономерности, имеющие отношение к бизнесвопросу‚ на который мы пытаемся ответить.
zz Функция потерь. Обеспечивает сигнал обратной связи, используемый на различных итерациях процесса обучения. Функция потерь высчитывает от клонение для одного примера.
zz Функция стоимости. Это функция потерь в полном наборе примеров.
zz Оптимизатор. Определяет, как будет интерпретироваться сигнал обратной связи, предоставляемый функцией потерь.
Обучение нейронной сети |
239 |
zz Входные данные. Данные, которые используются для обучения нейронной сети. Они определяют целевую переменную.
zz Веса. Рассчитываются путем обучения сети. Веса приблизительно соответ ствуют важности каждого из входных сигналов. Например, если конкретный входной сигнал более важен, чем другие, после обучения ему присваивается большее значение веса, действующее как множитель. Даже слабый сигнал при этом будет усилен благодаря большому значению веса. Таким образом, вес изменяет сигналы в соответствии с их важностью.
zzФункция активации. Значения умножаются на различные веса, а затем агрегируются. То, как именно они будут агрегированы и как будет интер претироваться их значение, определяется типом выбранной функции ак тивации.
Рассмотрим, как происходит процесс обучения нейронных сетей.
При обучении нейронных сетей мы перебираем примеры один за другим. Для каждого примера с помощью еще не обученной модели генерируются выход ные данные. Далее вычисляется разница между ожидаемым и предсказанным результатами. Для каждого отдельного примера эта разница называется потерей. В совокупности потери по всему обучающему набору данных называ ются стоимостью. Продолжая тренировать модель, мы стремимся найти те значения весов, которые приведут к наименьшим потерям. На протяжении всего обучения значения весов продолжают корректироваться, пока не обна ружится набор значений, приводящий к минимально возможной общей стоимости. Как только мы достигнем минимальной стоимости, модель счи тается обученной.
Градиентный спуск
Цель обучения модели нейронной сети — найти верные значения весов. Обуче ние стартует со случайными или стандартными значениями весов. Затем ите ративно используется алгоритм оптимизатора, например градиентный спуск, чтобы изменить веса в целях улучшения прогнозов.
Отправной точкой алгоритма градиентного спуска являются случайные значе ния весов, которые нужно оптимизировать по мере выполнения алгоритма. В каждой из последующих итераций алгоритм продолжает работу, изменяя значения весов таким образом, чтобы стоимость была минимизирована.
Следующая схема объясняет логику алгоритма градиентного спуска (рис. 8.4).
240 Глава 8. Алгоритмы нейронных сетей
|
Вектор признаков Х |
|
Веса |
Слой (преобразование |
|
данных) |
|
|
|
|
|
|
Предсказанное |
Фактическое |
|
целевое значение, Y’ |
целевое значение |
|
|
|
Градиент |
|
Функция |
|
стоимости |
Стоимость
Рис. 8.4
На схеме входными данными является вектор признаков X. Фактическое значение целевой переменной равно Y, а ее предсказанное — Y'. Мы опреде ляем отклонение фактического значения от предсказанных значений, обнов ляем веса и повторяем шаги до тех пор, пока стоимость не будет сведена к минимуму.
Изменение веса на каждой итерации алгоритма зависит от двух факторов.
zz Направление. В каком направлении необходимо двигаться, чтобы получить минимум в функции потерь.
zzСкорость обучения. Насколько значительными должны быть изменения в выбранном нами направлении.
Простой итерационный процесс показан на следующей схеме (рис. 8.5).
На схеме показано, как градиентный спуск пытается найти минимальное зна чение функции потерь, изменяя веса. Скорость обучения и выбранное направ ление определяют следующую точку на графике, которую нужно проверить.
Обучение нейронной сети |
241 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 8.5
Важно выбрать правильное значение для параметра скорости обу чения. Если значение слишком низкое, то решение задачи займет много времени; если оно слишком высокое — задача не сойдется. На предыдущей схеме точка, представляющая наше текущее решение, будет продолжать колебаться между двумя противолежащими частями кривой на графике.
Теперь минимизируем градиент. Возьмем только две переменные, x и y. Гради ент x и y рассчитывается следующим образом:
Чтобы минимизировать градиент, можно использовать следующий подход:
while(gradient!=0):
if (gradient < 0); move right if (gradient > 0); move left
Этот алгоритм также может быть использован для поиска оптимальных или близких к оптимальным значений весов для нейронной сети.
Обратите внимание, что расчет градиентного спуска выполняется в обратном направлении по всей сети. Сначала мы вычисляем градиент последнего слоя, затем предпоследнего, затем всех предыдущих, пока не достигнем первого. Это
метод обратного распространения ошибки (backpropagation), предложенный Хинтоном, Уильямсом и Румельхартом в 1985 году.
Далее рассмотрим функции активации.