Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];

Вниз

нейросети   Найти похожие ветки 

 
Tirael ©   (2007-01-17 01:25) [0]

вот читаю я сабжи про них и воспринимаю как сказку... в итоге возник вопрос - сказка ли это или чтото реальное? хотелось бы взглянуть на простенький пример, а не на теорию - есль ли они в свобожном доступе? (не важно что, пусть хоть 2+2 складывает, но "интеллектуально")


 
ors_archangel ©   (2007-01-17 02:51) [1]

Они действительно обучаются, но очень долго. Я бы не стал говорить о интеллектуальности, сети могут лишь находить закономерности, или, например, ассоциативно запоминать. Вот очень очень простой пример сети прямого расспространения, которая может решить задачу XOR, обучение - обратное распространение ошибки.
type
 TSigmoidFunc = function(x: double): double;

// Сигмоидальная сжимающая функция
function DefSigmoid(x: double): double;
begin
 result := 1 / (1 + exp(-x));
end;

type
 TNeuron = object
   w: array of double;
   thess: double;
   y: double;
 end;

 TNeuNet = class
 private
   input,hidden,output: integer;
   neuron: array of array of TNeuron;
 protected
   function CalcErr: double;
 public
   sigmoid: TSigmoidFunc;
   indata: array of double;
   outdata: array of double;
   trainout: array of double;
   t: double;
   constructor Create(input,hidden,output: integer);
   procedure Calc;
   procedure Train;
   procedure BackPropagation;
 end;

{ TNeuNet }

constructor TNeuNet.Create(input, hidden, output: integer);
var
 i,j: int;
begin
 inherited Create;
 self.input := input;
 self.hidden := hidden;
 self.output := output;
 setlength(neuron, 3);
 setlength(neuron[0], input);
 setlength(neuron[1], hidden);
 setlength(neuron[2], output);
 for i := 0 to hidden-1 do with neuron[1][i] do begin
   thess := random;
   setlength(w, input);
   for j := 0 to input-1 do w[j] := random;   // 0..1
 end;
 for i := 0 to output-1 do with neuron[2][i] do begin
   thess := random;
   setlength(w, hidden);
   for j := 0 to hidden-1 do w[j] := random;
 end;
 setlength(indata, input);
 setlength(outdata, output);
 setlength(trainout, output);
 sigmoid := DefSigmoid;
 t := 0.1;
end;

procedure TNeuNet.Calc;
var
 i,h,n: int;
begin
 for i := 0 to input-1 do neuron[0][i].y := indata[i];
 // each layer (exluse input)
 for h := 1 to high(neuron) do begin
   // each inner neuron
   for n := 0 to high(neuron[h]) do begin
     neuron[h][n].y := neuron[h][n].thess;
     for i := 0 to high(neuron[h-1]) do
       neuron[h][n].y := neuron[h][n].y + neuron[h][n].w[i] * neuron[h-1][i].y;
     neuron[h][n].y := Sigmoid(neuron[h][n].y);
   end;
 end;
 for i := 0 to output-1 do outdata[i] := neuron[high(neuron)][i].y;
end;

procedure TNeuNet.Train;
begin
 Calc;
 BackPropagation;
end;

function TNeuNet.CalcErr: double;
var
 i: int;
begin
 result := 0;
 for i := 0 to output-1 do
   result := result + sqr(outdata[i]-trainout[i]);
end;

procedure TNeuNet.BackPropagation;
var
 delta: array of array of double;
 d,y: double;
 i,j: int;
begin
 setlength(delta, 2);
 setlength(delta[0], hidden);
 setlength(delta[1], output);
 for i := 0 to output-1 do begin
   d := trainout[i];
   y := outdata[i];
   delta[1,i] := y*(1-y)*(d-y);
 end;
 for j := 0 to hidden-1 do begin
   y := neuron[1,j].y;
   delta[0,j] := y*(1-y)*(neuron[2,0].w[j]*delta[1,0]);
 end;
 for i := 0 to hidden-1 do with neuron[1][i] do begin
   thess := thess + t*delta[0,i];
   for j := 0 to input-1 do w[j] := w[j] + indata[j]*t*delta[0,i];
 end;
 for i := 0 to output-1 do with neuron[2][i] do begin
   thess := thess + t*delta[1,i];
   for j := 0 to hidden-1 do w[j] := w[j] + neuron[1][j].y*t*delta[1,i];
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 nn := TNeuNet.Create(2,3,1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 nn.indata[0] := Str2Float(Edit1.Text);
 nn.indata[1] := Str2Float(Edit2.Text);
 nn.Calc;
 Edit3.Text := Float2Str(nn.outdata[0]);
 nn.indata[0] := Str2Float(Edit4.Text);
 nn.indata[1] := Str2Float(Edit5.Text);
 nn.Calc;
 Edit6.Text := Float2Str(nn.outdata[0]);
 nn.indata[0] := Str2Float(Edit7.Text);
 nn.indata[1] := Str2Float(Edit8.Text);
 nn.Calc;
 Edit9.Text := Float2Str(nn.outdata[0]);
 nn.indata[0] := Str2Float(Edit10.Text);
 nn.indata[1] := Str2Float(Edit11.Text);
 nn.Calc;
 Edit12.Text := Float2Str(nn.outdata[0]);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
 e = 0.01;
var
 err: double;
 trained: boolean;
begin
 repeat
   trained := true;
   nn.indata[0] := Str2Float(Edit1.Text);
   nn.indata[1] := Str2Float(Edit2.Text);
   nn.trainout[0] := Str2Float(Edit3.Text);
   nn.Train;
   err := nn.CalcErr;
   if err > e then trained := false;
   nn.indata[0] := Str2Float(Edit4.Text);
   nn.indata[1] := Str2Float(Edit5.Text);
   nn.trainout[0] := Str2Float(Edit6.Text);
   nn.Train;
   err := nn.CalcErr;
   if err > e then trained := false;
   nn.indata[0] := Str2Float(Edit7.Text);
   nn.indata[1] := Str2Float(Edit8.Text);
   nn.trainout[0] := Str2Float(Edit9.Text);
   nn.Train;
   err := nn.CalcErr;
   if err > e then trained := false;
   nn.indata[0] := Str2Float(Edit10.Text);
   nn.indata[1] := Str2Float(Edit11.Text);
   nn.trainout[0] := Str2Float(Edit12.Text);
   nn.Train;
   err := nn.CalcErr;
   if err > e then trained := false;
 until trained;
end;


 
kaZaNoVa ©   (2007-01-17 02:54) [2]

ors_archangel ©   (17.01.07 2:51) [1]
то есть по сути они основаны на рандоме?


 
ors_archangel ©   (2007-01-17 02:55) [3]


>    thess := thess + t*delta[0,i];    for j := 0 to input-
> 1 do w[j] := w[j] + indata[j]*t*delta[0,i];

Тут вообще-то delt"у нужно взвешивать:

   wdelta := 0;
   for i := 0 to output-1 do
     wdelta := wdelta + neuron[2,i].w[j]*delta[1,i];

Но и так сработало. Это был мой первый эксперемент :)


 
ors_archangel ©   (2007-01-17 02:57) [4]


> kaZaNoVa ©   (17.01.07 02:54) [2]
> основаны на рандоме?

Да нет, они основаны на очень простых вещах, что-то типа покоординатного спуска, только более точный - по антиградиенту, бывают ещё варианты, учитывающие вторые производные. Рандом - ни коим образом - только для инициализации: в начале сеть ничего не знает - выдаёт случайные данные, если всё обнулить, в среднем будет дольше обучаться


 
Tirael ©   (2007-01-17 03:41) [5]

а терь в 2-словах плиз описание работы )


 
Ne-Ld   (2007-01-17 03:49) [6]

Как я понимаю ни какой особенно глубокой математической основы за ними нет, и этим все сказано. Полуэмпиризм.
Нечеткая логика которую там пытаются использовать просто переформулированная теория меры - то то я сначала думал что это все что то подозрительно на обычный теорвер смахивает. (Думкин, и кто тут еще Математики - объясните мне глупому где я заблуждаюсь - что где недоучил - недопонял почему одну и ту же вешь разными именами называют? =) И почему они *так* похожи? )
Та литература которая доступна на русском языке -  болтовня и примеры "на пальцах"  толком и теорем там нет. Англоязычную литературу я еще не смотрел.
Сам с радостью выслушаю объяснения старших товарищей.


 
Ne-Ld   (2007-01-17 03:52) [7]

[offtopic]Ах, да коли уж Математики начнут рассказывать а чем обычный теорвер от теории меры отличается то? Цепями маркова что -ли? Где там "магия" начинается?


 
ors_archangel ©   (2007-01-17 04:14) [8]

Вообще, есть много типов (топологий, архитектур) нейронных сетей. Самая популярная (имхо, самая универсальная пока что) - сеть прямого распространения. Для эффективной работы сеть должна иметь два или более слоёв, т.е. хотя бы один скрытый слой. Каждый слой содержит нейроны, функция которых есть вычисление значения сигмоида от взвешенной по весам суммы входных значений - координат входного вектора, т.е. нейрон вычисляет сигмоид от скалярного произведения входного вектора и вектора весов, который для каждого нейрона свой. Сигмоид - это нелинейная функция, имеющая S-образный график: она имеет производную --> 0 при x --> ±inf, и максимальную производную при x = 0, или при x = b, зависит от реализации, сигмоидальная функция называется сжимающей, она призвана создавать нелинейные зависимости и препятствовать чрезмерному увеличению значений. Описание работы нейронной сети прямого распространения в друх словах: единтсвенная её функция - выполнение отображения входного вектора в выходной, наборы векторов могут быть произвольные, но естественно, выходной вектор должен зависеть от входного, иначе сеть не сможет обучиться. Некоторые архитектуры могут самообучаться, но чаще применяется обучение с учителем (т.е. на примерах): изначально, как я уже писал, сеть ничего не знает, но после удачного обучения сеть может делать отображение с заданной точностью. Т.е. например, мы хотим чтобы сеть складывала числа, для этого её сначала нужно обучить на показательных примерах, т.е. чтобы они учитывали все закономерности, которые нам нужно, чтобы сеть воспроизводила, набор примеров должен быть сбалансированным. Классический алгоритм обучения с учителем - это алгоритм обратного распространения ошибки - это итерационный алгоритм минимизации многомерной функции методом градиентного спуска, вычисляющий для этого частные производные функции ошибки по весам нейросети для каждого нейрона. Многомерная функция - это функция ошибки сети, которая показывает точность вычислений нейроссети, это может быть, например, средняя квадратная разность координат выходного и целевого векторов. Функция ошибки является n-мерной, где n - число весов сети. Веса, собственно, задают сеть в выбранной архитектуре. Поэтому задача обучаения - это задача вычисления значений этих весов. Фишка алгоритма обучения обратным распространением ошибки состоит в том, что он позволяет быстро вычислять частные производные функции ошибки в данной точке, причём не только для выходнго слоя, что довольно просто, но и для скрытого. Далее веса модифицируются в соответствии с тем, как они влияют на значение ошибки. Общий алгоритм обучения - это цикл вычислений ошибки сети и модификация весов, цикл заканчивается в лучшем случае если ошибка сети стала меньше заданной.

С уважением, Ваш младший товарищ.

Ne-Ld, а что такое теорвер? Первый раз слышу, это к чему относится?


 
Gero ©   (2007-01-17 04:27) [9]

> [8] ors_archangel ©   (17.01.07 04:14)
> Ne-Ld, а что такое теорвер?

Видимо, имеется ввиду тервер.


 
Ne-Ld   (2007-01-18 00:28) [10]

ors_archangel ©
1. Спасибо за развернутый ответ.  
2. Прошу прощения за сленг.=) (он в разных ВУЗах разный немного =) )
теорвер - Теория вероятностей и\или стохастических процессов, Математическая статистика - короче много названий =), разные люди называют по разному, но суть от этого не меняетя.(да, я понимаю, что отличия есть, но это сейчас не существенно )
Начинается с аксиоматики Колмогорова и пошло поехало...
3.Меня несмотря на все что то манят нейросети. Подскажите книжку какую стоящую... А вот! Видел сегодня в книжном магазине толстый талмуд по сабжу, автора к сожалению забыл, но толщина меня потрясла =). Бегло просмотрел - вроде бы ничего так написано. Вот сейчас думаю покупать или нет? 900рублей все таки(я просто надеюсь что Вы ее знаете - сейчас она почти в каждом магазине есть и толщиной своей выделяется неслабо). М... завтра надо будет зайти автора посмотреть еще разок...


 
Думкин ©   (2007-01-18 08:26) [11]

> Ne-Ld   (18.01.07 00:28) [10]

Я в нейросетях ни бум-бум, не иньтерисовался и не сталкивался. Тут скорее поможет Alex2 - он вроде в теме, да и почти доктор. :)


 
Jeer ©   (2007-01-18 10:49) [12]

Рекомендую посмотреть:

http://www.basegroup.ru/neural/
http://www.basegroup.ru/neural/fastneuralnet.htm


 
ors_archangel ©   (2007-01-18 14:12) [13]


> Ne-Ld   (18.01.07 00:28) [10]

Не Саймон Хайкин "Нейронные сети"?


 
@!!ex ©   (2007-01-18 14:21) [14]

Общие познания в плане нейросетей немного устарели.
Сейчас сети обычно изначально строятся под конкретную задачу.
Плюс метод обучения - трассировка(был представлен в 2002 году) - позволяет добиться очень быстрого обучения.
Случайностью в нейросетях и не пахнет. Как раз наоборот, нейросеть способна выявлять закономерности и по ним строить предположения о тех ситуациях, которые ей не были заданы в процессе обучения.
Сеть изначально забивается случайными значениями, а если забивать 0(что вроде бы логично) сеть в большинстве случаев вообще не сможет обучиться.
Нейросеть - это ОЧЕНЬ сложная функция. И с математической точки зрения сами принцыпы весьма сложны, поэтому сеть обычно описывают просто.
Математика, что может быть проще 2+2? А если начать рассуждать о группах, полях и т.д?
НЕйросети - способны очень сложные задачи одного вида и не спообны решать задачи простые, но другого вида.
Ничего особенно чудесного в них нету, просто очень мощная вещь и все.


 
ancara ©   (2007-01-18 17:03) [15]

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

Artificial Neuronal Network Trial Version
(c) Copyright 2001 by logiware gmbh

это вообще пакет компонентов для делфи там есть скомпилированный пример работы нейронной сети - распознавание символов, очень все наглядно в картинках показано.


 
ancara ©   (2007-01-18 17:04) [16]

скачать триал можно тут: http://www.logiware.de/ann/


 
ors_archangel ©   (2007-01-19 05:46) [17]


> @!!ex ©   (18.01.07 14:21) [14]

Ух-ты! не может быть, наконец-то что-то придумали :)))))))))
Можешь дать хттп на алгоритм (трассировки), если не сложно, пожалуйста.
(По инету нашёл много всякой всячины, но самое похожее - 1998 года, наверно не то, называется "Subspace Tracking and NN Learning by a NIC", и там жестокая математика)


 
@!!ex ©   (2007-01-19 08:22) [18]


> ors_archangel ©   (19.01.07 05:46) [17]

Боюсь не помогу...
ВСе познания о трассировке и построению сетей из бумажных книг.
Даже названия не смогу сказать, поскольку книги эти сейчас не у меня.
Позже. Заберу, скажу.


 
Ne-Ld   (2007-01-21 21:34) [19]


> ors_archangel ©   (18.01.07 14:12) [13]
>
>
> > Ne-Ld   (18.01.07 00:28) [10]
>
> Не Саймон Хайкин "Нейронные сети"?

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


 
Loginov Dmitry ©   (2007-01-21 22:07) [20]

Могу Осовского рекомендовать почитать.

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


 
Ne-Ld   (2007-01-22 14:55) [21]

>Loginov Dmitry ©   (21.01.07 22:07) [20]
Благодарю за совет.


 
KygECHuK ©   (2007-01-22 16:02) [22]

[8]  To ORS Respect !!!!. Только вирусов больше не пиши ;-)). При встрече перетрём сабж. если только математические методы сдаш :)).


 
Jeer ©   (2007-01-22 16:46) [23]


> то считаю все это весьма наукоемким всемирным обманом.


И, разумеется, за исключением TMatrix :)))


 
Loginov Dmitry ©   (2007-01-22 18:43) [24]

> И, разумеется, за исключением TMatrix


Я еще не писал нейросети на нем! :)


 
Jeer ©   (2007-01-22 18:52) [25]


> Loginov Dmitry ©   (22.01.07 18:43) [24]


> Я еще не писал нейросети на нем! :)


Вот когда напишешь - будет всемирный адман в квадрате:))
Ладно, не бери в голову - я уже тебе говорил как-то: это учебный (для тебя) проект.
Всего лишь не надо из него пытаться создать видимость чрезвычайно полезного другим.
Другие пользуются другими возможностями - более адекватными решаемым реальным практическим задачам.


 
Loginov Dmitry ©   (2007-01-23 07:40) [26]

Интересно, у кого из нас больше голова об этом болит :))


 
Ne-Ld   (2007-01-23 14:10) [27]

Что можно использовать для поиска скрытых закономерностей, тогда, коли нейросети отпали (видимо)? В какую сторону рыть, что читать etc?


 
Jeer ©   (2007-01-23 14:22) [28]

- авторегрессии
- МГУА
- метод "Гусеница"
- вейвлет/фурье


 
Ne-Ld   (2007-01-23 15:16) [29]

2Jeer ©
О! Уже кое что есть! Спасибо - пойду покурю =).



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.047 c
8-1150563709
Denister
2006-06-17 21:01
2007.02.11
конвертировать RTF в простой текст (без VCL)


3-1164284677
salexn
2006-11-23 15:24
2007.02.11
Ошибка при установке MSSQL 2000, проблемы с драйвером ODBC


15-1169060320
Джо
2007-01-17 21:58
2007.02.11
Как глушить эмоции?


2-1169397407
FLOGISTONE
2007-01-21 19:36
2007.02.11
Определение имени текущей директории.


15-1169417054
Xyper
2007-01-22 01:04
2007.02.11
AT команды





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский