Мозг и нейрон

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

Нейроны

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

Общие операции

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

Моделирование нейронной системы на компьютере

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

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

Правило Хебба

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

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

Моделирование нейрона - модель Маккаллоха и Питтса

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

Маккаллох и Питтс создали следующую математическую модель нейрона:

Эта модель состоит из

  1. Набор взвешенных входов Wi, соответствующих синапсам. Входной сигнал Xi умножается на Wi.
  2. Сумматор, суммирующий входные сигналы.
  3. Функция активации, которая определяет, срабатывает нейрон или нет.

Например, предположим, что три входа: x1 = 1, x2 = 0, x3 = 0,5. В реальных нейронах эти входы поступают с выходов других нейронов. Итак, 0 означает, что нейрон не сработал, 1 означает, что он сработал, а 0,5 не имеет биологического значения, но не важно. Каждый из этих импульсов нейронов проходил по синапсу, чтобы добраться до нашего нейрона, и эти синапсы обладают сильными сторонами, называемыми весами.

Сила синапса влияет на силу сигнала, поэтому мы умножаем входные данные на вес синапса (так мы получаем x1 * w1 и x2 * w2 и т. Д. ). Теперь, когда все эти сигналы поступают в наш нейрон, он складывает их, чтобы увидеть, достаточно ли силы, чтобы заставить его сработать. Мы запишем это как

Если синаптические веса равны w1 = 1, w2 = -0,5, w3 = -1, то вход для нашего модельного нейрона равен h = 1 * 1 + 0 * -0,5 + 0,5 * -1 = 1 + 0 + (- 0,5) = 0,5. Теперь нейрон должен решить, сработает ли он. Для реального нейрона это вопрос, превышает ли мембранный потенциал некоторый порог. Мы выберем пороговое значение (обозначенное θ), например θ = 0. Итак, срабатывает ли наш нейрон? Что ж, в этом примере h = 0,5, а 0,5> 0, поэтому нейрон действительно срабатывает и выдает выходной сигнал 1. Если бы нейрон не сработал, он выдал бы выходной сигнал 0.

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

Персептрон

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

В контролируемом обучении ( если вы не знакомы с этим термином, обратитесь к первому разделу этого блога - https://medium.com/@masiur56/an-introduction-to-learning-with -decision-tree-56d4e741f025 ) набор входных и выходных данных (обучающих данных) показывается нейронной сети (NN). Затем NN изучает взаимосвязь между ними, устанавливая соответствующие веса для соединения.

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

Скорость обучения

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

Ввод смещения

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

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

Пример использования функции ИЛИ

Давайте посмотрим, как узнать веса в нейронной сети, разработав пример. В нашем примере мы будем моделировать функцию ИЛИ с помощью нейронной сети.

Входные / выходные данные для функции ИЛИ

Сеть персептрона со входом смещения.

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

W0= -0.05

W1 = -0.02

W2 = 0.02

Теперь мы подаем первый вход, где оба входа равны 0 (из таблицы функции ИЛИ). Таким образом, значение, которое достигает на выходе нейрона, равно

(-0.05) * (-1) + 0*(-0.02) + 0*(0.02) = 0.05

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

Веса обновляются с использованием следующего уравнения

вес = вес - скорость_обучения * ошибка * ввод

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

Выберем скорость обучения 0,25. Итак, новые веса выглядят следующим образом

W0 = –0.05–0.25 * (1–0) * (-1) = 0.2

W1 = –0.02–0.25 * (1–0) * 0 = –0.02

W2 = 0.02–0.25 * (1–0) * 0=0.02.

Теперь для входа (0,0) вывод с новыми весами = (0,2) * (–1) + 0 * (- 0,02) + 0 * (0,02) = –0,2. Это меньше чем 0, поэтому нейрон не срабатывает и выдает выходной сигнал 0, что является правильным в соответствии с данными обучения.

Можно проверить, что выходной нейрон теперь выдает правильный вывод для всех остальных входов с новыми весами.

Линейная разделимость

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

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

Многослойный персептрон

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

Убедитесь, что вы рассчитываете результат, передавая входные значения из таблицы XOR в нейронную сеть.

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

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

Классификация по нескольким классам

Примеры NN, которые мы видели до сих пор, имеют только два выходных класса - 0 или 1.

Что, если будет больше выходных классов?

Давайте разберемся с классификацией нескольких классов на примере NN, показанном ниже. В этом примере NN классифицирует входное изображение (подаваемое в NN в пикселях) среди одного из выходных классов (пешеход / автомобиль / мотоцикл / грузовик).

В отличие от предыдущих примеров, у этого есть несколько выходных узлов.

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

Если входные данные для обучения относятся к пешеходу, то для Y0 установлено значение 1, а для Y1, Y2, Y3 установлено значение 0. и обучение продолжается.

Если входные данные для обучения относятся к автомобилю, то для Y1 установлено значение 1, а для Y0, Y2, Y3 установлено значение 0. и обучение продолжается.

Наконец, в конце обучения NN изучает правильные весовые коэффициенты, и когда ей показывают новое изображение, она выводит один из узлов (y0 / y1 / y2 / y3) в 1.

Этот метод называется тренировкой один против всех.

Функция активации

Функция активации нейронов, которую мы видели ранее, является ступенчатой ​​ и нелинейной по своей природе.

Однако есть некоторые проблемы с нелинейной функцией активации.

  1. Если функция активации является линейной, независимо от того, сколько скрытых слоев сложено в нейронной сети, конечный результат по-прежнему является линейной комбинацией исходных входных данных. Эта линейность означает, что она не может действительно понять сложность нелинейных задач. например, логика XOR или шаблоны, разделенные кривыми или кружками.
  2. Небольшое изменение любого из весов может привести к тому, что любой нейрон внезапно переключится между 0 и 1, что снова может повлиять на другие подключенные к нему нейроны и вызвать резкое изменение поведения нейронной сети. Но мы хотим, чтобы наша нейронная сеть училась оптимальному весу. факторы постепенно.
  3. В реальном мире алгоритм обратного распространения используется для обучения многослойных нейронных сетей (обновление весов). Для этого требуется дифференцируемая функция активации (подробнее см. Алгоритм градиентного спуска).

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

Сигмовидная функция

Эта функция производит,

0, когда "x" достигает минус бесконечности

1, когда "x" достигает плюс бесконечности

0,5, когда «x» = 0

Эта функция похожа на пошаговую, но с плавным переходом и дифференцируемой везде на кривой. Эта кривая дает 0,5 при x = 0. Это мы можем использовать для настройки правил для функции активации, например: если выходной сигнал сигмовидного нейрона больше или равен 0,5, он выдает 1., если выходной сигнал меньше 0,5, он выдает 0.