- BrainTools - https://www.braintools.ru -
Я в Termux (планшет, смартфон) пытаюсь понять, как из нескольких строк на чистом Си рождается свободная и не зависимая личность – Нейрон [1].
Этот проект об искусственном интеллекте [2], который начался не с установки библиотек, а с чертежа в тетради. Здесь машинное обучение [3] – это не абстрактный термин, а физическая подстройка ” Виртуальных резисторов “.
Я нахожусь на периферии трёх миров :
Аналоговой интуиции [4] ( где вес нейрона [5] – переменный резистор ).
Математика [6] ( где ошибка [7] заставляет систему эволюционировать).
Программирование (цель – не просто скрипт в полноценная ОС ).

Это не просто набросок. Здесь я свёл воедино всё: от физической аналогии с резисторами до математической логики коррекции весов. Именно по этой схеме пишутся мои stand.c и exploitation.c
Код открытый, видна каждая шестерёнка. Здесь нет сложных функции всего одна стандартная библиотека.
ANSI – цвет.
Бесконечный цикл while (1) – позволяет проводить серию экспериментов, не перезапуска я программу. Нет защиты от неверного символа. CTRL +C.
Код я оставил максимально чистым. Вся логика [8] в четырёх строках внутри цикла for.
#include <stdio.h>
#define G "33[32m"
#define Y "33[33m"
#define S "33[34m"
#define R "33[0m"
int main ()
{
float x1; float w1 = 0.05; float bias = 0.01;
float sk_obuch; float error; float out;
float targ; int cikl;
while (1)
{
printf(" Вход : "); scanf("%f", &x1);
printf(" Ск_об : "); scanf("%f", &sk_obuch);
printf(" Цель : "); scanf("%f", &targ);
printf(" Цикл : "); scanf("%d", &cikl);
for (int i = 0; i < cikl; i ++)
{
out = ( x1 * w1 ) + bias;
error = targ - out;
w1 += sk_obuch * error * x1;
bias += sk_obuch * error;
printf (Y" %d", i);
printf (G" Вес = %.3f"R, w1);
printf (S" Bias = %.3f"R, bias);
printf (G" Ошиб = %4.3f"R, error);
printf (S" Out = %.3fn"R, out);
}
}
return 0;
}
~
Вес (w) и смещение (b) – это начальное произвольное значение.
Вход (x), скорость обучения (s), цель (t), количество интеграцией (i) выбираем через scanf что удобно проводить эксперименты.
Вход 10; 5 – веса не стабильны нейрон обучается под одно значение.
Драма (внизу) – при слишком высокой скорости обучения веса прыгают и система идёт в разнос.

Стабильность: При низкой скорости обучения (0.01) система плавно гасит ошибку и находит идеальный баланс.
Хаос: Как только я поднял скорость (0.1) нейрон потерял устойчивость. Веса начали прыгать, и система улетела в бесконечность.
Итоги: Этого кода достаточно , чтоб изучать закономерность и управление нейрона. Всего не опишешь. Запуская, меняй значение.
Здесь нет ни одной лишней строчки. В режиме эксплуатации нейрон не тратит силы на “раздумья” и обучения – он просто мгновенно выдает результат на основе опыта [9] полученного на стенде.
#include <stdio.h>
int main ()
{
float w;
float b;
float out, input;
out = (input * w) + b;
return 0;
}
Давайте немного попрактикуемся – для примера возьмём чайник. При 100 градусах вода кипит – чайник должен отключиться. Обучим нейрон и получим умный чайник.
Цель эксперимента: «Мы научим нейрон распознавать критическую точку — 100 градусов. Входным сигналом будет температура, а целевым значением — сигнал на отключение».
Логика: «На этом этапе нейрон ещё “одномерный”, но он уже учится принимать решение: пора выключать питание или нет».
Запускаем обучение ( Стенд )
Процесс подстройки весов на стенде. Берём Вес = 0.01 смещение опустим.
Раздел работа ( Эксплуатация)
Вес (w) = 0.01, b опустим . Эксплуатация с активацией простейший случай.
#include <stdio.h>
int main ()
{
float w = 0.01;
float b = 0.0;
float out, input;
int res;
while (1)
{
scanf ("%f", &input);
out = (input * w) + b;
res = (out > 1) ? 0 : 1;
printf("%dnn", res);
}
return 0;
}
Работа готового нейронного ядра.
20, 56, 74, -20, 99, 100 – это температура воды.
1 – чайник включен.
0 – чайник выключен.

Откуда это всё взялось ? Как я на это вышел ?
Я изучал биты, логику, память [10] на Си – учил классику. Потом мне захотелось потрогать современные технологии. Си плюс нейрон вот тебе и современные технологии, вот тебе и современный стэк.
Смотреть под капот памяти это сложно, но интересно.
Когда я впервые заглянул под капот нейрона : Мне показалось это скучным. Сухая арифметика. Ребята, расходимся – здесь умножение.
Решил абстрагироваться : Нейрон это независимая, свободная личность, которая способна учиться. Чему научишь то она и будет уметь.
Перспектива: Может жить от одной батарейки годами. Не нужен интернет.
Изначально я вообще ни чего не понял. Взрывал мозги долго и нудно, и все ровно ни чего ни понимал. Пока не включил режим радиолюбителя ( подстроечный, переменный резистор) не то , что бы я понял , но картина начала появляться. Когда я изучал память я до конца так и не понял. Почему адрес должен быть кратен размеру данных ? Нейрон я тоже до конца не понимаю.

Мой путь и черновики Data7Neuron
https://github.com/Data7Viz/Data7Neuron [11]
Забегая на перёд. Строили бешеные слои абстракций. Разрабатывали супер компьютер. Чтоб снова вернуться к нулям и единицам.
Продолжение следует………
Автор: DataViz
Источник [12]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/29878
URLs in this post:
[1] Нейрон: http://www.braintools.ru/article/9161
[2] интеллекте: http://www.braintools.ru/article/7605
[3] обучение: http://www.braintools.ru/article/5125
[4] интуиции: http://www.braintools.ru/article/6929
[5] нейрона: http://www.braintools.ru/article/6020
[6] Математика: http://www.braintools.ru/article/7620
[7] ошибка: http://www.braintools.ru/article/4192
[8] логика: http://www.braintools.ru/article/7640
[9] опыта: http://www.braintools.ru/article/6952
[10] память: http://www.braintools.ru/article/4140
[11] https://github.com/Data7Viz/Data7Neuron: https://github.com/Data7Viz/Data7Neuron
[12] Источник: https://habr.com/ru/articles/1031400/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1031400
Нажмите здесь для печати.