Перейти к содержимому

Как написать искусственный интеллект на python

  • автор:

Как написать простую нейросеть на Python

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

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

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

Какие задачи решает нейросеть

Основные концепции нейросетей позволяют использовать их во многих отраслях современной жизни, помогая решать самые разнообразные задачи:

  1. Классификация и распознавание образов: распознавание лиц, объектов, символов, образов и других графических данных. Например, системы автоматического распознавания рукописного текста, системы безопасности с распознаванием лиц, программы с автоматическим распознаванием изображений.
  2. С помощью нейросети происходит прогнозирование временных рядов, цен на акции, погоды, спроса на товары и другие величины. Например, финансовый анализ, прогнозирование спроса и анализ продаж за прошедший период.
  3. Обработка естественного языка. Эту функцию нейросети используют для анализа тональности, определения языка, машинного перевода, генерации контента и т.д. Например, их применяют для фильтрации сообщений электронной почты, в чат-ботах и для выполнения автоматического перевода.
  4. Генерация искусственного контента: изображений, музыки, текстов. Например, музыкальные искусственные инструменты и синтез фотореалистичных изображений.
  5. Управление и адаптивное управление. Нейросеть позволяет управлять процессами, оперативным прогнозированием, энергией. Например, системы автоматического управления трафиком, умный дом и взаимодействие с роботами.
  6. Распознавание голоса. Эта способность используется для распознавания голоса при управлении устройствами, для преобразования речи в текст, для систем синтеза речи.

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

Как устроены нейросети

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

Рассмотрим, из каких компонентов состоят нейросети:

Нейроны

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

Веса

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

Слои

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

Активационная функция

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

Функция потерь

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

Оптимизатор

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

Обратное распространение ошибки

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

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

Применение нейросетей в реальной жизни

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

  1. Медицина. С помощью нейросетей производится диагностика и прогнозирование заболеваний. Они помогают анализировать медицинские изображения (например, рентгены или снимки МРТ), чтобы диагностировать наличие опухолей или обнаружить другие патологии. В медицинских исследованиях нейронные сети используют для выявления новых медицинских тенденций и разработки новых лекарств.
  2. Транспорт. Искусственный интеллект используют в системах автопилота для управления автомобилем. Его применяют для повышения безопасности на дорогах, например, для распознавания знаков, пешеходов и прогнозирования поведения другого автотранспорта.
  3. Финансы. Нейронные сети применяются для прогнозирования цен на финансовых рынках, анализа рисков и определения оптимальных стратегий инвестиций. Они внедряются для обнаружения мошенничества и анализа кредитного скоринга.
  4. Реклама и маркетинг. Нейросети используют для персонализации рекламы и формирования рекомендаций на основе интересов и предпочтений пользователей. Они анализируют данные о поведении клиентов и предлагают им подходящие товары или услуги.
  5. Интернет-поиск. Нейронные сети применяются для улучшения поисковых систем. Они анализируют контекст запроса посетителя сайта и предлагают более точные и релевантные результаты поиска. Сети учитывают привязанную к запросу локацию пользователя для предоставления результатов местных сайтов и веб-страниц.
  6. Робототехника. Для управления и обучения роботов прибегают к помощи искусственного разума. Он позволяет роботам обучаться выполнению конкретных действий и адаптироваться к изменяющимся условиям. Например, роботы-манипуляторы могут использовать нейронные сети для обучения точным движениям и схватыванию предметов.
  7. Компьютерные игры тоже активно используют нейросети для повышения привлекательности своего продукта. С помощью искусственного интеллекта создаются продвинутые герои с улучшенным поведением и реалистичными действиями.

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

Перейдем к инструкции как создать и обучить нейронные сети на Python .

Для создания собственной нейросети используйте надежное оборудование, с высоким уровнем аптайма и круглосуточной службой поддержки – заказывайте услугу Аренда VDS/VPS Linux.

Как написать свою простую нейронную сеть на Python

Все описанные действия по написанию нейросети выполняются в терминале.

Для создания простой нейросети на Python, вам понадобится библиотека TensorFlow.

  1. Установите TensorFlow с помощью команды:

pip install tensorflow

  1. Импортируйте необходимые модули с помощью команд:

import tensorflow as tf

from tensorflow import keras

  1. Загрузите данные, на основе которых вы хотите обучать нейронную сеть. Например, если вы планируете обучить нейронную сеть распознавать изображения цифр, используйте набор данных MNIST:

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

  1. Для подготовки данных используйте команду:

x_train = x_train / 255.0 # нормализация данных

x_test = x_test / 255.0

y_train = keras.utils.to_categorical(y_train) # преобразование меток в категориальное представление

  1. Создайте модель нейронной сети:

keras.layers.Flatten(input_shape=(28, 28)), # преобразование двумерного изображения в одномерный вектор

keras.layers.Dense(128, activation=’relu’), # плотный слой с 128 нейронами и функцией активации ReLU

keras.layers.Dense(10, activation=’softmax’) # плотный слой с 10 нейронами и функцией активации softmax (для классификации)

  1. Скомпилируйте модель, указав функцию потерь и оптимизатор:

model.compile(optimizer=’adam’, loss=’categorical_crossentropy’, metrics=[‘accuracy’])

  1. Обучите модель на тренировочных данных:

model.fit(x_train, y_train, epochs=10, batch_size=32)

  1. Оцените модель на тестовых данных:

test_loss, test_acc = model.evaluate(x_test, y_test)

print(‘Test accuracy:’, test_acc)

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

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

Обязательный этап – оценка модели, проводите ее на отдельном наборе данных. Используйте такие метрики, как точность, полнота, F-мера и матрица ошибок, чтобы определить, насколько хорошо ваша модель работает.

Постоянное обучение и практика помогут углубить ваши знания и навыки в области разработки нейросетей.

Искусственный интеллект на Python и Tensorflow

Искусственный интеллект на Python и Tensorflow

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

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

Что будет в нашей программе?

Наш искусственный интеллект не будет распознавать все объекты, по типу: машин, других животных, людей и тому прочее. Не будет он это делать по одной причине. Мы в качестве датасета или же, другими словами, набора данных для тренировки – будем использовать датасет от компании Microsoft. В датасете у них собрано более 25 000 фотографий котов и собачек, что даст нам возможность натренировать правильные весы для распознавания наших собственных фото.

Мы не будем сами искать варианты для обучения нейронной сети и на это есть два фактора:

  1. В этом нет смысла, так как для подобных задач, зачастую, уже есть различные датасеты с подготовленными данными, которые можно использовать.
  2. У нас уйдет слишком много времени и сил на тренировку своей нейронной сети. Только представьте, нам потребуется найти и произвести обучение на тысячах фотографиях. Это не только очень сложно, но и дорого.

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

Какие библиотеки нам потребуются?

В прошлой статье мы использовали лишь одну библиотеку – numpy . Без этой библиотеки нам не обойтись и в этот раз.

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

По причине того, что нейронные сети – это математика, массивы и наборы данных, то без numpy – не обойтись.

Также мы будем использовать библиотеку Tensorflow. Она создана компанией Google и служит для решения задач построения и тренировки нейронной сети. За счет неё процесс обучение нейронки немного проще, нежели при написании с использованием только numpy.

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

Среда разработки

В качестве среды разработки мы будем использовать специальный сервис от Google — Colab. Colab позволяет любому писать и выполнять произвольный код Python через браузер и особенно хорошо подходит для машинного обучения, анализа данных и обучения.

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

Такой принцип существенно экономит время и по этой причине мы и будем использовать сервис Google Colab.

Создание проекта

Полная разработка проекта показывается в видео. Вы можете просмотреть его ниже:

Полезные ссылки:

  • Сервис Google Colab ;
  • Распознавание объектов на видео .

Код для реализации проекта из видео:

# Импорт библиотек и классов import numpy as np import tensorflow as tf import tensorflow_datasets as tfds from tensorflow.keras.preprocessing.image import load_img, img_to_array from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout import matplotlib.pyplot as plt from google.colab import files # Подгрузка датасета от Microsoft train, _ = tfds.load('cats_vs_dogs', split=['train[:100%]'], with_info=True, as_supervised=True) # Функция для изменения размеров изображений SIZE = (224, 224) def resize_image(img, label): img = tf.cast(img, tf.float32) img = tf.image.resize(img, SIZE) img /= 255.0 return img, label # Уменьшаем размеры всех изображений, полученных из датасета train_resized = train[0].map(resize_image) train_batches = train_resized.shuffle(1000).batch(16) # Создание основного слоя для создания модели base_layers = tf.keras.applications.MobileNetV2(input_shape=(SIZE[0], SIZE[1], 3), include_top=False) # Создание модели нейронной сети model = tf.keras.Sequential([ base_layers, GlobalAveragePooling2D(), Dropout(0.2), Dense(1) ]) model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy']) # Обучение нейронной сети (наши картинки, одна итерация обучения) model.fit(train_batches, epochs=1) # Функция для подгрузки изображений files.upload() # Сюда укажите названия подгруженных изображений images = [] # Перебираем все изображения и даем нейронке шанс определить что находиться на фото for i in images: img = load_img(i) img_array = img_to_array(img) img_resized, _ = resize_image(img_array, _) img_expended = np.expand_dims(img_resized, axis=0) prediction = model.predict(img_expended) plt.figure() plt.imshow(img) label = 'Собачка' if prediction > 0 else 'Кошка' plt.title('<>'.format(label))

Изучение программирования

А вы хотите стать программистом и начать разрабатывать самостоятельно ИИ или хотя бы использовать уже готовые для своих собственных проектов? Предлагаем нашу программу обучения по языку Python . В ходе программы вы научитесь работать с языком, изучите построение мобильных проектов, научитесь создавать полноценные веб сайты на основе фреймворка Джанго, а также в курсе будет модуль по изучению нескольких готовых библиотек для искусственного интеллекта.

Больше интересных новостей

Email-рассылка: ТОП-7 сервисов

Email-рассылка: ТОП-7 сервисов

Как быстро обучиться программированию?

Как быстро обучиться программированию?

9 самых популярных и высокооплачиваемых языков программирования

9 самых популярных и высокооплачиваемых языков программирования

Почему сейчас не стоит покупать Мак?

Почему сейчас не стоит покупать Мак?

Комментарии (1)

DWilight 28 июля 2023 в 11:27

Искусственный интеллект на Python для детей

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

Сегодня мы подробнее поговорим об искусственном интеллекте, в нашей статье мы расскажем:

  • как сделать свою нейросеть на Python с библиотеками NumPy, Matplotlib, Keras (если вам нужен код нейросети на Пайтон переходите сразу сюда);
  • как с помощью конструкции model.add(Dense()) установить слои нейронов;
  • о личных помощниках и системах рекомендаций — реализация технологий искусственного интеллекта сегодня;
  • почему Python лучше других языков для машинного обучения и нейросетей. Код ИИ на нем на порядок короче и понятнее, чем в Java и других языках. На курсах программирования популярен формат «Пайтон для детей», настолько он прост и понятен. Это еще одна причина его популярности у разработчиков ИИ.

Вы знали, что разработчики нейросети LaMDA в 2022 году заявили о появлении у их детища сознания? А ChatGPT стал самым быстрорастущим сервисом в истории. К слову, сам ChatGPT является примером того, как создать нейросеть на Python, потому что он написан именно на этом языке программирования.

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

Специалисты, занимающиеся технологическим прогнозированием, называют ИИ (artificial intellect) одной из четырех технологий, которые в ближайшее время приведут к формированию «нового экономического уклада» и перевернут нашу жизнь сильнее, чем она изменилась с начала 50-х годов XX века, при первой научно-технической революции.

(Еще одной сферой практического применения ИИ являются игры, так как в «ботов» необходимо закладывать самостоятельные действия. Больше о создании игр на Roblox можно узнать здесь, — прим. ред.)

ИскИны и Python

В кибер-панковской фантастике ИскИнами называли роботов с искусственным разумом. Учитывая тенденцию, что-то подобное скоро появится. Если это так, то на какой технологии могут создать ИскИна? Скорее всего, это будет Python.

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

Две эти IT-дисциплины сегодня реализуют концепцию ИИ. Задачи в этих сферах, которые на Java или других языках могут потребовать сотни строк кода, на Python решаются несколькими командами. Это происходит за счет отличного набора библиотек к Python: Keras, Scikit-learn, TensorFlow, NumPy, Pandas. Изучение языка Python не представляет никакой сложности. Дочитайте статью до конца и вы создадите свой первый ИИ, точнее, нейросеть, которая будет возводить в степень любое заданное число.

Создаем ИИ: как написать нейросеть на Пайтон?

  • Настроить среду разработки для обучения нейросети Python несложно. Дистрибутив языка может работать даже из командной строки Windows. Так же просто его поставить на Linux. Вообще, это одно из преимуществ, благодаря которым язык стал так востребован в нейросетях. Программу можно переносить из одной операционной системы на другую, и она почти всегда будет работать.

У других языков наблюдаются большие проблемы. Например, на PHP при переносе кода на Linux из Windows начинается кошмар с путями до файлов.

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

Нейросеть создается из множества сущностей как нейроны, эти конструкции не запрограммированы на узкую задачу, а принимают любую информацию, передают дальше, изучают и могут по мере прохождения генерировать реакцию на нее «на лету», в зависимости от анализа на текущий момент. Обсчитывает искусственные компьютерные «нейроны» компьютер, по приказу из Python. Нейросеть ниже принимает на вход картинку, а на выходе дает число, то есть предположение о том, нарисована ли на картинке кошка или это собака. Если нейросеть ошибается, то накапливает опыт. В следующий раз она с меньшей вероятностью получит ошибку.

Также о том, как создать нейросеть на Python можно узнать из нашего видео:

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

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

Но в том-то и дело, что нейросети придется действовать самостоятельно и напрямую взять и возвести число в степень мы ей тоже не скажем, хотя в Python имеется такой функционал. Предположим, у нас есть выражение 5*5 = 25. Нейросеть получит 5 и затем будет пропускать ее через слои нейронов. Станет умножать числа и свои результаты на какие-то веса, применять функции, пока не приблизится к правильному результату, не поймет, как мы получили этот результат.

Готовить наше «восстание машин» будем на браузерной платформе Google Collab. Ее плюс в том, что все библиотеки Python там уже добавлены. Вам нужно только прописать их подключение, и можно обращаться к фреймворкам, программируя прямо в браузере. Еще один довод «за» — возможность запускать код построчно, то есть передавать интерпретатору не весь скрипт, а только ту его часть, на результатах которой вы хотите сосредоточиться. Подключаем библиотеки оператором Import:

  • После подключения мы видим, что для создания ИИ будет использоваться библиотека Python NumPy и компоненты других библиотек. Ниже подключения библиотек мы использовали метод NumPy linspace для генерации набора чисел от -5 до 5 в 1000 раз. С помощью этой заготовки мы будем проводить обучение нейросети Python. Последняя строчка кода в этом сегменте просто дает нам результат возведения числа в квадратную степень, чтобы этот результат мы передали нейросети, и она знала, к чему должна стремиться.
  • Теперь возьмемся за конструирования самой нейросети:

За это у нас отвечают методы model.add и функция Dense. Ее параметры, которые мы здесь прописали надо понимать так: слой с 10 нейронами, в который на вход передается 1 число и второй слой — 1 нейрон, получающий 10 чисел. Зададим параметры того, как нейросеть будет обучаться.

В параметре loss метода compile можно определить метод расчета ошибок, от этого зависят результаты измерений. Для учебной нейросети мы выбрали mse — средние квадратичные ошибки. Подробнее об этом можно посмотреть в документации к библиотеке. Также необходимо задать «оптимизатор». Это простая нейросеть на Python, поэтому мы по максимуму используем потенциал готовых функций и методов. Есть несколько алгоритмов взаимодействия нейронов сети, их можно выбрать именно тут.

Мы избрали для этой задачи Adam. За другими вариантами также отсылаем в мануалы, на этот раз библиотеки Keras, к которой относится этот метод. Сложно? Зато мы уже почти знаем, как сделать нейросеть на Пайтоне.

  • Ну а теперь давайте запустим обучение с использованием входных данных x и y. Нейросеть обучилась быстро, так как у нас всего два слоя нейронов, но после вывода на экран результата, мы видим, что он оказался не очень хорошим. Даже в нашей простой нейросети «для школьников» результат не гарантирован. Придется приложить усилия!

Python AI: как построить нейронную сеть и делать прогнозы

Проще говоря, цель использования ИИ — заставить компьютеры думать так же, как люди. Это может показаться чем-то новым, но эта область родилась в 1950-х годах.

Представьте, что вам нужно написать программу на Python, которая использует ИИ для решения задачи судоку . Способ добиться этого — написать условные операторы и проверить ограничения, чтобы увидеть, можно ли разместить число в каждой позиции. Ну, этот Python-скрипт уже является приложением ИИ, потому что вы запрограммировали компьютер для решения проблемы!

Машинное обучение (ML) и глубокое обучение (DL) также являются подходами к решению проблем. Разница между этими методами и скриптом Python заключается в том, что ML и DL используют обучающие данные вместо жестко запрограммированных правил, но все они могут использоваться для решения задач с использованием ИИ. В следующих разделах вы узнаете больше о том, что отличает эти два метода.

Машинное обучение

Машинное обучение — это метод, при котором вы обучаете систему решать проблему вместо того, чтобы явно программировать правила. Возвращаясь к примеру с судоку в предыдущем разделе, чтобы решить проблему с помощью машинного обучения, вы должны собрать данные из решенных игр-судоку и обучить статистическую модель . Статистические модели — это математически формализованные способы аппроксимации поведения явления.

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

Рабочий процесс для обучения модели машинного обучения

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

Примечание. scikit-learn — это популярная библиотека машинного обучения Python, которая предоставляет множество алгоритмов обучения с учителем и без учителя. Чтобы узнать больше об этом, ознакомьтесь с Разделение набора данных с помощью train_test_split() от scikit-learn .

