Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Искусственный интеллект arrow Генетический алгоритм (платный раздел) arrow Генетический алгоритм. Урок 3. Обучаем искусственный нейрон.
19.10.2018 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
Excel-это не сложно
Все о финансах
Генетический алгоритм. Урок 3. Обучаем искусственный нейрон. Печать E-mail
Автор megabax   
13.10.2013 г.
unit AIObj

Генетический алгоритм. Урок 3. Обучаем искусственный нейрон.

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


Сегодня мы будем при помощи генетического алгоритма обучать искусственный нейрон (см.  так же урок "Теория нейронных сетей. Урок 1. Модель нейрона"). Программировать мы будем на базе исходников прошлого урока. Для реализации искусственного нейрона нам потребуется специальный класс:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Genetic

{

    /// <summary>

    /// Класс нейрона

    /// </summary>

    public class Neuron

    {

...

Этим классом мы реализовали функционал такой разновидности нейрона, как линейный персептрон (см. урок "Теория нейронных сетей. Урок 4. Обучение нейрости. Линейный") персептрон. Пороговое значение нашего персептрона - нуль...

...

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

  Коэффициенты Результат Выход
2 -3
Набор 1 1 1 -1 0
Набор 2 2 1 1 1
Набор 3 3 1 3 1
Набор 4 1 2 -4 0
Набор 5 2 2 -2 0
Набор 6 3 2 0 0
Набор 7 1 3 -7 0
Набор 8 2 3 -5 0
Набор 9 3 3 -3 0

Если предположить, что входы нейрона соответствуют координатам точек, то матрицу можно представить в таком виде:

0 1 2 3
1      
2      
3      

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

        private StudyMatrixItem addToMatrix(double x, double y, double outcome)

        {

            StudyMatrixItem item = new StudyMatrixItem();

            item.incomes.Add(x);

            item.incomes.Add(y);

            item.outcome = outcome;

            return item;

        }

Теперь все параметры, в том числе матрицу, можно задать в конструкторе формы:

        public Form1()

        {

            InitializeComponent();

            pop = new Population();

            pop.MaxSize = 100;

            pop.MutationPossibility = 0.3;

            pop.SizeStrongMutation = 5;

            pop.initSpecies(2); //нейрон имеет два входа

 

            //создадим матрицу обучения

            StudyMatrix matrix= new StudyMatrix();

 

 

            matrix.items.Add(addToMatrix(1, 1, 0));

            matrix.items.Add(addToMatrix(2, 1, 1));

            matrix.items.Add(addToMatrix(3, 1, 1));

            matrix.items.Add(addToMatrix(1, 2, 0));

            matrix.items.Add(addToMatrix(2, 2, 0));

            matrix.items.Add(addToMatrix(3, 2, 0));

            matrix.items.Add(addToMatrix(1, 3, 0));

            matrix.items.Add(addToMatrix(2, 3, 0));

            matrix.items.Add(addToMatrix(3, 3, 0));

  

            pop.matrix = matrix;

 

            show();

        }

Как показала практика, обучается такой нейрон всего за 3-4 итерации:

Генетический алгоритм. Урок 3. Обучаем искусственный нейрон.

Подставив полученные коэффициенты в таблицу, мы увидим, что программа работает правильно:

  Коэффициенты Результат Выход
0,344 -0,642
Набор 1 1 1 -0,298 0
Набор 2 2 1 0,046 1
Набор 3 3 1 0,39 1
Набор 4 1 2 -0,94 0
Набор 5 2 2 -0,596 0
Набор 6 3 2 -0,252 0
Набор 7 1 3 -1,582 0
Набор 8 2 3 -1,238 0
Набор 9 3 3 -0,894 0

Попробуем другой пример, когда коэффициенты еще неизвестны и их требуется найти.  Попробуем, например, вот такую картинку:

0 1 2 3
1      
2      
3      

в итоге получаем вырождения, целевая функция не опускается ниже 1.

Если попробовать вот такую картинку:

0 1 2 3
1      
2      
3      

то так же находит за 3-4 итерации:

Генетический алгоритм. Урок 3. Обучаем искусственный нейрон.

Попробуем научить нейрон распознавать еще несколько картинок

Картинка Результат
0 1 2 3
1      
2      
3      
Вырождается
0 1 2 3
1      
2      
3      
Вырождается
0 1 2 3
1      
2      
3      
Вырождается
0 1 2 3
1      
2      
3      
Обучается за 1-4 итерации
0 1 2 3
1      
2      
3      
Обучается за 1-4 итерации
0 1 2 3
1      
2      
3      
Вырождается
0 1 2 3
1      
2      
3      
Вырождается
0 1 2 3
1      
2      
3      
Обучается за 3-4 итерации
0 1 2 3
1      
2      
3      
Вырождается

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

Последнее обновление ( 13.10.2013 г. )
 
« След.   Пред. »
 
© 2018 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги
Мы принимаем
Банковские карты
Оплатите покупку в интернет-магазине банковскими картами VISA и Mastercard любого банка.
узнать больше
Электронный кошелек
Моментальная оплата покупок с помощью вашего электронного кошелька RBK Money.
узнать больше
Банковский платеж
Оплатите покупку в любом российском банке. Срок зачисления средств на счет - 3-5 рабочих дней.
узнать больше
Денежные переводы
Оплата покупок через крупнейшие системы денежных переводов CONTACT и Unistream.
узнать больше
Почтовые переводы
Оплатите покупку в любом отделении Почты России. Срок зачисления платежа - 3-4 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше