Проєктуємо нейронні мережі за допомогою об’єктно-орієнтованого підходу

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Я в IT з 2011, починав як тестувальник, а потім пройшов шлях Java, Data Engineer і зараз розвиваюсь в напрямку Machine Learning. Ще в університеті, на четвертому курсі, в 2010-му, мене зацікавили Artificial Neuron Networks як алгоритм. А саме — в мене з’явилася ідея (не без допомоги заdкафедри) реалізувати об’єктну модель нейронних мереж. І я хотів би звернути вашу увагу на історію розвитку Artificial Neuron Networks як алгоритму, а також розповісти про свою розробку.

Психолог Дональд Олдінг Хебб зробив першу теоретичну спробу описати алгоритм навчання на основі природних нейронних мереж у 1940-х роках. Фарлі та Уеслі Еллісон Кларк реалізували мережу Хебба в коді в 1954 році в MIT. Психолог Френк Розенблат опублікував ідею персептрона в 1958 році. У 1982 році Теуво Кохонен описав нейрофізіологічно інспіровані карти самоорганізації. Неокогнітрон був розроблений Куніхіко Фукусіма в 1980 році. На цей винахід надихнули дослідження зорової кори нейропсихологів Девіда Хантера Хьюбела та Торстена Нільса Візеля.

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

Формалізація проблеми

Відповідно до попереднього розділу здається логічним мати деякий фреймворк для побудови моделі природних нейронних мереж довільної деталізації. Після початкового рівня дослідження нейробіології та порівняння з поточними алгоритмами штучних нейронних мереж, я сформував твердження:

  1. Нейрони можуть обробляти два класи сигналів: біохімічні та біоелектричні. Відмінності у швидкості поширення біоелектричного та біохімічного сигналу значні.
  2. Різні сигнали мають різний час поширення.
  3. Набір рецепторів нейрону визначає сигнали, які він може обробляти, та його структуру. Набір рецепторів у різних типів нейронів різний.
  4. Пізнавальні процеси пов’язані з часом.

Фреймворк повинен мати можливість:

  1. Визначати різні типи сигналів.
  2. Визначати нейрон, здатний обробляти кілька типів сигналів з різною логікою обробки для кожного типу сигналу.
  3. Визначати різні типи нейронів.
  4. Визначати відносні швидкості обробки для двох класів сигналів.
  5. Визначати відносну швидкість обробки для кожного типу сигналу.

Ці вимоги були використані для реалізації Jneopallium.

Процес моделювання природної нейронної мережі

Архітектура високого рівня

Це вже моя друга стаття про моделювання натуральних нейронних мереж. Першу написав ще в процесі розробки фреймворку.

Jneopallium — це набір інтерфейсів і реалізацій, які відокремлюють логіку обробки нейронної мережі від фактичних типів нейронів і сигналів. Так же колекції відокремлюють логіку зберігання від фактичних типів об’єктів, які вона зберігає, за допомогою генериків. Я вибрав Java для реалізації, оскільки ця мова підходить для інтерфейсів і загального використання, а ще забезпечує певну безпеку типів. Весь код Jneopallium, розміщений у сховищах github.com/rakovpublic/jneopallium і gitlab.com/rakovpublic/jneopallium, поширюється за ліцензією BSD 3 — Clause License.

Щоб побудувати модель, користувач повинен визначити типи сигналів, типи нейронів, джерела вхідних даних і класи вихідних агрегаторів. Потім описати структуру нейронної мережі, вказати технічну інформацію у файлі конфігурації та запустити Jneopallium із вказаним шляхом до визначеного користувачем коду jar, структури нейронної мережі та файлу конфігурації.

Ще одна причина, чому я вибрав Java для реалізації — є можливість завантажувати визначений користувачем код під час виконання. Jneopallium може працювати в трьох режимах: локальному, кластерному HTTP і кластерному gRPC. gRPC дозволяє запускати Jneopallium на FPGA.

Для цієї статті я розділив процес моделювання на три частини: визначення функціональної логіки, визначення структурної логіки та визначення логіки IO. Наступні три підрозділи описують процес моделювання.

Визначення функціональної логіки

Процес моделювання починається з визначення сигналу. Користувач повинен визначити всі сигнали в системі та ваговий об’єкт, який буде використовуватися для навчання.

Наступний крок — визначення інтерфейсів нейронів. Кожен механізм обробки повинен мати окремий нейронний інтерфейс, який розширює базовий інтерфейс INeuron.

Третій крок — реалізація сигнального процесора. Сигнальні процесори повинні реалізовувати інтерфейс ISignalProcessor, параметризований сигналом і інтерфейсом нейрону, який має відповідні механізми для обробки. Тоді користувач повинен реалізувати нейрони, розширивши Neuron.class і реалізувавши інтерфейс або інтерфейси, визначені на другому кроці. Множинне наслідування через реалізацію інтерфейсу дозволяє користувачеві реалізувати нейрони з кількома механізмами обробки, які можуть обробляти різні типи сигналів. Крім того, нейрон має поля Axon.class і Dendrites.class. Dendrites інкапсулюють вхідні адреси (ім’я джерела введення або ідентифікатор рівня та ідентифікатор нейрона), типи сигналів і ваги. Ці ваги застосовуються до вхідних сигналів і повинні використовуватися в процесі навчання. Вихідні адреси інкапсуляції аксонів (ідентифікатор рівня та ідентифікатор нейрона), тип і вага сигналу. Ці ваги застосовуються до вихідних сигналів і також повинні використовуватися в процесі навчання.

Щоб показати приклад процесу моделювання, я визначив чотири сигнали та три нейрони в окремій тестовій гілці github.com/...​finitions/functionallogic. IntSignal.class представляє сигнал, описаний за допомогою цілого значення. DoubleSignal.class представляє сигнал, описаний double-значенням. Класи IntProcessor і DoubleProcessor описують логіку обробки цих сигналів. Інтерфейси NeuronIntField і NeuronWithDoubleField описують нейрони з внутрішньою структурою, яка дозволяє обробляти IntSignal і DoubleSignal відповідно. NeuronC і NeuronB — це реалізації нейронів, які обробляють лише один тип сигналу. Нейрон A — це нейрон, який може обробляти обидва сигнали, тобто має два рецептори. Приклад:

public class NeuronA extends Neuron implements IResultNeuron<TestResultSignal>,NeuronIntField, NeuronWithDoubleField {

public Integer intField;
public Double doubleField;

public NeuronA() {
    super();
    intField =0;
    doubleField=0d;
    currentNeuronClass = NeuronA.class;
    resultClasses.add(ASignal.class);
}

public NeuronA(Long neuronId, ISignalChain processingChain, Long run) {
    super(neuronId, processingChain, run);
    currentNeuronClass = NeuronA.class;
    intField =0;
    doubleField=0d;
    resultClasses.add(ASignal.class);
}

@Override
public Integer getIntField() {
    return intField;
}

@Override
public void setIntField(Integer field) {
    this.intField = field;
}

@Override
public Double getDoubleField() {
    return doubleField;
}

@Override
public void setDoubleField(Double value) {
    this.doubleField = value;
}

@Override
public void activate() {

    super.activate();
    Double d = doubleField%intField;
    if(d>=1){
        result.add( new ASignal(d.intValue(), getLayer().getId(), getId(), 1, «a signal», false, this.currentNeuronClass.getName(), false, true, ASignal.class.getName()));
        intField = 0;
        doubleField = 0.0;
    }
    isProcessed=true;
}

@JsonIgnore
@Override
public TestResultSignal getFinalResult() {

    String res = result.toString();
    TestResultSignal resultSignal = new TestResultSignal(res, this.getLayer().getId(), this.getId(), 1, «„, false, this.getClass().getCanonicalName(), false, false, “»);
    return resultSignal;
}
}

Визначення структурної логіки

Після визначення всіх частин функціональної моделі, користувач повинен визначити структуру нейронної мережі. Я рекомендую використовувати статистичний підхід, тобто знайти ймовірність появи кожного нейрона на кожному шарі. Це дозволяє моделювати горизонтальну структуру. Щоб визначити, який порядок нейронів на шарах може бути, користувач повинен реалізувати інтерфейс NeighboringRules. Ця функція дозволяє моделювати структуру вертикального нейронної мережі.

Приклади моделювання структури розміщено тут.

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

Визначення логіки введення/виведення

Логіка введення/виведення описує джерела введення та призначення виводу. Нейронна мережа може мати кілька джерел введення. Щоб визначити джерело введення, користувач повинен реалізувати інтерфейс IInitInput. Кожен вхідний сигнал має стандартну частоту обробки, яка показує, як часто сигнали від джерела введення будуть поширюватися до нейронів. Частоту обробки можна змінити за допомогою відправки сигналу в Cycle Neuron (докладніше про це в наступному розділі). Спосіб поширення вхідних сигналів до нейронів слід описати за допомогою реалізації інтерфейсу InputInitStrategy.

Кожне джерело введення може мати окрему InputInitStrategy. Якщо вхід є виходом іншої нейронної мережі, сигнали можуть надсилатися до цієї нейронної мережі. У цьому випадку для джерела введення має бути реалізований інтерфейс INeuronNetInput. Ця функція може бути корисною для створення модульних моделей, щоб спростити навчання.

Щоб визначити призначення виводу, користувач повинен реалізувати інтерфейс IOutputAggregator. Приклад визначення логіки введення/виведення розміщено в цьому пакеті.

Частота обробки сигналів

Частота обробки сигналу визначається двома циклами обробки. Швидкий цикл обробляє кожну ітерацію обробки, а повільний цикл — один раз за n ітерацій швидкого циклу. Значення n визначається в Cycle Neuron і може бути змінено за допомогою надсилання сигналу до рівня з ідентифікатором — 2147483648 та нейрону з ідентифікатором 0. Кожен тип сигналу та джерело вхідного сигналу мають ProcessingFrequency, який описується полем loop та полем epoch. Сигнал із циклом ProcessingFrequency 1 оброблятиметься щоразу під час обробки швидкого циклу, зі значенням 2 — один раз у 2 обробки, зі значенням 3 — один раз у 3 обробки тощо.

Епоха ProcessingFrequency використовує ту саму логіку, але для повільного циклу. Ось тут код описує всі можливі сигнали Cycle Neuron і логіку обробки.

Масштабування

Розмір шару можна змінити за допомогою надсилання сигналу LayerManipulatingNeuron. Він розташований на кожному шарі з ідентифікатором — 9 223 372 036 854 775 808 і може створювати та видаляти нейрони. Тут ви можете знайти список логіки сигналу та обробки.

Додаткові можливості

Існує можливість визначити будь-яку кількість дискримінаторів для нейронних мереж. Їх можна використовувати для реалізації GAN. Крім того, користувач може зберігати та витягувати параметри в шарах.

Конфігураційні файли

Приклади конфігураційних файлів можна знайти тут.

Застосування

Моделі, побудовані за допомогою jneopallium, можуть бути використані для робототехніки. Вихід і вхід визначаються користувачем, щоб він міг безпосередньо комунікувати з контролерами. Я очікую, що загальний ШІ можна реалізувати за допомогою такого підходу.

Також такі моделі можна використовувати для управління компанією в середовищах з різним рівнем волатильності сигналів та метрик.

Їх можна використовувати для моделювання природної нейронної мережі, особливо коли потрібно моделювати контрольну структуру та структуру з різними відхиленнями.

Також можна використовувати для автономного керування місією, коли затримка з’єднання є високою і є високі умови та невизначеність проходження місії.

Монетизація

Jneopallium має кілька сценаріїв монетизації. Перший — це створення моделей для різних продуктів. Іншим способом монетизації є надання послуг хостингу так само, як це роблять хмарні провайдери для Spark. Третій спосіб — оптимізація FPGA під модель.

Конкуренти

Найближчими конкурентами Jneopallium є NEURON Simulator і CoreNeuron. Вони дозволяють будувати високодетальні моделі природних нейронних мереж. Основна відмінність полягає в тому, що Jneopallium дозволяє користувачам вибирати рівень деталізації. Основна мета Jneopallium — бути мостом між нейробіологією та інформатикою. Основна мета NEURON Simulator і CoreNeuron — створити точну копію природної нейронної мережі.

Висновок

Уже існують рішення для детального моделювання, але немає рішень, які були б містком між дуже детальним описом натуральних нейронних мереж і чимось прикладним, що могло б використовуватись на практиці. Саме цю нішу намагається зайняти Jneopallium.

Дякую за увагу.

👍ПодобаєтьсяСподобалось8
До обраногоВ обраному3
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

Стаття явний спам((

Якщо ти дійсно намагаєшся зробити «нові» нейронки — подивись цей папір: arxiv.org/abs/2404.19756

Воно дуже нове і є альтернативою MLP, можливо можна якось поєднати обох

Some hints:
— нейрони на Java обʼєктах не будуть добре працювати аж ніяк — це в 1000+ раз повільніше ніж матричні розрахунки на GPU які всі використовують
— якщо дуже хочеться опис нейронки на Java, його якось треба конвертувати у стандартні нейронні описи на кшталт ONNX які мають hardware acceleration — onnx.ai
— незважаючи на те як воно виглядає у інтерфейсі, всі обчислення повинні використовувати векторні/матричні операції із GPU прискоренням

Gpt-3 якщо що використовує 175 мільярдів параметрів (нейронів)

Gpt-4 — 1.75 трильйонів (!!!) але це неофіційно

про perfomance чудово розумію тому і додав можливість обчислень у кластері FPGA. Інше не відповідає цілям і обраному підходу до моделювання.

Похвальна задумка, в принципі, всі починають з будівництва точної моделі нейрона і намагаються повʼязати це в мережу.

Для читачів які не в темі: ті нейронні мережі результат роботи яких ви бачите навкруги, працюють трошки по-іншому принципу. Вони не імітують нейрони повністю. Там дослідники створили математичну модель, яка описує процес навчання. Якщо дуже примітивно, математично воно виглядає як мультиплікація матриць + і обчислення відхилення. Зазвичай, це дуже багато операцій мультиплікації float чисел. Тому, доречі, і полюбляють навчати на відеокартах.
Нічого нового за останні роки не зʼявилось, є розробки всяких імпульсних нейронок, граються з loss, граються зі звʼязками різних слоїв, напрямками сигналу, і всяким таким. Математика в цілому та сама. Так, є всякі CNN, але десь там в глибині за купою конфолюшнів і пулінгів лежить звичайний feed-forward neural network (multilayer perceptron).

Вони не імітують нейрони повністю.

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

Ну я б не казав «взагалі не імітують». Принципи воно використовує схожі. Так, нейронні мережі мозку набагато складніші, але ANN у багато аспектів схожі — наявність нейронів, наявність шарів, передача сигналу, використання вагів, адаптація.

Другий абазац статті якби натякає. Неокогнітрон доречі це концепт CNN

Ну чому, MLP хоч дуже спрощено, але імітує — є центр з активаційною функкцією, є сінапси — зв’язки з іншими нейронами.
Ось RBF це вже щось неприродне. RBF-«нейрон» просто рахує квадрат відстані від входного вектору до себе в евклідовому просторі (сам він теж такий же вектор, можна з кожного вектора навчальної вибірки зробити RBF-нейрон) та бере від цього квадрату гауссіану, тобто чим ближче вектор до нього, тим більше шанс, що він зактивується. Потім підраховується, кого більше активувалося — кошечок чи собачок.

Ви про трансформери хоча б чули?

так. глибоко туди ще не копав, але чув.

які алгоритми навчання підтримуються? чи можна побудувати класичний MLP (multilayer perceptron) з Back Propagation?

Дуже важлива думка від FullStack Wordpress Developer

немає обробки різних типів сигналів, немає налаштування швидкості розповсюдження різних типів сигналів

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

Алгоритми навчання teacher reinforced.

Ще є дискримінатори для GAN і кожен нейрон має доступ до рівня/шару/layer звідки може взяти і записати гіпермараметри(не знаю чи достатньо цього щоб LLM робити).

Не зрозумів питання.

нейронів може бути integer.max(кількість шарів)* long.max(кількість нейронів шару) 700 це приблизна кількість різних типів нейронів в мозку людини(700класів, integer.max* long.max кількість екземплярів цих класів (об’єктів) )

Але все ж таки основна мета фреймворку створення нових моделей а не реалізація того що вже є і реалізованно краще.

Головне питання тут «навіщо». Якщо є готові корисні моделі, які використовують цей підхід, було б добре їх побачити. Або подивитися на алгоритми навчання. Подивитися на порівняння результатів.

Якщо немає, то... побудувати можна будь що. Яка з цього користь?

Це фреймворк для побудови моделей. Користь в тому, що він надає готові інструменти масштабування для моделей. Готові моделі дійсно є, але general AI, на їх основі не виходить. Цей фреймворк був побудований у пошуку відповіді на питання чому не виходить побудувати general AI на основі існуючих моделей.

Добре, покажіть мені ход одну модель, яка робить щось корисне. В принципі, ідея емулювати нервову систему тварин лежить на поверхні, ця тема у розробці років 50, аби не більше, а от результатів не видно.
Побудувати модель легко. Можна придумати багато систем для апроксімації функцій. У банатьох випадках можна просто довести, що ця система повна та дозволяє апроксімувати будь яку функцію з будь якою точністю, наприклад система нечіткого виводу Сугено, тощо. Однією моделю більше, однією меньше, ролі це не грає.
А от отримати практичний результат, відповісти на питання яким чином можна навчити модель робити щось корисне, ...

Цей фреймворк був побудований у пошуку відповіді на питання чому не виходить побудувати general AI на основі існуючих моделей.

Ну... по-перше, на основі існуючих моделей досить непоганий AI. По-друге, фреймворк не дасть ніяк відповіді на питання «чому не виходить?», бо ніяк з цим не пов’язаний. Фреймворк, можливо, можна розглядати як спробу знайти інший підхід, який певний ряд задач буде вирішувати ефективніше. Але поки що жодної такої залачі не видно.

Ну... по-перше, на основі існуючих моделей досить непоганий AI. По-друге, фреймворк не дасть ніяк відповіді на питання «чому не виходить?», бо ніяк з цим не пов’язаний.

Доречі, так. Там поки з knowledge representation проблем більше ніж вистачає. AGI це блін і близько не одна нейронка, навіть дуже крута. Потрібні складні розподілені системи, які вміють в першу чергу працювати зі знаннями, і «розуміти» їх.

Ну... проблема як на мене більше у тому, що більшість knowledge є неформальними. В принципі, історичний досвід показуює, що математика надає достаню мову для опису знань. І точно це може буде застосовано хоча б у програмуванні. Але... проблема у тому, що поки що немає навчального набору, зазвичай людям ліньки свої міркування переводити на CoQ, Agda, etc.

Як на мене, не треба складних розподільних систем, треба просто дані. Наприклад, формалізувати POSIX мовою CoQ. Перести статі про POSIX на CoQ, зробити формальні докази. А потім використати це для навчання будь якої сучасної LLM.

На жаль, все не так просто.

В принципі, історичний досвід показуює, що математика надає достаню мову для опису знань

Математика то надає інструменти, але вони надто складні і важкі, тому онтології досі ніхто крім дослідників не використовує.
Суть якогось AGI у вакуумі — оперувати знаннями. А не паттернами, верогідностями. Навчатись на старих і створювати нові знання.

А потім використати це для навчання будь якої сучасної LLM

От тут то і проблема. LLM навчається не на знаннях, а на тексті. Це для нашого мозку воно знання (тому що в нас є механізми забезпечення логіки). Воно шукає паттерни — які токени найчастіше зустрічаються разом. Так, можна теоретично створити такий датасет, що генератор буде імітувати генерацію знань. Але це не буде генераціє знань, тому що там просто нема такого інструменту.

Математика то надає інструменти, але вони надто складні і важкі, тому онтології досі ніхто крім дослідників не використовує.

Ні, скоріше за усе люди тупі. Більшість не розуміє що таке математика. Хотів відео записати на цю тему, але руки не доходять. З іншого боку на практиці це просто забагато зайвої формальної писанини, більшість галузей забагато прості. Але, нейромережі можуть у цьому як раз допомогти.

Суть якогось AGI у вакуумі — оперувати знаннями.

А що таке знання? Prolog оперує знаннями?

От тут то і проблема. LLM навчається не на знаннях, а на тексті.

Приведи приклад знань, які неможливо описати формальним текстом. Ні, тексту достатньо для опису будь-яких знаннь. Як раз для мозку важливо мати образ, намалювати граф, візуалізувати ... а формальному пруверу достатньо тексту теореми та тексту доказу. Так, теоретично можна розгдядати незлічену мову, але... наш світ набагато простіше.

Так, можна теоретично створити такий датасет, що генератор буде імітувати генерацію знань. Але це не буде генераціє знань, тому що там просто нема такого інструменту.

Якось складно... Візьмемо для програму програму Alpha Go. От вона зробила хід, який вигладяє дуже дивним для людини, ну і нейромережі, які навчалися на партіях людей, його не розглядають. Так, люди подивилися, знайшли певні ідеї та почали так грати. Це генерація знань? Як на мене так.

А взагалі приведи конкретний приклад, та я +/- накидаю план, як це представити.

Математично сходимість навчання нейромереж доведена десь у 2000, 50 років нейромережі проіснували без математичного обгрунтування.

Ох вже була довга дискусія на цю тему...

А що таке знання? Prolog оперує знаннями?

Знання в нашому контексті це інформація про зовінішній світ яку AI може збирати, аналізувати, навчатись, створювати нову. Сюда входять і сама інформація, і символний опис, і моделі логіки, і різонінг — механізм генерація нових знань на основі аналізу старих.
Prolog це один з інструментів KRR, який творений саме для того, щоб оперувати знаннями, представленими символьно. Так, він первною мірою для цього підходить.

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

Якого виду тексту? Для яких задач?
Символьне представлення знань не таке просте, там все дуже складно з балансом формалізму та tractability. Звісно, можна все описати first order logic, але це складно. «Стол стоїть у кімнаті» — ок, це просто. А опишіть якійсь абстрактний концепт. Опишіть звук. Опишіть якійсь процес.
Треба якусь частину людських знань (які до того ж постійно змінюються) представити у символьному вигляді. Ми самі не розуміємо до кінця як це відбувається у мозку, але з того шо відомо, там не просто один якійсь універсальний механізм. І ні, це не просто текстова інформація, на якій тренують LLM. І ні, звичайна текстова інформація це не та репрезентація знань, що може бути використана для опису формальної логіки, зрозумілої компьютеру. Як раз мозок з нею справляється добре, і то, якщо довго навчатись. І то, деякі ніби-то прості знання потребують дуже багатої кількості текстів, щоб описати всі нюанси. А де що набагато простіше описати зображенням. Наша мова і її печатний вигляд це не самий ефективаний механізм зберігання знань. Просто кращого поки нічого нема. І саме для передачі знань та навчання використовуються комплекні підходи — і читати, і дивитись приклади, і слухати, і пробувати механічно повторити.

Візьмемо для програму програму Alpha Go. От вона зробила хід, який вигладяє дуже дивним для людини, ну і нейромережі, які навчалися на партіях людей, його не розглядають. Так, люди подивилися, знайшли певні ідеї та почали так грати. Це генерація знань? Як на мене так.

Ні. Alpha Go довго грав з іншими такими ж агентами. Агенти спочатку генерували рандомну фігню, а потім у ході reinforced learning вчились вигравати. Хід, який робить комп’ютер, це не генерація нових знань з точки зору KRR, це дія яка базується на рандомно згенерованих вагах і відхиленнях.
З точки зору людини — так, воно щось сгенерувало, чого не було. Але так будь який рандомний шум можна представити знаннями.

Щоб описати звук треба його порівняти з чимось. Наприклад, для кольору, як ми опишемо червоний? Подібний до вогню чи крові. Чи на сонечкові (ladybug) між чорними крапками такий колір. Звук чи колір це набутий досвід. Тут порівняння відбувається.
ШІ: Звук був схожий на грім.
Я: Що таке «грім»?
ШІ: Натисни цю кнопку і почуєш.

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

А що тоді генерація знань? Само словосполучення хибне. Люди не боги та не встановлюють закони світобудови. Вони їх лише вивчають. Всі знання вже існують. Можна тільки переводити їх з невідомого в відоме. Якщо AlphaGo знайшла, що найсильніший хід в тій позиції саме такий, то вона щось перевела з невідомого в відоме. А генерувати вона не може, як і люди не можуть.

Після генерування потрібне порівняння. І навряд чи можна порівнювати генероване з генерованим раніше.
Для фільтрації галюцінацій генеративних ШІ потрібен не просто досвід людей, а якісно перевірений якимись науково дослідницькими установами досвід людей.
Тобто, ШІ потрібні свої школи і також їм потрібні свої підручники. І вся інфраструктура такого типу. Хай ШІ теж стануть випускниками інститутів, університетів, академій.

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

Або формальний верифікатор. Наприклад, візьмемо програмування. Задача написати функцію, яка обчислює довжину списка. Ніби-то элементарно

length : ∀ {A : Set} → List A → nat
length Nil = 0
length (x :: xs) = suc (length xs)

А тепер спробуємо довести, що сумма дожнин списків дорівнює довжіні суми списків:

length-++ :
  ∀ {A : Set} (xs ys : List A) →
  length (xs ++ ys) ≡ (length xs) + (length ys)
length-++ Nil ys = refl
length-++ (x :: xs) ys = cong suc (length-++ xs ys)

Прекрасно, це працює!

А от припустимо, що нейромережа помилилася десь в функції length. Тоді довести твердження не вийде, компілятор не пропустить. Тому їй треба буде повернутися, спробувати інший варіант, доки не повезе.

Це приблизно як Alpha Go, формальна верифікація створює зворотній зв’язок, людина не потрібна.

Так. Формальний верифікатор це якісно перевірений людський досвід відтворений як зручний інструмент.
Звісно використання такого веріфікатору повинно бути занотоване — тобто створений лог файл.

Тобто, ШІ потрібні свої школи і також їм потрібні свої підручники. І вся інфраструктура такого типу. Хай ШІ теж стануть випускниками інститутів, університетів, академій.

Для початку AI потрібен якийсь внітрішній інструмен «сприйняття» цих знань. Потрібен різонер, який буде перевіряти інформацію отриману від «інтуітивної» (нейронна мережа) частини його «інтелекту». Це поки не вирішено. GPT це просто нейронка. Надвелика і натренована на величезних об’ємах текстів. Воно виділило в тексті паттерни, закономірності, і оперує цим при генерації тексту.

Я зараз проходжу перекваліфікацію курс на куорсера від IBM щоб, зайнятися вирішенням саме цього питання.
Бо хочу навчити ШІ мислити, тобто — створювати з базового набіру елементів їх поєднання і тоді поєднання цих поєднань.
Ну тобто з слів — словосполучення, зі словосполучень речення.

Велкам ту зе клаб
NLP, лексичний аналіз, моделі логік, онтології...
Хоча, мені здається, що скоріш ми придумаємо нову формалізовану символьну мову репрезентації знанть людства, яка описує знання в зрозумілому машині вигляді, і самі на неї зіскочимо, а ніж комп’ютер перейде на нашу. Поки для хоч якогось «розуміння» у вигляді feature extraction треба deep learning з усіма його недоліками і величезними ресурсами

Коли я розпізнавав ціну на біржі я без нейронки це робив.
Можливо зможу масштабувати той алгоритм (10 digits, dot, empty_space)

Всі знання вже існують. Можна тільки переводити їх з невідомого в відоме.

Дуже цікава думка. Дякую.

Взагалі, є вислів, що в будь-який науці рівно стільки науки, скільки там математики. А наука це як раз знання. Я не готовий вважати знаннями щось, що не може бути виражено математично.

Знання в нашому контексті це інформація про зовінішній світ яку AI може збирати, аналізувати, навчатись, створювати нову

Я прошу визначення усих цих понятть. Бо, наприклад, простий бот, який шариться по форумах (збирає інформацію), відповідає (аналіз + стрворення нової) плюс може якось навчатися.

Звісно, ви скаже «ні, це не ті знання, не та інформація, не те навчання», але... Що маєте на увазі.

А опишіть якійсь абстрактний концепт. Опишіть звук. Опишіть якійсь процес.

Звук це wav файл, наприклад. Вектор цифр. Чим це не робоче визначення? Процес дивлячись який. У Windows є розподіл на процеси та потоки, у Linux Kernel немає, там є спільний task. Одне і те саме слово може описувати різни речі, одиниця може називатися нулем, ...

Ще питання, а чи це взагалі можливо. І чи це треба. Трохи конкретизуємо, що таке звук океану? Ми не можемо це ніяк визначити, але записати 10-1000 різних аудіо, оцифрувати їх та сказати: оце приклад звуку океану. А далі ті самі ймовірності, бо людина теж буде помилятися у деяких випадках. З іншого боку, я навіщо нам це визначення? Яка задача вирішується?

Ми самі не розуміємо до кінця як це відбувається у мозку

Навіщо нам орієнтуватися на мозок? Тормознута забагована система. Нам треба розвивати науку, вирішувати прикладні задачі, для цього нам не треба орієнтуватися на один мозок, бо зараз у цей процесс залучені багато різних людей, які досить формально спілкуються.

це дія яка базується на рандомно згенерованих вагах і відхиленнях.

Це називається метод проб та помилок. Люди роблять так само. Наприклад, ти граєш у шахи. Тобі не подобається певний варіант, багато проблем. Ти начинаєш думати як його уникнути. Ти починаєш дивитися, як від нього ухилитися. Думаєш, о! можна піти a4-a5. Віддається пішак. Брєд? Але стоп, тіт є такі-такі ідеї. Звісно, що в 95% це таки дійсно брєд. А в 5% цей ход може заслуговувати на увагу. Потім ти починаєш дивитися, як ця ідея працює в інших варіантах.

Будь який процесс генерації нових знань це пошук, а пошук у тому числі це розглядання брєдових альтернатив.

Я прошу визначення усих цих понятть. Бо, наприклад, простий бот, який шариться по форумах (збирає інформацію), відповідає (аналіз + стрворення нової) плюс може якось навчатися.

Звісно, ви скаже «ні, це не ті знання, не та інформація, не те навчання», але... Що маєте на увазі.

Є розділ штучного інтелекту як науки, який цим займається — en.wikipedia.org/...​resentation_and_reasoning
Я говорю про знання саме в контексті цього розділу. Розписувати і пояснювати всі поняття звідти це на кілька годин.

Звук це wav файл, наприклад. Вектор цифр. Чим це не робоче визначення?

Опишіть це за допомогою FOL, щоб воно відрізнялось від просто вектору якихось значень. Чи будь якої іншої моделі логіки, так щоб комп’ютер міг «зрозуміти» різницю — однозначно навчитись відрізняти звук від електромагнитного коливання прото на основі «вектору цифр».

Ще питання, а чи це взагалі можливо. І чи це треба. Трохи конкретизуємо, що таке звук океану? Ми не можемо це ніяк визначити, але записати 10-1000 різних аудіо, оцифрувати їх та сказати: оце приклад звуку океану. А далі ті самі ймовірності, бо людина теж буде помилятися у деяких випадках. З іншого боку, я навіщо нам це визначення? Яка задача вирішується?

Не знаю навіщо ви це запитали і дали приклад, але ладно — автономна система яка досліджує віддалені планети. Орієнтування у просторі за допомогою різних сенсорів, аналіз інформації для вибору стратегії руху у незнайомії середі. Поки фантазії, але ж.

Навіщо нам орієнтуватися на мозок? Тормознута забагована система. Нам треба розвивати науку, вирішувати прикладні задачі, для цього нам не треба орієнтуватися на один мозок, бо зараз у цей процесс залучені багато різних людей, які досить формально спілкуються.

Ну, це просто один з підходів (але не єдиний) до дослідження і розвитку штучного інтелекту, який дав чимало корисного. Нейронки — нейронні мережі мозку, конволюшн слої — візуальний кортекс мозку, reinforced learning, і тд. Про реперезентацію знань взагалі мовчу, зараз інших варіантів і нема. Мозок в дечому тормознутий і забагований, а в дечому дуже крутий.

Це називається метод проб та помилок. Люди роблять так само.

У AI це називається Reinforced learning
Але це має мало спільного з reasoning, про який я писав вище.

Я говорю про знання саме в контексті цього розділу. Розписувати і пояснювати всі поняття звідти це на кілька годин.

Я зрозумів, тепер я трохи зроблю пояснення. Штучний інтелект це по суті збірна солянка. Серед визначень мені більше до вподоби щось на кшталт «методи розв’язання задач, які людина вирішує краще за комп’тер». У книгах по ШІ до 90-х років можна знайти багато обговорень як написати шахову програму. Після 90-х стало зрозуміло, що комп’ютер грає сильніше, тому шахи зникли.

Knowledge representation це частина цієї солянки, виділена по характеру задач, методи рішення яких досить різні. Тому виникає ситуація, коли загальних визначень немає, але кожен підхід дає свої визначення та працює з ними.

Опишіть це за допомогою FOL, щоб воно відрізнялось від просто вектору якихось значень. Чи будь якої іншої моделі логіки, так щоб комп’ютер міг «зрозуміти» різницю — однозначно навчитись відрізняти звук від електромагнитного коливання прото на основі «вектору цифр».
type Something = record
  Source: (Sound, SomethingElse);
  Data: array of Double;
end;

Зазвичай звук це вхідні дані, про які відомо що це звук. Тому якщо нам передали вектор, то це звук за визначенням. Абстрактно відрізняти звук від чогось іншого, то це в принципі суб’єктивне питання. Завжди будуть випадки, коли одинбуде казати що це звук, інший що це не звук, і вирішити цей спір неможливо бо це питання смаку. Тому в біології заборонені парафілетичні таксони.

Не знаю навіщо ви це запитали і дали приклад, але ладно — автономна система яка досліджує віддалені планети. Орієнтування у просторі за допомогою різних сенсорів, аналіз інформації для вибору стратегії руху у незнайомії середі. Поки фантазії, але ж.

Це більше фантазії через механічні обмеження, а так ну яка проблема? LLM запросто скласть план дій.

Мозок в дечому тормознутий і забагований, а в дечому дуже крутий.

Був би крутий, давно би була цивилізація роботів.

Але це має мало спільного з reasoning, про який я писав вище.

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

Knowledge representation це частина цієї солянки, виділена по характеру задач, методи рішення яких досить різні. Тому виникає ситуація, коли загальних визначень немає, але кожен підхід дає свої визначення та працює з ними.

Трошки глибше поясню про KRR, тому що вивчав це від живих професорів цього розділу.
У вас як у людини мозок має певну «картину» оточуючого світу, таку собі інформаційну мапу, де поєднані різні види інформації, пов’язаної як з реальними об’єктами і явищами, так і з якимись абстрактини речами, які людство собі навидумувало. Ця «картина» дозволяє вам якось з цим світом взаємодіяти, вивчати, аналізувати, робити припущення, перевіряти, додавати нові і прибирати старі знання з «картини».
От KRR займається тим, щоб створити схожу «картину» у мозоку комп’ютера. Щоб AI міг робити те ж сами що і ви — автономно взаємодіяти зі світом, отримувати та апдейтити знання у свому мозку. Для цього вивчається і нейробіологія, і логіка, і природа людських знань, і багато ще чого. Це один з найскладніших розділів AI науки. Ви в цілому вірно сказала про «солянку», але воно там не просто намішано аби як — є певна ієрархія, у якій KRR десь на вершині.

type Something = record
Source: (Sound, SomethingElse);
Data: array of Double;
end;

Це не FOL, але те ж підійде. Проблему не вирішуєю.

LLM запросто скласть план дій.

Нажаль для цього доведеться якось спочатку «сприйняти» інформацію від сенсорів, «зрозуміти» (задача KRR), і дати у символьному вигляді (текст, задача KRR) на LLM. І молитись, щоб воно було навчене, щоб дати у відповідь потрібний текст, який вже потім за допомогою іншого агента буде перетворено у інструкції якомусь актуатору(задача KRR), який поведе нашого робота далі. LLM теоретично може бути «мозоком», але спочатку треба вирішити проблему «розуміння» знань з сенсорів. Поки з LLM взаємодіє людина, проблеми взагалі нема. У нас є вбудована система трансляції знань з наших сенсорів, чи з глибин мозку у текст, зрозумілий для LLM.

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

Дивиться, суть не в тому як обирають, а як спочатку «розуміють».
Проблема не в прийнятті рішень. Наразі у AI достаньо інтрументів прийняття рішень. Тут навіть не нейронні мережі, тут вистачає статистичних алгоритмів, які при наявності інформації можуть приймати рішення швидше і дуже часто точніше за людей.

Проблема в розумінні, які дані важливі, і представленні їх у понятному комп’ютеру вигляді.

Наразі для ефективного навчання (ну окрім, мабуть, Deep Learning для певних типів інформації) потрібна людина, яка дані з сенсорів чи будь чого закодує так, щоб алгоритми AI з ними могли впоратись. Наприклад, у вас є система моніторінгу — купа цифр. Спеціаліст проводить EDA, визначає що важливо, модіфікує та нормалізує дані, якщо потрібно, навчає на них модель, оцінює її ефективність. Навіть для reinforced learning треба спочатку провести EDA, розібратись у потоках інформації з сенсорів, представити її у вигляді, якій зрозуміють наші агенти, щоб потім вже навчатись. Проблема у аналізі і розумінні інформації, кодуванні її у вигляді, з яким може працювати AI система.

У вас як у людини мозок має певну «картину» оточуючого світу, таку собі інформаційну мапу, де поєднані різні види інформації, пов’язаної як з реальними об’єктами і явищами, так і з якимись абстрактини речами, які людство собі навидумувало.

Як цю картинку можна побачити? Це може бути лише ілюзією на кшталт свободи волі. Усе це нагадує Ботвінніка, який думав що він знає як він думає, коли грає шахи, але по факту з’ясувалося що це не так. А так скоріше за усе все як завжи: мозок безсвідомо зробив рішення, а потім видав на гора його обґрунтування.

У нас є об’єктивні результати: що людини написала. Це саме й нейромережа. Як працював мозок ми не знаємо. Як вона думала також.

От KRR займається тим, щоб створити схожу «картину» у мозоку комп’ютера.

Схожу з чим? Ви посилаєтесь на деякий уявний варіант, типу в моєму мозку є... А як мені перевірити, чи є насправді?

Проблему не вирішуєю.

Я не бачу проблему, окрім уявної, якої не існує насправді. Типу що існує у світі об’єктивне визначення звуку, яке можна закодувати. По факту у кожної людини є своє розуміння що таке звук, яке ще й підлаштовується під обставини, стану, співбесідніка, тощо.

Тому для кожної задачі є своє визначення, що таке звук. Якщо я вирішую зачачу перевести спіч у текст, то цього визначення цілком досить.

Дивиться, суть не в тому як обирають, а як спочатку «розуміють».

Це ілюзія розуміння, якої немає в реальності. Суб’єктивні почуття.

Фреймфорку підтримує модульність нейронних мереж

Всі ANN CNN RNN народилися з ідеї емулювати натуральні нейронні мережі, це є на початку статті.

Вони з’явилися у той час, коли як працює нервова система особливо і не знали.

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

Фреймворк, можливо, можна розглядати як спробу знайти інший підхід, який певний ряд задач буде вирішувати ефективніше. Але поки що жодної такої залачі не видно.

це воно і є

стаття англійською в international journcal of science and research www.ijsr.net/...​php?paperid=SR24703042047

AI це здебільшого artificial neuron networks. Neuron networks це про нейробіологію, artifitial вони тому що зкопійовані з нейробіології в computure science зі спрощенням. Я розробляв фреймворк щоб можно було як простити алгоритм Neuron networks так і зробити повну копію.

AI це здебільшого не ANNs. AI — велика складна наука. Навіть її підрозділ ML це далеко не на 100% нейронні мережі. І навіть підхід до AI де про нейробіологію («think like a human») це 1/4 від всіх актуальних існуючих підходів.

AI це підрозділ Computer science

Робототехніка і java?

Тобто робототехніка і пайтон ок.

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

python це інтерпритатор, векторизувати напряму оопшний java код без окремого апі з пітримкою векторів виглядає нереальною по складнсті задачею співставною з розробкою нового компілятору/jit під вузький use case. Короче ооп для ml це все не про те.

Кожен тип нейрону як окремий клас. Залежить від кількості типів нейронів(в нейробіології їх приблизно 700).

Ще раз це місток між нейробіологією і artificial neuron networks які використовуються в AI. Я Вас не розумію.

А реалізуйте конволюшн і спробуйте маленьку cnn побудувати, буде цікаво швидкість на якомусь CIFAR10 перевірити.

Там же біологічні аналоги нейронів, а не матриці. Тому побудувати аналог CNN буде неможливо.

Тому що CNN це не біологічні нейрони, це просто деяка функція від зваженої суми.
Взагалі, у вас немає ніякого прикладу, окрім суперабстрактного фреймворка, який може побудувати усе що завгодно.

Так а чому за допомогою цього суперабстрактного фреймворк не можна побудувати CNN?

Доречі я б порадив прочитати розділ History цієї статті на вікі en.wikipedia.org/...​volutional_neural_network

Я це давно читав, ще 25 років тому. Також читав про це у Гудфеллоу и ко, ... Але на рівні ассоціацій, як Ньютон та яблуко. Все ж таки нейрон генерує імпульси, який або є, або немає. Або 0 або 1. Це ніяк не схоже на аналогову функцію.

функція активації для нейрона може бути визначенна аж в двох місцях. Окремо функція активація на кожен тип сигналу. і загальна функція активації якщо є взаємодія між результатими обробки різних типів сигналів

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