Что такое глубокое обучение? Учебник для начинающих

Что такое глубокое обучение Программирование и разработка

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

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

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

Что такое глубокое обучение?

Глубокое обучение (иногда называемое глубоким структурированным обучением) — это тип алгоритма машинного обучения, основанный на технологии искусственной нейронной сети (ИНС).

Глубокое обучение и другие методы ИНС позволяют компьютерам учиться на примерах аналогично человеческому мозгу. Это достигается путем прохождения входных данных через несколько уровней обработки нейронной сети для преобразования данных и сужения возможных прогнозов на каждом этапе на этом пути.

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

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

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

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

Система распознавания знаков DL для знаков остановкиСистема распознавания знаков DL для знаков остановки

Как работает глубокое обучение?

Глубокое обучение учится распознавать особенности всех членов типа посредством анализа структурированных обучающих данных.

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

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

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

Как модели глубокого обучения учатся классифицировать изображения

Как модели глубокого обучения учатся классифицировать изображения

Например, инженер может передать 10 000 фотографий, из которых 5 000 помечены, elephantа еще 5 000 — помечены not elephant. Модель просматривает все 1000 изображений и выделяет черты, характерные для изображений слонов, такие как «четвероногий» или «хобот».

Он узнает, что у многих существ 4 ноги, поэтому, если у существа четыре ноги, это может быть слон. И наоборот, только у слонов есть хобот. Модель может затем предсказать, что если на фото животное имеет ствол, это очень вероятно elephant.

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

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

Исчерпывающие данные по обучению

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

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

Ключ к глубокому обучению — это множество скрытых уровней обработки входных данных.

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

Читайте также:  Принципы объектно-ориентированного программирования на C#

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

Традиционные нейронные сети до глубокого обучения передавали данные только через 2-3 скрытых слоя до завершения. Глубокое обучение увеличивает это количество до 150 скрытых слоев, чтобы повысить точность результатов.

Визуализация однослойной нейронной сети

Визуализация однослойной нейронной сети

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

Глубокое обучение против машинного обучения

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

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

инженер, обладающий знаниями как модели

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

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

DL также увеличивает точность, поскольку алгоритм может обнаруживать все особенности, а не только те, которые распознаются человеческим глазом.

DL также увеличивает точность

Процесс глубокого обучения

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

Глубокое обучение — это не поверхностное обучение, и его неточность продолжает увеличиваться даже при очень больших пулах обучающих данных.

Визуализация глубокого обучения и неглубокого обучения

Визуализация глубокого обучения и неглубокого обучения

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

Если у вас нет ни того, ни другого, другие алгоритмы машинного обучения будут лучшим выбором.

Инструменты глубокого обучения

Языки глубокого обучения

  • Python: Python — наиболее часто используемый язык для всех типов машинного обучения, а не только для глубокого обучения. Более 55% специалистов по обработке данных используют Python в качестве основного языка. Это связано с множеством библиотек Python, ориентированных на машинное обучение, и его простым в освоении синтаксисом.
  • Java: Java — второй по популярности язык для машинного обучения, в первую очередь для протоколов безопасности на основе машинного обучения, таких как обнаружение мошенничества на основе классификации. С каждой версией Java получает больше инструментов машинного обучения, таких как новые строковые и файловые методы, добавленные в Java 11.
  • R: R — это графический язык, используемый для статистического анализа и визуализации в машинном обучении. R — отличный язык для графического представления и изучения результатов алгоритмов машинного обучения. Он особенно популярен для презентаций медицинских технологий и биологических исследований.

Библиотеки глубокого обучения

  • TensorFlow: TensorFlow — это библиотека с открытым исходным кодом, предназначенная для обучения глубоких нейронных сетей. Он предоставляет варианты развертывания моделей машинного обучения на локальном устройстве, в локальной базе данных или через облако. TensorFlow необходим современному специалисту по обработке данных Python, поскольку он позволяет инструментам создавать и обучать модели машинного обучения с использованием новейших методов.
  • Scikit-learn: Sklearn добавляет поддержку множества контролируемых или неконтролируемых алгоритмов обучения, включая глубокое обучение. Это самая популярная библиотека машинного обучения для Python, которая позволяет различным другим библиотекам, таким как SciPy и Pandas, хорошо работать вместе.
  • Keras: Keras — это ML API, который предоставляет интерфейс Python для искусственных нейронных сетей (ИНС) и действует как интерфейс для TensorFlow. Он позволяет быстро экспериментировать с глубокими нейронными сетями и предоставляет часто используемые строительные блоки нейронных сетей для ускорения разработки.
  • NumPy: NumPy добавляет поддержку многомерных массивов и матриц, а также сложных статистических операций. Это важно для множества моделей машинного обучения.
  • Theano: Theano — это инструмент оптимизации, используемый для управления и оценки матричных вычислений. Theano отлично подходит для моделей глубокого обучения, поскольку он автоматически оптимизирует вычисления для эффективной работы на графических процессорах.
  • PyTorch: PyTorch — это библиотека машинного обучения, разработанная Facebook AI и основанная на популярной библиотеке Torch. PyTorch в основном используется для обработки естественного языка и компьютерного зрения в таких компаниях, как Tesla, Uber и HuggingFace.
Читайте также:  Основные тенденции в области науки о данных, о которых вы должны знать в 2021 году

Фреймворки глубокого обучения

  • Caffe: Caffe — это платформа глубокого обучения, предназначенная для распознавания и сегментации изображений. Он написан на C ++ с интерфейсом Python.
  • Microsoft Cognitive Toolkit (CNTK): CNTK — это среда глубокого обучения Microsoft, которая описывает нейронные сети как серию вычислительных событий, управляемых графом. Microsoft больше не разрабатывает CNTK, но иногда используется в старых моделях глубокого обучения.

Практика глубокого обучения: персептрон

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

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

Визуализация персептрона, находящего границу между двумя классами

Визуализация персептрона, находящего границу между двумя классами

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

1. Граничная линия

Граница, разделяющая два класса:

x_1 + w_2x_2 + b = 0

Here:

x_1 and x_2 are the inputs

w_1 and w_2 are the weights

b is the bias

Это уравнение позволит нашей модели найти границу между двумя нашими входными классами, starи not star.

2. Дискретное прогнозирование с прямым распространением

Теперь мы реализуем прямое распространение, чтобы определить, является ли точка частью starили нет.

Это дискретный прогноз, потому что наша реализация просто возвращает «да» или «нет», а не процент уверенности в этом прогнозе.

import numpy as np
def step(weighted_sum): # step activation function
    # The step activation is applied to the perceptron output that
    # returns 0 if the weighted sum is less than 0 and 1 otherwise
    return (weighted_sum > 0) * 1
def forward_propagation(input_data, weights, bias):
    #Computes the forward propagation operation of a perceptron
    # and returns the output after applying the step activation function
   # takes the dot product of input and the weights and adds the bias
    return step(np.dot(input_data, weights) + bias)
# Initialize parameters
X = np.array([2, 3]) # declaring two data points
Y = np.array([0]) # label
weights = np.array([2.0, 3.0]) # weights of perceptron
bias = 0.1 # bias value
Y_predicted = forward_propagation(X, weights.T, bias) # predicted label
print(«Predicted label:», Y_predicted)

Пояснение к коду:

Вызов forward_propagation функции:

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

forward_propagation функция

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

step функция:

Принимает взвешенную сумму и возвращает 1, если значение больше 0, и 0 в противном случае.

Переменные Определение
X Входной массив NumPY со значениями функций 2 и 3
Y Метка вывода со значением 0
weights Веса перцептрона с начальными значениями 2 и 3 соответственно.
bias Значение смещения, инициализированное 0

3. Логистическая регрессия

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

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

import numpy as np
def sigmoid(x):
  # The sigmoid activation function
  return 1 / (1 + np.exp(-x)) # applying the sigmoid function
def forward_propagation(input_data, weights, bias):
  #Computes the forward propagation operation of a perceptron and
  #returns the output after applying the sigmoid activation function
  # take the dot product of input and weight and add the bias
  return sigmoid(np.dot(input_data, weights) + bias) # the perceptron equation
# Initializing parameters
X = np.array([2, 3]) # declaring two data points
Y = np.array([0]) # label
weights = np.array([2.0, 3.0]) # weights of perceptron
bias = 0.1 # bias value
output = forward_propagation(X, weights.T, bias) # predicted label
print(«Forward propagation output:», output)
Y_predicted = (output > 0.5) * 1 ## apply sigmoid activation
print(«Label:», Y_predicted)

Пояснение к коду:

sigmoid function

Для данного входного значения xзначение сигмоида может быть рассчитано как1/1 + np.exp (-x)1 / 1 + п р. е х р ( — х ).

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

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

4. Функция ошибки: кросс-энтропия

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

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

Кросс-энтропия — это функция ошибок, используемая для моделей классификации.

E=(ylog(y)+(1y)log(1y))

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

import numpy as np
def sigmoid(x):
    # The sigmoid activation function»»»
    return 1 / (1 + np.exp(-x))
def forward_propagation(input_data, weights, bias):
    # Computes the forward propagation operation of a perceptron and
    # returns the output after applying the sigmoid activation function
   # take the dot product of input and weight and add the bias
   return sigmoid(np.dot(input_data, weights) + bias)
def calculate_error(y, y_predicted):
   #Computes the binary cross entropy error»»»
   return — y * np.log(y_predicted) — (1 — y) * np.log(1 — y_predicted)
def ce_two_different_weights(X, Y, weights_0, weights_1, bias):
    #Computes sum of error using two different weights and the same bias»»»
    sum_error1 = 0.0
    sum_error2 = 0.0
    for j in range(len(X)):
        Y_predicted_1 = forward_propagation(X[j], weights_0.T, bias) # predicted label
        sum_error1 = sum_error1 + calculate_error (Y[j], Y_predicted_1) # sum of error with weights_0
        Y_predicted_2 = forward_propagation(X[j], weights_1.T, bias) # predicted label
        sum_error2 = sum_error2 + calculate_error (Y[j], Y_predicted_2) # sum of error with weights_1
    return sum_error1, sum_error2
# Initialize parameters
X = np.array([[2, 3], [1, 4], [-1, -3], [-4, -5]]) # declaring two data points
Y = np.array([1.0, 1.0, 0.0, 0.0]) # actual label
weights_0 = np.array([0.0, 0.0]) # weights of perceptron
weights_1 = np.array([1.0, -1.0]) # weights of perceptron
bias = 0.0 # bias value
sum_error1, sum_error2 = ce_two_different_weights(X, Y, weights_0, weights_1, bias)
print(«sum_error1:», sum_error1, «sum_error2:», sum_error2)

Пояснение к коду:

ce_error_different_weights функция

  • Функции принимают параметры, функции ввода данных X, метки Y, weights_0, weights_1, и bias.
  • Строка18-27: Цикл по обучающим данным вычисляет прогнозируемое значение и ошибку. Он также продолжает добавлять ошибку предыдущей итерации в переменные sum_error1( строка 20 ) и sum_error2( строка 22 ), используя оба веса по отдельности.
  • Строка 27: возвращает сумму ошибок кросс-энтропии по каждому весу.
Оцените статью
bestprogrammer.ru
Добавить комментарий