2 of October - MS Stage Free Online conference: .NET, MS SQL, MS Azure, Cosmos DB. REGISTER
×Закрыть

Фреймворк для нейронных сетей

Здравствуйте.
Я хочу рассказать Вам о фремвёрке для создания нейронных сети, который я разрабатываю.

Введение.
Здесь будет абзац про историю и концепции.
Когда я учился в университете, я узнал, что алгоритмы нейронных сетей появились как абстракция от новых знаний(на то время) в области нейробиологии в 1970-х годах.
Это было отсительно простые алгоритмы, но даже такой алгоритм позволял распознавать объекты на картинке. Я решил создать инструмент, позволяющий разрабатывать более сложные и приближенные к реальным алгоритмам нейронных сети.

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

Цель.
Цель довольно понятна, дать сообществу возможность создавать настоящий ИИ.

Как вы думаете, это может быть интересно?
Вы можете загрузить рабочую концепцию отсюда github.com/...​uronnet/tree/scope/phase1.
Описание проекта github.com/...​ob/scope/phase1/README.md
Как запустить github.com/...​/phase1/TestPlanPhase1.md

Благодарю за Ваше внимание.

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Я хочу рассказать Вам о фремвёрке для создания нейронных сети, который я разрабатываю.

Если оно не использует GPU(CUDA/OpenCL) то можно закапывать так как не имеет ни малейшего практического смысла. Времена CPU вычислений для нейронок прошли.

Вот вам биндинги на OpenCL, работает везде но хорошо только на AMD, Intel, мобильном оборудовании. На Nvidia работает, но плохо. Просколить до Java
streamhpc.com/...​velopers/opencl-wrappers

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

Какие типы сигналов?

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

Аналоговые и цифровые.

это лишь частный случай для конкретной предметной области.

Аналоговые и цифровые.
вроде в нейронных сетях понятие сигнала достаточно абстрактное...

Блин, я тут скоро себе точно нос расквашу от фэйспалмов.

Попробуй стучать по бороде. У меня иногда от чтения полетов мысли дарований даже ку получается.

Отличный пример аналогового сигнала

Попробуй стучать по бороде.

Отличный пример аналогового сигнала.

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

Хлопці как по мне лучше математику на языке Це писать, а потом прикручивать, например на жабу. Есть один недостаток пальцы можно поломать когда будеш реализовывать. Еще вариант писать на языке R или Rust, не пробовал, если кто пробовал отпишитесь...Но будет гораздо быстрее чем на жабе реализации, особенно циклические операции по перебору различных сценариев ...

Хлопці как по мне лучше математику на языке Це писать

Че мелочишься. На асме сразу. Что в общем то в либах от NVIDIA и Intel и сделано — там смесь С и асма.

Тоже удивили...Вы это сначала попробуйте, потом будете говорить!Штука называется С++ AMP. В MSDN найдете. Позволяет перекинуть часть (или все) вычисления на процессор видеокарты. Посмотрите, потом другим расскажите...Чувак с Microsoft посоветовал для реализации подобных вещей...Я только думаю, что на Rust по круче получится...Но это надо пробовать...

Гля, еще ктот помнит это заклинание )

Спать на потолке, говорят, можно. Но с этим не ко мне.

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

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

Так на этой кривизне и зарабатываем жеж. Добавляя свою )

и в енкодерах с декодерами тож.

Це може бути корисно лише вам, щоб зрозуміти, як це працює.
А взагалі вже повно перевірених часом фреймворків, які дозволяють реалізувати величезну кількість типів нейронів, багатошарових моделей та масштабуються і оптимізовані для роботи з багатьма GPU.
Шукайте Tensorflow, PyTorch, Keras.
Вони дозволяють створювати нові типи нейронів та шарів нейронних мереж без створення своїх фреймворків кожним початківцем.
Але повно і більш спеціалізованих, більш заточених під нейробіологічні аналоги (типу Spiking Neural Networks).
АПД: Почитав далі коменти і зрозумів, що автор поки ще не зкотився з холму Данінга не тільки в нейронних мережах, а і взагалі в Computer science.

Ваша точка зора неоціненна(безцінна).

так вроде есть уже...http://neuroph.sourceforge.net/
Круто будет если напишешь круче!!

так вроде есть уже...http://neuroph.sourceforge.net/

Там нейроны могут возвращать только значение дабл neuroph.sourceforge.net/...​/neuroph/core/Neuron.html . Такой вот дизайн.
И масштабируемость там не предусмотрена/(ну или не реализованна).

Круто будет если напишешь круче!!

мне пожалуйста метрики по которым Вы измереяте крутость предоставьте.

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

Присоединяюсь. Хотелось бы прочитать ответ от автора поста на этот вопрос. Сходу могу предположить лишь два простейших варианта почему автор может считать, что так лучше.
1. Есть 100 нейронов, способных обрабатывать 10 типов сигналов каждый. И есть 10 нейронов на каждый отдельный из 10 типов сигналов. На входе только 2 типа сигнала. В первом случае каждый тип сможет обрабатывать 50 (или все 100, зависит...) нейронов. Во втором — по-прежнему только 10.
2. Потенциально больше комбинаций... А комбинаций чего зависит уже от конкретной реализации идеи. Которой пока что нет, как я понимаю.

Но это если совсем поверхностно, абстрактно и не предметно. Так что подождем автора...

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

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

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

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

но если не напишешь для него градиентный спуск
под запуск отдельно нейронов на амазон лямбда

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

Можно даже в клауде GPU заюзать для вычисления активационной функции и умножению векторов, а потом по http результат вытащить)

Дядь, а ты че тут терминами раскидался, будь как все, изменяй коеф и кол слоев и смори чтоб корреляция норм стояла

Чем одна нейросеть, обрабатывающая разные виды сигналов, лучше, чем отдельная нейросеть на каждый вид сигнала?

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

А на практике как?
Если на видео котик, а в звуковой дорожке залаяла соседская собака — то что будет?

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

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

Строка это матрица из одного столбца или одной строки. В простонародье называется вектор.
Правила умножения матриц найдешь на википедии.

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

Это с какого бодуна? Хотя, я хз, что ты понимаешь под словом «строки».

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

Строка это матрица из одной строки

рекурсия однако

Думаю, для принятия решений исходя из противоречивых данных придумывали fuzzy logic.
Вряд ли там будет настолько 100500 вариантов выхлопа из нейронки (после обучения) что поверх этих выхлопов нужно навернуть еще одну нейронку для принятия решений. Если да — нужно было сразу делать многоуровневую, чтобы на выход она давала семантически осмысленные данные, а не матрицу.

Думаю, для принятия решений исходя из противоречивых данных придумывали fuzzy logic.

Нет. Посмотри перевод слова fuzzy. Большей частью fuzzy это переход от дискретной логики к вероятностной.

нейронка

А внутре у нея — неонка, надо понимать? :)

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

Стесняюсь поинтересоваться, это вы переоткрыли Многослойный перцептрон?

вы правы это самый простой вариант реализации многослойной архитектуры...

Я уж понадеялся на что-то разумное, а тут как обычно.

Вот разумное — это сделать фреймворк нейронок, что без танцев с бубном будет юзать, как openvino, так и cuda. А еще лучше, если будет уметь opencl, neon, avx.
И иметь нормальные интерфесы для С с нормальной докой с биндингами для С++, питона и юльки хотя бы.

Сейчас у всех есть приличный интерфесы для питона, если хочешь С, то начинаются танцы с бубном. Если хочешь заюзать там openvino или еще какие оптимизированные либы для вычисления, то начинаются танцы с бубном с подбором куч ключей, чтобы собралось и заработало.

Или вот тебе еще идея. Конвертор моделей из одних движков в другие и обратно, понятно с переносом весов. Такого нет до сих пор.

У меня договр с инженерами databricks. Они не сотрудничают с компаниями на украинском рынке, а я не конкурирую с ними на рынке опенсорс в нишах которые они уже заняли.

Слушай, дядя Витя, а не хочешь ли ты разразится серией статей «Обработка сигналов для самых маленьких»?

Нет. По тому что оного в инете и книжках просто море. Читать вот только никто не хочет их.
Для человеков с 1-2 курса математики лучше начинать с классиков Голда с Рабинером — они на русский были переведены еще в совке и качество перевода там отличное.
Если хочется почитать про речь, то начинать с Фанта, тоже в совке был переведен.
После этих книжек будет хоть понятно, что такое цифровая обработка сигналов и что такое речь. Это позволит не воспринимать современный алгоритмы, как нечто божественное, а понимать почему они такие и как они такими получились.

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

