Глубокое обучение - одна из самых горячих тем 2018–2019 годов, и не зря. В отрасли было так много достижений, что настало время, когда машины или компьютерные программы фактически вытеснили людей. Эта статья Глубокое обучение с помощью Python поможет вам понять, что такое глубокое обучение и как этот переход стал возможен. В этой статье я затрону следующие темы:

  • Наука о данных и ее компоненты
  • Потребность в глубоком обучении
  • Что такое глубокое обучение?
  • Персептрон и искусственные нейронные сети
  • Приложения глубокого обучения
  • Почему Python для глубокого обучения?
  • Глубокое обучение с помощью Python: пример персептрона
  • Глубокое обучение с помощью Python: создание глубокой нейронной сети

Наука о данных и ее компоненты

Что ж, Data Science существует уже много лет. Наука о данных - это извлечение знаний из данных с использованием различных методов и алгоритмов.

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

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

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

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

Потребность в глубоком обучении

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

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

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

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

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

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

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

Персептрон и искусственные нейронные сети

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

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

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

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

  • Суммирование
  • Трансформация (активация)

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

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

  • Линейность или идентичность
  • Единица или двоичный шаг
  • Сигмовидная или логистическая
  • Тань
  • ReLU
  • Софтмакс

Хорошо. если вы думаете, что Perceptron решает проблему, то вы ошибаетесь. Были две основные проблемы:

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

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

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

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

Теперь, когда у вас есть представление о том, как ведет себя перцептрон, о различных задействованных параметрах и о разных уровнях нейронной сети, давайте продолжим этот блог Deep Learning with Python и рассмотрим несколько интересных приложений Deep Learning.

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

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

  • Распознавание речи

  • Машинный перевод

  • Распознавание лиц и автоматическая маркировка

  • Виртуальные личные помощники

  • Самостоятельная машина

  • Чат-боты

Почему Python для глубокого обучения?

  • Python - один из таких инструментов, обладающий уникальным свойством: язык программирования общего назначения, который прост в использовании, когда дело доходит до аналитических и количественные вычисления.
  • Это очень легко понять
  • Python динамически типизирован
  • Огромная поддержка сообщества
  • Огромный выбор библиотек для различных целей, таких как Numpy, Seaborn, Matplotlib, Pandas и Scikit-learn.

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

Пример персептрона

Теперь я уверен, что вы, ребята, должны быть знакомы с работой ворот «ИЛИ». На выходе будет 1, если любой из входов также равен 1.

Следовательно, перцептрон можно использовать в качестве разделителя или линии решения, которая разделяет входной набор логического элемента ИЛИ на два класса:

Класс 1: входы с выходом 0, расположенным ниже линии решения.
Класс 2: входы с выходом 1, расположенным над линией решения или разделителем.

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

Математически перцептрон можно представить себе как уравнение весов, входных данных и смещения.

Шаг 1. Импортируйте всю необходимую библиотеку

Здесь я собираюсь импортировать только одну библиотеку, т.е. TensorFlow

import tensorflow as tf

Шаг 2. Определите векторные переменные для ввода и вывода

Затем нам нужно создать переменные для хранения ввода, вывода и смещения для перцептрона.

train_in = [
[0,0,1],
[0,1,1],
[1,0,1],
[1,1,1]]
 
 
 
train_out = [
[0],
[1],
[1],
[1]]

Шаг 3. Определите переменную веса

Здесь мы определим тензорную переменную формы 3 × 1 для наших весов и сначала присвоим ей некоторые случайные значения.

w = tf.Variable(tf.random_normal([3, 1], seed=15))

Шаг 4. Определите заполнители для ввода и вывода

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

x = tf.placeholder(tf.float32,[None,3])
y = tf.placeholder(tf.float32,[None,1])

Шаг 5: Расчет мощности и функции активации

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

output = tf.nn.relu(tf.matmul(x, w))

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

Шаг 6. Рассчитайте стоимость или ошибку

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

loss = tf.reduce_sum(tf.square(output - y))

Шаг 7. Минимизируйте ошибку

Цель перцептрона - минимизировать потерю, стоимость или ошибку. Итак, здесь мы собираемся использовать оптимизатор градиентного спуска.

optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

Шаг 8: инициализируйте все переменные

Переменные определяются только с помощью tf.Variable. Итак, нам нужно инициализировать определенные переменные.

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

Шаг 9: обучение персептрона в итерациях

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

for i in range(100):
sess.run(train, {x:train_in,y:train_out})
cost = sess.run(loss,feed_dict={x:train_in,y:train_out})
print('Epoch--',i,'--loss--',cost)

Шаг 10: Вывод

Как видите, убыток начался с 2,07 и закончился на уровне 0,27.

Создание глубокой нейронной сети

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

Мы собираемся использовать набор данных MNIST. Набор данных MNIST состоит из 60 000 обучающих образцов и 10 000 тестовых образцов рукописных изображений цифр. Изображения имеют размер 28 × 28 пикселей, а изображение на выходе может находиться в диапазоне 0–9.

Задача состоит в том, чтобы обучить модель, которая сможет точно идентифицировать цифру, присутствующую на изображении

Во-первых, мы собираемся использовать приведенный ниже импорт, чтобы перенести функцию печати из Python 3 в Python 2.6+. Операторы __future__ должны находиться в верхней части файла, потому что они меняют фундаментальные аспекты языка, и поэтому компилятор должен знать о них с самого начала.

from __future__ import print_function

Ниже приведен код с комментариями на каждом этапе.

# Import MNIST data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)
 
import tensorflow as tf
import matplotlib.pyplot as plt
 
# Parameters
learning_rate = 0.001
training_epochs = 15
batch_size = 100
display_step = 1
 
# Network Parameters
n_hidden_1 = 256 # 1st layer number of features
n_hidden_2 = 256 # 2nd layer number of features
n_input = 784 # MNIST data input (img shape: 28*28)
n_classes = 10 # MNIST total classes (0-9 digits)
 
# tf Graph input
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])
 
# Create model
def multilayer_perceptron(x, weights, biases):
    # Hidden layer with RELU activation
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.relu(layer_1)
    # Hidden layer with RELU activation
    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.relu(layer_2)
    # Output layer with linear activation
    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
    return out_layer
 
# Store layers weight & bias
weights = {
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
    'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}
 
biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}
 
# Construct model
pred = multilayer_perceptron(x, weights, biases)
 
# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
 
# Initializing the variables
init = tf.global_variables_initializer()
 
#create an empty list to store the cost history and accuracy history
cost_history = []
accuracy_history = []
 
# Launch the graph
with tf.Session() as sess:
    sess.run(init)
 
    # Training cycle
    for epoch in range(training_epochs):
        avg_cost = 0.
        total_batch = int(mnist.train.num_examples/batch_size)
        # Loop over all batches
        for i in range(total_batch):
            batch_x, batch_y = mnist.train.next_batch(batch_size)
 
            # Run optimization op (backprop) and cost op (to get loss value)
            _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,y: batch_y})
            # Compute average loss
            avg_cost += c / total_batch
        # Display logs per epoch step
        if epoch % display_step == 0:
 
            correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
            # Calculate accuracy
            accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
            acu_temp = accuracy.eval({x: mnist.test.images, y: mnist.test.labels})
            #append the accuracy to the list
            accuracy_history.append(acu_temp)
            #append the cost history
            cost_history.append(avg_cost)
            print("Epoch:", '%04d' % (epoch + 1), "- cost=", "{:.9f}".format(avg_cost), "- Accuracy=",acu_temp)
 
 
 
    print("Optimization Finished!")
    #plot the cost history
    plt.plot(cost_history)
    plt.show()
    #plot the accuracy history
    plt.plot(accuracy_history)
    plt.show()
 
    # Test model
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
    # Calculate accuracy
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))

Вывод:

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

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

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

1. Учебное пособие по TensorFlow

2. Учебное пособие по PyTorch

3. Алгоритм обучения персептрона.

4. Учебник по нейронной сети

5. Что такое обратное распространение?

6. Сверточные нейронные сети

7. Капсульные нейронные сети

8. Рекуррентные нейронные сети

9. Учебник по автоэнкодерам

10. Ограниченное руководство по машине Больцмана

11. PyTorch против TensorFlow

12. Обнаружение объектов в TensorFlow

13. Учебник по искусственному интеллекту

14. Классификация изображений TensorFlow

15. Приложения искусственного интеллекта

16. Как стать инженером по искусственному интеллекту?

17. Q Learning

18. Априорный алгоритм.

19. Цепи Маркова с Python

20. Алгоритмы искусственного интеллекта

21. Лучшие ноутбуки для машинного обучения

22. 12 лучших инструментов искусственного интеллекта

23. Вопросы на собеседовании по искусственному интеллекту (ИИ)

24. Теано против TensorFlow

25. Что такое нейронная сеть?

26. Распознавание образов.

27. Альфа-бета-обрезка в искусственном интеллекте

Первоначально опубликовано на www.edureka.co 19 февраля 2019 г.