Об’єктно-орієнтований підхід до проектування нейронних мереж

Доброго часу, пані та панове.

Я хочу представити вашій увазі мій каркас для створення нейронної мережі. Назва фреймворка — jneopallium ( github.com/...​ium/blob/master/README.md ).
Я вибрав цю назву, оскільки вона призначена для обробки вихідних даних нейронних мереж як вхідних даних для інших нейронних мереж (я думаю, що це може бути корисно для налагодження ШІ та модульного підходу до створення ШІ). Крім того, якщо джерелом входу є нейронна мережа, можна надсилати навчальні сигнали (сигнали, які змінюють вагу дендритів, аксонів, видаляють, створюють або оновлюють нейрони).

Мета цього фреймворка — надати розробникам можливість будувати об’єктні моделі нейронних структур.
Для досягнення цієї мети я розробив специфічний підхід до визначення нейрона, шару та вхідних даних.
#Нейрон.

У моїй структурі нейрони мають:
1. дендрити—об’єкт, який інкапсулює вхідні адреси, типи вхідних сигналів (клас ) і вагу (об’єкт, який перетворює сигнали та використовується для навчання). Після того, як вхідні сигнали були оброблені за допомогою ваг сигнальні процесори.
2. сигнальні процесори — це специфічний клас, який має метод обробки конкретних вхідних сигналів. процесор має доступ до нейрона і може змінювати його (наприклад, дендрити, аксон або карту процесора сигналів). Вихід обробки сигналу визначається ланцюгом обробки сигналів. Результати сигнального процесора передаються в аксон.
3. Аксон — це об’єкт, який інкапсулює адреси нейронів-споживачів і вагові коефіцієнти для перетворення сигналу.
Примітка. Сигнал може існувати в більш ніж одній ітерації обробки нейронної мережі.

#Шар
Шар — це набір нейронів. Максимальна кількість шарів — Integer.MAX-1.
Розробник клієнта може видаляти, оновлювати або додавати нейрони до шару.
Видалення та додавання нейронів здійснюється шляхом надсилання спеціальних сигналів (CreateNeuronSignal.class і DeleteNeuronSignal.class) нейронам (LayerManipulatingNeuron.class) на кожному шарі з ідентифікатором Long.MIN.
Максимальна кількість нейронів у шарі — Long.MAX-1.
Рівень сервісу має ідентифікатор Integer.MIN і використовується для зберігання інформації для циклічної обробки.
Циклічна обробка означає, що нейронна мережа матиме певну кількість запусків перед отриманням наступних вхідних сигналів (використовується для очікування для вивчення обробки сигналів).

#Вхідні дані
Вхідні дані є складним(composite) і можуть мати різні джерела. Кожне джерело має значення, яке показує, як часто вхідні дані повинні заповнюватися в мережу нейронів. Він також має зворотний виклик у випадку, якщо джерелом входу є інша нейронна мережа, і він може отримати навчальний сигнал з нейронної мережі клієнта.
Клас стратегії введення визначає, як вхідні дані мають бути заповнені нейронами.

#Навчання
#Вчимося з учителем
Для того, щоб реалізувати цей тип навчання, клієнт повинен визначити стратегію порівняння, яка порівнюватиме фактичний результат із бажаним і повертатиме ідентифікатори нейронів для зміни та алгоритм навчання, який змінюватиме вагу.
Потім додайте його в конфігурацію.

#Навчання без нагляду або посилене навчання
Це найпростіша частина і не вимагає ніякого додаткового коду, крім визначення сигналів і процесора.

Тепер я майже закінчив роботу з автономною версією та кластерною версією pre alfa (проста http паралелізація обробки).
Дякую за увагу

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
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
У моїй структурі нейрони мають:
1. дендрити—об’єкт, який інкапсулює вхідні адреси, типи вхідних сигналів (клас ) і вагу (об’єкт, який перетворює сигнали та використовується для навчання). Після того, як вхідні сигнали були оброблені за допомогою ваг сигнальні процесори.
2. сигнальні процесори — це специфічний клас, який має метод обробки конкретних вхідних сигналів. процесор має доступ до нейрона і може змінювати його (наприклад, дендрити, аксон або карту процесора сигналів). Вихід обробки сигналу визначається ланцюгом обробки сигналів. Результати сигнального процесора передаються в аксон.
3. Аксон — це об’єкт, який інкапсулює адреси нейронів-споживачів і вагові коефіцієнти для перетворення сигналу.

А чому не скоритатись сучасную термінологією для Deep Learning? А то я наче читаю якусь радянську статтю про «Штучний Інтелект», де нічого не зрозуміло.

Навіть Andrew NG, каже: «Є Біологічна аналогія, і на цьому все», навіщо це сьоди тягнути? Біологічна аналогія, вона ж більше плутає.

Честно, формулювання типу: «апроксимація нелінійної функції», краще пояснює як працюють штучні нейронні мережі, ніж біологічні аналогії.

Я хочу надати можливість девелоперу/досліднику створити модель нейронної мережі ближчу до біологічних аналогів за алгоритмами роботи та можливостямі, ніж наявні зараз моделі які Ви назвали «штучні нейронні мережі». Також я використовю там де збігається зміст термінологію штучних нейронних мереж(наприклад активаційні функції, епохи, ваги). Я відповів на Ваше питання?

так, але як на мене треба це підкрестили в топіку про фреймворк.

Особливі надії я покладаю на нові алгоритми з використанням reinforced learning en.wikipedia.org/...​and unsupervised learning. написанні за допомогою цьго фреймворку(поки що це мрії).

Tool for neuron net building.

По английски это называется так: en.wikipedia.org/wiki/Neural_network

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

П.С. Но вообще, архив репозитория на всякий случай сохранил. Почерпну идеи — может, взлетит на «сях» для платного и коммерческого «closed source» использования.
Спасибо за бесплатный код!

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

Так Python основна мова програмування для Deep Learning, в чому проблема?

Він відносно правий, якщо брати до уваги що пайсон це найчастіше обгортка над сі кодом, який найчастіше запускається на відеокартах, через дуже оптимальний час доступу до оперативної пам’яті в гпу та великій кількості ядер(неронки легко паралелити тому що нейрони кожного шару можуть опрацьовуватись не залежно). І все це є аргументом, якщо ми обробляємо в нейро мережі один тип данних(класс) або заздалегідь(на рівні фреймворку/мови) визначенний набір типів класів. Основа фіча цього фремворку, це все ж таки те, що можно обрабляти в нейронці різні типи(класи) сигналів, що дозволяє дуже сильно розширити можливості алгоритму нейронних мереж і створити щось дійсно нове. Сі не дозволить визначати свої класи процесорів та сигналів, без перезборки фреймворку, тобто код буде відкритий за фактом(можливо не за ліцензією, але то не важливо для піратів).

И я даже знаю почему. Потому что «академикеры» — не умеют даже в Джава (не то, что в «си»).

Впрочем, может это и к лучшему...

Вам явно ще знадоблятся ці дві лінки stackoverflow.com/...​-dynamically-load-classes theo-penavaire.medium.com/...​ary-modern-c-722d6a830a2b , а ще Ви знайдете дуже багато програмістів що будуть платити Вам кошти щоб скористуватися тим що Ви напишите.

Все одно щоб реалізувати це ж на pure c закривши при цьому код, потрібно динамічно загружати код. Я не уявляю цього в повністю компілбованій мові, саме через те що вона повністю компільована. Перевага стає недоліком якщо подивитись на це під правильним кутом. Я не просто так джаву обирав.

Таки можливо stackoverflow.com/...​oad-a-function-from-a-dll . А ось динамічно загрузити тип не можливо stackoverflow.com/...​ally-define-a-struct-in-c .

Висновок, основні концепти які відрізняють цей фреймворк від справді більш оптимальних існуючих рішень не можливо реалізувати за домогою C++ та pure C

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