Цель задач контролируемого обучения — делать прогнозы для новых, невидимых данных. Для этого вы предполагаете, что эти невидимые данные следуют распределению вероятностей, аналогичному распределению обучающего набора данных. Если в будущем это распределение изменится, вам нужно снова обучить свою модель, используя новый набор обучающих данных.

Разработка функций

Проблемы прогнозирования усложняются, когда вы используете в качестве входных данных различные типы данных. Проблема судоку относительно проста, потому что вы имеете дело непосредственно с числами. Что, если вы хотите научить модель предсказывать настроение в предложении? Или что, если у вас есть изображение, и вы хотите знать, изображен ли на нем кот?

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

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

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

Создание функций с использованием модели мешка слов

Во-первых, флективная форма каждого слова сводится к его лемме. Затем подсчитывается количество вхождений этого слова. Результатом является массив, содержащий количество вхождений каждого слова в тексте.

Глубокое обучение

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

Отсутствие необходимости иметь дело с разработкой признаков — это хорошо, потому что процесс усложняется по мере того, как наборы данных становятся более сложными. Например, как бы вы извлекли данные, чтобы предсказать настроение человека по изображению его лица? С нейронными сетями вам не нужно об этом беспокоиться, потому что сети могут сами изучать функции. В следующих разделах вы углубитесь в нейронные сети, чтобы лучше понять, как они работают.

Нейронные сети: основные понятия

Нейронная сеть — это система, которая учится делать прогнозы, выполняя следующие шаги:

  1. Получение входных данных
  2. Делаем прогноз
  3. Сравнение прогноза с желаемым результатом
  4. Настройка его внутреннего состояния для правильного прогнозирования в следующий раз

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

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

На изображении ниже вы можете увидеть пример сетевой архитектуры с двумя уровнями:

Нейронная сеть с двумя слоями

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

Процесс обучения нейронной сети

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

Вот шаги для попытки попасть в центр мишени для дартс:

Шаги, чтобы попасть в центр дартс

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

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

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

Векторы и веса

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

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

Модель линейной регрессии

Регрессия используется, когда вам нужно оценить взаимосвязь между зависимой переменной и двумя или более независимыми переменными . Линейная регрессия — это метод, применяемый, когда вы аппроксимируете связь между переменными как линейную. Метод восходит к девятнадцатому веку и является самым популярным методом регрессии.

Примечание. Линейная связь — это связь, в которой существует прямая связь между независимой переменной и зависимой переменной.

Смоделировав взаимосвязь между переменными как линейную, вы можете выразить зависимую переменную как взвешенную сумму независимых переменных. Таким образом, каждая независимая переменная будет умножена на вектор с именем weight . Помимо весов и независимых переменных, вы также добавляете еще один вектор: смещение . Он устанавливает результат, когда все остальные независимые переменные равны нулю.

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

price = (weights_area * area) + (weights_age * age) + bias

В приведенном выше примере есть два веса: weights_area и weights_age . Процесс обучения состоит из корректировки весов и смещения, чтобы модель могла предсказать правильное значение цены. Для этого вам нужно вычислить ошибку прогноза и соответствующим образом обновить веса.

Это основы того, как работает механизм нейронной сети. Теперь пришло время посмотреть, как применять эти концепции с помощью Python.

Python AI: начинаем строить свою первую нейронную сеть

Первым шагом в построении нейронной сети является создание выходных данных из входных данных. Вы сделаете это, создав взвешенную сумму переменных. Первое, что вам нужно сделать, это представить входные данные с помощью Python и NumPy .

Обертывание входных данных нейронной сети с помощью NumPy

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

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

Три вектора в декартовой координатной плоскости

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

Во-первых, вы определяете три вектора, один для ввода и два других для весов. Затем вы вычисляете, насколько похожи input_vector и weights_1 . Для этого вы примените скалярное произведение . Поскольку все векторы являются двумерными векторами, вот шаги для этого:

  1. Умножьте первый индекс input_vector на первый индекс weights_1 .
  2. Умножьте второй индекс input_vector на второй индекс weights_2 .
  3. Суммируйте результаты обоих умножений.

Вы можете использовать консоль IPython или блокнот Jupyter , чтобы следовать инструкциям. Хорошей практикой является создание новой виртуальной среды каждый раз, когда вы начинаете новый проект Python, поэтому вы должны сделать это в первую очередь. venv поставляется с Python версии 3.3 и выше и удобен для создания виртуальной среды.

Продолжение статьи будет позже.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *