Об’єктно-орієнтований підхід до проектування нейронних мереж
Доброго часу, пані та панове.
Я хочу представити вашій увазі мій каркас для створення нейронної мережі. Назва фреймворка — 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 паралелізація обробки).
Дякую за увагу
14 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів