gifts2017

Нейронная сеть. Создаем, учим и используем. В одной обработке

Опубликовал Andrey Smirnov (dusha0020) в раздел Программирование - Инструментарий

Обработка для создания, обучения и использования многослойного персептона на платформе родного и любимого 1С-а.

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

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

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

1. Панель управления проектом. В принятых мной терминах под заданием понимается совокупность собственно нейронной сети, исходных данных для обучения, настроек параметров обучения и сохранения результатов. Панель управления проектом позволяет редактировать компоненты задания (кроме нейронной сети), управлять процессом обучения и контролировать результаты обучения сети. Также присутствуют возможности сохранения и загрузки заданий и готовых сетей. Отдельно отмечу наличие опции сохранения результатов. Если в проекте имеется загруженная / созданная сеть и загружен массив исходных данных то по параметрам сети происходит расчет и выгрузка результатов во внешний файл (таблицу значений или книгу Excel). Аналогично можно узнать результаты возвращаемые сетью для любого набора интерактивно введенных аргументов.

2. Редактор нейронной сети (многослойного персептона). Дает возможность создавать и редактировать нейронную сеть. Визуально сеть отображается в виде структуры из разноцветных шаров. Зеленые шары - входные ядра, красные - выходные, а желтые - ядра внутренних слоев. Имеется возможность устанавливать количество слоев и ядер в них. Для загруженных заданий и сетей, а также в случае, когда для обучения проекта уже были загружены данные, количество входных и выходных ядер принимается равным количеству существующих аргументов и результатов. При нажатии кнопки "Сохранить сеть" происходит сохранение сети в параметрах обработки и инициализация начальных весов ребер случайным образом. То есть даже если мы не изменяли структуру сети ее можно очистить от результатов предыдущего обучения заново сохранив в редакторе.

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

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

Теперь немного расскажу о параметрах сети и о процессе обучения.

Среди множества активационных функций нейронов для данного проекта я выбрал логистический сигмоид Ферми. Самая популярная функция в нейронных сетях и (если понимаете в чем суть обучения) очень просто дифференцируема.

Алгоритм обучения - обратное распространение ошибки. За подробностями, если интересно, к Google.

Норма скорости обучения - адаптивная. На страте принимается значение, указанное в параметрах, но по ходу обучения скорость обучения может меняться. Принцип модификации скорости состоит в том, что в случае когда между шагами обучения направление градиента для ребра сети не меняется скорость обучения умножается на коэффициент К>1, а в случае изменения знака градиента множитель К становится <1. Таким образом, норма обучения хотя и остается важнейшим параметром обучения, но ее неправильный выбор может быть в значительной степени скорректирован модификаторами.

Обучающая выборка. Все переданные в качестве аргументов и результатов данные рандомно делятся перед началом обучения на 3 части (Тренировочная, Тестовая и Верификационная) в соотношении 7:2:1. Причем этот рандом каждый раз разный и данные делятся перед каждым циклом обучения. В итоге Вы видите картину, что при запуске второго (третьего и т.д.) цикла обучения одного и того же проекта ошибки аппроксимации могут на первых шагах резко просесть или подскочить. Это не от того что была взята не та сеть - просто новый рандом выборок и новые значения ошибок.

Что же это за выборки? Тренировочная - понятно. Тестовая - не участвует прямо в обучении, но ее ошибка видна в процессе. Судя по значению тренировочной ошибки, а точнее видя ее динамику в сравнении с ошибкой тренировки можно судить о том не переучена ли сеть (ошибки расходятся) и вообще насколько адекватно данным построена модель сети.

Верификационная выборка - не видна пользователю до самого конца обучения. Так как в процессе обучения мы можем следить за тестовой выборкой, то она тоже косвенно является объектом обучения. В данном случае верификация - финальный и самый непредвзятый судья качества получившейся сети. 

Классический пример переучившейся сети это когда ошибки тренировки и теста сначала снижаются, а потом расходятся и ошибка теста бесконечно возрастает. Сеть, возможно, сумела "запомнить" всю тренировочную выборку и теперь подстраивается не под обобщающие характеристики всей выборки, а "шлифует" только тренировочные данные. Как правило это случается когда исходная выборка слишком мала или слишком однородна и / или количество внутренних слоев и нейронов при этом слишком велико. 

Теперь о способах запуска процесса обучения из формы обработки. Их всего 3:

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

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

3. Запуск через фоновое задание обработки конфигурации. Это если Вам так понравится обработка, что Вы начнете ее регулярно использовать и встроите в конфигурацию. Здесь, конечно, можно было бы рекомендовать Вам сделать запускающий фоновое задание допил, но можно попробовать и через БСП. Вот только версия должна быть даже не знаю уже какая, но довольно свежая.

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

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

Что в приложенном архиве? Описание состава проекта сети (спецификация) для самостоятельной разработки проектов (MSWord), демо-файлы проекта и сети, а также набор из 2-х файлов демо данных. Данные - это таблицы значений с наборами аргументов и результатов.

Обработка выложена отдельным файлом для удобства обновления и замены новыми версиями. Самая важная часть дополнительных материалов – спецификация проекта сети содержится в справке обработки, так что в принципе можно скачивать только саму обработку для экономии $m. Функционал и документацию  при этом Вы получите в полном объеме.

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
NeurоNet.zip
.zip 390,46Kb
07.05.15
103
.zip 390,46Kb 103 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Анянов Михаил (insurgut) 12.05.15 07:10
А если не вникать в предметную область, каково может быть практическое применение используемых алгоритмов?
2. Константин Юрин (kostyaomsk) 12.05.15 08:04
(1) insurgut, скоро 1С-ников нейросети заменят :)
3. Andrey Smirnov (dusha0020) 12.05.15 08:26
(1) insurgut, Самая главная и первая задача нейронных сетей - это обобщение множеств. Результатом обобщения может быть как аппроксимация внутренней связи между данными так и классификация. В практике 1С-нега таких задач, конечно, не много, но можно назвать вообще все связанное с прогнозом. Я не говорю про сугубо экономические прогнозы типа выручки или себестоимости - это само собой. А вот если Вам нужно отлучиться на часок, то можно оценить вероятность того, что в следующий час случиться обвал системы или неприятность помельче. Какие переменные для этого использовать (число одновременных пользователей, интенсивность обращения к серверу, объем ОЗУ и влажность воздуха, количество документов проведенных в минуту и скорость роста БД) решайте сами. Если соберете удачный комплект - нейронная сеть аппроксимирует зависимость и будет выдавать Вам вероятность.
Столь длинным спитчем я попытался объяснить, что сфера применения зависит от Вашей прежде всего способности правильно собрать обобщаемое множество. А это прежде всего знания предметной области: экономики, IT, или, например, биржевого трейдинга.
Pr-Mex; Atori-kun; kraynev-navi; +3 Ответить 2
4. борян петров (TODD22) 12.05.15 09:05
(3) dusha0020, Как я понял из этого поста в жизни простого 1сника вещь бесполезная.....
5. Дмитрий Т (Dmitri_1C) 12.05.15 09:15
(4) TODD22, Наверно не так, а скорее всего: "Не базой единой сыт 1С-ник"
6. Andrey Smirnov (dusha0020) 12.05.15 09:26
(4) TODD22, А что отличает "обычного" 1С-ника от необычного?
Думаю, что обычному не нужно ничего кроме, а необычный выходит за рамки. Классифицируйте себя сами:)
eugeniezheludkov; +1 Ответить 1
7. Евгений К (John_d) 12.05.15 10:30
Вы бы могли пояснить смысл полученного результата в вашем первом скриншоте
первая строка:
х0=3,х1=5,х2=5,х3=6
у0=67,55,у1=3,83
Где задается формула? И какая формула была тут?
8. Andrey Smirnov (dusha0020) 12.05.15 10:46
(7) John_d, Формула не задается. Для демо обучения были созданы 2 таблицы. Одна со случайными переменными Х0 - Х3, а другая с результатами вычисления по этому набору 2-х величин по формулам:
Y0 = (Х0^2 + X1) * X2 - SQRT(X3) - подставьте в формулу Х0, Х1, Х2 и Х3 и получите 67,55
Y1 = SQRT(X0 * X1) - 1 / (X2 * X3) = 3,83
Но таблицы исходных данных - это есть муляж. Муляж какого-то массива реальных данных в котором функциональная взаимосвязь не определена или не поддается математическому описанию. Поэтому задать формулу в рамках обработки нельзя. В рамках обработки мы даем массивы аргументов и результатов и пытаемся данную связь перенести в структуру сети. В демо примере получилось, что после 2000 шагов обучения наша сеть в состоянии выдать приблизительный результат для произвольного набора аргументов с ошибкой в 10-12%. Если хотите вычислять значения указанных функций с определенной погрешностью.
Но в реальности наборы данных не бывают связаны такой жесткой функциональной зависимостью, а нейронные сети - это не аппроксимация функции связи, а обобщение множества и в этом множестве нет внутренней функции. Отсюда и приоритетная область применения сетей в задачах распознавания образов, или сложных многофакторных прогнозов.
9. борян петров (TODD22) 12.05.15 10:48
(6) dusha0020,
А что отличает "обычного" 1С-ника от необычного?

Тем что "обычный" 1сник решает практические задачи, а не изобретает сферического коня... Хотя это то же полезно.
А вот если Вам нужно отлучиться на часок, то можно оценить вероятность того, что в следующий час случиться обвал системы или неприятность помельче.

А на это можно ответить анекдотом:
-Какова вероятность того что вы встретите на улице динозавра?
-50/50 или встречу или нет....

Так же из с остальным или упадёт сервер или нет когда я отлучусь... а пользы от того что мне вероятность посчитает нейронная сеть я не вижу.
10. Andrey Smirnov (dusha0020) 12.05.15 11:05
(9) TODD22,
что "обычный" 1сник решает практические задачи
Я бы даже уточнил, что это идеальный 1сник. Вопрос в задачах. Для идеального 1сника нерешаемых задач быть не должно. Поэтому может быть когда-нибудь столкнувшись с очередной "практической задачей", Вы вспомните, что где-то в недрах Инфостарта есть и такая хрень и можно попытаться ее сюда прикрутить. А на большее и не претендую:)
13KrAs; yurii_host; +2 Ответить 1
11. Сергей Аблаев (serg1974) 12.05.15 14:18
(10) dusha0020, Абсолютно согласен - задачи бывают разные и СПАСИБО вам за очередной интересный механизм!!.
В качестве примера "разной" задачи можно привести например: Будни автоматизации или "мне нужна программка для 3D упаковки"
12. Евгений Абдуразаков (asdfgcom) 12.05.15 18:03
Очень интересовался данной проблемой. Очень рад, что кто-то смог довести дело до опытного образца.
3 года назад пытался сделать распознавание символов. Количество нейронов на входе равнялось матрице символа. На выходе абстрактное название символа, например "Квадрат", "Треугольник". Количество промежуточных нейронов, уже не помню, но пришел к выводу, не должно быть постоянным. Должно накапливаться в процессе обучения. Например, пустая матрица - ничего. Нет абстрактного решения.
Шаг 1. Крадрат. Все точки квадрата должны создать 1 слой нейронов количеством точки квадрата/количество входов нейрона. Слоев до абстактного решения "Квадрат" будет создано столько, чтобы на выходе был 1 "нейрон" Указывающий на результат квадрат.
На 1м шаге каждый задействованный нейрон будет нести 100% связь на следующий в слое нейрон ведущий к решению квадрат.
Шаг 2, например, круг. Добавляются - убавляются задействованные нейроны в матрице 1го слоя.
Формируются новые нейроны во 2м слое со 100% связью "Круг" и задействуются уже сложившиеся связи из "квадрата" снижая %"Квадрат" и т.д.

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

Сложилось мнение, что выходов нейронов должно быть более 1.

Короче остановил изыскания на первом же опыте, когда расчет 1С проводил минуты. Отложил в долгий ящик.

Успехов, коллега! Звезду заработал!
13. eugenie zheludkov (eugeniezheludkov) 13.05.15 01:50
"Так и водют шельмы" ... сидел работал и тут на тебе заинтересовался, прочитал википедию нашел кучу интересных реализаций в пару строчек, интересные области применения http://habrahabr.ru/post/50265/. Нет я и раньше слышал про ANN, но как то не углублялся. Лишь распределенный, генетический алгоритм в паре реализаций и оптимизаций на С++ делал . Сократил время полного обучения с миллиарда лет до миллиона, придумав новый алгоритм нахождения геномов (не рандомный), он даже что-то изобретал ... ПС: нужно нейронную сеть натравить на agar.io пусть обучается
14. Максим Кузнецов (Makushimo) 13.05.15 08:07
Правильно я понимаю, что нейронная сеть работает таким образом:
На вход подаем набор параметров (П) и известный результат (Р)
Скажем 100 строк:
1. П1 П2 ....Пn = Р1
........
100. П1 П2 ....Пn = Р100
на этом массиве сеть учится правильно получать результаты на основе параметров
далее еще 100 строк:
101. П1 П2 ....Пn = Р101 результат сети С101 отклонение С101-Р101
........
200. П1 П2 ....Пn = Р200
сеть свои результаты сравнивает с реальными, отсюда получаем значение погрешности обучения сети
на следующем массиве (10 строк)
201. П1 П2 ....Пn = ? результат сети С201
........
210. П1 П2 ....Пn = ?
мы имеем только массив параметров, но результатов не знаем
а сеть с выявленной погрешностью предоставляет нам свои результаты расчетов для каждого набора (строки) параметров

я все верно написал?
15. Andrey Smirnov (dusha0020) 13.05.15 08:36
(14) Makushimo, Да. Примерно так все и работает. Только есть одно замечание. Все входы и выходы нормируются перед началом обучения через минимальное и максимальное значения в ряду. Поэтому если неизвестные данные очень сильно отклонятся от известной ОДЗ ошибка может быть намного выше ожидаемой.
В общем виде очень важно подать достаточно вариативные и полные начальные данные, для эффективного обучения и здесь больше важно не количество этих данные, а качество их вариации.
16. Юрий (Kurt) 13.05.15 18:07
Интерсно. Слабо представляю данную область... только как вариант прогнозирования будущего чего либо, на основе уже каких-то ранее имевшихся в распоряжении данных.
...А вот бы умудриться натравить нейронные две, а то и три сети друг на друга, что бы они сами контролировали процесс обучения друг друга... или друг другом.. сами осущесвляли подбор оптимальных параметров параметров, сами двигали себя к нужному результату.
Ранне, в конце 90 читал статью, как на 11 нейронах была построена система распознавания голоса или любого другого полезного сигнала (соответственно и обучение другое). Человек перестает понимать речь, когда уровень шума вокруг в два раза выше. Эта сеть распознавала полезный сигнал (речь) даже когда уровень окружающего шума был в 200 раз выше. Разработку финансировали военные... хотели чтобы система могла распозновать шум подводных лодок (ибо уж очень они теперь тихие). Статью найти в инете не удалось. Про данный проект с тех пор тишина. Видно буржуйские военные всё-таки подмяли проект под себя.
17. Andrey Smirnov (dusha0020) 14.05.15 08:19
(16) Kurt, Насчет "сами себя контролировали и направляли" - есть специальные алгоритмы обучения без учителя. Но они скорее о классификации множеств, чем о прогнозе и распознавании.
А про военных и т.п. - это же не секрет Полишинеля. Смотрим киношки Голливудские, как там злые спецслужбы подключаются ко всем камерам видеонаблюдения и распознают в лицо разыскиваемого. Это фантастика? Может быть, но думаю, что разработки таких систем по заказу ЦРУ, АНБ, ФСБ, ФБР ... ведутся в десятках институтов и большинство из них на нейронных сетях. А десяток в той или иной степени работоспособных прототипов уже следят за нами:)
18. Анд Ск (and_sk) 14.05.15 12:22
я думаю вам нужно создать пример скармливания вашей обработке курса доллара,
и все закрутиться))))
19. Andrey Smirnov (dusha0020) 14.05.15 13:41
(18) and_sk, Слишком много неизвестных но важных факторов для такого примера. Откуда я узнаю с какой ноги вставала Набиулина и чего и сколько накануне выпил Сечин?:)
CSiER; eugeniezheludkov; +2 Ответить
20. Анд Ск (and_sk) 14.05.15 14:57
дата+курс за какойто период) мало будет данных?
я думаю многие заинтересуются (алчность грех!!) и захотят попрогнозировать
и если будет больше голов пойдет развитие и к набиулиной))
21. ivanov660 ivanov660 (ivanov660) 14.05.15 20:42
(18) and_sk, на таких "роботах" относительно недавно много народу шишек набило. Экстраполирование относительно монотонной кривой может предсказать сможет, а вот что-то посерьезней нет.
Kurt; eugeniezheludkov; +2 Ответить
22. Юрий (Kurt) 15.05.15 12:09
(20) Когда-то в институте мы изучали "Статистику"... там же изучали и методы прогнозирования, а вернее некоторые коэффициенты показатели "будущего", которые выводились как раз на основании предыдущих данных некоторой кривой. Существут в общем-то несколько коэффициентов расчитывающихся по разным методикам и дающих разную степень точности... а так же (иногда) разное направление развития события.... один кричит "пойдёт вверх", а другой "неее, будет также или вниз" )))

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

На курсе на бирже играют спекулянты (особенно в нынешней нашей ситуации на фоне санкций), узнать что у них будет в голове завтра или через час не представляется возможным. Что в планах у ЦБ на завтра? ...будут покупать валюту? ..будут снижать ставку рефинансирования? ...будут делать вливания на поддержку текущего курса? Что с нефтью? Кто-то притормозит добычу? Кто-то обвалит цены? В зарубежных СМИ появятся "новые" фотографии "наших" регулярных войск и техники в Донбасе? Или какой-нибудь оппозиционер умрёт от алергии... и это как всегда "происки Кремля"? Приструнят какого-нибудь распоясавшегося гея? Случится эпидемия в Арабских Эмиратах? Землятресение развалит коммуникации по добыче сланцевого газа?........ и это ещё не всё!!! что может влиять на колебания курсов валют...
... а вы говорите "дата+курс за какойто период..." - это и будут те самые показатели от которых толку почти нет.
23. Andrey Smirnov (dusha0020) 15.05.15 12:36
(22) Kurt, В биржевой спекуляции есть для таких примочек специальный термин - "технический анализ". Есть книги по данной дисциплине и специальные курсы, но это все не более чем развод лохов на деньги. 100% надежные способы заработать на бирже: инсайд или машина времени.
Но что меня откровенно удивляет в людях так это способность пользоваться сложными программами и формулами, собирать и анализировать гигабайты цифр, обладая для этого, наверное, приличным IQ, и при этом не понимать, что испытать свою удачу за свои же деньги намного легче и проще будет в казино.
24. Юрий (Kurt) 15.05.15 13:28
(23) dusha0020, ну всё-таки "пользоваться сложными программами и формулами", а скорее программами - это даёт результат. На бирже всё так скоротечно, что обработать собственными мозгами эту "динамику" просто невозможно... хотя может и IQ (великих "шахматистов" никто не отменял), может и многолетний опыт, а на нём спонтанное чутьё и интуиция (а это батенька и есть, я считаю, ни что иное как определённым образом сконфигурированная нейроная сеть заточенная под определённый результат ;-) ..в мозгах-то нейроны... а аутисты говорят иногда показывают вообще запредельные невозможные для нас результаты).

Была передача как-то (может тоже развод для лохов)... но! "мужик" написал робота для биржи. Робот оперировал несколькими десятками валют (да, не две, не три... как обыватели себе это представляют ))))))))) купил USD за рубли... подождал... продал USD за рубли). Робот оперирует на разницах курсов... но так сказать в глобальном масштабе:
USD -> AUD -> JPY -> EUR -> GBP -> CHF -> CAD -> HUF -> ZAR -> SEK -> USD
...вооОт такая перепродажа (например), в башке такое обработать... не представляю. Но вполне допускаю, что компьютер это легко просчитает причём с положительным для "хозяина" результатом.

Как говорили в конце передачи, что пока они снимали сюжет у мужика дома, а это (не помню) 1-2 часа, робот на бирже заработал чуть более 5 тыс. $ .... но они не сказали какой суммой оперировал бот )))))) может там был лям или пол-ляма $. Но всё-равно, я считаю, что результат вполне закономерный и достойный. (...и может всё-таки развод, т.к. сказали, что этого робота у мужика периодически покупают "некоторые" люди )))))
25. Andrey Smirnov (dusha0020) 15.05.15 15:42
(24) Kurt, Эта передача, как и "технический анализ" - чистой воды развод. Как и продавцы счастья от TeleTrade и Forex и им подобных контор, как и программы и сервисы "помогающие" выиграть в тотализаторе, как и стратегии "беспроигрышной" игры в рулетку и электронных казино. Как и все прочее о чем я забыл сказать, так и то о чем я даже не слышал.
"На дурака не нужен нож - ему покажешь медный грош, и делай с ним что хош!" (с) Кот Базилио & Лиса Алиса
:)
26. Юрий (Kurt) 15.05.15 17:09
(25) dusha0020, ну всё-таки не соглашусь. Тотализатор и рулетка вещи весьма случайные (а значит вывисти какую-либо закономерность вообще не представляется возможным), хотя в первом случае, на скачках бывали случаи "подставных" результатов (по результатм ставок в пользу тотализатора "суперлошадь" почему-то не смогла..).
Электронное казино - это вообще смешно, когда "все карты" (кости, фишки, барабаны) на руках у компьютера ))))))

А вот на бирже... все курсы вот они в реальном времени (ну и просчёт ходов естественно должен вестись в реальном времени). Любая валюта к любой валюте покупка-продажа курс - нате, забирайте... думайте. Какая валюта к какой выгоднее покупка, какая валюта к какой выгоднее продажа? Расставляем коэффициенты (приоритетности, выгодности - ну это же шахматы, оценка хода) покупки, продажи. Подбираем последовательность валют с наилучшим результатом на выходе (опять шахматы - последовательность ходов)... и вот такая операция покупка-продажа (например):
USD -> AUD -> JPY -> EUR -> GBP -> CHF -> CAD -> HUF -> ZAR -> SEK -> USD
делается буквально в течении 5 минут, а может и меньше.. робот же. Курсы за такой период времени слишком критично не меняются, но и это можно держать под контролем в реальном времени, на ходу меняя приоритеты (как в шахматах, противник сделал "неожиданный" ход, нужно подкорректировать свой план игры). И обратите внимание... мы возвращаемся в ту же валюту, с которой начинали )))) и по возможности с плюсом (не забываем про процент отстёгиваемый бирже за сделку).
Конечно будут ситуации когда все ходы не выгодны, "плохи" ... но на бирже всё меняется, робот сидит ждёт "улучшения погоды"... без вашего участия. Кстати это могут быть и вообще не валюты... всё что угодно... золото, ценные бумаги, акции.

Это далеко не рулетка и не тотализатор... тут всё на виду, всё прозрачно. Возможно в этой прозрачности робот выдаст вердикт, что вообще вариантов нет ))))))))
27. Andrey Smirnov (dusha0020) 18.05.15 10:11
(26) Kurt, Описанная Вами ситуация не имеет ничего общего с прогнозом. Это называется "финансовый арбитраж". И в тотализаторе он имеет место быть не реже, а даже чаще чем на валютных рынках. Дело в том, что букмекер - это продавец прогнозов, а совокупность букмекеров - это рынок прогнозов и на этом рынке можно отслеживать ситуации приводящие к извлечению прибыли, не связанному с исходами самих прогнозов. Например, букмекер А дает коэффициент на победу теннисиста X 2,05, а букмекер Б дает коэффициент 2 на его соперника. В этом случае поставив одинаковую сумму в разных конторах на разных спортсменов мы либо вернем ставки (проигрыш Х и получение 2-х ранее поставленных единиц) либо получим 2,5% прибыли (победа Х и возврат 2,05). Как видите данная схема не связана ни со случайностью, ни с нашим прогнозом и к прогнозированию и аппроксимации в общем и к нейронным сетям в частности не имеет никакого отношения.
Проблема в том, что финансовый арбитраж штука просто хрестоматийная и десятки (если не сотни) тысяч ботов ползают по различным рынкам в поисках возможности и выравнивают валютные котировки или букмекерские коэффициенты да и все что угодно, на чем можно поспекулировать. Хорошо лишь, что играя в эту игру, мы гарантированно не проигрываем (если не накосячим в алгоритме поиска и формирования схем).
28. Юрий (Kurt) 18.05.15 12:16
(27) dusha0020, да, данная ситуация - "простой" расчет из некоторых переменных. Я хотел сказать, что в единый момент времени биржа весьма прозрачна в отличии от той же рулетки, хотя когда шарик остановился... тоже всё просто как 3 рубля ))))

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

По поводу суперкомпьютеров и прогнозов был такой рассказ Айзека Азимова "Выборы" 1955 год (другое название "Назначает Мультивак"). Уже тогда учёные умы грезили "когда-нибудь" свалить всё на компьютер, который будет умнее, мудрее и добрее )))))))
"Аннотация:
К 2008 году в США президент страны избирался с помощью гигантского компьютера Мультивака, а также – одного любого среднестатистического американца. Такой подход к столь ответственным выборам стал возможен после многих лет усовершенствования ЭВМ, в результате чего компьютеры начали предсказывать результаты голосования на основании всего половины опрошенных, затем половины той половины и т.д. А в настоящее время Мультиваку необходимы были тонны статистических данных и всего один голос человека. И имя этого человека становилось таким же популярным, как и имя выбранного президента."

Вот так вот. Т.е. есть в стране такой "среднестатистический" человек, который проголосует как большинство электората. Зачем баламутить всех. Надо определить (найти, вычленить) этого человека и он изберёт президента. .... вот только чего они дальше-то не пошли? Компьютер же (уже) наверняка знает, кого выберет этот избиратель... так и пусть сразу же оглашал результаты выборов САМ. )))

29. Юрий (Kurt) 22.05.15 14:49
(3) dusha0020, "Самая главная и первая задача нейронных сетей - это обобщение множеств. Результатом обобщения может быть как аппроксимация внутренней связи между данными так и классификация."

А вот собственно почему и нет... Обобщение, классификация! Вполне пригодно для распознования речи. Множества? Их есть у нас. Звук давно научились оцифровывать. Пусть 10 различных мужчин скажут в микрофон букву "А", тоже самое сделают 10 женщин, девочек, мальчиков, бабушек и дедушек. Кто-то скажет медленно, кто-то быстро, кто-то отчётливо, кто-то невнятно. Вот мы и получим некоторую кучу различных множеств, но одного и того же - буква "А". Найти закономерности и обощить, вынести вердикт, классифицировать - это буква "А"... ну и алфавит одной буквой не заканчивается.. а еще есть мягкие согласные, паузы. И чтоб получить на выходе удобочитаемый текст - дополнительная прогонка по словарю и расстановка синтаксиса (но это уже отдельно стоящая задача).

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

Кстати, у спецслужб некоторых стран, есть системы автоматического распознования стрелкового оружия (пистолет, автомат, пулемёт, винтовка - И конкретно модель огнестрела) по зафиксированному звуку... Ой чую без нейронных сетей не обошлось.
30. Гость 27.05.15 12:07
Меня заинтересовала твоя обработка в практическом ее применении. Написал тебе в личку.
Не уверен, что в личке письмо ушло.... продублирую здесь:

Прочитал твою статью "Нейронная сеть. Создаем, учим и используем. В одной обработке".

Как думаешь, возможно ли твою обработку использовать для дополнительного дохода на спортивных ставках, в частности на тотализаторе, например: https://www.marathonbet.com/su/toto/hda/home.htm

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

К чему я это все сказал.... А к тому, что когда я применял подход к ставкам на тотализатор исходя из того, что мне показывают мои цифры, то я был в плюсе по итогу за месяц например. Однажды сорвал большие деньги (это было спустя 5 месяцев моего знакомства с тотализтором). Потом начал мешать человеческий фактор... один словом пару месяцев был в небольших минусах (от 50 до 100у.е.). Статистика + появились личные предпочтения к тем или иным футбольным командам = плохие прогнозы.

Прочитав твою статью, мне стало интересно, можно ли твои знания в прогнозировании применить в ставках на футбольном тотализаторе.

Если тебе интересно попробовать твою обработку в реальном применении, то можем обсудить.

С уважением, необычный 1С-ник, Александр ;)
31. Andrey Smirnov (dusha0020) 27.05.15 14:01
(30) Александр, Ответил Вам в личку, но раз уж и коммент есть то выскажусь еще и публично. По пунктам:)
1. Теоретически, как механизм прогнозирования, нейронные сети могут использоваться для формирования спортивных прогнозов. Практически (и об этом я писал выше) важен не механизм прогноза, а доскональное знание предметной области, а в случае с нейронной сетью и другими математическими методами прогнозирования еще и умение формализовать данную область если потребуется.
2. Специальных знаний о формальной области у меня немного, как у обычного любителя посмотреть матч под пивко в спортбаре, так что едва-ли я смогу собрать качественную модель для прогноза.
3. В реальном применении, если есть готовая методика прогноза применение сети возможно. Но здесь все тестируется довольно просто. Берете область исходных данных и результатов, оставляете достаточно большой массив для проверки, а на остальных данных учите сеть. После этого подаете обученной сети проверочный массив исходных данных и выгружаете расчетные результаты в эксель. Смотрите есть ли прибыль и оцениваете ее достоверность (методику я дал в личке). Если вероятность быть в прибыли хорошая - работаем дальше!:) ОК?
4. Если у кого-нибудь есть еще интересные идеи по поводу использования обработки и знания предметной области применения, направленные на получение материальных или моральных благ готов участвовать на долевых началах, если эффективность использования будет подтверждена статистически - методику проверки выдам каждому желающему.
Заранее благодарен всем читателям и участникам обсуждения. Спасибо:)
32. Петр Лунегов (pvlunegov) 09.06.15 13:30
Что то вас всех не туда потянуло. В сторону прогнозов все мыслят применение нейронных сетей.
Все гораздо проще!
Что нужно от искусственного интелекта непосредственно 1с-нику?
Прежде всего - динамическая подсказка нужных функций и процедур в процессе ввода!

Можно нейронную сеть научить помогать вполне определенному человеку, автоматизировав процесс обучения следующим образом:
1). Конкретный человек работает в Конфигураторе 1с.
2). Получаем статистику введенных символов, статистику времени, дня недели, погоды, температуры, настроения
3). Эти Статистики скармливаем нейронной сети
4). Обучаем ее.
5). Готово! Сеть может предложить вероятные слова и символы, которые человек будет вводить в определенный день и час.

Получим персонального помощника, который будет угадывать вводимые символы и ускорять ввод!

Это реально прикладная задача для меня!
33. Петр Лунегов (pvlunegov) 09.06.15 13:33
Кстати, например, подобные алгоритмы используются в олнайн-распознавании голоса (например в СИРИ-помощнике в Айфонах).
Там алгоритм подстраивается под модуляционные интонации конкретного человека.
Чем чаще использовать онлайн-распознавание, тем точнее оно будет для определенного человека.
При этом используются суперкомпьютеры, на которых работают настроенные нейронные сети.
Народ, эти алгоритмы давно работают, а вы все каких то спортивных применениях.

Мыслите шире, мыслите в сторону повседневной жизни!
34. Петр Лунегов (pvlunegov) 09.06.15 13:37
Еще одно пришедшее мне в голову СУМАСШЕДШЕЕ немного оприменение нейронных сетей.

Можно настроить нейронную сеть под конкретного человека.
Для этого нужны:
1). Статистика настроения (например любая таблица, которую заполнит человек раз в день - пишет свое настроение по 10 бальной шкале)
2). Статистика дня, времени недели, погоды,
3). Статистика движений мыши по экрану, вызова определенных программ, расположение ярлыков на экране.

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

Двигаешь мышью, а он сразу подсвечивает ярлык, который мы хотим открыть - ускоряет использование Виндовс!
35. Максим Кузнецов (Makushimo) 17.06.15 11:01
(15) dusha0020,
что в таблице исходных данных есть нейрон?
в визуальном представлении один шарик это одна строка таблицы исходные данные?
или ячейка одной строки исходных данных?
можно привести наглядный пример построения сети и ее использования?
Да на той же таблице курсов валют, про которую тут было обсуждение.
36. Andrey Smirnov (dusha0020) 17.06.15 12:28
(35) Makushimo, Один нейрон это математический аналог нейрона. Нейрон имеет входы и выходы. Входы взвешиваются и от средневзвешенной входов получается значения выходов (всех) по функции активации. Функция активации в нашем случае логистический сигмоид с постоянным коэффициентом кривизны 2. То есть первый слой нейронов - это исходные данные. Каждый нейрон первого слоя выдает свое значение без преобразований на все нейроны второго слоя. Второй слой вычисляет среднюю от пришедших в него сигналов, вычисляет от нее величину сигмоиды и раздает полученное значение третьему слою и т.д. пока в последнем слое не соберется на выходе набор результатов. То есть нейроны первого слоя - это факторы, нейроны последнего - результаты. Все внутренние слои - предмет Вашей фантазии. Суть процесса обучения сети заключается в том, что мы подаем N-ное количество известных наборов факторов на вход сети и смотрим, что получается на выходе. В зависимости от того насколько расчетное значение результата (последнего слоя) отклонилось от известного для обучения проводим коррекцию весов сигналов у каждого нейрона. Метод коррекции - обратное распространение ошибки (отклонения между фактическим и расчетным результатом). И так от набора данных к набору, от этапа к этапу сеть настраивает веса таким образом, чтобы эта ошибка была все меньше и меньше. В итоге по завершению обучения мы подаем набор переменных на вход для которого пока еще не известен результат и вычисляем его через настроенную сеть. Это и есть прогнозирование при помощи нейронной сети.
Постарался коротко:) А на примеры нет времени.
37. Максим Кузнецов (Makushimo) 17.06.15 13:16
(36) dusha0020,
1. Входной слой нейронов - это одна строка таблицы "Исходные данные" на форме обработки. А каждая ячейка строки - это один нейрон. Так?
2. В чем заключается "фантазия" во внутренних слоях? Я могу как то влиять на средние слои и как?
3. Сложно понять: для чего можно (нужно) добавлять внутренние слои и количество нейронов в них?
Могу ли я менять значения нейронов во внутренних слоях или только управлять количеством слоев и нейронов в них?
4. Как и где на обработке производить "коррекцию весов нейронов" ?
5. Если я меняю параметры сети, например ставлю число выходных нейронов = 1, то при загрузке задания в таблице результатов все равно 2 колонки, т.е 2 выходных нейрона. Получается мне нужно где-то там вручную менять (составлять) задание для сети?
38. Andrey Smirnov (dusha0020) 17.06.15 14:15
(37) Makushimo,
1. Да. Все правильно.
2. Редактором сети. Количество внутренних слоев и количество нейронов в каждом их них устанавливаете сами.
3. Внутренние слои - это синапсы (связи) для каждого из которых сеть подбирает и запоминает вес. Чем больше слоев и нейронов тем больше связей и весов и тем больше, грубо говоря область поиска решения. Для простых задач достаточно сетей с одним скрытым слоем, а если переменных много и связи между ними далеки от линейных то гибкость и адаптивность решения повышается за счет увеличения количества внутренних нейронов. Но при этом увеличивается и время обучения.
4. Никак и нигде. Веса корректируются алгоритмом обучения при нажатии на кнопку "Начать". Вы лишь можете судить о том насколько удачно подобраны веса по значениям ошибок аппроксимации. (Интересно как Вы вообще собирались их менять вручную? Для одного этапа коррекции, например, на демо данных нужно проделать сотни тысяч вычислений. Давайте оставим это машине:)
5. При загрузке данных обработка сама определяет сколько входных и выходных нейронов должно быть в Вашей сети. Если вы хотите иметь 3 входа и 1 выход загрузите исходными переменными (аргументами) ТЗ с 3-я колонками, а исходными результатами подайте ТЗ с 1-й колонкой. Редактор сети сам сформирует первый и последний слои.
5.1. Получается что нужно. Формируете ТЗ с данными и сохраняете в произвольный файл командой ЗначениеВФайл(). Загружаете отдельно ТЗ с аргументами и ТЗ с результатами для этих аргументов с формы обработки. Получаете в редакторе сеть с первым и последним слоями по количеству колонок в загруженных ТЗ. Внутренние слои добавляете и редактируете как хотите. Настраиваете параметры обучения и нажимаете кнопку "Начать". Ждете. Если результат Вас удовлетворил сохраняете сеть в файл. В будущем загрузив эту сеть из файла и подав только ТЗ с аргументами без известных результатов можете получить и сохранить в файл результаты для этих аргументов предсказанные ранее обученной сетью. Можете просто ввести набор исходных аргументов с формы и увидеть ожидаемый результат.
В общем: сети нужны данные, чтобы обучиться, и нужно провести сам процесс обучения на этих данных. После этого сеть готова и может обрабатывать произвольные наборы аргументов, рассчитывая ожидаемые результаты.
39. Максим Кузнецов (Makushimo) 18.06.15 08:35
(38) dusha0020,
значит обучение сети выглядит так:
1. загрузил аргументы и результаты
2. указал порог ошибки тестя, порог ошибки обучения, макс количество итераций
3. нажимаем "Начать"
4. Если полученные ошибки обучения/тестирования сильно отличаются от заданных, то
добавляем/убираем внутренние слои, меняем количество нейронов в них
и/или
меняем количество итераций
5. Нажимаем "Начать"

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

1. А задания на обучение это то же самое что и таблица аргументов?
2. как тогда увидеть решения к этим заданиям?
в целом не понятен алгоритм использования обученной сети.
3. почему если я делаю только все вышеперечисленное, нет гиперссылок "просмотр сети" и "Расчет по данным текущей сети" ?
40. Andrey Smirnov (dusha0020) 18.06.15 13:55
(39) Makushimo,
индикатор правильно обученной сети, это совпадение заданных порогов ошибок обучения/тестирования с рассчитанными в процессе обучения. Так?
Не так. Главный индикатор ошибка аппроксимации на верификационной выборке (ошибка верификации). Это указывает на то, на сколько в среднем будет ошибаться сеть на новых для нее данных. Если величина ошибки для Вас приемлема то сеть можно считать обученной.
1. Не совсем. Задание (Вы же скачали спецификацию) включает также сеть, параметры обучения, параметры сохранения и еще некоторые вещи, но они уже не столь принципиальны.
2. Решения сохраняются для загруженных аргументов по ссылке "Сохранить результаты для текущей сети"
3. Очевидно не до конца обучилась сеть. Советую попробовать на маленьком примере (3-4 аргумента, 1-2 результата и таблицы данных в 30-40 строк) с количеством итераций около 100. Он обучится достаточно быстро до минуты времени. В конце обучения появятся ошибка верификации, и не найденные Вами гиперссылки. Не забудьте также указать имена файлов для сохранения сети и задания! После обучения результаты сохраняются и только после этого загружаются на форму.
41. Максим Кузнецов (Makushimo) 19.06.15 13:34
(40) dusha0020,
с индикатором обученности сети понятно
1. А как самому генерировать задание для обученной сети?
2. т.е я загружаю аргументы и сразу жму "Сохранить результаты для текущей сети" и получаю готовые ответы. Верно?
3. Флаг "Сохранять задание" и путь указываю до начала обучения, Это значит что задание для сети сформируется автоматом и будет содержать аргументы, которые загрузил для обучения и ответы, которые загрузил для обучения?
42. Andrey Smirnov (dusha0020) 20.06.15 09:47
(41) Makushimo, Ответ на 1 так как Вы написали в 2:) Результаты рассчитываются и сохраняются для загруженных на этот момент аргументов.
3. Да. По окончании обучения может быть сохранено задание (сеть и данные для обучения) - это удобно, когда Вы обучаете этапами, допустим по 1000 шагов постепенно уменьшая шаг обучения. В данном случае для очередной итерации загружаете задание целиком и изменив (или нет) несколько параметров обучения продолжаете с того места откуда закончили. Или же можно сохранить только саму сеть для получения на ее основе прогнозных оценок. А можно сохранить и то и другое.
Сначала я написал спецификацию сети на листочке. Потом дополнил до спецификацию задания. Так как разработка велась в свободное время и с большими перерывами то одними из первых были написаны загрузчик задания (и как его составная часть) сети из файла и процедура сохранения сети и задания в файл. Это позволяло быстро возвращаться к разработке восстанавливая данные из сохраненных ранее файлов, а не формируя по 10-15 минут их вручную с формы. Когда работа была в основном закончена я не стал городить новый огород из прямого возвращения результатов обучения на форму. У меня на тот момент были прекрасно работающие и вылизанные до блеска процедуры сохранения результатов в файл и восстановления из файла на форму. Поэтому файл сохранения результатов это не прихоть, если хотите, а необходимое звено для передачи результатов обучения обратно на форму.
43. Максим Кузнецов (Makushimo) 24.06.15 10:57
(42) dusha0020,
"это удобно, когда Вы обучаете этапами, допустим по 1000 шагов постепенно уменьшая шаг обучения"
тут не понятна терминология
"1000 шагов" - это 1000 итераций ?
а "постепенно уменьшая шаг обучения" это что значит?
"норме скорости обучения" или все тоже "количество итераций" ? В смысле обучать сеть нужно уменьшая количество итераций?

еще вопросы:
1. Какое должно быть соотношение "количество строк аргументов" х "количество итераций", чтобы не переучить сеть и обучение шло эффективно?
2. для чего нужен параметр "норма скорости обучения"? в каких пределах изменять его значение - от 0 до 1 ? и на что это влияет?
что будет, если я поставлю. 0 и что будет если я поставлю 1?
и какое значение рекомендуется ставить в самом начале обучения?

44. Andrey Smirnov (dusha0020) 24.06.15 11:55
(43) Makushimo, 1000 шагов это 1000 итераций. Под итерацией в данном случае понимается один проход алгоритма корректировки весов ребер по всем данным для обучения.
В данном контексте 1000 это, конечно итерации.
Норма скорости обучения как шаг обучения (и такой термин возможен) всегда в пределах от 0 до 1. При 0 сеть не обучается совсем.
Норма скорости это множитель на который домножается сдвиг веса ребра в направлении антиградиента. То есть аналитически вычисляется градиент веса ребра или частная производная. Производная это скорость изменения функции в точке или на бесконечно малом отрезке в окрестностях данной точки. Или угол наклона касательной к функции в точке. Проблема в том, что градиент показывает нам только направление движения для увеличения общей ошибки (антиградиент, соответственно, направление уменьшения ошибки), но не показывает на сколько нужно продвинуться в сторону противоположную градиенту, чтобы сразу достичь возможного минимума. Почему не показывает? Потому что движение вдоль градиента - это движение вдоль прямой, а функция ошибки явно нелинейна. И вот есть некая дельта, которая вычисляется в зависимости от градиента в точке с существующим весом ребра, но эта дельта переведет целевую функцию в ноль только если эта функция будет линейной. На практике же мы проскочим минимум, потому что функция ошибки вскоре отклонится от прямой. Норма скорости обучения - это и есть коэффициент, на который домножается вычисленное на основе градиента (или антиградиента, т.е. градиента с "-") смещение веса в сторону минимизации ошибки сети. При норме равной 1 обучение идет очень быстро, но никогда не достигнет минимума ошибки, потому что точка минимума будет постоянно "проскакиваться" и очень скоро от шага к шагу сеть будет колебаться у минимума, но никак его не "поймает". При норме обучения близкой к нулю обучение будет очень медленным, но решение имеет шанс подойти очень близко к реальному минимуму.
Вот поэтому обучение лучше проводить этапами. Сначала на большой скорости (0,4-0,7), а потом постепенно уменьшать ее для достижения самого дна ошибки сети.
А вот конкретно нормы, количество итераций на этапе и этапов - это все очень индивидуально. Зависит от данных для обучения и архитектуры сети.
45. Дмитрий Утенков (automatizator) 24.09.15 01:00
(17) dusha0020, Насчет "сами себя контролировали и направляли" используются другие механизмы с соответствующими задачами из той же биологии. Точнее генетические алгоритмы.
46. Дмитрий Т (Dmitri_1C) 14.10.15 13:41
Тестовый вариант, вроде как что-то делает, но увы, не получилось создать свою нейронную сеть и обучить её.
После доработок удалось заполнить аргументы X и Y, то есть входы и выходы, но при запуске обучения проходит один цикл и завершается.
Побывал создать двоичное И, то есть
входной набор:
0 0
0 1
1 0
1 1
выходной набор:
0
0
0
1
47. Сергей Виткус (Lama12-1) 08.09.16 18:24
Почему-то обучение падает на функции "НормализоватьДанные". При попытке деления на ноль.
Есть какие-то требования к исходным данным кроме того, что они должны быть числами?
48. white mount (white-mount) 08.09.16 22:26
(44) dusha0020,
решить с удовлетворяющим меня результатом я так и не смог (но нужно оговориться, что и задачи были сверхсложные)

Вы с алгоритмом "пасьянс Медичи" не сталкивались?
Хороший метод обучения нейронов.

Скачал. На интерфейсе такси выглядит приятно.

С функционалом разбираюсь.

Проблему "гсч" в 1С давно обошёл выборкой из чисел Пи и е.
49. Сергей Виткус (Lama12-1) 09.09.16 10:51
(47) Lama12-1,
Вроде обошел ошибку. Оказалось что такая ситуация возможна когда и числитель, и знаменатель равны нулю. Сделал предварительную проверку на значение числителя. Если равен нулю, то и результат равен нулю без использования знаменателя.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа