Реализация однослойной нейронной сети — перцептрона для задачи классификации автотранспорта

Введение

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

Википедия

Простая нейронная сеть

Простая нейронная сеть

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

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

Постановка задачи.

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

Допустим нам надо выяснить принадлежность транспортного средства к одному или нескольким классам:

Нейронная сеть для классификации

Нейронная сеть для классификации

  • Легковой автомобиль
  • Пассажирский транспорт
  • Грузовой транспорт

на основе следующих характеристик

  • 0) Большая снаряженная масса
  • 1) Большая мощность двигателя
  • 2) Большая пассажировместимость
  • 3) Большая грузоподъёмность

Нормализация

Для того, чтобы начать обучать нейросеть, необходимо нормализовать входные сигналы сети. То есть разъяснить, например, 50 лошадиных сил — это большая мощность двигателя или не очень. Для этого будем оперировать качественными понятиями, и соответствующими им значениями в диапазоне от 0 до 1.

  • Нет — 0
  • Скорее нет, чем да — 0.25
  • Ни нет ни да — 0.5
  • Скорее да, чем нет — 0.75
  • Да — 1

Экспертная оценка характеристик даёт нам следующую таблицу нормализации

                                          0        0.25       0.50      0.75       1
    -------------------------------------------------------------------------------------------
    0) Большая масса автомобиля(т.)      ≤0.5     (0.5;1]    (1;2]     (2;5]      >5    
    1) Большая мощность двигателя(л.с.)  ≤20      (20;50]    (50;100]  (100;200]  >200      
    2) Большое пассажировместимость(чел) ≤2       (2;5]      (5;10]    (10;20]    >20  
    3) Большая грузоподъёмность(т.)      ≤1       (2;2]      (2;3]     (2;4]      >4

То есть на вопрос «Большая ли это мощность двигателя — 50 л.с.» ответ «скорее нет, чем да» (0.25). Говоря формализованным языком, нормализация — это функция двух аргументов N(n,x): номера нормализуемого параметра и его значение. Область значений функции — от 0 до 1. В нашем случае она задаётся таблично.
В нашем примере с мощностью двигателя N(1,50)=0.25.

Обучающая выборка.

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

                   Масса(т.)   Двигатель(л.с.)   Пассажиров(чел.)   Грузоподъёмность(т.)
------------------------------------------------------------------------------------------
Ока                  0.645          33                 4                   0.34
Газель пасcaжир.     2.880         152                14                   1.5
Лада Калина          1.110          88                 5                   0.475
Камаз(3 оси)        10.400         260                 3                   6
Газель груз .        2.880         152                 3                   1.5
ПАЗ4234(пазик)       9.895         122                30                   6.2
ЗИЛ-5301(бычок)      3.695         136                 3                   3
УАЗ Патриот          2.170         116                 5                   0.6
ЛиАЗ-6213           27.895         278               150                  11

Примеры их классификации

                   
                        Легковой    Пассажирский   Грузовой
-------------------------------------------------------------
Ока                        *
Газель пасcaжир.                         *
Лада Калина                *
Камаз(3 оси)                                           *
Газель груз .                                          *
ПАЗ4234(пазик)                           *
ЗИЛ-5301(бычок)                                        *
УАЗ Патриот                *
ЛиАЗ-6213                                *

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

 

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

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

Функция активации определяет уровень возбуждения нейрона L в зависимости от суммарного уровня сигнала входов S. В приложениях наиболее употребимы функции вида «единичный скачок(пороговая функция)», «линейный порог(гистерезис)» и «сигмой». От её выбора зависит уровень чувствительности(избирательности) сети. Чем выше чувствительность (самая высокая у единичного скачка), тем конкретнее ответ сети, но выше и вероятность ошибки. Чем меньше чувствительность, тем неопределённее ответ, но и меньше процент ошибок.

Для нашей задачи была выбрана кусочно заданная функция «линейный пророг», определяемая как

  • 0, S<0
  • S, 0≤S<1
  • 1, S>1

 Обучение сети.

Рассмотрение алгоритмов обучения сети достойно отдельной статьи и вываливать всю гору информации тут вряд ли целесообразно. Если есть желание разобраться в этом — гугль вам в помощь.

Результаты обучения

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

  • Ока:Легковая(58%),Пассажирск.(27%), условно верный ответ, хотя и довольно неуверенный, что в общем-то объяснимо высокой пассажировместимостью «Оки» на единицу собственной массы
  • Газель пас.:Легковая(4%),Пассажирск.(97%), верный ответ, с очень небольшими сомнениями в пользу легкового автомобиля
  • Калина:Легковая(100%),Пассажирск.(2%), верный ответ, с небольшими сомнениями в сторону пассажирского транспорта
  • Камаз:Грузовая(100%), абсолютно верный ответ
  • Газель груз:Легковая(12%),Грузовая(84%), верный ответ, с сомнениями в сторону легкового автомобиля, что объяснимо схожестью с другим обучающем примером другого класса автомобиля на той де технической базею
  • ПАЗ4234:Пассажирск.(100%), абсолютно верный ответ
  • ЗИЛ-5301:Грузовая(100%), абсолютно верный ответ
  • Патриот:Легковая(98%),Грузовая(2%), верный ответ, с очень малым сомнением в сторону грузового авто, видимо из-за большой собственной массы и мощного для легковушки двигателя
  • ЛиАЗ-6213:Пассажирск.(100%), абсолютно верный ответ

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

               
                 Масса(т.)   Двигатель(л.с.)   Пассажиров(чел.)   Грузоподъёмность(т.)
--------------------------------------------------------------------------------------
Белаз              74,           1050                1                   90
БТР80              13.6           260               10                    3
Урал мото           0.3            40                3                    0.25
Повозка             0.2             1                4                    0.2
Велосипед           0.02            0.3              1                    0.1
Трамвай            18.4,          245              168                   12

Получаем следующие ответы сети

  • Белаз:Грузовая(100%), нельзя не согласиться
  • БТР80:Пассажирск.(27%), действительно пассажирский транспорт, но очень странны, да, потому и ответ неуверенный
  • Урал мото:Легковая(100%),Пассажирск.(12%), ну в целом ответ разумный, на легковую машину мотоцикл «Урал» всяк похож больше, чем на автобус, но его способость везти аж 3 человек заставила нейросеть сомневаться
  • Повозка:Пассажирск.(52%), 1 лошадь, 200 кило телега и 4 человека на ней, неуверенно-пассажирский транспорт
  • Велосипед: не смогла определить что это … я бы тоже не смог
  • Трамвай:Пассажирск.(100%), тут никаких воросов.

 

Исходный код

Все вышеперечисленные эксперименты с автотранспортом проводились с использованием библиотеки для простой работы с нейронными сетями. Ниже — исходный код

Исходный код простого примера работы с нейросетьюИсходный код простого примера работы с нейросетью


One Response to Реализация однослойной нейронной сети — перцептрона для задачи классификации автотранспорта

  1. Pingback: Обучение нейронной сети без учителя. | Perpetuum mobile

Добавить комментарий