А про вот это, можешь что-то сказать?
www.dspguide.com/pdfbook.htm
P.S. Я не очень маленький, и что такое FFT представляю.

Не читал. Может и хорошая, может и не очень. Но как-то там слишком много разного в одной книжке — это смущает.

FFT — это быстрый алгоритм вычисления дискретного преобразования Фурье и ничего более. Ну а преобразования Фурье — это матан первого курса любого техничесгого ВУЗа.
Рассказывать на пальцах про него — это смешно. Если тебе нужны области его применения — это одно, если понимание, что это, это другое. Фурье — это всего-лишь одно из всего семейства преобразований. Вейвлеты аналогичный, например. Просто у вейвлетов другой ортогональный базис. Для одних задач лучше Фурье, для других Вейвлет. Напридумана еще пачка таких базисов для других задач, но они используются еще реже.

Но я бы посоветовал начать с какого советского учебника для ВУЗов, а какой выбрать — это зависит от тебя. Язык и изложение материала разное и одно тебе пойдет отлично, а на другом утонешь. Для другого человека все с точностью до наоборот.

Или вот одна из ссылок ru.dsplib.org

Фактически в применении ты этим преобразования переводишь сигнал из временной или пространственной формы в частотную и обратно. Удалив часть из частотной и обратным преобразованием во временную или пространственную ты можешь отфильтровать ненужное тебе из сигнала, например, или наоборот усилить некоторые частоты.
У Голда и Рабинера великолепное описание всего этого в применении к временным сигналам. Там и про окна и взвещивание и почему и какое описано великолепно.
В конце их книжки есть немного о гомоморфных преобразованиях. По сути ifft(log(abs(fft(s)))). Дальше из этого получаются кепрстры и такие массово используемые коэффициенты, как MFCC. В викепедии есть описание шкал Мелов и Барков и кем и когда и почему они были предложены и для чего.

К речи был еще один подход не на базе Фурье, а на базе линейного предсказаний — это Маркей и Грей (идея предложена еще Акинфиевым в начале 50-х). Но сейчас от LPC (линейного предсказания) почти отказались, кроме применения в кодеках речи — эти почти все современные на линейном предсказании основаны.
Фактически кодек работает так. Оченивают коэффициенты полинома порядка 12 на кадре сигнала. Получают эти коэффициенты, получают ошибку предсказания (разница между сигналом и полиномом). затем коэффициенты квантуют на несколько классов от десятков до тысяч. Ошибку предсказания сжимают алгоритмом сжатия с потерями. И шлю номер класса и сжатых ошибку. На приемном конце складывают полином с ошибкой и получают почти оригинальный сигнал. Вся разница в современных алгоритмах именно в частях, как сжимать ошибку предсказания и как квантовать. Есть вариант с очень сильным сжатием, но потерей качества и естественности речи. Передают по сети только значение частоты основного тона выкидывая ошибку предсказания. Затем синтезируют хитрой кривой с периодом ОТ (по сети передается только 2 числа — номер класса и значение частоты ОТ).

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

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

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

Это бессмысленно. У большинства из них техническое высшее образование и два года в ВУЗе им пытались оное вбить в бошку. Более того в инете море информации по этим областям.
Но они категорически ее не читают и не хотят учиться. Им нравиться просто бредить.

А каких именно интерфейсов не хватает на С или С++? И зачем?
Результат тренировки сети — описание слоев и набор весовых коэффициентов для этих слоев. Вендоры уже предоставляют фреймворки, которые используют полученное описание сети и подгружают весовые коэффициенты. Дальше только запускать Run)

Или вот тебе еще идея. Конвертор моделей из одних движков в другие и обратно, понятно с переносом весов. Такого нет до сих пор

ONNX?

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

Вот есть обученная сетка. На питоне ее юзать 3 команды лаконичных и ясных. А не покажешь пример, как эту же сетку на С++ заюзать. На примере mxnet, или торча.
Или сетки обученные из Detectron2.

2 дня пытался собрать и заставить работать с openvino. Пока отложил, за 2 дня не получилось. Собрать получилось, заставить работать не получилось.
Более того, она умеет читать очень ограниченное количество форматов моделей и большей частью от уже не поддерживаемых версий движков.
Так что еще нужно конкретно заморочится, как перевести модель с сохранением весов в поддерживаемый ее формат.

А не покажешь пример, как эту же сетку на С++ заюзать. На примере mxnet, или торча.
Или сетки обученные из Detectron2.
dnn из OpenCV
Я бы начинал с простых шагов (без опенвиво) и с простых сетей в Caffe)

Я иногда охреневаю с местных писателей. И оно не «-виво», а «-вино».

Камон, это сути не меняет) Лады, подождем может еще кто-то другой подскажет...

Че ждать. Здесь просто никто не ответит, кончились в постсовке грамотные программисты. Сейчас мне нужно с ардуинкой разобраться — не все получается (я с ними дела почти не имел и вообще эмбединг не люблю).
А потом сяду и за 2-3 дня сделаю. Просто с наскока не вышло, потому как дока практически отсутсвует — нынче ее пишут только для детей с соответсвующим уровнем доки, для остальных по исходникам сами разберетесь, что я сделаю.

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

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

Так ведь современные многослойные нейронные сети могут аппроксимировать практически любой алгоритм.
Проблема только в:
* Данных для обучения
* Времени для обучения и экспериментами с различными архитектурами нейронных сетей.

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

Я так понял вы хотите что бы можно было распознавать типа данных не зависимо от типа: звук, картинка.

Как вы думаете, это может быть интересно?
Вы можете загрузить рабочую концепцию отсюда github.com/...​uronnet/tree/scope/phase1.
Описание проекта github.com/...​ob/scope/phase1/README.md
Как запустить github.com/...​/phase1/TestPlanPhase1.md

Я чуть посмотрел код. Вы пытаетесь использовать термины с биологии: Аксон и прочее.
Но этому всему не хватает нормального описания.
Если вас не затруднит сделайте описание, по-лучше отформатируйте текст. Может пару слайдов.
Может даже нагерерируйте хотя бы автоматически визуализации зависимостей между классами.
Что бы было понятно как это сейчас использовать.
Я к примеру не Java Enterprise разработчик, но запустил бы. Я не прошу от вас реализации на Python.

А то, я зашел к примеру в класс нейрона а там:
Веса, смещение, ф-я активации.

Я все это видел в других либах, ничего нового. Ну есть классы для соединений, есть методы для обновления весов.

Что здесь принципиально нового?

Я так понял вы хотите что бы можно было распознавать типа данных не зависимо от типа: звук, картинка.

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

Существующие фрейморки, такие как TensorFlow вполне себе хорошо решают подобные задачи. Зачем еще один?

настоящий ИИ

Что такое настоящий ИИ?

Main purpose of this framework is allow AI developers to build object oriented model of brain

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

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

написанно. Благоларю за комментарий, Ваше мнение неоценимо.

может обрабатывать сигналы различного типа

И что конкретно это означает?

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

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

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

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

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

Что такое настоящий ИИ?

Разум — это свойство, которым обладает группа елементов, которые имеют некую общность и обмениваются сигналами для взаимодествия с внешними факторами.©

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

С какой целью елктрические цепи обмениваются сигналами?( Могут ли приспосабливаться к изменяющимся внешним факторам/ приспосабливать внешние факторы к своим потребностям посредством обмена сигналами?)

С какой целью елктрические цепи обмениваются сигналами?

Потому что они так работают. С какой целью частицы обмениваются фотонами (сигналами) при электромагнитном взаимодействии?

Могут ли приспосабливаться к изменяющимся внешним факторам/ приспосабливать внешние факторы к своим потребностям посредством обмена сигналами?

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

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

Это помогает полуцчить больше тока в цепь или устоять от корозионного/ теплового воздействия внешних факторов на цепь?

Какое это отношение имеет к твоему начальному определению? Я лишь показал тебе что определение данное тобой несостоятельно и есть множество вещей в нашем мире которые могут под подпадать. Что касается ИИ этот термин имеет свое определение, разум (он же НИ) свое, а вот что такое настоящий ИИ ты так и не объяснил.

Какое это отношение имеет к твоему начальному определению?

Да.

Какое это отношение имеет к твоему начальному определению?

Прямое отношение.

Молодец, садись, 2. Учись лучше.

Молодец, садись, 2.

The right phrase is sit down and shut up © www.tv.com/...​s/sit-down-shut-up/watch Ну ничего подождём до 10ого.

Подписаться на комментарии