Обсуждение:Нейронная сеть Хопфилда

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Необходимость введения[править код]

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

Миф и реальность[править код]

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

Начнем по порядку.

  • "Процесс эволюции сети Хопфилда во времени называется конвергенцией"

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

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

Из-за ОШИБКИ в таком определении идет дальнейший поток непонятных словочетаний

  • "Различают два вида конвергенции: асинхронную и синхронную"

Не может быть таких видов. Асинхроность и синхроность - это виды того как приходят сигналы, или процесс того как обрабатывается информация. У нас первый случаи ... определения асинхроности и синхроности для НЕЙРОСЕТЕЙ дал Розенблатт и достаточно четко (могу потом привести) ... НИ С ОДНОЙ асинхроной сетью я не знаком - их просто нет, а есть лишь общие разговоры ... С сходимостью это может быть связанно лишь тем, что при асинхроности нельзя добится устойчивости сети - т.е. нет известного алгорима обучения в асихнроных сетях, который приводил бы к схождению. поэтому все известный сети - синхронные.

  • А вся энергетическая байда с аттаракторами и спинами притянута за уши, и ее можно выделить отдельно по заголовком "Энергетическая интерпретация работы сети"

НО главное ВСЮ это не является специфичным для сети Хопфилда, лишь как исторический факт, что появилась оригинальная интерпретация и идеи об обратных связях ... а с точки зрения технической ИНС - ОНА не заслуживает ВНИМАНИЯ ... т.к. такая сеть в принципе не работоспособна (но это опять отдельный разговор) ...

Конечно, хотелось бы сделать это хорошей статьей, но браться мне за это пока нет сил ... нужно почти все переписывать ... SergeyJ 22:42, 21 мая 2008 (UTC)[ответить]


> Из-за ОШИБКИ в таком определении идет дальнейший поток непонятных словочетаний
Где ошибка, я так и не понял? В режиме работы (а не обучения) сеть Хопфилда приводится в начальное состояние, несколько временных шагов меняет свое состояние, и приходит (часто) в стабильное состояние. Этот процесс называется конвергенцией исторически, вне зависимости от того, кажется этот термин удачным или нет.
Нужно как минимум уточнить ссылку на слово "конвергенция", а то не понятно в каком смысле это слово используется, вначале мне показалось, что в смысле сходимости при обучении, но теперь сдается мне, что вы имеете введу стабилизацию колебательного процесса. Использовать слово конвергенция здесь очень не удачно, а если это дело историческое, то нужны конкретные ссылки серьезных авторов (Хопфилда например), которые так это назвали - и объяснений, что именно имеется введу. Посмотрел Хайкина, как он описывает сети Хопфилда - он как то обходится без этого "исторического" слова - и очень удачно надо заметить - прямо говорит об устойчивости, и когда она теряется ... SergeyJ 22:27, 22 сентября 2008 (UTC)[ответить]
да, Хайкин действительно его не использует, а в разных местах употребляет выражения "извлечение информации" и "коррекция состояний". К сожалению, у меня нет под руками английского текста, чтобы убедиться, что это не недостатки перевода. В любом случае, оба термина не кажутся мне более удачными. Кстати, там же у Хайкина написано про синхронный и асинхронный режимы работы. --3d6 10:23, 23 сентября 2008 (UTC)[ответить]


> НИ С ОДНОЙ асинхроной сетью я не знаком - их просто нет
Если не верите на слово - свяжитесь со мной, я вам как-нибудь пришлю синхронную и асинхронную реализации сети Хопфилда. Причем отличие синхронной конвергенции от синхронной будет именно таким, как я написал в статье.
Обязательно пришлите - мой майл tac@inbox.lv ... но думаю расхождение у нас в терминалогии, вы под синхроностью, асинхроностью что-то другое понимаете - мне не понятно что ? SergeyJ 22:06, 22 сентября 2008 (UTC)[ответить]
я тоже уверен, что разница в терминологии. Однако то, что я имею в виду под синхронностью/асинхронностью, как раз изложено в статье. Пошлю на днях, надо поднять лабы которые я студентам составлял, у меня были там вроде наглядные реализации... --3d6 10:23, 23 сентября 2008 (UTC)[ответить]
> т.к. такая сеть в принципе не работоспособна
Какая сеть не работоспособна? --3d6 11:45, 19 сентября 2008 (UTC)[ответить]
Да именно эта сеть Хопфилда :) Хотя ниже вам кажется уже говорят, что она не решает задач распознования - тогда понятно - не решает, так не решает - и нафиг она мне тогда нужна ... Не работоспособна она для распознования из-за одного слоя связей, такая сеть не решает задачи XOR, а способ обучения (которого по сути нет - простое перемножение матриц) тем более не позволяет это сети сходится ... SergeyJ 22:06, 22 сентября 2008 (UTC)[ответить]
ниже как раз дело говорят... --3d6 10:23, 23 сентября 2008 (UTC)[ответить]

Неточности и исправления[править код]

Простите, на сегодня в статье много неточностей. Начинаю исправлять. 1) Следующее утвержление неверно: "Проблема устойчивости ставила в тупик первых исследователей. Никто не был в состоянии предсказать, какие из сетей будут устойчивыми, а какие будут находиться в постоянном изменении. Более того, проблема представлялась столь трудной, что многие исследователи были настроены пессимистически относительно возможности решения. К счастью, в работе [1] была получена теорема, описавшая подмножество сетей с обратными связями, выходы которых в конце концов достигают устойчивого состояния. Это замечательное достижение открыло дорогу дальнейшим исследованиям и сегодня многие ученые занимаются исследованием сложного поведения и возможностей этих систем."

Стабилизация состояния СИММЕТРИЧНЫХ сетей была хорошо известна задолго до Хопфилда (например, Розоноэру и Браверману), и факт этот очевиден каждому, кто хоть раз в жизни строил квадратичную функцию Ляпунова. Были даже дискуссии "Что же всё-таки сделал Хопфилд". Главное достижение - мостик между физикой спиновых стёкол и НН.
Фрагмент удаляю--Agor153 10:36, 5 сентября 2008 (UTC)[ответить]
PS. Нашел, откуда списан данный абзац (книга Уоссермена). Там всё же не совсем о сетях Хопфилда, а шире. Для симметричных сетей проблемы устойчивости никогда не было.--Agor153 00:24, 6 сентября 2008 (UTC)[ответить]
Нашли то правильно, но вот почему шире не понятно (особенно, если именно в этом разделе Вассерман пишет :) Хотя зная его описание перцептрона - вполне могу поверить, что он все переврал - но тогда давайте разбераться по сути). Вот, например, Хайкин пишет, что даже если имеются только симметричные матрицы, то устойчивость сети Хопфилда не всегда возможна, особенно когда превышается определенный лимит емкости памяти ! Поэтому фраза Вассермана отражала как раз истину в данном случае. Т.е. симметричность не является достаточным условием стабильности, необходимым условие - да, но не достаточным ! SergeyJ 22:00, 22 сентября 2008 (UTC)[ответить]
Сударь, в непрерывном времени релаксация сети с симметричной матрицей связей - это просто движение по антиградиенту энергии - отсюда устойчивость каждого локального минимума. Испортить это можно, при желании, но надо очень постараться. Если на каждом шаге энергия уменьшается, то никакая нетривиальная динамика невозможна. Попадание в седло или наличие седлоузлов - ситуация негрубая. Все на уровне упражнения (доказательство - в две строчки) и емкость памяти здесь не при чем.--Agor153 04:46, 23 сентября 2008 (UTC)[ответить]
PS. Да, а какая устойчивость зависит от емкости памяти тоже известно - это устойчивость эталонов. При малом числе и почти полной нескоррелированности эталонов они соответствуют устойчивым стационарным состояниям сети. Если же эталонов слишком много или они сильно скоррелированны (подчеркну, что важно не только количество но и скоррелированность), то ИХ устойчивость не гарантируется, и вообще сходимость к эталону вовсе не обязательна. Тем не менее, симметричная сеть сходится к устойчивому состоянию - устойчивость в смысле динамики есть.--Agor153 05:09, 23 сентября 2008 (UTC)[ответить]
Так вот именно об этом я и говорю ! Из статьи это - ну совершенно не очевидно ! А вот слова про энергию - надо бы писать отдельно от описания собственно сети - например в подразделе "Энергетическая интерпретация", т.к. иначе все в куче и не понятно причем здесь вообще сеть - как известно есть так же алгебраическая и геометрическая интерпретация, но их обычно дают тоже отдельно, а не в описании сути сети. Более того, именно скоррелированность - если в памяти будут два эталона буква "Т" и "Г" - то эта сеть не запомнит эти эталоны, и соответственно будет не способна, есть шанс для букв "I" и "O", т.е. нескорелированность возможно лишь в тех эталонах, которые практически не пересекаются ... Иначе труба ... Это и нужно отразить в статье ! SergeyJ 08:58, 23 сентября 2008 (UTC)[ответить]
Следующая ссылка не вполне релевантна (Сети Хопфидла - не "competitive"). В аннотации она неуместна. Cohen M. A., Grossberg S. G. 1983. Absolute stability of global pattern formation and parallel memory storage by competitive neural networks. IEEE Transactions on Systems, Man and Cybernetics 13:815-26.--Agor153 11:00, 5 сентября 2008 (UTC)[ответить]
Прошу прощения, буду потихоньку править дальше. Например, сети Хопфилда не решают задачи распознавания (они могут использоваться как предобработчик в таких задачах, фильтрующий шумы и удаляющий повреждения образа, но распознавание - это другая задача).--Agor153 11:07, 5 сентября 2008 (UTC)[ответить]
Может они и действительно не решают задачи распознования, но тогда как они могут реализовывать ассоциативную память ? И как это понимать - эта сеть не может сделать прогноз, она не строит модель между входами-выходами, а только каким то образом - просто фильтрует шум - очень похоже ... но очень часто встречаюсь с тем, что заявляется как раз обратное ... SergeyJ 22:12, 22 сентября 2008 (UTC)[ответить]
Сеть Хопфилда в том числе может решать задачу распознавания. Сеть приводит образ, который нужно распознать, к одному из стандартных образов, который можно превратить в номер класса простым побайтовым сравнением с имеющимися образцами - по-моему этого вполне достаточно, чтобы считать что она выполняет распознавание --3d6 11:45, 19 сентября 2008 (UTC)[ответить]
Сударь, вы правильно описали фильтрацию - предобработку для распознавания. Оцените, однако, процедуру попиксельного сравнения (со всеми образами!), которую Вы предлагате для окончания распознавания - это превращение образа в номер класса и есть распознавание. Эта процедура стоит (по порядку сложности) примерно столько, сколько вычисление расстояния Хемминга до всех образов, а если мы его умеем дешево вычислять - то и сеть Хопфилда никчему. Добавлю еще, что сеть Хопфилда не обязательно приводит к одному из эталонов, что тоже не вписывается в стандартную постановку задачи о распознавании.--Agor153 08:35, 21 сентября 2008 (UTC)[ответить]
ОМФГ, давайте еще поругаемся х__х Конечно, можно считать что все что не дает на выходе номер класса - не проводит распознавания. Но человек, читающий статью, либо достаточно умен, чтобы понять, что состояние сети - это все-таки не номер класса, и перевести в номер его надо отдельно, либо достаточно спешит, чтобы его интересовало только то, используется сеть в распознавании образов, или нет. Если написать что-то в духе "данная сеть не распознает образы, а только выполняет фильтрацию" - то вторая категория людей прочитает "данная сеть не распознает образы" и будет потом в это искренне верить, хотя такое утверждение достаточно далеко от истины. Особенно если нам вдруг почему-то нужен ответ не в виде номера класса, а в виде эталона представителя класса. --3d6 11:05, 22 сентября 2008 (UTC)[ответить]
Сударь, понимаю Ваше возражение, и даже где-то с ним согласен (не являюсь терминологическим занудой и не очень их люблю). НО (а) для распознавания к сети Хопфилда нужна еще надстройка не менее сложная, чем сама сеть - система попиксельного сравнения с последующим выбором ближайшего; (б) идея энциклопедии предполагает чуть большую степень занудства в терминологии, чем мы привыкли допускать в популярных текстах и лекциях. Короче, если говорить о распознавании, то с оговоркой о, скажем, слое Кохонена с победителем, забирающим все, надстроенным для постпроцессинга результатов работы сети Хопфилда. Хотите - предлагайте здесь или правьте смело (но с учетом этого замечания).--Agor153 04:46, 23 сентября 2008 (UTC)[ответить]
Тот текст который сейчас есть достаточно точно отражает происходящее, и вроде никого не должен вводить в заблуждение. Но если менять формулировки, то надо будет хорошо подумать. --3d6 09:53, 23 сентября 2008 (UTC)[ответить]
PS. Да, нашел вроде подходящее объяснение. Вот, есть у меня подпорченная фотография, и непонятно, кто на ней изображен (но уверен, что кто-то, кто у меня есть в базе эталонов). Нормализую изображение и подаю его сети Хопфилда. Изображение прояснилось. Но я еще не знаю, кто это - мне нужно имя. Распознавание еще не совершилось. После этого сравниваю с эталонами - и нахожу, кто. А мог бы и сразу сравнить...--Agor153 05:03, 23 сентября 2008 (UTC)[ответить]
да, но может быть вот какая ситуация: фотографий у нас 50 штук, а размер их 300х300 каждой. И при предобработке мы строим индексацию - выбираем несколько (10-20) пикселей, состояние которых однозначно идентифицирует данную фотографию. И тогда если сеть Хопфилда сошлась к запомненному образу, а не еще куда, то сравнить его со всеми эталонами будет намного дешевле, чем считать расстояние до каждого. Также, мы можем дополнить образ полем для записи номера (50 пустых пикселей, один из которых, соответствующий номеру, закрашен) - и тогда определение класса также будет очень быстрым. В общем, к распознаванию при желании можно подойти очень близко --3d6 09:53, 23 сентября 2008 (UTC)[ответить]
А вы представьте себе другое - при расчете матриц связей (обучении) вы имеете таблицу соответствий "Изображение-Имя" (вход-выход), в работе на вход подадите зашумленное изображение ... так что сеть не сойдется к ближайшему имени ? Если нет ... то действительно прока от этой сети как минимум в распозновании образов не много, и повторяю тогда свой вопрос какая же тогда возможна ассоциативная память ? SergeyJ 09:05, 23 сентября 2008 (UTC)[ответить]
Чтобы подавать вход-выход в виде "фотография-фамилия", нужна другая модель, например гетероассоциативной памяти. Автоассоциативная в принципе не может дать на выходе фамилию, если на входе фотография (ну разве что случайно и в виде картинки :)) --3d6 09:53, 23 сентября 2008 (UTC)[ответить]
Несколько более по человечески переписал раздел "Динамика" -> "Описание работы сети" ... нужно добавить более детальное описание, но не превращать описание в набор непонятных слов (мне и то было тяжко понять о чем идет речь, а что же тогда поймет человек который почти ничего не слышал о ИНС?) SergeyJ 23:54, 23 сентября 2008 (UTC)[ответить]
О нет! Теперь там написана просто неправда! Убедительно прошу не править того, что вы плохо понимаете. Конвергенция - это не состояние, это процесс достижения устойчивого состояния. Также, более чем нелогично отделять синхронную конвергенцию от асинхронной заголовком - отличие только в способе просмотра нейронов. Автоматически убрать это не получается, так что прошу вернуть раздел "динамика" к виду, который был 6го сентября. --3d6 11:05, 24 сентября 2008 (UTC)[ответить]
1. Это еще вопрос - кто что понимает, а вот пишите вы совершенно не удобоваримо ; 2. Где вы нашли, что я написал, что конвергенция это состояние ? Вот наконец-то с вас и получилось вытянуть что же такое "ваша" конвергенция - так и пишите вместо слова конвергенция "процесс достижения устойчивого состояния" (все же не "эволюция во времени" :) хоть какую-то белебирду убрали, это же надо додуматься написать) - и не нужно вводить никому не поняты термины со "своим" узкоспецифичным смыслом ! 3. Разделять обязательно нужно ! И при этом надо начинать с синхроной, а не наоборот. 4. Возвращать в состояние которое нельзя прочитать - не буду. Сейчас написанно на порядок понятнее, если где то пострадал смысл - будем обсуждать конкретно и построчно ! SergeyJ 22:25, 24 сентября 2008 (UTC)[ответить]
Сейчас написано неправильно. Сходите, пожалуйста, по ссылке "конвергенция" и посмотрите значение этого слова. Потом еще раз перечитайте версию от 6го сентября. Потом или исправьте, или объясните, почему ваше определение конвергенции, как устойчивого состояния, имеет право на жизнь. Эволюция во времени и процесс изменения состояний во времени - одно и то же по смыслу. И то, и другое, называется процессом конвергенции, который непременно завершится устойчивым состоянием в асинхронном случае, и устойчивым состоянием либо 2-циклом в синхронном случае. По поводу 3: неважно с чего начинать, однако формула должна быть в том параграфе, с которого будет начинаться описание, а 2й параграф должен начинаться с "в отличие от рассмотренного выше случая...". Также, нужно упомянуть динамические аттракторы, ибо самое интересное различие между этими случаями именно в них. --3d6 09:52, 25 сентября 2008 (UTC)[ответить]
"Эволюция во времени" - это бред, т.к. эволюция это уже и так процесс развития происходящий плавно за какое-то время, при этом как то слух режит когда о физической системе говорят эволюция, например, "эволюция песка во времени" - это что по вашему ? Теперь по делу ... прежде чем писать что-то о синхроном, асинхроном способе - нужно дать определение локального поля - что именно вы под этим имеете введу ? Дайте определение или пояснение ... только не вообще, а именно по отношению к сети Хопфилда ! SergeyJ 02:01, 26 сентября 2008 (UTC)[ответить]
"Эволюция во времени" - стандартная формулировка в физике (странно что она вам не кажется естественной, хоть я физик только по образованию, но видел ее везде), которую использовал в том числе лично Хопфилд (почитайте статью по первой ссылке в списке литературы) - "The algorithm for the time evolution of the state of the system is based on asynchronous parallel processing". "time evolution of the state" переводится как "эволюция состояния во времени". Локальное поле определяется в статье, в отредактированной вами (да, да) части "Асинхронный способ достижения устойчивости": hi = TijSj, это сумма произведений состояний всех остальных нейронов на веса связи с этими нейронами. Я очень рад, что вы наконец-то согласились, что эта формула должна стоять раньше. --3d6 09:50, 26 сентября 2008 (UTC)[ответить]

Далее было бы не плохо сказать конкретно - "устойчивость состояния" чего ? Если вы в этом хорошо разбираетесь - сформулируйте ? SergeyJ 22:29, 24 сентября 2008 (UTC) Я понял, что вас смутило и подправил так, чтобы небыло путаницы с устойчивостью и процессом ее достижения ... SergeyJ 22:40, 24 сентября 2008 (UTC)[ответить]

Просто кошмар. "момент, когда достигается устойчивость" называется аттрактором. Конвергенцией называется процесс перехода сети из некоторого состояния в аттракторное состояние. Версия от 6го сентября описывала все вполне корректно, даже если, возможно, там были не самые удачные формулировки, то таких принципиальных ошибок там уж точно не было. Еще раз убедительно прошу вернуть эту часть статьи к версии от 6го сентября. --3d6 09:52, 25 сентября 2008 (UTC)[ответить]
Ну, и зачем нервничать ... ваши пояснения я внес, оказывается можете выражаться и давать нормальные определения, но не понимаю почему вы хотите заставлять читать билеберду читателя ? Теперь еще неясно следующие - если "момент, когда достигается устойчивость" называется аттрактором, то речь идет о статическом аттракторе или динамическом. Наверное о первом, т.к. динамический это как раз момент когда НЕ достигается устойчивость, а происходит зацикливание ? SergeyJ 01:37, 26 сентября 2008 (UTC)[ответить]
Если вы чего-то не понимаете, это не беда. Беда, если вы принципиально отказываетесь понимать написанное. Прочитайте, пожалуйста, очень вдумчиво и внимательно версию от 6го сентября. На все ваши вопросы там есть ответы. В частности, динамический аттрактор - это не то же самое, что устойчивое состояние. Это именно аттрактор, т.е., грубо говоря, траектория системы, на которую она может попасть, но с которой она не может уйти. И поэтому в старой версии сначала рассматривалась асинхронная конвергенция, при которой динамические аттракторы невозможны и "аттрактор" можно было заменить на "устойчивое состояние", а потом объяснялось, чем отличается синхронная. Кстати, заголовок "Синхронный способ достижения устойчивости" - ошибочен, поскольку можно попасть в динамический аттрактор. Поэтому используют слово "конвергенция", которое верно как для перехода в статический, так и в динамический аттракторы. --3d6 09:50, 26 сентября 2008 (UTC)[ответить]
Вы не сказали ни чего нового умудрившись меня обвинить в непонимании - можете мне поверить на слово - я все прекрасно понимаю, что вы говорите ... - мене не устраивают ФОРМУЛИРОВКИ ! Будьте немного проще ... объясняйте проще - чтобы человек не знакомый с ИНС мог понять о чем вы пишите ... Жду конкретный ответов на мои вопросы - уверяю вас их у вас небыло и нет до сих пор (вдумайтесь в вопросы :) ), более того впешите ваши ответы в текущую статью ! Только довайте договоримся не удалять - а только (хотя бы пока)

добавлять. Теперь по сути вопроса ... заголовок "Синхронный способ достижения устойчивости" - тот факт, что при этом можно попасть в динамический аттрактор нисколько не делает ошибочным заголовок (заголовок Теория тяготения Ньютона - не является ошибочным от того, что в ряде случаев нужно применять ОТО). В этом разделе должны быть описаны каким образом можно достигнуть устойчивости - показать почему в ряде случаев это не возможно - И ТОЛЬКО потом перейти к более сложному способу достяжения устойчивости. Ведь достяжение устойчивости есть цель в работе сети Хопфилда. Этой цели можно добится двумя известными способами. А то, что один способ храмает, это еще не означает, что такого способа не существует или он не верен. И еще перестаньте мне преписывать то, что я никогда не говорил ! Дураку понятно, что "динамический аттрактор - это не то же самое, что устойчивое состояние", но ведь Вы сами писали "момент, когда достигается устойчивость" называется аттрактором. Вот и уточняйте СВОИ СЛОВА ! SergeyJ 21:05, 26 сентября 2008 (UTC)[ответить]

Касательно, поста выше ... незнаю что у вас там на жаргоне, но по мне так по русски не говорят, допустимые словочитания - "эволюционирование чего-то в течении времени", "эволюционирование чего-то за промежуток времени". Итак, касательно локального поля: это не что иное как результат передающей функции нейрона, т.е. это по сути простое суммирование весов активных нейронов в предыдущий момент времени. Опять же зачем нужно было вводить излишний термин ? Для энергетической интерпретации ? Ее нужно отделить от собственно описания алгоритма работы сети. И конечно, ее можно дать еще раньше, т.к. она описывает саму сущность сети, а не относится к виду достижения устойчивости. SergeyJ 21:31, 26 сентября 2008 (UTC) Т.е. по сути когда вы говорите про локальное поле вы говорите о одном из условий справедливых для простого перцептрона Розенблатта "*# все активирующие функции S-, A-, R-элементов имеют вид , где — алгебраическая сумма всех сигналов, поступающих одновременно на вход элемента " - т.е. локальным полев "вы" (или Хопфилд) назвали где . Но что это такое в теории ИНС нужно обяхательно дать пояснение ! SergeyJ 21:41, 26 сентября 2008 (UTC)[ответить]
Итак, по пунктам: 1. исправить не удалив некоторую часть текста я не могу, т.к. результат окажется изложен совершенно непоследовательно и, соответственно, непонятно. 2. "ведь Вы сами писали "момент, когда достигается устойчивость" называется аттрактором. Вот и уточняйте СВОИ СЛОВА" - момент, когда достигается устойчивость, называется аттрактором, это верно. Только аттрактор - более широкое понятие, им называются и другие состояния, тут нет противоречия. В частности, все возможные конечные состояния сети Хопфилда - аттракторы, но не все из них - "устойчивые состояния", и именно поэтому вообще используется слово "аттрактор". 3. Насчет эволюции во времени - не говоря уже о том, что лично я считаю, что это совершенно естественная формулировка, ЕЕ ЖЕ использует Хопфилд. Не кажется ли вам, что если мы пишем о сети Хопфилда, было бы логично прислушаться к его мнению насчет терминов? 4. Термин "локальное поле" ввел не я, он использовался до моих правок. Мне он не кажется ни удачным, ни неудачным, соответственно, исходя из правил википедии, я его не трогал. Если вам он кажется категорически неудачным, предложите и аргументируйте замену. ИМХО, с учетом того, что в тексте приводится абсолютно очевидная формула для его вычисления, нет нужды подбирать другие слова. 5. Предлагаю следующий компромисс: если до понедельника вы не внесете таких правок, которые приведут статью в приемлемый с моей точки зрения вид (главное, что меня принципиально не устраивает - это логически бессвязное разделение синхронного и асинхронного случая, без должного описания динамических аттракторов), я внесу свои правки, после чего вы изложите полный список пунктов, которые вас не устраивают в моей версии, здесь в обсуждении (без правки самой статьи), и мы попробуем прийти к консенсусу. --3d6 12:33, 27 сентября 2008 (UTC)[ответить]
2. Нет. Такого быть просто не может. Аттарактор - это не устойчивое состояние ! Оно устойчиво только в смысле динамики (колебаний из состояния в состояние) - поэтому не стоит аттарактором называть все что только возможно - это вносит изрядную долю путаницы. 3. Не удачные термины, особенно с неудачным переводом - не самое лучше что нужно использовать. 4. Хорошо, я попробую переписать без термина "локальное поле". 5. Да, я настаиваю на разделение синхронного и ассинхронного случая, к сожалению у меня небыло времени привести в порядок, то, что там написанно - я просто перебросал ваши слова. У меня не так много времени, до понедельника у меня не хватит времени - ориентировочно дайте мне неделю, как закончу я здесь напишу - затем внесете свои коррективы, они возможно понадобятся для энергетиче6ской интерпретации работы сети, я заведу отдельный для этого раздел, где сделаю всего лишь набросок, что там следует написать - вы затем сможете его переписать - но пожалуйсто только понятным человеческим языком.
SergeyJ 11:21, 28 сентября 2008 (UTC)[ответить]
Ок, если есть продвижения, то конечно я готов подождать неделю, или больше, если будет необходимо. Я буду по ходу правок вносить замечания в обсуждении ниже. --3d6 08:58, 29 сентября 2008 (UTC)[ответить]

Новый цикл исправлений[править код]

Достаточно серьезно переработал материал и добавил новую информацию, над разделами "2. Обучение сети" и "3.Работа сети ... " я еще подумаю в течении недели, хотя в грубом виде уже готово, нужна лишь чистовая полировка. Другие разделы пока править не собираюсь, поэтому можем работать параллельно над статьей. Скажем раздел "4. Устойчивость сети" можно дополнить или видоизменить - в этом месте у меня не так много знаний, и было бы не плохо, чтобы после окончания работы над этим разделом стало бы понятно, почему только в асинхроном режиме ГАРАНТИРОВАННО (или на самом деле судя по всему все же не до конца) гарантируется достижение устойчивого состояния. Так же если мало этого раздела для энергетической интерпретации (т.к. разделы 2 и 3 я все же старался писать как обычно принято для повествования о ИНС без этой энергетической интерпретации), то можете ввести еще один раздел, например 5. Энергетическия интерпретация или же что нибудь более подробнее о спиновых стеклах ... SergeyJ 15:47, 28 сентября 2008 (UTC) Да еще разговоры о ложных состояних (химерах) перенес в ограничения сети, если есть более подробное объяснение почему они возникают - можно это там добавить. Обозначения и термины пытаюсь свести к одному виду, поэтому просьба согласовывать, а не разными буквами обозначать одно и тоже ... это, например, важно когда будет даваться энергетическая интерпретация, там желательно указывать что вот это есть вот это, а буквы оставлять по возможности одни и те же ... SergeyJ 15:54, 28 сентября 2008 (UTC) В принципе можете начинать критиковать разделы 2 и 3, т.е. в принципе все, что я написал и переделал ... возможно быстрее найдем неточности и двухсмысленные выражения ... SergeyJ 16:18, 28 сентября 2008 (UTC)[ответить]

Есть одно крайне важное замечание - сеть Хопфилда нельзя считать обучающейся без учителя. Т.к. мы задаем образы, которые следует запомнить, извне. Если просто подавать ряд образов этой сети - она ничему не обучится, т.к. не будет знать, какие образы надо запоминать, а какие - фильтровать. Также, в принципе сетью Хопфилда называется именно сеть с симметричной матрицей, а следовательно обязательно имеющая устойчивое состояние (или устойчивый 2-цикл в синхронном случае), так что хотя рассуждения про симметрию и устойчивость уместны, этот момент стоит выделить более явно. Также, надо будет подробнее рассказать про динамические и ложные аттракторы, но это стоит добавлять когда основная часть примет окончательный вид --3d6 09:08, 29 сентября 2008 (UTC)[ответить]
По поводу обучения без учителя я действительно сомневался, если посмотрите эту версию то увидите, что написано ровно наоборот. Но что меня сподвигло на изменение - для обучения сети нужны ТОЛЬКО эталоны, нету привычных пар "стимул-реакция", соответствия вход-выход, поэтому такое обучение нельзя отнести к обучению с учителем. Посмотрите подробнее статью обучение без учителя сеть Хопфилда все же подходит под это определение, т.к. при фильтрации ищутся взаимосвязи между эталонами. А если за учителя считать действие "Если просто подавать ряд образов этой сети - она ничему не обучится, т.к. не будет знать, какие образы надо запоминать, а какие - фильтровать." то тогда НИ ОДНУ сеть нельзя отнести к обучению без учителя. Разделение на этапы обучение-работа и указание этого факта сети не есть компетенция учителя ... любая сеть должна знать в каком режиме она сейчас находится. SergeyJ 15:00, 29 сентября 2008 (UTC)[ответить]
Про устойчивость можете уже внести ряд правок, т.к. я врядли что то еще напишу ... только прошу не путайте устойчивость и устойчивый 2-цикл. Последние я называют - неустойчивость, а Минский критикуя перцептрон пытался как раз показать, что перцептрон может зациклится - это и есть ваш 2-цикл (точнее n-цикл) - и это есть большой недостаток сети. Более того, неустойчивость или зацикленность (ваш устойчивый 2-цикл ) - есть признак того, что при обучении не произошло сходимости ... это я возможно впишу в статью, но лучше после ваших добавлений. Надеюсь все коррекции про устойчивость можно описать в пределах раздела "4. Устойчивость сети" SergeyJ 15:14, 29 сентября 2008 (UTC)[ответить]
"Но что меня сподвигло на изменение - для обучения сети нужны ТОЛЬКО эталоны, нету привычных пар "стимул-реакция", соответствия вход-выход, поэтому такое обучение нельзя отнести к обучению с учителем" - именно что есть, только немного в другом виде. Мы говорим сети, что она должна свести вход к одному из предложенных нами эталонов (грубо говоря, каждый эталон и есть той самой парой "вход-выход" - для обучения мы по сути решаем уравнение на матрицу связей: WX=X). А вот сеть Кохонена например действительно работает без учителя: мы не умеем вычислять для нее матрицу связей заранее, и мы не влияем на процесс разделения входных образов на классы, это происходит само по себе. Насчет перцептрона: у него цикл как у сети Хопфилда невозможен - любому входу всегда будет соответствовать один и только один выход, который будет вычислен за первый (и единственный) проход. Это отражено собственно в названии этого класса сетей - сети прямого распространения. Сеть же Хопфилда, в зависимости от момента времени в который мы смотрим на выход, при синхронной конвергенции может давать разные состояния. --3d6 19:07, 29 сентября 2008 (UTC)[ответить]
Вот эта формулировка для обучения без учителя верна "мы не влияем на процесс разделения входных образов на классы". В сети Хопфилда получается, что при обучении на вход подается эталон, а на выходе тоже требуется получить эталон (судя по всему это вы и хотели сказать формулой WX=X). В каком то смысле это действительно обучение с учителем. Но страно то, что ранее вы заявляли, что эта сеть не способна к распознованию образов. Если на вход подать скажем изображение лошади (X), а на выходе потребовать изображение яблока (Y) (соответственно при нахождении весов умножим матрицы X на Y, одна из которых транспонированная) - то сеть в процессе работы при появлении на входе испорченного изображения лошади - будет стремиться на выходе дать изображение яблока (WX=Y) (размерность рисунков при этом может быть одинаковая, чтобы выполнялось условие на квадратную матрицу). Разве нет ? SergeyJ 10:13, 30 сентября 2008 (UTC)[ответить]
Говоря про перцептрон, я имел введу цикл обучения - там очень аналогичная проблема зацикливания (при желании там тоже можно найти сколько угодно аттракторов), что не дает сети сойтись (правильно обучится). У Хопфилда эта проблема исскуственно не решается (во время обучения не проверяется запомнелись ли эталона правильно или нет), поэтому эта же проблема (только под другим углом) вылезает в процессе работы ... SergeyJ 10:19, 30 сентября 2008 (UTC)[ответить]
"Но страно то, что ранее вы заявляли, что эта сеть не способна к распознованию образов" - как раз я говорил, что способна :) "то сеть в процессе работы при появлении на входе испорченного изображения лошади - будет стремиться на выходе дать изображение яблока (WX=Y)" - это невозможно для сети Хопфилда, ведь она работает последовательно: даем на вход (который одновременно является и выходом) X(0), и дальше вычисляем следующие состояния по формуле X(i+1) = F[WX(i)], где F - активационная функция. Соответственно, критерий остановки у нас - X(i+1) = X(i), т.к. после первого выполнения этого равенства сеть уже никуда не уйдет из такого состояния. Именно поэтому нам необходимо при обучении решать уравнение WX=X, а не какое-либо другое - т.к. если пытаться сделать WX=Y, то при этом надо также обязательно удовлетворить уравнению WY=Y, иначе сеть не остановится после перехода в состояние Y, так что это - главное условие.
Согласен, спасибо за пояснение. Вот бы это как нибудь граммотно отразить в статье ... В принципе берети теперь статью в свои руки и добавляйте, правьте что желаете - только сильно не переусердствуйте. Я потом немного покритикую ... и может быть попробуем довести до уровня "хорошей статьи" ... SergeyJ 22:52, 30 сентября 2008 (UTC) будем считать, что моя неделя прошла :) - и начинается ваша :) SergeyJ 22:55, 30 сентября 2008 (UTC)[ответить]
Ок, в ближайшее время отредактирую некоторые моменты. В частности, я хочу добавить некоторое количество слов "аттрактор" и "конвергенция", т.к. все-таки терминология в этой области именно такая, не стоит от нее отказываться, и частично переписать синхронную/асинхронную конвергенции, а также поменять их местами - ИМХО так будет логичнее. --3d6 06:51, 1 октября 2008 (UTC)[ответить]
В общих чертах я закончил. Постарался сделать более очевидным процесс работы и цели обучения сети, также везде изменил буквы, чтобы свести все к единым обозначениям. Поменял асинхронный и синхронный режимы местами, и написал их более понятным языком - ИМХО незачем вводить много разных букв там, где можно полноценно описать все на пальцах. Добавил определение равновесия в начале статьи, поменял в самом конце "состояние" на "аттрактор", и добавил фразу про распознавание образов в пример с картинкой. Возможно, стоит теперь переработать раздел про устойчивость, но это уже после того, как согласуем остальное. Еще есть замечания к разделу "Ассоциативная память", и можно добавить пару слов про решение задачи коммивояжера в разделе "Задачи минимизации" (впрочем решению этой задачи сетью Хопфилда можно и отдельную статью посвятить), но это уж точно потом. Жду возражений :) --3d6 11:19, 1 октября 2008 (UTC)[ответить]
Замечание к аннотации: её финальное утверждение "...при равновесии получают выходной образ (запомненный ранее эталон)" неверно. Полное отсутствие химер не гарантируется ни малым количеством эталонов, ни их малой скоррелированностью. Увы. Не правлю сам - прошу тех, кто сейчас активно работает со статьёй.--Agor153 07:52, 2 октября 2008 (UTC)[ответить]
Да, есть такое (правда, ровно один запомненный образ по-моему все же гарантирует отсутствие химер?). Может, стоит изменить на "обычно - запомненный ранее эталон"? Т.к. подробности обсуждаются в самой статье, а основное применение собственно в восстановлении эталонов? --3d6 08:01, 2 октября 2008 (UTC)[ответить]
Ценю юмор ("ровно один запомненный образ" ;) ). А "обычно - ..." неэнциклопедично (и вообще не ясно, что бы это "обычно" значило). Так как сейчас этот вопрос обсуждается в статье, я просто убрал неточное "разъяснение".--Agor153 08:37, 2 октября 2008 (UTC)[ответить]
"...при равновесии получают выходной образ (запомненный ранее эталон)" А в чем проблема формулируем конкретнее: "...при равновесии получают выходной образ, который может быть или запомненным ранее эталоном или ложным состоянием (химерой)." ... Я все ни как не доберусь посмотреть новые правки, но смотря по диогонали - замечаю, что из синхроности, ассинхроности вы просто убрали мои пояснения - так не пойдет, я их попробую согласовать с вашими и добавить, ваши практически не трогая ... SergeyJ 20:16, 2 октября 2008 (UTC)[ответить]
Если сможете добавить свои, не ухудшив читабельность статьи - я не буду возражать. Однако мне не удалось найти им подходящего места - дважды одно и то же, да еще и разным языком, писать довольно бессмысленно... --3d6 21:00, 2 октября 2008 (UTC)[ответить]
Добавил и поменял местами - но нельзя же начинать излагать с более сложного режима ... SergeyJ 20:18, 4 октября 2008 (UTC) Возможно для асинхронного режима не помешал бы рисунок, где наглядно было бы видны задержки на связях, которые приводят к тому, что расчеты зависять от сигналов во время не только (t+1), но и (t+2), (t+3) и т.д. до (t+N). SergeyJ 20:30, 4 октября 2008 (UTC)[ответить]
Пояснение к асинхронному режиму не вполне корректно - неважно, в каком порядке мы будем просматривать нейроны, можно хоть в случайном на каждом шаге, режим при этом останется асинхронным, в то время как его описание через задержки - неверно. Расчет состояния t+1 зависит только от состояния t и никакого другого. --3d6 06:51, 5 октября 2008 (UTC)[ответить]
Ну, как же так ... если расчет зависит только от предыдущего состояния, то я вообще сомневаюсь, что это асинхронный режим - тогда это синхронный ... насчет в каком порядке - то и с задержками это не важно - правильно их раставь в том порядке в каком хочешь - и будет асинхронный режим. Думаю, вы все же плохо себе представляете как это выглядит с задержками ... расчитывается первый нейрон, сигналы по связям w21 и w31, а также x1 (см. рисунок в статье) приходят на это нейрон за первый такт, состояние нейрона №1 меняется, затем сигнал по связям w12 и w32, а также x2 приходят на нейрон №2 за второй такт, при это по связи w32 сигнал шел два такта, т.е. медленее чем по другим, т.е. как раз с задержкой ... возможно в статье действительно в общем виде это не совсем точно написано, но то, что асинхронный режим достигается ТОЛЬКО с помощью разного времени прохождения по связям - это 100% верно. Вообще есть такое ощущение, что такой асинхронный режим несколько вырожденный, т.е. его можно привести к синхроному виду, если изменить архитектуру сети ... SergeyJ 09:56, 5 октября 2008 (UTC)[ответить]
"если расчет зависит только от предыдущего состояния, то я вообще сомневаюсь, что это асинхронный режим - тогда это синхронный" - эм, а откуда собственно это знание о том, что называется синхронным, а что - асинхронным режимами конвергенции сети Хопфилда? Введение задержек вносит огромные проблемы как в устойчивость сети, так и тем более в запоминание образов - ведь при наличии задержек, в результате решения уравнения WX=X совсем не факт что мы получим аттрактор (да и одной матрицы W будет недостаточно для описания сети, понадобится еще дополнительная матрица задержек). --3d6 11:29, 5 октября 2008 (UTC)[ответить]
Это не знание, а понимание того, что такое асинхронность :) Но вы ведь сами описываете асинхронность так как будто там есть задержки, да при этом разные ... просто я в отличии от вас это написал явно ... вы сами подумайте вы пишите "вычисляется локальное поле для первого нейрона в момент t, определяется его реакция, и нейрон устанавливается в новое состояние (которое соответствует его выходу в момент t+1), потом вычисляется локальное поле для второго нейрона с учетом нового состояния первого, меняется состояние второго нейрона" - как может "вычисляется локальное поле для второго нейрона с учетом нового состояния" в тот же уже предыдущий момент времени t - он может ФИЗИЧЕСКИ вычислится только в момент времени t+1 или еще позже, и так с каждым последующим t+2, t+3 и т.д. - собственно то, что я и написал ... SergeyJ 11:45, 5 октября 2008 (UTC)[ответить]
Асинхронность тут в том смысле, что новые состояния вычисляются не одновременно (т.е. синхронно) для всех нейронов, а последовательно. Не более того. "как может "вычисляется локальное поле для второго нейрона с учетом нового состояния" в тот же уже предыдущий момент времени t - он может ФИЗИЧЕСКИ вычислится только в момент времени t+1 или еще позже" - вы путаете машинное время и время сети Хопфилда. Сеть Хопфилда живет в дискретном времени, которое мы и измеряем буквой t. Что делает вычислительная машина для расчета состояния t+1 - неважно, и сколько у нее уходит времени нас не интересует. Состояние t+1 считается посчитанным тогда, когда пройдены все нейроны - до того у нас состояние t. Поэтому, в частности, асинхронную сеть нельзя реализовать на одном чипе так же эффективно, как синхронную - т.к. в синхронной нейроны работают одновременно, в асинхронной - последовательно. --3d6 15:18, 5 октября 2008 (UTC)[ответить]
Ну, не может быть "асихронность в смысле", мне кажется, что вы несколько путаете. Нет возможно для сетей Хопфилда над этим просто никто не задумывался - это я допускаю ... но не может быть нейронная сеть быть ПОСЛЕДОВАТЕЛЬНОЙ ... я же как раз коректно написал если РЕАЛИЗОВЫВАТЬ последовательно - томожно рассуждать как вы, если же реализовывать параллельно - то справедлива логика с задержками - но все это имеет эквивалентный смысл с точки зрения алгоритма ... SergeyJ 20:21, 5 октября 2008 (UTC)[ответить]
Однако в тексте статьи сейчас написана неправда, а именно: "То есть, например, для нейрона №1 стоит задержка в один такт для всех связей идущих к этому нейрону, для нейрона №2 стоит задержка в два такта для всех связей идущих к этому второму нейрону и т.д." - ни для какого нейрона нет никакого аналога задержки в 2 такта. Состояние t-1 никак не влияет на вычисление состояния t+1. --3d6 20:30, 5 октября 2008 (UTC)[ответить]
А вот и НЕТ. Так не получается. Еще раз внимательно смотрите: нужно расчитать состояние нейрона №3. Для этого нужно расчитать состояния нейрона №1 и состояния нейрона №2 и помножить это на соответствующие веса w13 и w23. Так ? Теперь допустим мы считаем каждое состояние за один такт времени. Но теперь оказывается, для того чтобы расчитать состояние нейрона №2 нам нужно знать ОБНОВЛЕННОЕ состояние нейрона №1 и СТАРОЕ состояние нейрона №3, помножить их на веса w12 и w32. Когда вы реализуете алгоритм последовательно, возможно вы об этом и не задумываетесь, но когда вы захотите это реализовать параллельно - вы просто физически не сможете расчитать состояние нейрона №1 и состояние нейрона №2 за одно и то же время, т.к. состояние нейрона №2 зависит от состония нейрона №1. И вы будите вынужденны ввести задержку при рассчетах ! Что здесь не понятного, расписал уже как в первом классе. Теперь или найдите логическою ошибку в моем изложении или успокойтесь уже наконец .... Вы хотите оперировать каким-то виртуальным временем, где следствие может наступить быстрее причины - но такое физически не возможно ... Опять же я говорю о параллельной реализации, а при последовательной у вас просто ваше время t и t+1 отделяют на самом деле N тактов (где N - число нейронов или что то же самое максимальная задержка), и когда вы говорите "Состояние t-1 никак не влияет на вычисление состояния t+1" - то на самом деле говорите "Состояние t-N никак не влияет на вычисление состояния t+N" - с этим согласен, но есть и более мелкое квантование времени - и там эти состояния зависят друг от друга ... и именно поэтому такой способ называет асинхронным, а не почему либо еще, если мы вообще говорим о времени ! SergeyJ 23:40, 5 октября 2008 (UTC)[ответить]
Я же вчера еще писал, перечитайте: "вы путаете машинное время и время сети Хопфилда". Если под временем t и t+1 понимать состояния сети в том смысле, о котором говорю я, то неправы вы. Если в том смысле, который имеете в виду вы, то неправ я. Поэтому категорически недопустимо использовать два разных понимания времени в рамках одной статьи - вы же именно этим и занимаетесь. В частности, в разделе про обучение, я обозначил t и t+1 таким образом, чтобы все мои дальнейшие слова были верны. Вы же вставили свои, не потрудившись даже объяснить, что по дороге сменили терминологию. И главное, какой смысл в повторном объяснении того же самого, другим языком, в противоречащих терминах? --3d6 10:15, 6 октября 2008 (UTC)[ответить]
Ну, здрасти - когда говорим о нейронных сетях только и говорим о машином времени - и ни о каком другом ! А если вы уж так хочете вести специфическое "время сети Хопфилда" - то вы и вводите, оно совершенно не общеупотребительно ! Кроме того, перечитал раздел обучения и не нашел где это Вы определяли "t и t+1 таким образом, чтобы все мои дальнейшие слова были верны". Смысл очень важный - т.к. сеть реализуется физически, а параллельность одна из главных отличительных черт ЛЮБОЙ нейроной сети, а вы пытаетесь ее от сети убрать. Кроме того, при вашем времени - нет ни какой асинхроности, поэтому понимание термина остается путаным и не понятным ... Если вам не нравится различные смыслы употребления времени - тогда предложите как это можно исправить, чтобы все стало согласовано ? SergeyJ 11:41, 6 октября 2008 (UTC)[ответить]
О я понял вы спутали понятие итерации (или иногда называют эпохой, что мне не очень нравится) обучения (работы) с временем обучения (работы) - и отсюда все проблемы !! SergeyJ 11:43, 6 октября 2008 (UTC)[ответить]
"когда говорим о нейронных сетях только и говорим о машином времени - и ни о каком другом" с каких это пор при описании алгоритма используются такты процессора, а не логические такты? Если так - то почему умножение весов на выходы нейронов, суммирование и вычисление активационной функции также не считать тактами? "перечитал раздел обучения и не нашел где это Вы определяли t и t+1" - плохо читали. Это определено как через алгоритм обучения: X(t+1)=X(t) - при вашем понятии тактов у нас всегда X(t+1) и X(t) будут отличаться не более чем на одну компоненту, поэтому условие X(t+1)=X(t) не может определить вид матрицы W целиком, нужно вводить систему из N уравнений, так и через само уравнение работы сети: X(t+1)=WX(t) - оно попросту неверно для вашего понимания тактов, т.к. у X(t+1) могут поменяться хоть все компоненты. Я могу все исправить очень легко: убрать все, что вы добавили на эту тему. Если вы не согласны - измените свои термины так, чтобы исчезли конфликты, я этого сделать не могу. Отдельно, итераций обучения для сети Хопфилда не существует как таковых, равно как и эпох, так что поняли вы что-то не то. --3d6 12:00, 6 октября 2008 (UTC)[ответить]
...да, для наглядности я послал пример сети Хопфилда с синхронным и асинхронными режимами конвергенции, а также с пошаговой асинхронной сменой состояний нейронов. Надеюсь, так будет понятнее. --3d6 13:28, 6 октября 2008 (UTC)[ответить]
В том то и дело, что это вы назвали "мои такты" тактами процессора, а они есть действительно логические такты, но не такие огромные как у вас, у вас же не такты, а итерации ! Только в данном случае не обучения, а итерации работы ! Ладно, если вы можете оказать только медвежью услугу - "все стереть", то я сам подумаю как это все привести к единому виду. За высланый пример - большое спасибо. SergeyJ 14:12, 6 октября 2008 (UTC)[ответить]
Поменял, смотрите ... SergeyJ 14:40, 6 октября 2008 (UTC)[ответить]
Смотрю, и вижу огромное количество весьма бессвязного текста, который только затрудняет понимание. Скажите пожалуйста, по пунктам, чем вас не устраивает моя версия - что в ней упущено, или неправильно написано, или сложно для понимания? И - раз вы видели мое письмо, неужели вы и дальше будете утверждать, что асинхронный режим сложнее? --3d6 17:14, 6 октября 2008 (UTC)[ответить]

Господа, нашёл онлайн полезную статью профессора Миркеса: Е.М.Миркес, Нейронные сети ассоциативной памяти, Гл. 8 в кн.: Нейроинформатика / А.Н.Горбань, В.Л.Дунин-Барковский, А.Н.Кирдин и др. - Новосибирск: Наука. Сибирское предприятие РАН, 1998. - 296с. Там от сетей Хопфилда в непрерывном времени до ортогональных и тензорных (~квантовых) сетей. Enjoy!--Agor153 22:21, 4 октября 2008 (UTC)[ответить]

А это так и нужно, что все буквы на китайском :) (без шуток, как этот текст просмотреть нормально в Worde) ? SergeyJ 23:50, 5 октября 2008 (UTC)[ответить]
CHAPT8.doc об ассоциативной памяти читается без труда. CHAPT9.doc не читается - но это вроде о другом.--Agor153 08:53, 6 октября 2008 (UTC)[ответить]
Впрочем, нашел еще один линк (вообще, эта книга, как я понял, лежит на нескольких десятках сайтов) http://www.intuit.ru/department/expert/neuroinf/8/ --Agor153 09:06, 6 октября 2008 (UTC)[ответить]
однако там тоже всплывает цифра 0.14 в качестве оценки объема памяти сети Хопфилда... --3d6 13:47, 6 октября 2008 (UTC)[ответить]
Это 0.14 (точнее, 0.138) имеет свою историю. Это о восстановлении с малыми ошибками (N/2lnN - без ошибок). Авторы этой оценки: Daniel J. Amit, Hanoch Gutfreund, H. Sompolinsky, Storing Infinite Numbers of Patterns in a Spin-Glass Model of Neural Networks, Phys. Rev. Lett. 55, 1530-1533 (1985). А вот их аннотация.

The Hopfield model for a neural network is studied in the limit when the number p of stored patterns increases with the size N of the network, as p=αN. It is shown that, despite its spin-glass features, the model exhibits associative memory for α<α_c, α_c~0.14. This is a result of the existence at low temperature of 2p dynamically stable degenerate states, each of which is almost fully correlated with one of the patterns. These states become ground states at α<0.05. The phase diagram of this rich spin-glass is described.--Agor153 15:23, 6 октября 2008 (UTC)[ответить]

Асинхронный режим[править код]

Насчет "сложности" асинхронного случая - вот код для синхронного режима:

   for(int x = 0; x < N; ++ x)
       stmp[x] = 0;
   for(int x = 0; x < N; ++ x)
       for(int y = 0; y < N; ++ y)
           stmp[x] += W[x*N+y] * state[y];
   for(int x = 0; x < N; ++ x)
       state[x] = stmp[x];

А вот - для асинхронного:

   for(int x = 0; x < N; ++ x)
   {
       state[x] = 0;
       for(int y = 0; y < N; ++ y)
           state[x] += W[x*N+y] * state[y];
   }

Как видите, асинхронный в программной реализации проще.

Смотрю, и вижу огромное количество весьма бессвязного текста, который только затрудняет понимание. Скажите пожалуйста, по пунктам, чем вас не устраивает моя версия - что в ней упущено, или неправильно написано, или сложно для понимания? И - раз вы видели мое письмо, неужели вы и дальше будете утверждать, что асинхронный режим сложнее? --3d6 17:14, 6 октября 2008 (UTC)

1. Давайте не будем намеренно усложнять :) Вот более оптимальный код:

   for(int x = 0; x < N; x++)
   {
       stmp[x] = 0;
       for(int y = 0; y < N; y++)
       {          
           stmp[x] += W[x*N+y] * state[y];
       } 
   }
   state = stmp.Clone(); // Последний оператор стандартный для С# - копирует в данном случае массив
  // Заодно чисто стилистически подправил скобки и плюсы с другой стороны смотрятся привычнее

2. Да, конечно, буду: Асинхронный режим сложнее синхронного. :) Речь даже не о программной реализации (хотя кроме элементарного присвоения массива разницы по длине алгоритма нету). А вот выражение state[x] += W[x*N+y] * state[y]; на порядок сложне выражения stmp[x] += W[x*N+y] * state[y]; т.к. не очевиден смысл того, каким станет массив после умножения самого на себя, из-за этого нельзя также применить матричную запись написать, что то типа state = SUM( W * state) , т.к. сразу получим сихронный случай. Поэтому простота не в количестве высокоуровневых операторах, а в количестве низкоуровневой логики, а вот ее вы почему-то отказываетесь рассматривать, хотя для ИНС это самый важный язык ! SergeyJ 20:49, 6 октября 2008 (UTC)[ответить]

