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

X = np.array([[1,2],[5,8],[1.5,1.8],[8,8],[1,0.6],[9,11]])
y = [0,1,0,1,0,1]
clf = svm.SVC(kernel='linear', C = 1.0)
clf.fit(X,y)
print(clf.predict([0.58,0.76]))

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

math.sqrt( x )

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

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

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

Хакерское руководство по нейронным сетям от Андрея Карпаты

Мозг против глубокого обучения, часть I: вычислительная сложность - или почему сингулярности нигде нет, автор Тим Деттмерс

Нейронные сети и глубокое обучение от Майкл Нильсен

ПОЧЕМУ РАБОТАЕТ НА МАШИННОМ ОБУЧЕНИИ?

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

static void main(String[] args) {
      int x = 5;
      x = x*x;
      System.out.println("x = " + x);
 }
}
x = 25

… К чуть более сложным расчетам;

public class Main {
   public static void main(String[] args) {
      double x = 38.75645;
      x = x*x;
      System.out.println("x = " + x);
   }
}
x = 1502.0624166025

… К более сложным процессам, таким как нахождение квадрата числа.

Хотя возведение числа в квадрат - это просто, задача нахождения квадратного корня из числа связана с более сложной математикой.

As

можно представить уравнением

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

В Javascript гораздо проще вызвать программную функцию, например функцию Math;

var y = Math.sqrt(16);      // Returns the square root of 16, y = 4

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

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

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

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

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

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

Выход нейрона можно выразить как

or

в этих уравнениях W - весовой вектор нейронного узла, определяемый как

а X - входной вектор, определяемый как

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

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

ВЫЧИСЛИТЕЛЬНЫЙ ПРОЦЕСС

ПЕРСЕПТРОН

Чтобы начать иллюстрировать вычислительный процесс, мы рассмотрим очень простой пример нейронной сети. Впервые изобретенный 60 с лишним лет назад, это перцептрон. Это модель с «прямой связью»; входные данные отправляются в нейрон, обрабатываются и затем выходят. Перцептрон начинает с вычисления взвешенной суммы своих входных данных.

Перцептрон состоит из пяти частей:

  1. Входы: X1, X2
  2. Вес: W1 W2
  3. Потенциал:

где μ - смещение.

4. Функция активации: f (z)

5. Вывод: y = f (z)

Мы можем попросить перцептрон дать нам ответ на вопрос, в котором есть три фактора, влияющих на результат. Например, «Это хорошая еда?». Факторы, которые делают его хорошим или плохим:

«Это хорошо для вас?»
«это вкусно?»
«хорошо выглядит?»

Мы даем числовые значения на все вопросы и ответы. Мы даем каждому вопросу значение, в данном случае логическое, да или нет, 1 или 0. Мы даем те же значения для ответа, хорошая еда = 1, плохая еда = -1.

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

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

Давайте передадим три входа нашему перцептрону.

Input_0: x1 = 0
Input_1: x2 = 1
Input_2: x3 = 1

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

Weight_0: x1 = 6
Weight_1: x2 = 4 
Weight_2: x3 = 2

входные данные умножаются на веса

Input_0 * weight 0: 0 * 6 = 0
Input_1 * weight 1: 1 * 4 = 4
Input_1 * weight 1: 1 * 2 = 2

Следующим шагом является суммирование всех входных данных и весов.

output = sum(0+4+2) = 6

Выход нейрона определяется тем, является ли взвешенная сумма

меньше или больше thresholdValue. Как и веса, порог - это действительное число, которое является параметром нейрона.

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

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

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

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

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

Искусственная нейронная сеть (ИНС)

Обучение сети с использованием линейной регрессии.

Однослойная нейронная сеть (с использованием линейной функции активации) получает вход с двумя характеристиками x1 и x2; у каждого есть вес. Сеть суммирует входные данные и веса, а затем выводит прогноз. Разница вычисляется, чтобы измерить ошибку, показывающую, насколько хорошо она работает по всем обучающим данным.

Для начала рассмотрим простую задачу.

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

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

Числовой градиент

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

Активация

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

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

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

Ниже приведено выражение линейной функции активации.

Модель системы с линейным элементом для получения единственного результата выражается следующим образом:

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

В общих чертах сеть учится на наличии входа и известного выхода, поэтому мы можем дать пары значений (x, y), где x - вход, а y - известный выход.

пары = ((x = 5, y = 13), (x = 1, y = 3), (x = 3, y = 8)),…, ((x = ‹em› n ‹/ em ›, Y = ‹em› n2 ‹/em›))

Цель состоит в том, чтобы найти веса (w), которые ближе всего подходят к обучающим данным. Один из способов измерить наше соответствие - вычислить минимальную ошибку для набора данных, уменьшив значение M (w) до минимума.

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

Впервые опубликовано 30 мая 2016