Комплексна нейронну мережу на основі ряду Фур'є функції багатьох змінних

Є багато завдань, для вирішення яких нейронні мережі прямого поширення з сигмоїдною активаційний функцією не є оптимальними. Наприклад — завдання розпізнавання бінарних зображень, з первинною обробкою за допомогою перетворення Фур'є. В ході цих перетворень зображення стає інваріантним до зміщень, масштабування і повороту. Приклад таких перетворень наведено нижче.[1] На виході такий метод видає вектор комплексних чисел. Сучасні нейронні мережі не можуть з ними працювати т. к. вони працюють тільки з речовими числами.
image

Другий такий завданням є прогнозування часових рядів із заданою точністю. Мережі прямого поширення з сигмоїдною активаційної функції не дають можливості передбачити помилку за кількістю прихованих нейронів. Для того, щоб можна було передбачити цю помилку варто використовувати який-небудь низку для швидкості збіжності якого є розрахункові формули. В якості такого ряду був обраний ряд Фур'є.

Ряд Фур'є
Комплексний ряд Фур'є від однієї змінної.
image

Але нейронні мережі часто працюють з функціями багатьох змінних. Пропоную розглянути ряд Фур'є від двох незалежних змінних. [2]
image

У загальному випадку слід використовувати ряд Фур'є для функцій від «k» змінних.
image

Архітектура

Малюнок 1. Архітектура комплексної мережі (КИНСФ)

На малюнку 1 показана архітектура комплексної штучної нейронної мережі Фур'є (КИНСФ), яка по суті реалізує формулу 9. Тут прихований шар являє собою матрицю нейронів mxn де m — число дескрипторів розкладання Фур'є, а n — розмірність вхідного вектора. Ваги в першому шарі мають фізичний сенс частот з найбільшою енергією, а ваги другого шару мають сенс коефіцієнтів ряду Фур'є. Таким чином, кількість входів у кожного нейрона вихідного шару дорівнює m*n, що відповідає кількості коефіцієнтів ряду Фур'є.
На малюнку 2 представлена схема окремого нейрона прихованого шару.

Малюнок 2. Схема нейрона прихованого шару.

На малюнку 3 — схема нейрона вихідного шару.

Малюнок 3. Схема нейрона вихідного шару.

Оптимізація архітектури.
Створення матриці нейронів передбачає використання великих обчислювальних ресурсів. Можна скоротити кількість нейронів на прихованому шарі в n разів. У цьому випадку кожен нейрон прихованого шару має n виходів, якщо у нас в мережі n входів, то при такому підході кількість зв'язків зменшується n квадрат разів без втрати якості апроксимації функцій. Така нейронна мережа представлена на малюнку 4.


Малюнок 4. КИНСФ, зведення матриці на вектор.

Принцип роботи НС
Запишемо принцип роботи даної НС в матричній формі.


Вираз 10 описує вихід прихованого шару, де: n — розмірність вхідного вектора x, m — розмірність вихідного вектора прихованого шару «y1», f—актіваціонная вектор-функція, j — уявна одиниця, w—матриця ваг, net1=w*x, k — кількість виходів НС. Вираз 11 в свою чергу показує роботу вихідного шару, вектор «y2» отримано шляхом n-кратного дублювання вектора y1. У додатку «А», для наочності методів реалізації, представлений лістинг програми, яка працює на основі виразів 10-11.

Зведення задачі навчання, до задачі навчання одношарового персептрона.
Використовуючи фізичний зміст ваг нейронів прихованого шару, а саме, що ваги нейронів прихованого шару являє собою частоти. Припустивши що періодичні коливання можна визначити початкові циклічні частоти для кожного напряму, і ініціалізувати ваги таким чином, що переходячи від нейрона до нейрона частоти будуть кратно збільшуватися. Так можна звести задачу навчання складної двошарової мережі до задачі навчання одношарового персептрона. Єдина складність полягає в тому, що входи і виходи цього персептрона є комплексними. Але методи навчання даної мережі ми розглянемо в наступній статті.

Модифікація КИНСФ для задач розпізнавання
В задачах розпізнавання або класифікації на виході нейронні мережі необхідно отримати так звану функцію приналежності[3], значення якої лежить у межах від нуля до одиниці. Для її отримання дуже зручно використовувати логістичну сигмоидальную функцію(Малюнок 5). перетворивши трохи нейрони моїй мережі, можливо отримати мережу для розпізнавання образів. Така мережа добре підходить для розпізнавання бінарних зображень, оброблених за методом, який вказаний вище(вирази 1-6). Вона приймає на вхід комплексні числа, після чого апроксимує функцію приналежності образу до класу.[4]
На рисунку 6 зображений нейрон прихованого шару, а на малюнку 7 — вихідного.
Як ми бачимо, схема нейрона прихованого не змінилася, чого не можна сказати про нейрони вихідного шару.

Малюнок 6. Схема прихованого нейрона.


Малюнок 7. Схема вихідного нейрона.

Експеримент

Для експерименту був обраний ряд картинок, одна з них представлена нижче. Перед розпізнаванням використовувалися алгоритми бінаризація і приведення до загального вигляду. Приведення до загального вигляду виконувалось за алгоритмом, наведеним вище(1-6). Після чого вектор, у випадку з КИНСФ подавався повністю «як є» на штучну нейронну мережу, а у випадку з НС з сигмаидальной активаційний функцією, окремо подавалися реальні та уявні компоненти, після чого вектор розпізнавався. Експеримент проводився з використанням двох типів НС. Мережа прямого поширення з сигмоїдною активаційної функції та КИНСФ. Обсяг навчальної вибірки склав 660 векторів розбитих на 33 класи. Програма представлена на рисунку 8.


Малюнок 8. Програма для розпізнавання рукописного тексту.

На мережу з сигмоїдною активаційний функцією подаються окремо реальні та уявні складові комплексного вектора. КИНСФ та ШНМ з сигмоїдною активаційний функцією навчалися за допомогою дельта-правила 500 циклів навчання. В результаті тестування 400 зображень КИНСФ видав точність у 87%, а ШНМ з сигмоїдною активаційний функцією 73%.

Код

public class KINSF_Simple
{
ComplexVector input; // Вхід
ComplexVector output, //Вихід 
fOut; //Вихід прихованого шару
Matrix fL; // Матриця ваг першого шару
ComplexMatrix C; // Матриця ваг другого шару
int inpN, outpN, hN, n =0 ;
Complex J = new Complex(0,1); // Уявна одиниця


public KINSF_Simple(int inpCout, int outpCout, int hLCount)
{
inpN = inpCout;
outpN = outpCout;
hN = hLCount;
// Ініціалізація ваг случ. чином 
fL = Statistic.rand(inpN, hN);
C = Statistic.randComplex(inpN*hN,outpN);
}



/// <summary>
/// Вектор-функція активації першого шару
/ / / < /summary>
/ / / < param name="compVect">Вхід</param>
/ / / < returns></returns>
public ComplexVector FActiv1(ComplexVector compVect)
{
ComplexVector outp = compVect.Copy();
for(int i = 0; i<outp.N; i++)
{
outp.Vecktor[i] = Complex.Exp(J*outp.Vecktor[i]);
}
return outp;
}



/// <summary>
/// Вихід першого шару
/ / / < /summary>
/ / / < param name="inp">Вхід</param>
void OutputFirstLayer(ComplexVector inp)
{
input = inp;
fOut = FActiv1(inp*fL);
}


/// <summary>
/// Вихід другого шару
/ / / < /summary>
void OutputOutLayer()
{
List<Complex> outList = new List<Complex>();
for(int i = 0; i<inpN; i++)
{
outList.AddRange(fOut.Vecktor);
}
ComplexVector outVector = new ComplexVector(outList.ToArray());

output = fOut*C;
}



/// <summary>
/// Відгук НС на вхідний вектор
/ / / < /summary>
/ / / < param name="inp">Вхідний вектор</param>
/ / / < returns></returns>
public ComplexVector NetworkOut(ComplexVector inp)
{
OutputFirstLayer(inp);
OutputOutLayer();
return output;
}
}


Відео роботи

Нижче наведено відео роботи даної програми, що була у тесті. Записував його як демонстрацію того, як можна застосовувати ІНС. Відразу перепрошую за вільний виклад.


Підсумки

Переваги:
Дана мережа має ряд переваг. Найважливішим є те, що ця мережа може працювати з комплексними числами. Її можна використовувати для роботи з сигналами, заданими в комплексному вигляді. Також вона дуже добре підійде для розпізнавання бінарних зображень. Вона може апроксимувати функцію, залишаючи всі властивості перетворення Фур'є, що робить її роботу легко аналізованій. Адже саме не анализируемость роботи нейронних мереж призводить до того, що наукових проектах від них все частіше відмовляються, вирішуючи завдання іншими методами. Фізичний сенс ваг дозволить використовувати цю нейронна мережа для чисельного розкладання функції багатьох змінних в ряд Фур'є.

Недоліки:
Істотним недоліком даної нейронної мережі є наявність великої кількості зв'язків. Набагато перевищує кількість зв'язків мереж прямого поширення типу персептрон.

Подальше вивчення:
У ході подальшої роботи над цією нейронною мережею планується: розробити більш досконалі методи навчання, довести збіжність навчання, довести відсутність помилки перенавчання для будь-якої кількості нейронів на прихованому шарі, побудувати рекуррентную нейронну мережу на базі КИНСФ, призначену для обробки мовних та інших сигналів.

Література
1. Осовський C… Нейронні мережі для обробки інформації/Пров. з польського І. Д. Рудинського — М: Фінанси і статистика, 2004.
2. Фіхтенгольц Р. М. Курс диференціального і інтегрального обчислення. Том 3. — М.: ФИЗМАТЛИТ, 2001.
3. Заде Л. Поняття лінгвістичної змінної та його застосування до прийняття наближених рішень. — М: Світ, 1976.
4. Рутковська Д., Пилиньский М., Рутковський Л. Нейронні мережі, генетичні алгоритми і нечіткі системи: Пров. з польськ. І. Д. Рудинського. — М.: Гаряча лінія -Телеком, 2006.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.