Господа, суть дискуссии в том, что Хопфилд, как человек из другой области, назвал параллельный режим - синхронным, а последовательный - асинхронным. Это не те "синхронный" и "асинхронный" (то есть без синхронизации тактов, что очень непросто), к которым мы привыкли в вычислительной технике. Последовательный перебор в цикле, конечно, очень просто запрограммировать...;) Smile! Мне приходилось работать со сверхбыстрыми по-настоящему асинхронными сетями - сложно, сплошные переходные процессы.--Agor153 20:39, 6 октября 2008 (UTC)[ответить]
Это по меньшей мере страно - как можно так серьезно перепутать термины ? Вы в этом уверены, можно на что-то сослаться, чтобы утверждать, что "Хопфилд, как человек из другой области, назвал параллельный режим - синхронным, а последовательный - асинхронным" ? Если это так то предлагаю вообще не говорить о синхронности и асинхроности, а называть это НОРМАЛЬНЫМИ терминами. Хотя я немного в этом утверждении сомневаюсь. Конечно и с самого начала мне было понятно, что такой вид асинхронного режима серьезно упрощен по сравнению с общим представлением о асинхроности (что и написал в статье), но все же такое последовательное вычисление можно привести к параллельному вычислению хотя ясно, что выгоды от этого не будет, т.к. введенные для этого задержки не позволят расчитать быстрее чем при последовательном вычислении. SergeyJ 21:05, 6 октября 2008 (UTC)[ответить]

3. чем вас не устраивает моя версия - что в ней упущено вот именно - в ней упущенно самое главное: (1) Почему такой режим называется асинхроным (если Agor153 прав, то вооще не стоит употреблять не правильный термин) и (2) почему вообще сеть Хопфилда можно относить к ИНС. Если расчет состояний выполняется (не путать с реализуется) последовательно - это вообще нельзя назвать сетью, соответственно тогда изображенная архитектура сети не верна, т.е. изображая ее как слой формальных нейронов с обратными связями и не говорить какую задержку они имеют просто нельзя. По умолчанию все обратные связи имеют задержку в 1 такт, но для сети это не так, т.к. расчет выполняется по другому. Если не 1 такт, тогда нужно ОСОБЫМ ОБРАЗОМ обговаривать, на чем я и настаиваю. В противном случае говорить об сети Хопфилда можно лишь как о последовательном алгоритме, а не как о ИНС. SergeyJ 21:15, 6 октября 2008 (UTC) Так, например, есть фильтр Калмана - но почему-то никто не додумался его назвать сетью Калмана, так может и здесь правильнее говорит просто о фильтре Хопфилда ? Тем более, что распознаванием образов он не занимается ! SergeyJ 21:19, 6 октября 2008 (UTC)[ответить]

(1) Agor153 безусловно прав, и более того, я хочу сказать, что слова "синхронный" и "асинхронный" не зарезервированы исключительно для обозначения типа синхронизации вычислительных систем. Они обозначают ровно то же, что и слова "одновременный" и "не одновременный". Это - общепринятая терминология, если человек встретит где-нибудь фразу "асинхронная сеть Хопфилда", и не сможет понять что это такое из статьи здесь - то это будет означать только то, что статья написана плохо. (2) сеть Хопфилда можно и нужно относить к сетям, т.к. у нее есть синхронный режим. Обозначать же один по сути объект двумя разными словами ("сеть" для синхронного режима, и "фильтр" для асинхронного) - бесконечно странно, это не только противоречит общепринятой терминологии, но и вносит путаницу --3d6 07:12, 7 октября 2008 (UTC)[ответить]
"Agor153 безусловно прав" не уверен, такой поворот событий требует ссылок на авторитетные источники ! И имея их постарайтесь объяснить, что "Хопфилд, как человек из другой области, назвал параллельный режим - синхронным, а последовательный - асинхронным". "Это - общепринятая терминология" - в области ИНС это не так, Розенблатт ввел четкое понимание синхронности и асинхроности, и просто необходимо употреблять эти термины в этом смысле, а не в каком-то разговорном стиле ! SergeyJ 12:29, 7 октября 2008 (UTC)[ответить]
Ссылки - например вот: http://www.osp.ru/os/1997/04/179189/#part_15 , http://www.psychology.adelaide.edu.au/personalpages/staff/simondennis/cmc/chapters/Hopfield/ , http://www.opticsinfobase.org/abstract.cfm?URI=ao-26-22-4808 , http://www.comp.nus.edu.sg/~pris/AssociativeMemory/HopfieldModel.html , http://wiki.tcl.tk/13827 , http://www.springerlink.com/content/h384r737p284n077/ (это только с первой страницы поиска в яндексе и гугле). В свою очередь, прошу ссылки на "четкое понимание" Розенблатта, действительно ли оно противоречит тому, что я предлагаю написать? --3d6 12:57, 7 октября 2008 (UTC)[ответить]
Ну, и какие вы мне дали ссылки ? Может и мне вам просто посоветовать почитать книгу Розенблата ? Я просил конкретную ссылку на абзац (лучше даже если вы его бы процитировали бы здесь), где в авторитетном источнике написанно, что "Хопфилд, как человек из другой области, назвал параллельный режим - синхронным, а последовательный - асинхронным" или хотя бы что-то в этом роде? SergeyJ 13:10, 7 октября 2008 (UTC)[ответить]
Для более быстрого понимания могу порекомендовать [мою статью | http://tachome.times.lv/Articles/Asinhron_2006/asinhron.pdf] второй раздел. Хотите разобраться с первоисточником, то берете книгу Розенблатта (напрмер, в литературе в статье Перцептрон), находите определение 12, а так же по ходу изложения, что означают те или иные введенные буквы - и опа! ноконец, понимаете, что такое асинхронность в ИНС :) SergeyJ 13:16, 7 октября 2008 (UTC)[ответить]
Я вам дал ссылки, просмотрев которые и поискав входжение слов "синхронный/асинхронный" вы увидите, какой смысл люди вкладывают в это понятие. Книгу Розенблатта я бы с интересом посмотрел подробнее, если бы нашел ее в формате, позволяющем поиск (все мои ссылки его позволяют). Также я почитал вашу статью (кстати, у меня есть несколько вопросов), не понимаю в чем проблема. Вы же сами пишете: "Так как определение понятий синхронный - асинхронный для нейронных сетей в современной литературе очень расплывчато, то мы обратимся к работе Розенблатта[1]. Он прямо не приводит их определений, так как в своей работе их не описывает". И далее вы сами вводите свое собственное определение синхронности/асинхронности. Однако Хопфилд использовал эти понятия применительно к нейросетям намного раньше вас, и огромное количество людей понимает их не так, как вы пишете. А еще, если вы внимательно прочитаете оригинальную работу Хопфилда (которая первая в списке ссылок к статье), то обнаружите там следующее: в случайные моменты времени случайные нейроны меняют свои состояния (кстати, этот момент стоит изменить в моем определении - можно смотреть как последовательно, так и случайно). Это называется асинхронным режимом, при том что никакие задержки в описание сети не входят - выход нейрона доступен всем остальным непосредственно после вычисления. В сети Хопфилда синхронный и асинхронный режимы работы отличаются именно синхронным/асинхронным срабатыванием нейронов, не более и не менее. --3d6 14:24, 7 октября 2008 (UTC)[ответить]
Вопросы по статье можете задать по мейлу - с удовольствием отвечу если есть реальный интерес. Я не хочу догадываться "какой смысл люди вкладывают в это понятие" - и если вам кажется, что здесь есть какое-то противоречие (которого я не вижу), то я хочу четко понимать вводил ли Хопфилд понятие асинхронности - и что на самом деле под ним понимал. Касательно, Розенблата - оцифрованная книга большая редкость и еще несколько лет назад ее вообще небыло ни в каком формате. Да, я пишу как вы заметили именно так, но НЕ ввожу СОБСТВЕННОГО определения, я просто называю то, что явно подразумевалось Розенблаттом современными терминами (в то время слово параллельный было еще в новинку :) ). Если вы не хотите "сложить два плюс два", то давайте проще (если хотите беседу превратить в формальщину) для нейронных сетей нужно определить время передачи сигнала по связи - ответа на этот вопрос в статье вы не даете (и сильнейшим образом противодействуете мне) - дайте свой ответ если мой вам не нравится !? SergeyJ 20:04, 7 октября 2008 (UTC)[ответить]
"я хочу четко понимать вводил ли Хопфилд понятие асинхронности - и что на самом деле под ним понимал" давайте продолжим дискуссию после того, как вы прочитаете наконец статью самого Хопфилда? Потому как мои слова вы просто игнорируете. "Да, я пишу как вы заметили именно так, но НЕ ввожу СОБСТВЕННОГО определения, я просто называю то, что явно подразумевалось Розенблаттом современными терминами" - простите, но если Розенблатт чего-то не пишет прямо, то я не считаю что вы вправе приписывать ему свои утверждения. Если же пишет - скажите пожалуйста, где именно в книге можно найти это место. "для нейронных сетей нужно определить время передачи сигнала по связи" - для сети Хопфилда оно определено и равно нулю для всех связей (как только выход нейрона посчитан, он мгновенно отправляется другим нейронам), какого определения вы ждете, я не понимаю? --3d6 07:28, 8 октября 2008 (UTC)[ответить]
Ноль говорите, а для симметричной версии то же ноль ? SergeyJ 12:40, 8 октября 2008 (UTC)[ответить]
Ноль в сетях с обратной связью НЕДОПУСТИМ ! Это прямо написанно например у Розенблатта, если для Вас это не очивидно. см. стр. 368 цитирую "Чтобы исключить ситуации, недопустимые в системах с замкнутыми контурами, примем так-же, что все связи имеют небольшое запаздывание ". SergeyJ 13:22, 8 октября 2008 (UTC)[ответить]
Хорошо, пусть будет не ноль, а малое постоянное тау, меньшее времени между пересчетом нейронов. Если сможете показать, чем существенно отличаются эти случаи с точки зрения функционирования системы (в асинхронном случае) - я буду очень удивлен. Для синхронных сетей можно написать задержку 1, чтобы не мудрить с особой работой нейронов. --3d6 16:29, 8 октября 2008 (UTC)[ответить]
Если Вы признаете, что за одну итерацию происходит расчет ТОЛЬКО одного состояния нейрона, т.е. ваша кнопка "async iter", при случайном выборе пока не произойдет останов, то вопрос будет снят (и соответственно, кнопка async step - не имеет смысла для сети Хопфилда - если хотите это ваша модификация и именно в ней появляется вопрос с задержкой). Все правильно для сете Хопфилда как в синхроном и асинхроном режиме задержка =1 - об этом прямо пишет Хайкен ... и замедти у него не появляется асинхроности в распространении сигнала, у него асинхронность в выборе нейронов для расчета (активации). Этот момент нужно четко отразить в статье ... но смотрите лучше мой псевдокод для асинхронного случая по Хайкену - он принципиально отличается от вашего ! Теперь вы с ним согласны ? SergeyJ 20:21, 8 октября 2008 (UTC)[ответить]
Повторю вопрос, заданный ниже - что такое "останов"? X(t+1) = X(t), или что-то другое? С вашим кодом согласен, но отличается он совершенно не принципиально до тех пор, пока M=1. Когда M>1, особенно когда M сравнимо с N, такой режим уже сильно отличается от обычного асинхронного, в литературе для него иногда используют слово "гибридный". Если M>>N, то такой режим становится в чистом виде синхронным --3d6 07:20, 9 октября 2008 (UTC)[ответить]

Синхронный и асинхронный режим по Хайкену[править код]

Судя по всему синхронного режима у сети Хопфилда нету ! Хайкен на стр. 867 в примечании поясняет, что модель Литтла использует синхронную динамику, а модель Хопфилда асинхронную - т.е. это разные сети, разных авторов. Затем там же рядом Хайкен, четко показывает к чему относится слово асинхронный "операция извлечения информации выполняется асинхронно" (т.е. по сути асинхронно активируется нейрон), а выше указывает какой смысл имеет слово асинхронно "описаннная здесь асинхронная(последовательная) процедура коррекции продолжает выполняться до тех пор, пока изменения не перестанут происходить". Далее один шаг коррекции состоит в 1. "выбор нейрона для коррекции будет происходить случайным образом", а выбранные нейроны из всего множества нейронов "проверяют локальное поле ... в некоторый момент времени". Т.е. реализация одного шага такая в АСИНХОННОМ режиме:

   for(int i = 0; i < M; i++) // M - это число случайно выбираемых нейронов или по Хайкену "случайно, но на некотором фиксированном уровне"
   {
       x = RND(N); // случайный выбор нейрона для коррекции
       stmp[x] = 0;
       for(int y = 0; y < N; y++)
       {          
           stmp[x] += W[x*N+y] * state[y];
       } 
   }
   state = stmp.Clone(); // Последний оператор стандартный для С# - копирует в данном случае массив

т.е. тогда действительно задержка действительно в обоих режимах =1, а отличие заклчается только в том, что АКТИВИРУЮТСЯ нейроны не все, а только некоторые из них случайным образом и только для них происходит рассчет. Таким образом, за один такой шаг не нужно просматривать обновленные состояния нейронов и все становится на свои места. SergeyJ 14:02, 8 октября 2008 (UTC) То есть асинхронность заключается не в распространении сигнала, а в возбуждении (активировании) нейрона. SergeyJ 14:06, 8 октября 2008 (UTC) Более того M как правило равно одному, на следующей странице (868) четко написано: "выполним корректировку элементов вектора состояний в асинхронном режиме (т.е. случайно и по одному элементу за итерацию)", а в уравнении нет ни каких обновленных состоянний ! Они как и полагается будут на следующей итерации !!! Предлагаю соответственно скоректировать описание в данной статье, т.к. сейчас там мягко говоря совсем не правда ! SergeyJ 14:18, 8 октября 2008 (UTC)[ответить]

"Судя по всему синхронного режима у сети Хопфилда нету" - может его конечно и нету, вот только огромное количество людей называет эту штуку именно синхронным режимом сети Хопфилда. Может все-таки стоит использовать понятную большему числу людей терминологию? Насчет случайности - я очень рад, что вы заметили наконец мою фразу "кстати, этот момент стоит изменить в моем определении - можно смотреть как последовательно, так и случайно", только сути это не меняет (хотя в статье действительно нужно подчеркнуть, что Хопфилд изначально ввел именно случайную замену). Как при случайном просмотре (при исключении обработки двух нейронов одновременно), так и при последовательном, мы получаем все тот же асинхронный режим. Однако вы еще не поняли одной важной детали. Назовите пожалуйста критерий остановки для асинхронной сети Хопфилда - и вы либо допустите ошибку, либо поймете почему я использую именно те обозначения, которые использую (хотя для случайного изменения состояний они тоже не слишком удачны, признаю). А корректировать статью безусловно нужно, но только когда мы наконец закончим обсуждение - до того это будет довольно бессмысленно --3d6 16:44, 8 октября 2008 (UTC)[ответить]
Может все-таки стоит использовать понятную большему числу людей терминологию? - а может нужно уважать авторство, а не преписывать одному человеку то, чего он не делал ? SergeyJ 20:12, 8 октября 2008 (UTC)[ответить]
Назовите пожалуйста критерий остановки для асинхронной сети Хопфилда Ну, что вы в самом деле, я же вам уже цитировал: Хайкена "описаннная здесь асинхронная(последовательная) процедура коррекции продолжает выполняться до тех пор, пока изменения не перестанут происходить" .. или вы думаете, что я не понял смысла процитированного :) сложно последовательно реализовать :) ну так это не причина запутывать читателя :) SergeyJ 20:28, 8 октября 2008 (UTC)[ответить]
"пока изменения не перестанут происходить" - т.е. когда мы встретимся с первым нейроном, не изменившим свое состояние (т.е. когда ваш X(t+1) станет равен X(t)) - нужно останавливаться? Или как? --3d6 07:10, 9 октября 2008 (UTC)[ответить]
НЕТ, думаю как раз наоборот когда мы определим что сколько времени не прошло бы, наверное как раз тот параметр W из оригинальной статьи - а за это време не один нейрон свое состояние так и не поменял. SergeyJ 11:47, 9 октября 2008 (UTC)[ответить]
Время W может быть избыточным, а может быть недостаточным. На самом деле критерий такой: сеть считается остановившейся, если при последнем просмотре каждого из нейронов ни один не изменил состояния. Поскольку выбор нейронов для просмотра случаен, нам может повезти, и время будет меньше W, а может не повезти, и оно будет больше. Если при этом потребовать исключить ситуацию, когда один нейрон мы меняем за некоторое время дважды, а другой - ни разу (что хотя и несколько меняет модель, но, как показывает практика, не принципиально), то можно индексировать состояния каждого нейрона числом t, t+1 и т.д. - при этом у записи X(t) снова появится смысл, и весь процесс обучения (построенный на равенстве X(t+1)=X(t), X(t+1)=WX(t)) будет правильным. При этом можно сделать примечание, что хотя в оригинальной работе Хопфилд не требовал такого ограничения, однако в некотором роде использовал его при построении обучения --3d6 12:23, 9 октября 2008 (UTC)[ответить]
Ну, конечно, можно и даже нужно - НО это будет ваша (или условна ваша) модификация, которая в каком то смысле улучшает, если смотреть на критерий останова, но сужает ту общность асинхронных сетей о которых говорил собственно Хопфилд. И повторюсь такая модификация преводит из оригинального параллельного способа к последовательному, который упрощен в силу ТЕХНИЧЕСКИХ причин реализации точки останова .... Опять же можно сделать маленькую модификацию (хотя может тоже самое и имелось введу в оригинале), когда W это не просто постоянное время, а время много большее частоты асинхронного срабатывания нейронов, и когда нейроны в приделах этого времени посылаю сигналы о изменении своей активности (это и так есть в сети, просто за этим нужно следить) когда уровень возбуждения понижается до нуля то по прошесвтию его выдается ответ (да, это несколько избыточно, но можно регулировать время W), хуже когда это не достаточное время, но тут нужно смотреть если уровень активности нейронов еще высок, то добавляется еще период времени W ... вообщем нет ничего не возможного, чтобы определить критерий останова ... а Хопфилду судя по всему как и с задержками не заострял досканально внимания на технических деталях - ему было главное изложить теорию, а не физическую реализацию своей сети или же считал, что это само собой разумеющиеся - а мы здесь с вами сидим и гадаем ... т.к. да, четких описание в его статье нету, если лишь проскальзывающие фразы ... но нужно понимать, что это всего лишь выжимка из его работы, которую в одной статье не отразишь .... нет ли у вас еще ссылок на его оригинальные статьи, может они прояснят большее SergeyJ 12:56, 9 октября 2008 (UTC)[ответить]
"когда W это не просто постоянное время, а время много большее частоты асинхронного срабатывания нейронов" - именно это и имелось в виду в статье, все выкладки написаны для случая, когда одновременно срабатывает только один нейрон. "вообщем нет ничего не возможного, чтобы определить критерий останова" - так я собственно и привел выше однозначное условие остановки, которое будет работать и для исходного, полностью асинхронного режима: если со времени последнего просмотра каждого из нейронов, ни один не изменил состояния (т.е. если новое состояние нейрона совпадает с предыдущим - ставим на нем флаг, если изменилось - снимаем флаги со всей сети, как только в сети на каждом нейроне стоит флаг - работа закончена). "нет ли у вас еще ссылок на его оригинальные статьи" - к сожалению нет, но я попробую найти в скором будущем (кстати, если вдруг они найдутся у Agor153 - было бы очень здорово) --3d6 13:19, 9 октября 2008 (UTC)[ответить]

Стоп, все назад - Хайкен вводит в заблуждение, 3d6 и подавно, а SergeyJ наконец узнал, какую статью он правит :)[править код]

Добрался все же почитать оригинальную статью Хопфилда ... блин это же наваждение какое-то ... на сколько я был уверен, что только Розенблатта перевируют, так оказывается нет и Хопфилда умудрились ! Значит так прошу конструктивной беседы - внимательно читаем оригинал, отбрасывая все, что мы знали до этого о сети Хопфилда и создаем свое мнение о этой сети заново - только так у нас получится не переврать. И не спеша по пунктам:

1. В сложившейся ситуации дисскусии удобно начать с конца, т.е. то чего Хопфилд хотел показать своей статьей:

Implementation of a similar model by using integrated circuits would lead to chips which are much less sensitive to element failure and soft-failure than are normal circuits. Such chips would be wasteful ofgates but could be made many times larger than standard designs at a given yield. Their asynchronous parallel processing capability would provide rapid solutions to some special classes of computational problems.

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

Выполнение подобной модели при использовании интегральных схем привело бы к чипам, которые намного менее чувствительны к отказу элемента и мягкому отказу, чем нормальные кругообороты. Такой чип был бы расточительным ofgates, но мог быть сделан много раз большим чем стандартные проекты за данный yield. Их асинхронная параллельная способность обработки обеспечила бы быстрые решения некоторых специальных классов вычислительных проблем.

т.е. во первых предположение Agor153, что под асинхронностью понимается последовательность - неверна. Речь идет именно о асинхронности в параллельной обработке - как и положенно сетям (о чем кстати, я говорил с самого начала) ! SergeyJ 21:51, 8 октября 2008 (UTC) 1a. Еще две фразы, чтобы небыло охоты опровергать автора и понимать его превратно:[ответить]

The model could be readily implemented by integrated circuit hardware. The conclusions suggest the design of a delocalized content-addressable memory or categorizer using extensive asynchronous parallel processing.

The algorithm for the time evolution of the state of the system is based on asynchronous parallel processing.

Будите дальше продолжать утверждать, что Хопфилд не говорил о АСИНХРОННЫХ ПАРАЛЛЕЛЬНЫХ вычислениях? (а не последовательной) - найдите в статье хоть одно слово "последовательно" SergeyJ 21:58, 8 октября 2008 (UTC)[ответить]

2. Все мои сомнения (конечно полушуточные, но воспринятые вами всерьез), что сеть Хопфилда не ИНС сняты - ссылками в статье на всех "гигантов" нейронных сетей, и прямым противопоставлением (хотя все же не очень корректным - но об этом потом) сети Хопфилда - перцептрону Розенблатта. SergeyJ 22:01, 8 октября 2008 (UTC)[ответить]

3. Про синхронный вариант Хопфилд пишет сам:

Little, Shaw, and Roney (8, 25, 26) have developed ideas on the collective functioning ofneural nets based on "on/off" neurons and synchronous processing. However, in their model the relative timing of action potential spikes was central and resulted in reverberating action potential trains. Our model and theirs have limited formal similarity, although there may be connections at a deeper level.

указывая что симметричный вариант - это НЕ его вариант, и он даже открещивается от него, и протипоставлет моделям Little, Shaw, and Roney - свой асинхронный вариант ! Думаю и здесь вопрос снят - в данной статье нужно четко указать, что синхронный вариант был известен до Хопфилда. SergeyJ 22:06, 8 октября 2008 (UTC)[ответить]

4. Теперь о более существенном:

The state changes in time according to the following algorithm. For each neuron i there is a fixed threshold U,. Each neuron i readjusts its state randomly in time but with a mean attempt rate W, setting

Thus, each neuron randomly and asynchronously evaluates whether it is above or below threshold and readjusts accordingly.

(Unless otherwise stated, we choose Ui = 0.)

Состояние изменяется во времени согласно следующему алгоритму. Для каждого нейрона есть установленный порог U. Каждый нейрон i корректирует свое состояние случайно во времени, но со средним значением попыток (не уверен в точности перевода - если можете подкорректируйте) W, устанавливая ... Таким образом, каждый нейрон случайно и асинхронно оценивает, является ли это выше или ниже порога и корректируется соответственно. (Если иначе не заявлено, мы выбираем Ui = 0.)

Кстати, о пороге в нашей статье ничего не сказано, можно подумать, что его и нет ... Т.е. случайно и ассинхронно происходит сравнение суммы сигналов с порогом, не теряя общности можно сказать, что нейрон с определенной СЛУЧАЙНОЙ частотой генерирует сигнал на выходе ! Заметим что нигде не говорится, что в один момент времени не могут сработать два нейрона, т.е. фраза Хайкена, что "по одному элементу за итерацию" неточна, т.е. ваше приведенный мной алгоритм более верен, где возможено нескольким нейронам начать сравнивать сумму сигналов с порогом. Но тем не менее, как у меня в алгоритме цифра M - не задается, а определяется на основе ЗАДЕРЖЕК! Но для этого пойдем смотреть статью дальше ... SergeyJ 22:43, 8 октября 2008 (UTC)[ответить]

5. А дальше Хопфилд сравнивает свою сеть с перцептроном отмечая его синхронность, и в заключение говорит

There is no evidence for such global synchrony and, given the delays of nerve signal propagation, there would be no way to use global synchrony effectively.

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

т.е. говоря о задержках распространения сигнала нерва - он имеет введу именно то значение тау, о котором говорит Розенблатт. И здесь хорошо видно, что наличие этих задержек (точнее их разные значения у связей) не позволяют говорить о том, что в биологии возможно что либо синхронное, а вот его алгоритм как раз является асинхронным, т.к. у него эти задержки разные - и выбираются случайно, из - за чего в принципе и "сравнивание суммы сигналов с порогом" происходит асинхронно. Именно так и реализуется асинхронность, а то что Хопфилд говорил именно о параллельной асинхронной реализации схемы еще раз - уже без никаких НО - позволяют с очевидностью установить, что это чисто асинхронная сеть именно в том смысле как я писал в своей статье, как вам показалось вкладывая в уста Розенблатта что-то новое. НИЧЕГО нового тут нету - асинхроность она и в Африке асинронность и определяется через задержки ! .... SergeyJ 23:01, 8 октября 2008 (UTC)[ответить]

6. Можем еще посмотреть на один абзац

Delays in synaptic transmission (of partially stochastic character) and in the transmission of impulses along axons and dendrites produce a delay between the input of a neuron and the generation of an effective output. All such delays have been modeled by a single parameter, the stochastic mean processing time 1/W.

Задержки синаптической передачи (частично стохастического символа) и в передаче импульсов вдоль аксонов и дендритов производят задержку между вводом нейрона и поколением фактической производительности. Все такие задержки были смоделированы единственным параметром, стохастическое среднее время обработки 1/W.

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

For N = 30 the system never displayed an ergodic wandering through state space. Within a time of about 4/W it settled into limiting behaviors, the commonest being a stable state.

Для N = 30 система никогда не отображала эргодическое блуждание через пространство состояний. В пределах времени приблизительно 4/W это обосновался в ограничение поведений, самое общее существо устойчивое состояние.

т.е. за время 4/W получили устойчивое состояние, хотя было отведенно время для этого достяжения W ...

Может конечно, я чего-то и нет так хорошо понял из-за плохого знания английского, но вроде все очевидно - Хопфилд говорил о паральной асинхронных вычислениях, близких по сути к перцептрону, где они были синхронные и без обратных связей ... говорил также о задержках между связями, которые просто не могут быть одинаковыми при паралльном и ассинхронном ... и эта величина каким то чудесным образом связанна со всем временем, которое дается сети для достижения устойчивости W. SergeyJ 23:22, 8 октября 2008 (UTC)[ответить]

Ладно дальнейшие ньюансы читайте сами - и прошу внимательно ... SergeyJ 23:23, 8 октября 2008 (UTC)[ответить]

Кстати, и я тоже ранее был не прав - получается сеть Хопфилда в полной мере удовлетворяет полноценной ассинхронной сети, а не ее частному виду ! SergeyJ 23:51, 8 октября 2008 (UTC)[ответить]
Очень хорошо что вы наконец посмотрели статью Хопфилда. Однако дело в том, что время идет, и со временем разным объектам присваивают разные названия, иногда расширяя определения, которые давали авторы. Это произошло и с сетью Хопфилда - сейчас это название широко используется и для синхронных, и для асинхронных с последовательной обработкой, и для асинхронных с параллельной обработкой (они иногда называются гибридными - хотя Хопфилд изначально ввел именно их).
:) Как легко у Вас получается - время идет - и со временем сеть Хопфилда становится вовсе не сеть Хопфилда, заслуги других приписываются другим, то о чем Хопфилд совсем не говорил вкладывается в его уста, а ИМЕННО ТО о чем он писал - становится чем-то гибридным не понятно почему и самое глвное в статье вообще НИ КАК не отраженным !!! И мы что еще говорим о какой-то науке :) Нее ... так не пойдет или есть ссылки на оригинал или их нету ... фантазии последующих разработчиках о том чего не было и сколько бы времени не прошло НЕ МОГУТ быть основанием для написания энциклопедической статьи - хотя бы здесь нужно отражать истину ... а не превычку употребления терминов ... Все замечательно - но то, что здесь выяснилось по ходу дискуссии нужно ТЩАТЕЛЬНО описать в статье, а не делать вид как у нас все гладко и пушисто, изменяя смысл параллельности ровно на противоположность, когда сеть Хопфилда вдруг каким то непосятжимым образом становится последовательной ... SergeyJ 11:26, 9 октября 2008 (UTC)[ответить]
Согласен, все эволюции понятий нужно отобразить в статье (тем более для меня оказалось сюрпризом, что синхронный режим не был предложен Хопфилдом), и по возможности отобразить историю, но также не менее важно привести и описать современную терминологию. По-хорошему, чтобы сделать исторически правильную статью, нужно как следует почитать что писалось в то время... Может, Agor153 что-то знает на эту тему? Потому как в истории этой науки я совсем не силен, и если начну по-одной перебирать статьи того времени - процесс может затянуться на многие месяцы (хотя, впрочем, это было бы и небесполезно)... --3d6 12:40, 9 октября 2008 (UTC)[ответить]


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

Серьезные замечания по цитатам:

For N = 30 the system never displayed an ergodic wandering through state space. Within a time of about 4/W it settled into limiting behaviors, the commonest being a stable state. (перевод:

Для N=30 система никогда не давала эргодических блужданий по пространству состояний. За время порядка 4/W она сходилась к ограниченному поведению, которое чаще всего было стабильным состоянием.)

Вы упустили главное - здесь речь идет о дополнительном эксперименте, этой цитате предшествует его описание:

Monte Carlo calculations were made on systems of N = 30 and N = 100, to examine the effect of removing the Tij = Tji restriction. Each element of T was chosen as a random number between -1 and 1.

(перевод:

Вычисления по методу Монте Карло проводились для систем с N=30 и N=100 для исследования эффекта снятия ограничения Tij=Tji. Каждому элементу T присваивалось случайное значение от -1 до 1).

Это - не сеть Хопфилда, это - дополнительный эксперимент по исследованию поведения систем с такой архитектурой при снятом ограничении на симметричность матрицы.

Далее, насчет 1/W:

Delays in synaptic transmission (of partially stochastic character) and in the transmission of impulses along axons and dendrites produce a delay between the input of a neuron and the generation of an effective output. All such delays have been modeled by a single parameter, the stochastic mean processing time 1/W. (перевод: задержки синаптической передачи (частично стохастического элемента) и передачи импульсов по аксону и дендритам приводят к задержке между входом нейрона и генерацией выхода. Все эти задержки были смоделированы единственным параметром, стохастическим средним временем обработки 1/W)

т.е. никаких задержек в этой сети нет вообще, вместо задержек введена стохастическая обработка с постоянной времени 1/W.

Теперь, насчет ваших рассуждений об асинхронности и параллельной обработке. Попробуйте ответить на вопрос - сколько в среднем нейронов будут одновременно срабатывать у такой сети? (от чего это зависит?) --3d6 07:05, 9 октября 2008 (UTC)[ответить]

Про W давайте поподробнее ... с того момента как оно вводилось - что это такое ? Для чего ... По мне это можно как раз интерпретировать как время через которое сеть остановится .. ? В среднем нейронов ... ну об этом я практически вам уже написал - в алгоритме выше стоит M, а вот зависит это как раз от ЗАДЕРЖЕК ! Ваш вариант ? SergeyJ 11:33, 9 октября 2008 (UTC)[ответить]
"стохастическая обработка с постоянной времени", возможно что это так ... но хотелось бы понять конкретнее ... т.е. вместо того, чтобы реально моделировать это с помощью задержек, все несколько упрощенно - выбранна малая константа тау как вы ранее и писали (про тау=0 мы уже говорили - этого быть не может), и так же как и поступил Розенблатт ... но смущает фраза "стохастическая обработка" и ваш перевод "с постоянной" ... допустим даже что ваш перевод однозначен - то как же это понимать так как мы ранее говорили хотите сказать - т.е. просто случайно выбираем нейрон не задумываясь какие в реальности могут быть задержки, а после этого предлагаем зделать интегральную схему с ассинхронной параллельной обработкой, где этот вопрос сразу же всплывет в качестве необходимой реализации ? SergeyJ 11:41, 9 октября 2008 (UTC)[ответить]
Идея в том, что алгоритм написан для последовательной вычислительной системы, и высказано (и, с определенными ограничениями, обосновано) предположение, что если реализовать это параллельно, то будет примерно то же самое. Задержки не рассматриваются - ничего полезного они в себе не несут, и хотя в "железной" реализации они будут, но исключительно вызванные конечностью скорости света. Надо только помнить, что если мы умудримся разогнать систему так, что за время дохождения сигнала от нейрона к нейрону будет проходить несколько циклов обработки - система перестанет работать (условие X(t+1)=WX(t) будет тогда нарушено полностью). Если мы сделаем железную реализацию такой, что все (или большинство) нейронов будут срабатывать одновременно (за счет очень частого выбора новых нейронов для обработки, при относительно длительной обработке каждого) - то получим почти синхронный (или т.н. гибридный) режим работы, который будет отличаться от описанного в статье. Если же мы сделаем железную реализацию так, что будет одновременно срабатывать 1 (и пренебрежимо редко 2 и более) нейрона - получим в точности описанные эффекты. Хотя с точки зрения реализации на чипе основной интерес представляет как раз синхронный (или гибридный) режим - в нем все вычислительные элементы постоянно заняты работой, а не стоят, как в описанном асинхронном --3d6 12:40, 9 октября 2008 (UTC)[ответить]

А вот еще вы очень легко меняете слова - мы ведь в переводе САМИ пишите "средним временем", а чуть ниже уже "постоянным" - это же разный вещи !!! Это среднее время это что вообще ... от чего среднее ? Мне из статьи так это не стало понятным ... а вам ? SergeyJ 11:51, 9 октября 2008 (UTC)[ответить]

Я написал не с "постоянным временем", а с "постоянной времени", в смысле характеристики случайного процесса. Имеется в виду, что время, которое пройдет между данным срабатыванием нейрона и следующим - случайно, но в среднем равно 1/W. --3d6 12:40, 9 октября 2008 (UTC)[ответить]
время, которое пройдет между данным срабатыванием нейрона и следующим - случайно, но в среднем равно 1/W вот наконец-то очень хорошая формулировка ! Теперь задумайтесь и ответьте на вопрос - почему время, которое пройдет между данным срабатыванием нейрона и следующим - случайно ? Каким условиям должна удовлетворять сеть в этом случае ? Возможно ли это в сети с одинаковыми задержками для всех связей (то, что они хоть какие-то но есть - мы разобрались) ? Если да, то почему и что для этого нужно ? SergeyJ 12:39, 10 октября 2008 (UTC)[ответить]
задержки одинаковы и порядка нуля (при программной эмуляции - просто равны нулю). Вот как идет процесс: мы смотрим на нейроны, крутим время, и вот наступает момент, когда один из них должен сработать. Мы останавливаем время, смотрим состояния всех нейронов в данный момент, даем их на вход нейрона, который обрабатываем, и вычисляем его выход. После этого, крутим время дальше. Да, если бы мы посмотрели в этот момент на все нейроны - многие из них хотели бы изменить свои состояния, но мы на них не смотрим, и не даем этого сделать (на входах нейрона новая информация - а нас это не волнует, его новое состояние мы не пересчитываем). Еще через какое-то время приходит очередь другого нейрона реагировать - мы снова смотрим состояния всех нейронов, даем их ему на вход, и вычисляем новый выход. И так далее. Таким образом получается, что как бы сигнал задерживается - нейрон меняет свое состояние не тогда, когда поменялись его входы, а через какое-то время - но в явном виде задержки не вводятся, задержки именно моделируются параметром частоты обработки. Если бы время между срабатыванием нейронов было равно нулю, и срабатывали нейроны тоже мгновенно, мы бы получили невозможную в реализации систему. Но пока 1/W не равно нулю, все в порядке --3d6 06:24, 11 октября 2008 (UTC)[ответить]
Хорошо, но вы снова забыли, что 1/W - это не константа, поэтому можно сказать, что задержки моделируются параметром частоты обработки - но МОДЕЛИРУЮТСЯ, а не "задержки одинаковы и порядка нуля (при программной эмуляции - просто равны нулю)" они равны 1/W, и в каждом конкретном случае они разные ... SergeyJ 08:20, 11 октября 2008 (UTC)[ответить]
Нет. Задержек нет вообще, они равны нулю. ВМЕСТО них - частота обработки. Если бы были задержки, не надо было бы ничего моделировать. --3d6 14:02, 11 октября 2008 (UTC)[ответить]
Хорошо если задержки моделируются с помощью частоты обработки (при том асинхронной) - то можно по крайней мере сказать, что это вещи эквивалентные ? Т.е. например, если есть анализ сети у которой явно есть задержки, то будет ли он справедлив для сети Хопфилда, где эти задержки просто моделируются с помощью частоты обработки ? SergeyJ 04:33, 12 октября 2008 (UTC)[ответить]
Ну как эквивалентные... Я бы не сказал - при попытке превратить обработки в случайное время в задержки окажется, что задержки тоже будут иметь случайные длительности. И потом, среднее время между обработками - это одно число на всю сеть, а задержки - это N^2 чисел (на которые, для обеспечения эквивалентности, должны быть наложены серьезные ограничения). Если взять сеть с постоянными задержками, то, наложив на них жесткие условия, можно получить сеть Хопфилда с последовательной обработкой, но никак - со случайной. То есть, притянуть за уши их можно, но сказать что они появляются естественным образом - нельзя. --3d6 07:26, 12 октября 2008 (UTC)[ответить]
Задержкам не обязательно нужно иметь случайные длительности, им нужно быть просто случайно распределенными ... их количество обеспечит длительную псевдослучайность ... но допускаю, что Хопфилд не это имел введу - хорошо этот вопрос оставим до появления новой информации ... а теперь можно хотя бы минимально превести статью к таму ввиду о чем мы уже договорились ... В первую очередь попробуйте написать псевдо-код реализации: из моего последнеего варианта нужно устранить букву M и каким то образом вставить туда 1/W и собственно W - тогда будут яснее ваши предположения о не эквивалентности задержек ... Да, и замедте, что 1/W это не одно число, а в каждый момент разное SergeyJ 11:56, 12 октября 2008 (UTC)[ответить]
"их количество обеспечит длительную псевдослучайность" - каким же образом? Постоянные задержки однозначно определяют порядок срабатывания нейронов. Код мне в голову пока приходит только довольно громоздкий, попробую придумать что-то покрасивее --3d6 11:23, 13 октября 2008 (UTC)[ответить]
Да, конечно определяют, но за время W они могут быть все время разные, т.е. с точки зрения эксперимента в приделах времени W они будут выглядить случайно. Если не придумаете лучший код, то пишите какой есть ... со временем улучшим, я же пока совсем не понимаю что имеется введу ... SergeyJ 15:53, 13 октября 2008 (UTC)[ответить]
А, ну за время W конечно будет неотличимо от случайного, просто у меня слово "длительное" ассоциировалось с "много больше W". Идея кода такая: мы крутим время, и смотрим на нейроны - кто уже должен сработать, кто еще нет. Когда видим тот, который должен сработать, обрабатываем его, берем случайную величину T со средним 1/W, устанавливаем его следующее срабатывание в t+T, и крутим время дальше. И кажется я уже знаю, как написать это более-менее неплохо, завтра попробую сделать код --3d6 16:30, 13 октября 2008 (UTC)[ответить]
Ауууу ?! Уже не только завтра наступило, уже почти неделя прошла ... :) SergeyJ 10:50, 17 октября 2008 (UTC)[ответить]
Прошу прощения, в связи с некоторыми событиями у меня все это время не было возможности сколько-нибудь нормально подумать на эту тему. Но лучше поздно, чем никогда :) Основная мысль вот какая: строится очередь обработок, нейроны по-одному из нее выбираются, пересчитываются, и запихиваются обратно в новое место. Код может выглядеть например так (я старался поменьше сокращать и все варианты выделить явно, на самом деле можно чуть короче, но думаю важнее чтобы было понятнее):

int previousNeuron[N]; //номер нейрона, который идет в очереди перед данным

int nextNeuron[N]; //номер нейрона, который идет в очереди после данного

double neuronState[N]; //состояние нейронов

double neuronTime[N]; //время, в которое нейрон должен сработать

int firstIdx; //номер первого нейрона в очереди

int lastIdx; //номер последнего нейрона в очереди

void insertToQueue(int n, double t) //вставить в очередь нейрон n, который должен сработать в момент t

{

 neuronTime[n] = t;  //что бы ни случилось дальше, время обработки данного нейрона - t
 if(neuronTime[lastIdx] < t) //если последний в очереди обрабатывается раньше n-го - запишемся в конец
 {
   nextNeuron[lastIdx] = n;
   previousNeuron[n] = lastIdx;
   lastIdx = n;
   return;
 }
 else
 {
   int cidx = previousNeuron[lastIdx];
   while(neuronTime[cidx] > t && cidx != firstIdx) cidx = previousNeuron[cidx]; //идем с конца очереди к началу, пока не встретим нужное время
   if(cidx == firstIdx) //если n-й обрабатывается раньше, чем первый в очереди, запишемся в начало
   {
     nextNeuron[n] = firstIdx;
     previousNeuron[firstIdx] = n;
     firstIdx = n;
     return;
   }
   else //обычная ситуация - тот нейрон, что перед n-м, направим на n-й, а тот что после - запишем после n-го
   {
     nextNeuron[n] = cidx;
     previousNeuron[n] = previousNeuron[cidx];
     nextNeuron[previousNeuron[cidx]] = n;
     previousNeuron[cidx] = n;
     return;
   }
 }
 return;

}

void asyncStep()

{

 double st = 0; //временная переменная для нового состояния нейрона
 int pidx = firstIdx; //номер обрабатываемого нейрона - т.е. номер первого в очереди
 for(int x = 0; x < N; x++)
   st += W[pidx*N+x] * neuronState[x];
 neuronState[pidx] = st;
 firstIdx = nextNeuron[pidx]; //следующим должен быть тот, кто после нашего
 double dt = w_coeff * (double)rand(); //w_coeff - коэффициент, отвечающий за частоту срабатываний нейронов
 insertToQueue(pidx, neuronTime[pidx] + dt); //добавим только что обработанный в очередь

}


...вроде теперь не ошибся. В начале очередь нужно заполнить корректными значениями, например первым поставить нейрон номер 0 со временем 0, вторым - 1 со временем 1, и т.д. --3d6 12:28, 29 октября 2008 (UTC)[ответить]

Хорошо, я как нибудь посмотрю ... сейчас что-то туговато со временем ... но Вы можете постепенно вносить изменения в статью ... похоже по основным пунктам мы договорились ... SergeyJ 09:16, 30 октября 2008 (UTC)[ответить]


а SergeyJ наконец узнал, какую статью он правит :) что поделаешь все мы не совершены, читали где то больше, где то меньше ... но мне простительно :) я знаю профессоров, которые не знают что такое перцептрон Розенблатта - а читают про него бред всем студентам на лекциях, после чего студенты становятя совсем не вменяемыми, особенно если с этим представлением дожили до статуса молодого доктора .... к счатью, ВИКИ и создан для того, чтобы избежать академических бредней ... поэтому с каждого по способностям ... вам отдельное спасибо как к корректному оппоненту ... давайте продолжать находить истину ... хоть дисскусия и затянулась, но думаю не является бесполезной ... SergeyJ 11:59, 9 октября 2008 (UTC)[ответить]
Ну, я тоже узнал немало деталей - как оказалось, хотя практически всю автоассоциативную память называют сетями Хопфилда, его вклад не столь выдающийся (а может просто стоит еще какие его работы почитать?). Вообще, может стоит сменить название статьи? Как минимум, если добавить еще несколько модификаций сети Хопфилда и рассказать про разнасыщение, то по-моему это покроет значительную часть наработок в этой области (хотя возможно, я заблуждаюсь, и просто мало знаю?)... --3d6 13:08, 9 октября 2008 (UTC)[ответить]
Почитать конечно было бы не плохо, если ничего не найдете попробую спросить у своего проффесора - у него в закромах находятся куча оригинальных работ, но он редко ими делится - реритет так сказать :) Не, думаю статья с таким названием должна быть ... конечно от сюда можно делать кучу ссылок на другие модификации, но если вопрос всего в одном абзаце, то вполне об этой модификации можно упоминуть здесь явно назвав автора модификации с конкретной ссылкой на его работу, ну модификаций как говорил наш компитентный, но очень занятой Agor153 порядка 400 шт, и со временем обещал чего нибудь уточнить про эти направления ... с появлением порядка десяти статей на тему сетей в основе которых лежит Хопфилд просто выделим их в отдельнуб категорию но до этого пока далеко ... со стандартным бы Хопфилдски вариантом разобраться :) SergeyJ 17:01, 9 октября 2008 (UTC)[ответить]

Что бы это значило?[править код]

К сожалению, совершенно неясно следующее утверждение:

"1. Относительно небольшой объем памяти, величину которого можно оценить выражением:

Это означает, что в нейросеть можно записать лишь примерно 15 % образов от числа нейронов."

С чего это стало "примерно" 0.15?--Agor153 22:12, 4 октября 2008 (UTC)[ответить]
А вот эта оценка для меня вообще остается загадкой... Откуда взялась формула? Почему именно 2ln, а не, скажем, 1.82? Что имеется в виду под объемом памяти (ведь в принципе можно запомнить до N векторов, хоть и с потерей ассоциативных свойств - но теряются-то они не мгновенно)? Насчет 15% - эта цифра мигрирует из статьи в статью уже много лет, и мне она не нравится, но проверить как-то руки не дошли... --3d6 07:13, 5 октября 2008 (UTC)[ответить]
Для меня это тоже загадка :) Похоже какая-то приближенная статистическая прикидка ... математики любят давать такие оценки, но как правило они не соответствуют действительности, если правильно подобрать два эталона, то может оказаться, что и их будет достаточно, чтобы превысить этот объем ... было бы не плохо дать конкретный пример, где превышается объем памяти ... SergeyJ 09:43, 5 октября 2008 (UTC)[ответить]

Даже без детального разбора очевидна ошибка. Две фразы друг другу противоречат: 1/2lnN - это не 0.15! Надо переписать или просто удалить.--Agor153 14:26, 5 октября 2008 (UTC)[ответить]

Чтобы люди читали первичный, а не вторичный продукт, добавил линк к базовой статье "The capacity of the Hopfield associative memory" (см. список литературы). Там все объяснено: и понятие информационной ёмкости, и способ её оценки. Enjoy!--Agor153 14:37, 5 октября 2008 (UTC)[ответить]
Огромное спасибо за ссылку! По-хорошему мне это надо было прочитать еще несколько лет назад. Лень - зло... Число 15% надо будет не только убрать, но и написать, что эта оценка неверна (похоже, многие с ней сталкивались), попробую завтра-послезавтра изложить это как можно более внятно, возможно с ключевыми моментами из статьи. --3d6 20:37, 5 октября 2008 (UTC)[ответить]

Параметрическая нейронная сеть[править код]

Может кто нибудь знает про этот вид нейронной сети ? Описан, например, здесь: Б. В. КРЫЖАНОВСКИЙ, Л. Б. ЛИТИНСКИЙ ВЕКТОРНЫЕ МОДЕЛИ АССОЦИАТИВНОЙ ПАМЯТИ http://window.edu.ru/window_catalog/pdf2txt?p_id=26750&p_page=8

было бы не плохо сделать, хотя бы минимальную статью в вике ... SergeyJ 11:38, 5 октября 2008 (UTC) Еще здесь http://window.edu.ru/window_catalog/pdf2txt?p_id=24874&p_page=12 SergeyJ 12:10, 5 октября 2008 (UTC) А вот нормальная версия http://www.niisi.ru/iont/staff/llb/publications/Razd_4st15.pdf Кто нибудь понимает что там написано :) SergeyJ 12:18, 5 октября 2008 (UTC)[ответить]

Дорогой коллега, вариаций сетей Хопфилда насчитывается более 400. Направлений несколько:

  1. больше двух предельных состояний у нейрона;
  2. ортогонализация системы эталонов перед построением матрицы связей;
  3. переход к тензорным степеням (иногда называются квантовыми сетями).

Не уверен, что нужно описывать все обобщения по-отдельности. Надо бы просто раздел "Обобщения сетей Хопфилда" с правильной библиографией. Цитированная Вами работа - одна из тысяч. Нужны серьёзные основания или личный интерес, чтобы конспектировать её в Википедию.--Agor153 14:23, 5 октября 2008 (UTC)[ответить]

Хорошо если вы в этом разбираетесь давайте отразим эти три направления ... моих мозгов уже здесь похоже не хватит - если только для критики :) SergeyJ 20:17, 5 октября 2008 (UTC)[ответить]
Работы здесь много. Давайте отложим в "полудолгий" ящик на пару месяцев. :)--Agor153 08:57, 6 октября 2008 (UTC)[ответить]
Лишь бы не на год :) SergeyJ 11:31, 6 октября 2008 (UTC)[ответить]

Сеть Коско или ДАП (двухнаправленная ассоциативная память)[править код]

Между прочим, может кто нибудь мне доходчиво объяснить, какую такую модификацию внес Коско в сеть Хопфилда, что она стала распознавать образы ? SergeyJ 21:24, 6 октября 2008 (UTC)[ответить]

Если на пальцах, то он ввел второй слой: все нейроны первого связаны со всеми второго (и не связаны друг с другом), все нейроны второго - со всеми первого (и не друг с другом). В случае, если первый слой равен второму по размеру, то это получается в точности сеть Хопфилда (условие симметрии связей там, если я правильно помню, соблюдается по построению). Однако если не равны размеры слоев, то получается ассоциативная память, которая образу одной размерности может сопоставлять образ другой размерности - например, отображать картинку в номер класса в двоичном (или любом другом) коде. Конвергенция может идти в синхронном, асинхронном и гибридном режимах. --3d6 18:13, 9 октября 2008 (UTC)[ответить]
Это я уже знаю ... но не понимаю от куда возникло возможность распозновать ? Матрица между связями так же одна, строится по тому же правилу, только с тем отличием, что можно умножать матрицы разных размеров (ну с матрицами это вроде всегда было можно) ? Вы ведь утверждали что лошадь с яблоками не проассоциируешь таким образом (от того, что они стали разных размеров ничего же не поменялось) ? SergeyJ 14:26, 9 октября 2008 (UTC)[ответить]
От того, что разных размеров, поменялось - у нас теперь образ состоит из двух независимых частей, и мы можем запомнить такой двойной образ (например, первая часть образа - лошадь, вторая - яблоко). Хотя не знаю как у такой сети обстоят дела с ассоциацией нескольких образов в первом слое одному и тому же образу во втором. Точнее, в том варианте, который я озвучил - никак, но если добавить еще связи внутри слоев - то может быть. Но есть или нет - не знаю --3d6 18:13, 9 октября 2008 (UTC)[ответить]
Но тогда и при одном размере - есть две независимые части, т.е. тогда "если первый слой равен второму по размеру, то это получается в точности сеть Хопфилда" - не верно ... SergeyJ 11:59, 12 октября 2008 (UTC)[ответить]
Только что написал длинное доказательство, и обнаружил, что я предполагаю, что веса связей первого слоя со вторым и второго с первым обладают свойством: W12(i,j) = W21(i,j), что совсем не факт что правда. Если нет - то действительно я ошибаюсь, если так - то я прав, но как на самом деле - не помню, надо посмотреть где-нибудь... --3d6 13:59, 12 октября 2008 (UTC)[ответить]
Любая сеть с двумя слоями и одим слоем связей удовлетворяет условию W12(i,j) = W21(i,j), т.к. связь элементов первого со вторым, и второго с первым - это одна и так же связь ... поэтому пишите "длинное доказательство" именно это меня и интересует ... SergeyJ 15:56, 13 октября 2008 (UTC)[ответить]
нет, не удовлетворяет - я тоже сначала так подумал, а потом понял где ошибка. Возьмем сеть из 2х слоев по 2 нейрона - a1,a2 и b1,b2. У нас есть вот какие связи: a1b1, a1b2, a2b1, a2b2, т.е. 4 разных. Если связь a1b2 равна связи b1a2 (что необходимо для моего доказательства) - то получится, что разных связей у нас всего 3: a1b1, a2b2, и a1b2 - поскольку a2b1=a1b2. На самом же деле у нас всегда выполняется другое равенство - W12(i,j) = W21(j,i). --3d6 12:36, 29 октября 2008 (UTC)[ответить]

Ой, мама[править код]

Дискуссия была бурная судя по обсуждению, а статья осталась дубово-нечитаемой, с неясностями а то и прямыми ляпами. Предлагаю взять за основу не перекорёженные английские переводы, а достаточно чёткое объяснение в хабрахабре https://habrahabr.ru/post/301406/ (хотя похоже и в этом обсуждении высказывались разумные мысли которые почему-то не попали в статью - я бы внёс в статью например определение синхронного и асинхронного режима через код - чётко и ясно) неон (обс.) 23:28, 19 декабря 2016 (UTC)[ответить]

Частично выправил статью, во всяком случае сгладил неясности, самое главное сделал более понятным, что на входе сети, что на выходе, что такое обучение и как оно отличается от применения. Но ещё статью надо бы дальше сгладить и можно даже сократить некоторые пространные рассуждения неон (обс.) 21:46, 20 декабря 2016 (UTC)[ответить]