Нейросеть для прогнозирования: универсальная обработка и методика для любой конфигурации. Примеры прогнозирования бизнес процессов

07.12.18

Интеграция - Нейросети

Эта статья – не очередное «введение в нейросети для чайников», подобных которым множество на гитхабе, хабре и других ресурсах. Цель этой работы - попробовать предложить реальные примеры применения нейросетей в ERP-решениях 1С и их программную реализацию в виде обработки 1С. Рассмотрим далее преимущества и предпосылки к использованию. Ведь нейросети дают фантастические возможности для решения задач, недоступные другими методами. Забегая вперед, скажу, что это еще не сложившийся рынок и методики, а просто попытки нащупать нишу для применения технологии.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
НейросетьПрогнозирование (упр. форма) (основная обработка)
.epf 21,40Kb
201
201 Скачать (1 SM) Купить за 1 850 руб.
НейросетьПрогнозирование (обычная. форма) (основная обработка)
.epf 20,89Kb
84
84 Скачать (1 SM) Купить за 1 850 руб.
Пример линейной сети
.epf 13,65Kb
118
118 Скачать (1 SM) Купить за 1 850 руб.

Немного занимательной теории и практики

 

Нейросеть можно рассматривать в виде черного ящика с некоторыми входами и выходами. Ключевой особенностью, привлекающей исследователей, является то, что она умеет обучаться и абстрагировать входные данные, т.е. в некотором смысле «думать». Чаще мы слышим, что их используют для распознавания чего-либо (изображения, голоса), но меня в рамках данной работы интересует «распознавание закономерностей» входных данных. А конкретно – распознавание нейросетью экономических данных и параметров бизнес процессов – того, чем наполнены базы данных 1С.

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

Пример 1

Для проверки этой гипотезы я сделал самую простую сеть, состоящую из линейных нейронов. У нее 1 вход, 1 выход и 10  нейронов вообще без функции активации (тестовая обработка ЛинейноеПрохождение). И провел с ней эксперимент.

Важно! В тестовой обработке я не делал нормализацию(в отличии от рабочей), поэтому на вход надо подавать числа от 0 до 1: 0.1, 0.2 и т.д.

Я  подавал на вход число от 0 до 1, а на выход это число, умноженное на «2» как на картинке. И сеть, обучившись, понимает и это, т.е. понимает, что 5*2=10,6*2 = 12 и т.д.! При этом само действие умножение нигде не прописано в явном виде. Т.е. сеть, обучившись, поняла принцип. С таким же успехом можно научить ее «делить на 3», «прибавлять 5» и т.д.  Фантастика! Рекомендую попробовать самим.

 

Пример 2.

На самом деле линейные нейроны и однослойные сети могут мало чего. Если я ничего не путаю, то вроде есть даже теорема, доказывающая, что линейные нейроны могут отобразить только линейную зависимость. По крайней мере если попробовать вводить что-то типа «корень из двух», «корень из 3х» и т.д. а потом проверить результат. то получается совсем пальцем в небо. К тому опять же доказано, что количество слоев в такой сети также не имеет значения (что один что 2 – все равно), а это уже не интересно, т.к. именно в скрытых слоях происходит магия.

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

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

Эксперимент: я подаю на входы 2 числа, а на выход – их сумму.

 Естественно изначально сеть не умеет ни складывать, ни производить никакие другие математические действия. Ее нейроны на момент обучения инициализированы случайными весами. Тем не менее, проанализировав выборку 30 000 раз или больше, она успешно находит зависимость и обучается сложению! С таким же успехом ее можно научить чему угодно. Попробуйте сложени3 3х чисел, умножение, корни что угодно… Конечно, калькулятор из нее так себе, т.к. точность низкая, но сам факт того, что сеть сделала нужные выводы и распознала зависимость, поистине потрясающий! Можно попробовать задать меньше итераций обучения, тогда будет результат с большой погрешностью, но все равно сеть будет понимать, что 1 + 1 меньше, чем 5+5. А если повысить количество итераций, то сеть приблизится к совершенству.

Как устроены нейросети в обработках. Немного сухих фактов

 

Для Примера 1 я использован совсем примитивную сеть с линейными нейронами без какой либо функции активации. Т.е. каждый нейрон просто умножает поступающий сигнал X на некий вес w и на выходе это все суммируется сумматором который вообще ничего не умножает а просто суммирует входы. Веса изначально задаются случайными числами, а потом вычисляется Общая ошибка между входом и выходом сети и веса корректируются на эту погрешность. Т.н. градиентный спуск. Т.е. сеть при создании содержит случайные веса, потом ей подают много раз входную выборку и она настраивает веса таким образом чтобы ошибка между входом и выходом была минимальна при любых значениях входной выборки. В этом заключается принцип работы любых нейросетей, даже совсем других типов. Веса – это и есть память сети. В нашем мозге это соотвествует соединению между нейронами т.е. синапсам. Вот ее схема:

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

 

Вторая сеть более сложная – она имеет 3 слоя – входной, выходной и скрытый. Это классический многослойный перцептрон (MLP) , который известен с 60х годов и в там виде он наверняка знаком всем студентам. Сеть состоит из элементов с нелинейной функцией активации (у меня используется «сигмоид», что тоже является распространённым вариантом). На картинке взятой из интернета изображена примерная схема:

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

Почему я написал это на 1С а не использовал сторонние фреймворки для анализа данных?

  • Чтобы было легче встраивать в решения и не зависеть от сторонних продуктов. Например встроить в форму заказа предсказание на какую скидку рассчитывает клиент или какой товар ему предложить в этот раз
  • У нейросетей есть особенность – чтобы их использовать надо их понимать. Код на языке 1С дает преимущество для 1С-программиста для понимания механики работы
  • Наконец, это несложно запрограммировать на языке 1С  и 1С вполне «тянет» эту задачу на обычных компьютерах. В 1С теперь есть все необходимые функции – случайное число, экспонента и другие математические функции.

 

Методика применения в реальной жизни

 

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

Я бы сформулировал тут такие этапы:

  1. Выбрать данные, которые влияют на прогноз. Например, размер скидки и сезон влияет на увеличение выручки, а размер задолженности нет (хотя может тоже влияет?)
  2. Загрузить обучающую выборку с помощью запроса на закладке «Запрос». Она должна отражать суть – т.е. в ней должны быть характерные данные. Не обязательно загонять туда всю статистику – можно ограничиться выборкой «Первые 10», «Первые 100». Опять же состав выборки – тоже требует некоторого осмысленного выбора

Логические значения (да/нет) лучше кодировать как -1 и 1. А вот с дискретными так. Допустим у вас есть 4 сезона. Неправильно будет подавать на 1 вход «зима»=1, «весна»=2, «лето»=3, а правильнее будет задействовать 4 входа (1,0,0,0) (0,1,0,0), (0,0,1,0). А вот если будет только «высокий» и «низкий» сезон то сгодится 1 вход с «1»и «0»

  1. Выбрать количество нейронов скрытого слоя. Тут есть интересная особенность: если выбрать слишком мало, то сеть будет «тупой» - она не сможет выучить сложную зависимость (только очень простую), а если слишком много то сеть будет не «думать» а «зазубривать» возможные варианты. Нужно что то среднее – чтобы нейроны конкурировали и «думали». Это подбирается под задачу. Четкого принципа тут нет.

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

Как работать с обработкой

 

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

Примеры использования в конфигурациях 1С

 

Просто кратко перечисляю список нескольких возможных вариантов использования конкретно этой сети и обработки (часть из собственной практики)

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

 

Заключение

 

Как оказалось 1С без всяких скидок хорошо справляется с обработкой нейросетями. Такая реализация как у меня не юзает базу данных в процессе обучения и использования вычисляя все в памяти. Кстати сохранять веса в файл тоже удобно – их можно посылать в другие места. Например обучить на одном магазине и послать в только что открывшийся магазин. Или выложить тут на Инфостарте.

UPD 27.11.18 Опубликован пример отчета : //infostart.ru/public/950619/

Я буду рад если кто то присоединится к этому проекту и расскажет о своём применении нейросетей, задаст вопросы.

 

нейросеть прогнозирование данных прогнозирование на нейросети MLP

См. также

Нейросети 8.3.6 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Обработка подключения фотокамер Canon и Nikon к Управление торговлей 11.4 для потоковой загрузки фотографий в карточки товаров с автоматическим удалением фона

22800 руб.

24.06.2021    9817    3    4    

14

Нейросети Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Расширение "Искусственный интеллект и нейросети в 1С: Работа с отзывами маркетплейсов" предназначено для применения искусственного интеллекта в повседневной деятельности селлеров на маркетплейсах. Среди функций - работа с отзывами, вопросами и чатами покупателей, диалог с нейросетями, генерация картинок, заполнение описаний номенклатуры и другое.

6000 руб.

03.04.2024    6366    4    0    

8

Мастера заполнения Нейросети Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Расширение для заполнения описания товара (номенклатуры) с помощью модели ИИ ChatGPT с ключевыми словами. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ. Прошло аудит на 1cfresh.com. Версия для автоматического заполнения

5000 руб.

13.03.2023    17944    46    49    

75

Нейросети Бесплатно (free)

В статье рассказываю, как ChatGPT может стать помощником разработчика в заполнении таймшитов. Делюсь личным опытом, описываю несколько простых и эффективных подходов, как автоматизировать этот процесс с помощью ИИ.

11.11.2024    380    user1931231    0    

4

Нейросети Бесплатно (free)

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

29.10.2024    1151    user2110835    4    

-2

WEB-интеграция Нейросети Мессенджеры и боты Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

15.10.2024    2104    9    serezh1a    3    

7

Нейросети Программист Платформа 1С v8.3 1С:Документооборот Россия Абонемент ($m)

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

6 стартмани

08.10.2024    472    4    soulner    0    

3

Нейросети Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Данная обработка позволяет автоматизировать работу с использованием нейросетей YandexGPT и YandexART с базой 1С. С помощью нейросетей вы сможете не ограничивать себя в фантазии и ущемлять свои возможности и возможности компании, а наоборот, повысить профессионализм и креативность. Очень удобно)

1 стартмани

04.10.2024    1250    13    EsaDyv    8    

17
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. theelectric 17 14.07.17 12:00 Сейчас в теме
Достойные шаги в 1С по направлению использования нейросетей!

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

И еще вопрос... Почему при слишком большом количестве нейронов скрытого слоя сеть будет не «думать» а «зазубривать» возможные варианты? Ведь, по идее, наоборот - точность результата от этого будет выше, нет?
2. informa1555 2715 14.07.17 12:27 Сейчас в теме
(1) Спасибо! Да есть саморганизующиеся сети (другой совсем тип) и то что Вы написали тоже есть по отношению к многослойным перцептронам. Причем тоже еще в 60х такие работы делались. Сам я тоже занимаюсь самоорагнизующимися сетями с собственной теорией только в другой области (изображения). Для 1Ски я специально такую простую сеть написал чтобы людей не пугать сразу, а чтобы потихоньку с малого начали использовать сети, разбираться. Кто-то дальше пойдет, кому то этого будет достаточно. Такая задумка.
По поводу "зазубривания" как бы не казалось противоположное, но это именно так. Об этом пишут исследователи и самому можно убедиться. Причем я в сове время натыкался на интересную книжку где автор приводит параллели с человеческим обучением (у нейросетей вообще очень много общего с реальным мозгом) и он пишет что типа когда человек чего то не понимает допустим в математике и ему лень разбираться он просто запоминает все возможные варианты т.е. зазубривает. Если дать много нейронов то отдельные сочетания входов просто поставят нужные веса чтобы выходы повторяли входы по отдельному нейрону на каждое сочетание и все. А вот добавить еще скрытых слоев - в это смыл может быть.
3. theelectric 17 14.07.17 13:12 Сейчас в теме
(2)
Сам я тоже занимаюсь самоорагнизующимися сетями с собственной теорией только в другой области (изображения)

Это тоже в 1С?

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

И еще... Как лучше организовать отдельный модуль по организации сети в 1С? Чтобы можно было внедрить такой "модуль" в любую конфигурацию, а потом вызывать его штатными средствами, например, в тех же отчетах. Организовать для этого какой-то определенный интерфейс, может привязать его к какому-нибудь уже существующему "стандарту" если таковы есть. Есть размышления?
Конечно, есть тот же ТерзорФлоу, почему бы его не использовать отдельной библиотекой. Но соглашусь с Вами, что лучше бы использовать средства 1С, т.к. это дает определенную прозрачность.
5. informa1555 2715 14.07.17 13:28 Сейчас в теме
(3) Да не, изображения то она не тянет нормально. Хотя у меня есть публикация just for fun что называется http://infostart.ru/public/200922/ . Но пронозирование тянет в самый раз, поэтому я большие надежды на эту технологию возлагаю. Странно что в 1С это по дефолту нет. В САПе Хана есть например.

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

Как лучше организовать отдельный модуль по организации сети в 1С?

Так обработка и есть такой модуль . Все процедуры с сетью в модуле обработки. Можно даже ее добавить в конфу и вызывать через объект обработки. Можно в модуль засунуть, да. Все равно обучение через какой то интерфейс надо проводить... А саму сеть решать( прогнозировать) можно просто метод вызывать или функцию как обертку сделать. Там много вариантов. Например я для понятности сделал хранение сетей ф файлах, а реально сейчас например храню в доп. реквизитах контрагентов на одном из решений.
21. venvlad 25 14.07.17 17:56 Сейчас в теме
(2)
Огромное спасибо! Ждём продолжения банкета)
CyberCerber; theelectric; pallid; informa1555; +4 Ответить
4. Wolfis 7 14.07.17 13:21 Сейчас в теме
Хорошо подана информация. интересно читать было. в свое время сталкивался с этим. но дальше чтения не пошло. но думаю так что через несколько лет придется занимать вплотную этим..бизнес ростет.
CyberCerber; +1 Ответить
6. informa1555 2715 14.07.17 13:39 Сейчас в теме
(4) Спасибо! Тут как раз материал нацелен на то чтобы пощупать руками, поэкспериментировать
7. McSim_ 14.07.17 13:47 Сейчас в теме
Бизнес не любит нейросети в учёте. Пока интерпретации чёткой не будет.
10. Dem1urg 392 14.07.17 14:17 Сейчас в теме
(7) А РАУЗ бизнес любит? Для нейросети не будет четкой интерпретации. Но есть ряд задач, для которых другие алгоритмы не работают (или дают результат существенно хуже).
Sardukar; informa1555; +2 Ответить
8. Сурикат 401 14.07.17 14:11 Сейчас в теме
А в 1С есть типовые методы. Чем они лучше/хуже?
Чем нейросети лучше той же интерполяции? В обработке изображений это понятно, они давно себя зарекомендовали...
А на достаточно простых финансовых данных зачем эти навороты?

Но за реализацию однозначно ++++
9. Dream_kz 129 14.07.17 14:14 Сейчас в теме
(8)
А на достаточно простых финансовых данных зачем эти навороты?

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

Статья очень интересная, однозначно +.
informa1555; +1 Ответить
11. Dem1urg 392 14.07.17 14:19 Сейчас в теме
(9) Статистика хорошо справляется только там, где есть аналитическая функция хорошо "ложащаяся" на набор данных. В случае набора данных для которого функции нет обученная нейросеть справится значительно лучше.
Irwin; informa1555; theelectric; +3 Ответить
12. informa1555 2715 14.07.17 14:40 Сейчас в теме
(8) Интерполяция?... Ну допустим у меня если я сегодня скидку сделаю в 2 раза больше то у меня выручка будет в 2 раза больше? А если в 3раза? Статистикой можно посмотреть допустим сколько товара продавалось при такой же скидке или при другой скидке и сделать линейную (или например квадратичную) экстраполяцию/интреполяцию. Но проблема в том что по статистике сложно вывести зависимость даже от одно фактора если ее мало. А интерпояция/экстраполяция это не порождает абстрактные знания о предмете, т.е. эти методы не добавляет информации - она остается такой же сжатой. Это как битовая картинка если ее увеличивать - появятся квадраты.
Допустим статистики много, но бизнес среда поменялась (что у нас происходит регулярно). Тогда накопленные продажи до 2014 года (2008, 1998 и т.д.) уже неприменимы к текущей ситуации. И план продаж строить на основе данных до кризиса нет смысла. А сеть во первых уловила зависимости, во вторых она к новым данным быстро приспособилась и выдает правильную картинку. В этом ее фишка.
18. Сурикат 401 14.07.17 15:34 Сейчас в теме
(12)
Вопрос какой функцией выполняем интерполяцию, при многих факторах анализа и сеть сложная будет.
А если обучающая выборка мелкая, то где гарантия, что сеть найдет правильное решение?
13. comol 5107 14.07.17 14:48 Сейчас в теме
Нейросеть делали прямо на 1С? Вспоминается картинка:
Прикрепленные файлы:
silberRus; Созинов; delete; onetone; +4 12 Ответить
14. ABudnikov 3 14.07.17 14:56 Сейчас в теме
(13) Так написано же зачем в (2)
15. informa1555 2715 14.07.17 14:57 Сейчас в теме
(13) Да это не сложно. Посмотрите модуль обработки - там 300 строк вместе с сервисными процедурами. Любая печ форма под erp 2 больше в разы))
16. comol 5107 14.07.17 15:08 Сейчас в теме
(15) Ну я тоже в детстве многослойный персептрон писал на QBASIC-е :)))) Только не догадался выложить "плоды моих научных изысканий" :). Много позже взрослые волосатые дяди научили меня как это надо делать в реальной жизни... :)
17. informa1555 2715 14.07.17 15:27 Сейчас в теме
(16) не знаю чему вас там волосатые дяди научили в реальной жизни... Я же не предлагаю писать сверточные сети на 1С, тем более они не нужны для задач планирования и прогнозирования. У всего свое применение. Тут речь идет о применении этой технологии к решению конкретных экономических задач. Я мог написать и про CNN которыми я много лет занимаюсь,про генетические алгоритмы и про много что еще. Простой однослойный перцептрон на практике хорошо фильтрует сигнал - там не надо добавлять уровней адстракции если он и так справляется. Тоже самое и применительно к задачам 1Ски.
Ninel_S; izidakg; +2 Ответить
19. comol 5107 14.07.17 16:52 Сейчас в теме
(17) Простой персептрон не нужен - есть линейная регрессия. Всё равно нужно приличную НС конструировать чтобы решать задачи на практике... ну и не пишется это на 1С конечно :). Не для того она :)
20. informa1555 2715 14.07.17 17:19 Сейчас в теме
(19) про обработку сигнала это я для примера сказал, понятно что есть лучше методы. Кстати дисперсионные типа парной регрессии вычисляются дольше, ну не суть.
А почему это не пишется на 1С?Какие аргументы? И приличная это какая(какие слои, сколько нейронов) и почему именно такая?
30. comol 5107 17.07.17 18:43 Сейчас в теме
(20)
И приличная это какая


Минимум 4-5 слоёв, иначе смысла особого нейросеть не имеет- будет почти линейный прогноз. Не менее 10-ка нейронов в каждом слое, ну и обучение на нормальном объёме данных.

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

Какая уж тут 1С...
mikukrnet; +1 Ответить
31. informa1555 2715 17.07.17 19:19 Сейчас в теме
(30) ух! А как Вы, не зная параметров задачи вот так вот сходу выдали параметры сети, а? И главное чем это обосновано? Почему 4-5, почему 10? Насчет обучения да - backpropagation тормозной алгоритм включая его улучшенные версии. А все остальное то - чем обусловлено?
Ninel_S; Serg_1C(M); +2 Ответить
34. protexprotex 139 17.07.17 23:01 Сейчас в теме
(30) Ну, на самом деле сеть и с одним скрытым слоем может аппроксимировать практически любую функцию (выпуклую). А с двумя скрытыми слоями - вообще любую (и не выпуклую). 4-5 слоев - это для глубокой сети, когда нужно выявить глубокие закономерности в данных + уменьшить количество связей в сети (сверточная сеть) и настраиваемых параметров.
user1050439; CyberCerber; informa1555; +3 Ответить
38. comol 5107 18.07.17 11:13 Сейчас в теме
(34)
4-5 слоев - это для глубокой сети

Вы немного не понимаете... нужно разобраться в теории сначала.
Глубокие НС это совсем о другом.

может аппроксимировать практически любую функцию
Как и векторная модель и гауссовская... И что? :))))))) вообщем матчасть - немного надо углубиться
45. protexprotex 139 18.07.17 16:49 Сейчас в теме
(38) Простите, не понял про векторную модель и гауссовскую модель..... Распределение по гауссу знаю, функцию такую знаю, что такое вектор знаю. А вот про модель векторную и модель гаусса.... просветите, пожалуйста. (я не ёрничаю, честно не понял).
50. comol 5107 18.07.17 23:14 Сейчас в теме
(45) Это стандартная функциональность Matlab-а при выборе модели для классификации или регрессии.
И то и то относится к машинному обучению, но при этом не НС. НС используют когда эти модели не дают нужного результата.
Что это такое - гуглится:

https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BE%D0%BF%D0%BE%D­1%80%D0%BD%D1%8B%D1%85_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%­D0%BE%D0%B2

https://ru.wikipedia.org/wiki/%D0%93%D0%B0%D1%83%D1%81%D1%81%D0%BE%D0%B2%D1%81%D0­%BA%D0%B8%D0%B9_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81
Прикрепленные файлы:
53. protexprotex 139 19.07.17 05:34 Сейчас в теме
(50) Ясно - SVM - метод опорных векторов. Меня смутило название - векторная модель. По поводу Гауссовой модели - это упрощенно матрица ко вариации + мат. ожидание -> просто вычисляем коэфф. корреляции с некоторыми ограничениями для нескольких сигналов.
56. comol 5107 19.07.17 11:16 Сейчас в теме
(53) Ну для меня это всё статистические модели :). Они конечно простые, но часто решают задачи лучше чем НС, не говоря о том что быстрее.
Если всё это дело лажает - уже приходится обучать НС, ну и как правило 1-2 слоя в этом случае проблему не решают.
62. protexprotex 139 19.07.17 14:54 Сейчас в теме
(56) Тут полностью с Вами согласен. SVM, AdaBost, корреляция - математические методы тем и лучше нейронных сетей, что позволяют ответить на вопрос почему данный сигнал (ошибочно или нет) относится методом к такому то классу, а не к другому. В нейронных сетях ответ на этот вопрос скрыт в самой нейросети, и достать его оттуда получается только для самых простых случаев - типа метода XOR, что само по себе настолько тривиально, что применение нейронной сети не оправдано. Поэтому я пытаюсь тоже сначала при решении применить математический метод от самого быстрого и простого - и потом уже по нарастающей.
user1050439; +1 Ответить
46. protexprotex 139 18.07.17 16:59 Сейчас в теме
(38) Глубокая нейросеть - это сеть где на каждом последующем слое (если это однонаправленная сеть) производится анализ специфичных для прикладной области признаков. Например, при анализе изображения - на первом слое - это точки (аналог ганглиозных клеток off/on). На втором - линии. На третьем углы. На четвертом - окружности. Ну а там и до лица человека дойдем. В обычной (второго поколения - MPL - сети) - там один скрытый слой, и этот слой пытается разгрести все изображение -> проблема с отсутствием анализа двумерности изображения, т.к. сеть полносвязная, то кол-во обучаемых параметров - просто огромно-> переобучение и кол-во примеров должно быть очень велико, ну и скорость обучения хромает и т.д. -> это все лечиться добавлением количеством слоев + новой парадигме обучения. Разве я не прав ?
user1050439; comol; +2 Ответить
52. comol 5107 18.07.17 23:22 Сейчас в теме
(46) Вы правы, и прекрасно понимаете что такое глубокая НС. Но коллега который думает что просто НС с кучей слоёв можно назвать глубокой ошибается.
33. protexprotex 139 17.07.17 22:56 Сейчас в теме
(19) А зачем "приличная НС"? - если задача стоит только в линейном разделении пространства двух классов объектов, и центры тяжести этих двух классов хорошо разделимы линейным классификатором, то почему и не обычный персептрон? - давайте еще AdaBost-инг сюда прикрутим? - тоже линейный (бинарный) классификатор. Не надо усложнять себе задачу, если она решается более простой моделью.
CyberCerber; theelectric; informa1555; +3 Ответить
37. comol 5107 18.07.17 11:10 Сейчас в теме
(33)
только в линейном разделении пространства двух классов объектов

если она решается более простой моделью.


тогда НЕ НАДО ИСПОЛЬЗОВАТЬ НС! Модель подбирается под задачу. Если задача настолько простая что решается НС с несколькими нейронами, значит НС там не нужно - более того вредно.
35. theelectric 17 18.07.17 08:22 Сейчас в теме
(16)
Много позже взрослые волосатые дяди научили меня как это надо делать в реальной жизни... :)

Олег, научите всех нас! )) Как минимум - интересно! Как максимум - будет полезно!
Ну, или хотя бы ссылочку...
40. comol 5107 18.07.17 11:58 Сейчас в теме
(35)
Олег, научите всех нас! ))


Либо платные видюхи по Classification/regression learner -ам на Mathworks либо курсы/конференции от экспоненты

Ну либо у ребят из Yandex Data Factory https://ru.coursera.org/specializations/machine-learning-data-analysis поучиться.
user1050439; +1 Ответить
41. theelectric 17 18.07.17 12:09 Сейчас в теме
22. &rew 52 17.07.17 06:20 Сейчас в теме
Вот! То что нужно для моих задач с кучей ЮЛ, комиссией и себестоимостью.
23. informa1555 2715 17.07.17 08:17 Сейчас в теме
(22) Ну, если это не шутка, то думаю для учета с/стоимости сети плохо подходят, по крайней мере гораздо хуже СЛАУ. Хотя... линейные нейроны чем не СЛАУ...
24. &rew 52 17.07.17 09:07 Сейчас в теме
(23) Без подробностей. Цель - совсем не расчет затрат.
25. inf012 17.07.17 09:59 Сейчас в теме
Первая статья на эту тему, где получил понятие, что это такое и как на практике работает))
Спасибо, интересно.
Ninel_S; Serg_1C(M); informa1555; +3 Ответить
26. sergey512 35 17.07.17 16:25 Сейчас в теме
Процедура РешитьНейрон (нейрон, ВидНейрона)
	Сумма = 0;
	СуммаБезВеса = 0;
	Для каждого с из Нейрон.Входы Цикл
		входнойСигнал = с.Значение;
		Вес = Нейрон.Веса.Получить(Нейрон.Входы.Индекс(с)).Значение;
		
		Сумма = Сумма+ входнойСигнал*Вес;
		СуммаБезВеса = СуммаБезВеса+ входнойСигнал*Вес;
		
	КонецЦикла;	
	
	//Если ВидНейрона = "Линейный" Тогда
	Если ВидНейрона = "Входной" Тогда
		Нейрон.Выход =  СуммаБезВеса;
	КонецЕсли;			
	
	Нейрон.Выход = sigmoid(Сумма);
	
	//Нейрон.Выход = Сумма;
	//КонецЕсли;
	
КонецПроцедуры	
Показать


В данной процедуре есть бесполезное условие или автор ошибся и забыл поставить в условии возврат:

	Если ВидНейрона = "Входной" Тогда
		Нейрон.Выход =  СуммаБезВеса;
	КонецЕсли;	


Выход всегда будет рассчитан так:

Нейрон.Выход = sigmoid(Сумма);
27. informa1555 2715 17.07.17 16:29 Сейчас в теме
(26) Да, использовалось для другой конфигурации сети, потом переделал а убрать забыл. Сейчас смысла в этом куске нет.
28. sergey512 35 17.07.17 16:32 Сейчас в теме
(27) Т.е. выход всегда должен пройти через функцию активации, в данном примере через сигмойд??
29. informa1555 2715 17.07.17 16:53 Сейчас в теме
(28) Да, в данной сетке все нейроны одинаковые в всех 3х слоях и всегда через активацию
32. protexprotex 139 17.07.17 22:48 Сейчас в теме
"Но на мой взгляд тут нет ничего сложного, и принцип можно сформулирует так: если подобрать методом научного тыка такие параметры сети, чтобы она распознавала известные значения из выборки с той точностью, которая вас устраивает(а проверить это легко т.к. результат тоже известен), то можно считать что она обучена хорошо и неизвестные значения она также хорошо будет распознавать." - я бы тут лучше параметры сети (количество слоев, количество нейронов в слое, соединения между нейронами) подбирал с помощью генетического алгоритма. А по поводу "о можно считать что она обучена хорошо и неизвестные значения она также хорошо будет распознавать" - это далеко не так - часто приходится обучать сеть с разными параметрами и даже с одинаковыми параметрами сети, но с разными случайными весовыми параметрами сети - разный результат будет. Приходится беггинг применять.
36. ildarovich 7930 18.07.17 10:50 Сейчас в теме
Обработку пока не скачивал, поэтому задам такие вопросы:
- есть ли в модели нейроны смещения?
- как задать гиперпараметры (я понял, что используется обратное распространение ошибки), управляющие градиентным спуском (скорость обучения и ...(забыл как называется))?
- используется стохастический спуск (веса переопределяются сразу в момент уточнения или все сразу)?
- количество операций обучения в каких единицах? - это число "эпох" или число "сетов";
- какое примерно быстродействие у обучения?
- есть ли возможность рассчитать ошибку? как она оценивается?
39. informa1555 2715 18.07.17 11:25 Сейчас в теме
(36) bias можно просто в формуле задать
Скорость обучения тоже в коде отдельная переменная, на форму не выносил
Веса переопределяются в момент уточнения
Итерации - сеты, если я правильно понял вопрос
Ошибка в процессе обучения оценивается по среднеквадратическому отклонению
Скорость от 5 минут (15 нейронов 10000 итераций) до порядка 20. При текущей скорости обучения.
43. RayCon 745 18.07.17 14:39 Сейчас в теме
(39) Дмитрий, спасибо за ликбез. Даже я, человек, далёкий от нейронов и сетей, что-то понял. :)
Что касается "Я буду рад если кто то присоединится к этому проекту", то могу помочь создать готовое решение и продвинуть его. Есть целая отрасль, которая терпит большие убытки от неоперативного обновления ассортимента. Наверняка такая отрасль не одна, но эта - весьма платёжеспособна, плюс я уже вёл переговоры на эту тему, т.е. знаю людей, которые купят такое решение а, может быть, даже частично профинансируют его разработку.

(40) Олег, назвался груздем - полезай в кузов! Кооптирую тебя для участия в проекте.. в свободное от докладов на Инфостарте время. :)
44. informa1555 2715 18.07.17 15:01 Сейчас в теме
(43) Это очень интересно! Я готов заняться подбором решения на конкретном проекте. Насчет массового решения не уверен, но тоже можно попробовать. Пишите в личку.
48. comol 5107 18.07.17 21:07 Сейчас в теме
(43) Николай, конечно тиражная решение это хорошо... но и тут уже конкуренция приличная... У меня сейчас, к примеру, внедряются некто Nextail для управления товарным ассортиментом на основе машинного обучения. И у них есть конкурентное преимущество - они из Zara...

А для не тиражных с Yandex Data Factory нам конечно не тягаться :(
49. RayCon 745 18.07.17 22:48 Сейчас в теме
(48) Т.е. ты считаешь, что рынок плотно занят? Но ведь есть огромная ниша бесшовной интеграции "на платформе 1С". ;)
51. comol 5107 18.07.17 23:20 Сейчас в теме
(49) Да... но "платформа 1С" по аналитическим возможностям уступает специализированным платформам. Т.е. если делать хорошо - это будут некоторые внешние компоненты... А они уже накладывают ограничения - данные сначала нужно затянуть в память а потом передать в ВК.
Таким образом "решение использует алгоритмы машинного обучения" - было бы крутым лэйблом и давало бы конкурентные преимущества, но позиционировать машинное обучение как основу наверное не стоит...
42. RainyAugust22 265 18.07.17 14:20 Сейчас в теме
Занимательно! Просьба выложить пример файла сети и файл границы.
47. informa1555 2715 18.07.17 17:05 Сейчас в теме
(42) Ну вот из примера в статье
Прикрепленные файлы:
ПримерСложение.mlp
ГраницыДо10.par
54. m-rv 972 19.07.17 09:40 Сейчас в теме
Спасибо за статью!
Если не затруднит, объясните следующий момент:
А= нейрон.Нейрон.Выход;
нейрон.Нейрон.Ошибка= ОшибкаСледующегоСлоя*А*(1-А);

почему ошибка перемножается на какой-то коэффициент вычисленный из значения выхода (А*(1-А))? что он означает?
55. informa1555 2715 19.07.17 10:00 Сейчас в теме
(54) это принцип обратного распостранения ошибки от выходного слоя в обратном направлении, а смысл данного "коэффициента" в том, что коррекция происходит тем больше, чем больше вес у нейрона который включен в связь, т.е. чем больше вес тем больше "вклад" в ошибку - тем больше его надо откорректировать.
57. ildarovich 7930 19.07.17 12:03 Сейчас в теме
(54) (55) Думаю, ответ не совсем точный.
А (1 - А), где А - значение выхода нейрона, это производная функции активации (в данном случае - сигмоида). То есть значение градиента (наклона) по этой координате (весу связи) в методе градиентного спуска. Еще проще - отношение изменения ошибки на выходе к изменению веса связи на входе. Это дает возможность узнать, на сколько в данном направлении нужно изменить вектор весов, чтобы идти в направлении минимума ошибки. Где-то еще должен быть коэффициент, отвечающий за величину шага (скорость обучения) и, возможно, еще один коэффициент (момент), отвечающий за учет величины предыдущего шага (инерцию), чтобы локальные минимумы проскакивать. Если этих коэффициентов и возможности их изменения нет, то обучение может очень часто не удаваться.

Можно еще почитать вот эту статьюНейронные сети для начинающих. Часть 2, где больше говорится об устройстве НС и ее обучении.
58. informa1555 2715 19.07.17 12:16 Сейчас в теме
(57) Да все там точно, просто у меня сначала ошибка вычисляется, потом веса меняются в другом месте с коэффициентами
59. ildarovich 7930 19.07.17 12:59 Сейчас в теме
(58) Про
веса меняются в другом месте с коэффициентами
понял. Неточность (или, скорее, непонятый вопрос) я усмотрел именно в ответе. Вас спрашивали про А(1 - А), а вы отвечали про влияние веса.
60. informa1555 2715 19.07.17 13:50 Сейчас в теме
(59) Так А-это выход нейрона на который надо распостранить ошибку, чем больше А тем больше ему ошибки достанется. Это чисто для расчета величны ошибки на каждый нейрон предыдущего слоя. Это не формула по которой выход нейрона расчитывается поэтому это не наклон сигмоиды. Наверно непривычно воспринимается потому что я в 2 действия это делаю.
61. ildarovich 7930 19.07.17 14:16 Сейчас в теме
(60) Прошу прощения за занудство:
А тогда (1 - А) зачем?
Проверочные вопросы: 1) а если функция активации будет другой (например, ReLU), формула изменится или нет? 2) как связаны обратное распространение ошибки и градиентный спуск?

Это я к тому, что, кажется, вы воспринимаете формулы, используемые в методе обратного распространения ошибки, как эмпирическое. Хотя они строгим образом выведены исходя из модели нейронной сети (которая действительно изначально эмпирическая). Опасность этого в том, что при таком понимании легко допустить ошибку: например, изменить модель, не изменив метод обучения.

И, наоборот, понимание зависимостей позволяет избегать трат времени на поиск "лучшего метода обучения" (в рамках градиентного спуска).
63. informa1555 2715 19.07.17 15:01 Сейчас в теме
(61) Хмм.. Может мы о разных вещах говорим... Ну и какая формула Вы считаете будет при ReLU?
64. ildarovich 7930 19.07.17 15:10 Сейчас в теме
(63) Думаю,
?(А > 0, 1, 0)
если на языке 1С.
65. informa1555 2715 19.07.17 15:55 Сейчас в теме
(64) так это и есть сама функция активации, а та то формула это ошибка для 1го входа 1го нейрона. Т.е. мы уже посчитали выход (не важно какой функцией или вообще как), посчитали отклонение от желаемого значения (опять же неважно как оно получено) и нам надо посчитать на какую величину корректировать вес. Мы же об этой формуле говорим? Или есть какая то связь с функцией активации о которой я не знаю? А где про это написано конкретно - все перерыл не нашел. Вот что в википедии об этом - все как у меня:
Прикрепленные файлы:
66. ildarovich 7930 19.07.17 16:12 Сейчас в теме
(65) Функция активации ReLU
?(А > 0, А, 0)
, а в (64) - ее производная. Они похожи из-за простоты ReLU, но там в скобках не А, а 1. Потому, что производная от Х равна 1.

Вот тоже из википедии https://ru.wikipedia.org/wiki/Искусственный_нейрон
Обратите внимание, на формулу производной сигмоида и что там про производную говорится.
Прикрепленные файлы:
informa1555; +1 Ответить
67. informa1555 2715 19.07.17 16:38 Сейчас в теме
(66) да, теперь понял, точно это ж производная! Странно что у меня и так прокатывало с гиперболическим тангенсом например))
68. ildarovich 7930 19.07.17 16:51 Сейчас в теме
(67) А в том то и дело, что гиперболический тангенс - эта по сути та же функция, отличается только областью значений, производная ее той же формулой выражается:
оба графика отличаются лишь масштабом осей. Производная гиперболического тангенса, разумеется, тоже выражается квадратичной функцией значения
izidakg; informa1555; +2 Ответить
69. informa1555 2715 19.07.17 17:18 Сейчас в теме
(68) Да спасибо что поправили. Я думаю Ваш коммент будет полезен тем кто будет разбираться
70. Yashazz 4790 20.07.17 21:04 Сейчас в теме
...вот смотрю я на всё это, а потом понимаю, что наша реальность - не всякие там завиральные нейронные сети, а экстренное впиливание новых счетов-фактур в дебри нетиповых конфиг, да объяснение бухам в сотый раз, почему у них на 62 счёте третье субконто красненькое... А это так, из параллельной вселенной, астрономически далёкой от автоматизации учёта с помощью 1С.
Дмитрий74Чел; izidakg; YanTsys; +3 Ответить
71. informa1555 2715 20.07.17 21:26 Сейчас в теме
(70) автоматизация УЧЕТА это базовый уровень, чё про это говорить. Но я Вас понимаю мне тоже некоторые вещи кажется космос, а потом глядишь все вокруг начали внедрять.
starik-2005; +1 Ответить
72. Yashazz 4790 20.07.17 21:35 Сейчас в теме
(71) Просто ничего, кроме этого базового уровня, никому нафиг не нужно. НС это "космос" не потому, что продукт не потянет или программисты тупые, а потому, что нужды нет и не будет, готовности к этому никакой. В первую очередь среди тех, кто платит деньги. Попробуйте объяснить - хоть среднему торгашу, хоть гендиру фабрики, нафига это - он не поймёт и денег платить не станет. Разве только действительно, "все вокруг начали" - мода дурная пойдёт, тогда что-то глядишь изменится. Но вряд ли.

Если даже, допустим, логисты не желают видеть воплощённое решение задачи коммивояжёра, а хотят, чтоб "операторы били ручками", а маркетологи орут, что у них отнимают хлеб - ну какая к чертям нейронная сеть, о чём вы?
73. informa1555 2715 20.07.17 22:14 Сейчас в теме
(72) а к нам наоборот логисты обращались за оптимизацией делали несколько раз на разных алгоритмах, всякие оптимизации в wms тоже. Или например из экзотического - линейный и 2мерный раскрой на муравьином/ генетическом алгоритме для оконной фабрики. Ну и мат.методы в планировании и прогнозировании. Насколько я знаю много кто на 1Ске оптимизирует логистику. Да и вообще, например, сравните wms-ки например лет 10 назад и сейчас и их распостранение - они умнеют и распостраняются больше. Тоже могу сказать о бюджетировании, планированиии. Как это "продавать" я не знаю я не продажник, но факт есть.
74. Xershi 1555 03.12.17 15:47 Сейчас в теме
Появилась реальная задачка, т.к. с данным вопросом еще не работал нужно разбираться.
Если можете помочь: http://forum.infostart.ru/forum9/topic174867/message1892038/#message1892038, то велком=))
75. OerlandHue 11.01.18 07:55 Сейчас в теме
Что почитать из фундаментальных книг, чтобы понимать комментарии?
76. informa1555 2715 11.01.18 08:21 Сейчас в теме
например "Нейронные сети, генетические алгоритмы и нечеткие системы" есть еще оч хорошая книга Тадеушевича помоему так и называется "Нейронные сети"
77. Rico17 32 12.03.18 20:47 Сейчас в теме
Приглашаю в проект:
https://infostart.ru/project/795704/
Необходимо разработать движок для работы со смыслами.
Вот простая задача для понимания направления работы:
Система должна уметь составлять осмысленные предложения из набора слов, например:
- пустыня, озеро, река.
Можно добавлять любые слова, чтобы получилось предложение имеющее смысл.
Например: В пустыне нет озера и реки.
78. user1005585 28.06.18 13:14 Сейчас в теме
скачал вашу программу, открыть не могу
79. informa1555 2715 28.06.18 15:09 Сейчас в теме
(78) А в чем проявляется проблема?
80. kauksi 217 15.10.18 10:49 Сейчас в теме
Вот скачал, а как это применять фиг его знает.. на входе цифровые значения... а где кроссовки... шнурки.. футболки... покупатель.
вот есть простая история продаж Покупатель - товар1, товар2... товар10 и период. Как "обучить" чтобы нейросеть "предсказала" что через 10 периодов покупатель купит товар5?

полезность статьи 0. Скачал обработку - а где брать имя файла сети и файл параметров, их структуру? вообщем одна обида злость и разочарование. Бери учебник и разбирайся....
81. ResAndDev 23.10.18 08:35 Сейчас в теме
Когда то давно, когда читал про нейросети - пытался написать нечто подобное - не осилил и бросил. Ваша статья заставила вернуться к этой теме.
82. ResAndDev 23.10.18 10:31 Сейчас в теме
Убить всех человеков! Слава роботам! (нейросетям) (бендер)
informa1555; +1 Ответить
83. izidakg 172 23.11.18 14:06 Сейчас в теме
По "Выбрать количество нейронов скрытого слоя" вопрос - как определить что количество нейронов достаточно? анализ какой или просто интуитивно?
По построению - есть какие рекомендации что закладывать на обработку в 1 и 2-й слой? Тот же типовой пример по анализу продаж - что пойдет в первый слой и что во второй?
84. informa1555 2715 23.11.18 15:37 Сейчас в теме
(83) Для 3-х слойного перцептрона есть рекомендация Число слоев скрытого = корень квадратный из ЧислоВходов*ЧислоВыходов , но это не жесткое правило и подбирать надо на конкретных данных. По поводу 1 или больше скрытых слоев, то это вопрос интересный. Если прогноз продаж представить некой зависимостью (функцией) и эта функция непрерывная в каком то диапазоне, то 3-х слойный (т.е. 1 скрытый) ее может апроксимировать. Но на практике мы не знаем зависимость и ее свойства и даже не знаем факторы которые влияют. Поэтому опять же теоретически 4-х слойным можно апроксимировать любую функцию. Как раз буквально на след. неделе я как раз собрался выложить пример готового отчета с 2мя скрытыми слоями.
85. izidakg 172 23.11.18 16:09 Сейчас в теме
(84) это будет здорово. Самое сложное и непонятное как раз понимание что закладывать в 1-й слой, а что во 2-й. Во всяком случае для меня и элементарная "мурзилка" позволит преодолеть этот барьер и попробовать реализовать реальную задачу
86. venvlad 25 08.07.19 16:55 Сейчас в теме
"..обучить сеть на то какою скидку дать покупателю чтобы он купил товара максимально исходя из его предыдущих покупок и некоторых специфических для отрасли параметров.". Для расчёта оптимальной скидки корректно на вход подавать?
н1 - сезон
н2 - цена
н3 - количество
87. informa1555 2715 08.07.19 19:20 Сейчас в теме
(86) да, вполне. Если от жтого зависит то будет зависимость, если нет то не будет учитываться.
88. windows98a 133 29.01.20 21:11 Сейчас в теме
Можно ли дообучать ранее сохраненную в файле сеть?
То есть немного переделать обработку таким образом, что бы при начале обучения не создавать новую сеть, а "дополнять" уже загруженную из файла? На новых или старых данных.

Для того, что бы можно было обучать сеть рывками, например в ночное время.
89. informa1555 2715 29.01.20 22:42 Сейчас в теме
(88) это не так просто, есть определенные методики позволяющие дообучать сеть новыми данными (например только последний слой). Тут это не реализовано. Поэтому тут просто будет обучение с начала на обновленном датасете.
90. windows98a 133 30.01.20 12:51 Сейчас в теме
(89)
щие дообучать сеть новыми данными (например только последний слой). Тут это не реализовано. Поэтому тут просто будет обучение с начала на обновленном датасете.


А если не новыми данными, а на тех же данных?
К примеру я изменю алгоритм так, что при нажатии на "обучение" будет не новая сеть создаваться, а старая из файла загружаться. А дальше алгоритм пойдет по тому же пути, что и для новой сети. Что в этом случае произойдет? Поскольку я не обладаю знаниями по нейростям и не понимаю сути алгоритма обучения, могу только страшно-дилетантски предположить, что сеть продолжит дополняться новыми элементами и связями.
91. informa1555 2715 30.01.20 13:13 Сейчас в теме
(90) если речь идёт о том что есть датасет, его начали обучать, но за ночь не успели и решили продолжить в след раз. То ок, да так можно сделать.
92. windows98a 133 30.01.20 13:55 Сейчас в теме
(91)
и речь идёт о том что есть датасет, его начали обучать, но за ночь не успели и решили продолжить в след раз. То ок, да так можно сделать.

Ну да, допустим, к примеру задали 100000 итераиций обучения. За ночь они прошли, мы выкинули это в файл. Вечером опять из файла загрузили сеть в ТЗ(а не создали новую), задали еще 100000 итераций и снова жмякнули "Запустить обучение".
Так можно?
Только на тех же данных во входной таблице и границах? Или все-таки новые данные можно подсунуть?
93. informa1555 2715 30.01.20 14:58 Сейчас в теме
(92) Да так можно, есть такая штука transfer learning, но применительно к этой задаче - спорный вопрос. Тут же суть та такая: есть некая зависимость которую мы не знаем от факторов которые мы тоже не знаем. Запускаем обучение и сеть начинает на тестовых данных отрабатывать эту зависимость. Теперь надо чтобы она предсказывала - т.е. решала эту зависимость. Допустим изменилась ситуация и зависимость поменялась. Если вы знаете что она поменялась кардинально (например сейчас теплая зима и сноуборды не продаются), но смешивать в один датасет и нормлаьные данные и новые нет смысла, потому что будет что то усредненное. Дообучать тоже нет смысла. Если теплая зима теперь будет всегда то есть смысл по новой обучить. Изменять границы смысла нет. Такое большое количество итераций - тоже смысла нет. Сходимость достигается при меньшем количестве.
94. windows98a 133 30.01.20 15:17 Сейчас в теме
(93)
о (например сейчас теплая зима и сноуборды не продаются), но смешивать в один датасет и нормлаьные данные и новые нет смысла, потому что будет что то усредненное. Дообучать тоже нет смысла. Если теплая зима теперь будет всегда то есть смысл по новой обучить. Изменять границы смысла нет. Такое большое количество итераций - тоже смысла нет. Сходимость достигается при меньшем количестве.


А если входов 5-10, или может и более, при широких границах и больших объемах обучающего материла в десятки тысяч и более строк? Тоже нет смысла в большом количестве итераций? У меня почему то на малом количестве итераций выдает одни и те же данные при прогнозе, что бы я на входе не подавал. Например в диапазоне 12-13 всегда, хотя границы гораздо шире. При бОльшем же количестве итераций вроде начинает понемногу уже попадать, да и вообще - хотя бы разнородные данные на выходе появляются, диапазон выдаваемых значений на выходе расширяется.

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

Тут интересен еще и сам принцип реализации - возможно использовать ту же таблицу значений сети, а не создавать новую или все-таки нет?
95. informa1555 2715 30.01.20 15:56 Сейчас в теме
По поводу 1й части вопроса. Ну при таких параметрах - да. Что же у вас там за пример такой? Если сеть обучена и на входы так реагирует то видимо входы не оказывают значимого влияния либо произошло "переобучение", локальные минимумы. Попробуйте оставить меньше входов и датасет уменьшить раз так в 1000.
Обученные веса (ту же таблицу) использовать можно, но не факт что нужно.Это я пытался донести. В примере про зиму я имел ввиду не сезонность, а то что ситуация поменалась кардинально. У нас сейчас самая теплая зима за 130 лет, а так то зимой лыжи и сноуборды в соответствии с сезонностью продаются конечно лучше чем летом
96. windows98a 133 30.01.20 16:16 Сейчас в теме
(95) Я так понимаю, что это не переобучение(хотя могу ошибаться). Переобучение, это когда на новых данных плохие результаты, а у меня на тех же данных. То есть ту же таблицу, что и на обучение, я отдаю на прогноз - и получаю что по всем строкам идет почти одно и тоже выходное значение (+- десятые доли единицы). Причем я пока не уверен, но помоему есть зависимость - чем больше входов, тем дольше надо итераций для того, что бы уйти от этого и сеть начала хотя бы РАЗНЫЕ выходные значения выдавать по разным входным, я уж не говорю о точности прогноза, а хотя бы РАЗНЫЕ - и то я уже рад)). А то к примеру болтается в диапазоне 12.8 - 13.3 и без разницы что на входе.
Я только поверхностно понимаю теорию нейронных сетей, поэтому не могу предположит ьдаже с чем связано, просто эксперементирую со входными данными и количеством итараций обучения ,смотрю что получается.
97. informa1555 2715 30.01.20 16:49 Сейчас в теме
(96) Да, нейросеть к сожалению в отладчике сложно прогнать... Переобучение как раз так и может проявляться - она нашла "локальные минимумы" на 12.8 и решила что такая зависимость - без разницы что на входе - на выходе 12.8)). Ее право. Тут надо экспериментировать с гиперпараметрами - количеством слоев и т.д. Вообще конечно "десятки тысяч строк" - это не для 1С... Подумайте как упростить задачу.
98. Rommail 17.06.21 22:51 Сейчас в теме
Подскажите, обработка НейросетьПрогнозирование (упр. форма) (основная обработка) это ваша последняя публикация по тематике прогнозирования в 1С?
99. informa1555 2715 18.06.21 08:13 Сейчас в теме
(98) На ИС да. Дело в том что сейчас как и тогда это все можно (и нужно) для прода писать на питоне или TF Serving или других фреймворках, а на 1С это сделано для того чтобы 1) показать что под капотом 2) пояснить идею прогнозирования простым кодом. А так это все делается за полчаса и работает на порядки быстрее на сишных библиотеках а не на 1С. Из 1С - RESTом исходные датасеты, обратно оценки.
Оставьте свое сообщение