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

О машинном обучении в целом

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

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

 Машинное обучение — класс алгоритмов, характерной чертой которых является не прямое решение задачи, а обучение в процессе применения решений множества сходных задач. Для начала алгоритму нужны обучающие данные, с помощью которых он настраивает себя на последующую работу. Например, показать ему что такое цифра с её описанием (“Это цифра 7”, “5 это не 8”), после таких тренировок он сам сможет различать цифры. Лучше всего такие алгоритмы справляются с классификацией, как в примере с цифрами или с определением людей на фото. Также эти алгоритмы могут оценивать текст, с выявлением настроения человека, который его писал.

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

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


Обучение - это не средство достижения цели, это сама цель.
©Роберт Хайнлайн


Нейронные сети

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

Классификация по характеру обучения нейронной сети

  • Обучение с учителем — выходное пространство решений нейронной сети известно.

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

  • Обучение с подкреплением — система назначения штрафов и поощрений от среды.

Пример локализации лиц на фотографии

 Обучеение с учителем — один из способов машинного обучения, в ходе которого испытуемая система принудительно обучается с помощью примеров «стимул-реакция». Между входами и эталонными выходами (стимул-реакция) может существовать некоторая зависимость, но она неизвестна. Известна только конечная совокупность прецедентов — пар «стимул-реакция», называемая обучающей выборкой. На основе этих данных требуется восстановить зависимость (построить модель отношений стимул-реакция, пригодных для прогнозирования), то есть построить алгоритм, способный для любого объекта выдать достаточно точный ответ.

 Перцептрон, или персептрон — математическая или компьютерная модель восприятия информации мозгом (кибернетическая модель мозга), предложенная Фрэнком Розенблаттом в 1957 году и впервые реализованная в виде электронной машины «Марк-1» в 1960 году. Перцептрон стал одной из первых моделей нейросетей, а «Марк-1» — первым в мире нейрокомпьютером.

 Согласно современной терминологии, перцептроны могут быть классифицированы как искусственные нейронные сети:

  • С одним скрытым слоем

  • С пороговой передаточной функцией

  • С прямым распространением сигнала

Фрэнк Розенблатт

 Элементарный перцептрон состоит из элементов трёх типов: S-элементов, A-элементов и одного R-элемента. S-элементы — это слой сенсоров или рецепторов. В физическом воплощении они соответствуют, например, светочувствительным клеткам сетчатки глаза. Каждый рецептор может находиться в одном из двух состояний — покоя или возбуждения, и только в последнем случае он передаёт единичный сигнал в следующий слой, ассоциативным элементам.

 A-элементы называются ассоциативными, потому что каждому такому элементу, как правило, соответствует целый набор (ассоциация) S-элементов. A-элемент активизируется, как только количество сигналов от S-элементов на его входе превысило некоторую величину θ. Таким образом, если набор соответствующих S-элементов располагается на сенсорном поле в форме буквы «Д», A-элемент активизируется, если достаточное количество рецепторов сообщило о появлении «белого пятна света» в их окрестности, то есть A-элемент будет как бы ассоциирован с наличием/отсутствием буквы «Д» в некоторой области.

 Сигналы от возбудившихся A-элементов, в свою очередь, передаются в сумматор R, причём сигнал от i-го ассоциативного элемента передаётся с коэффициентом . Этот коэффициент называется весом A—R связи.

 Так же как и A-элементы, R-элемент подсчитывает сумму значений входных сигналов, помноженных на веса (линейную форму). R-элемент, а вместе с ним и элементарный перцептрон, выдаёт «1», если линейная форма превышает порог θ, иначе на выходе будет «−1».

Код

 Будем использовать персептрон для распознования чисел.

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

 Данные весовых коэфицентов храняться в массиве weights. Массив number хранит данные введенные пользователем. Суть обучения в том, что в ходе испытаний определить весовые коэфиценты. Для этого требуется три главных функции: proceed, decrease, increase, proceed.

 Proceed - это сумматор, который считает сумму весов на основании введеных данных.

function: proceed(number, count) {
 var sum = 0;
for (var i = 0; i < number.length; i++) {
  sum = sum + number[i] * data.weights[count][i];
 }
return (sum >= data.bias);
}

 Decreas понижает веса, если персептрон ошибся.

function: decrease(number, count) {
for (var i = 0; i < number.length; i++) {
  if (number[i] == 1) {
   data.weights[count][i] = data.weights[count][i] - 1;
  }
 }
}

 Increase повышает веса, если персептрон смог определить образ правильно.

function: increase(number, count) {
for (var i = 0; i < number.length; i++) {
  if (number[i] == 1) {
   data.weights[count][i] = data.weights[count][i] + 1;
  }
 }
}

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

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


Распознаватель

Тренировать
Определить
Очистить

Тренировать - провести ряд испытаний

Определить - распознать цифру

Очистить - очистить поле

Тут записывается результат распознования

 Программа распазнает образ цифры, введенной в окно. Цифры могут быть в искаженном варианте. Распознаваемый образ цифры записывается в таблицу 3×5 квадратов, как показанно на картинках.

 Далее надо нажать на кнопку "Определить" для распознования цифры.

 Кнопка "Тренировать" предназначенна для обучения программы (ее не обязательно нажимать). Заного применяет алгоритм обучения. Определяются весовые коэфиценты. Они изменяются при каждой тренировке т.к. обучение происходит неравномерно, а случайно. Следовательно, в редких случаях, меняются результаты для некоторых образов. Эти коэфиценты можно посмотреть нажав кнопку F12. Они будут выведены в консоли, если это поддерживает ваш браузер.

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


Яндекс.Метрика