Naming Conventions /PEP8Чтоб не было такого ужаса как в твоем фреймворке.
Да, это именно нейросеть. Примитивная. Но рабочая, с обьяснением всех этапов ее тренировки и референса. Я знаю в приведенном примере и математику и код, ты - вряд ли.Не понимаю, что ты подразумеваешь под "реальными нейросетями". Естественно, это учебный пример, никто не будет(кроме тебя конечно) страдать и делать все это руками.Тебя вообще никто никуда не втягивал, ты сам завел песню про нейросети в оправдание что не делаешь фреймворк. Стоило копнуть глубже - оказалось, что ты не понимаешь разницы между тулом и нейросетью. Не можешь обьяснить что ты хочешь улучшить, знаешь почему - потому что все это выдумки в твоей голове. Это даже не верхи, просто ветер у тебя. Я вот не поленился поискал информацию, чтобы что-то аргументированно утверждать.Поэтому твои заявки о том что ты знаешь что можно что-то там улучшить - пустозвонство. Для этого нужно как минимум понимать существующую архитектуру. Как ты можешь что-то оптимизировать под слабые компьютеры, когда это все - обычные матричный вычисления с квадратичной сложностью. Чем больше данных - тем больше нужно ресурсов. У меня вчера тренировка модели на 37 Мегабайт заняла больше часа и использованием MPS на маке и я впераые услыхал, как у него вентилятор работает. Обуча, кстати на сообщениях из форума и получил интересные результаты.Поэтому для текста сегодня - только трансформер как самая прогрессивная модель. Можешь прочитать про Mamba, в чем ее преимущества и почему она все еще буксует. Потом напускай на себя загадочный вид. Все о чем ты говоришь - давно уже сделано.Но! Эта дискуссия натолкнула меня на интересные вещи. Начав вспоминать базу, я вернулся к фреймворкам для написания нейросетей, если точнее - Pytorch. Да, я знаю что у того же Антропик сейчас JAX в фаворе. Но первый я уже знаю, не стал тратить время на изучение пока.Что сделал - написал простой интефейс, который позволяет подготовить датасет к модели и натренировать ее. Получил интересный разультат. Локальная модель, в которую загружены сообщения от нехаоса, в тиоге начинает "понимать основы" и начинает выдавать информацию об исскуственном интеллекте, например. Это прсото удивительно. Этого нет в сообщениях нехаоса, при это. нейросеть уже строит правильные ответы! На датасете в 147Кбайт и самой модели в 37Мег! Очередной привет тем, кто заявляет что ЛЛм - обычный поиск)))
Можно проверить по его сообщениям - там такого и в помине нет!По итогу я понял, что могу реально отказаться вообще от оллама и чужих моделей. Подготовив датасет, я получу например решателя задач по химии. Я еще и распознавалку написал для того чтобы перекачать быстро задачки из бумажных учебников.И это все под твои сказочки 🤣
Начало 80-х кажется, был в гостях в Москве и увидел просто обычный калькулятор у родственников. Не то чтоб я их не видел, но вот дома, с возможностью поиграться прям с цифрами, которые сам складываются - наверное это меня тогда и приворожило навсегда.Потом был уже свой программируемый калькулятор МК-54 и журнал Наука и Техника, где в каждом выпуске рассказывалось о какой-то программе для него. Написание своей первой игрушки, ха, по факут это был прототип Angry Birds, как я сейчас понимаю - стрельба из пушки)Дальше я попал в первый год обучения когда ввели информатику в школах. На весь город был всего один класс с КУВТ Ямаха, нас туда водили вроде раз в неделю. Для всех это было мука и трата времени, но не для меня - меня оттуда не могли выгнать. На уроках наша информатичка отсаживала меня на заднюю парту и просила молчать, что бы я не позорил ее авторитет. Хорошая была тетка, только знаний - краткие курсы летом. А у меня был друг еще и его старшая сестра работала в каком то ВЦ, там стояли советские аналоги вроде как IBM 360, Но уже с дисплейными терминалами, не перфокарты. и я туда прерывался при малейшей возможности. Так что у меня не стоял выбор института по окончании школы - конечно же МРТИ. И понеслось.
Fortran на перфокартах, Паскаль во всех вариациях, для диплома писал программу на ассемблере. Потом армия - все искал как подключится к встроенной ЭВМ ЗРК С-200. Слава богу не дали, неизвестно чтобы я там натворил.)))После армии - работа в институте, филиале Госкомстата, в отделе программирования. Писали первую автоматизацию для нынешнего БеларусБанка - DBaseII, DBaseIII, FoxPro. Потом частная фирма руководитель отдела автоматизации, попытка автоматизировать торги на сырьевой бирже, но это быстро развалилось все как и все в 90-е и надолго ушел в свой бизнес, никак не связанный с компьютерами, правда на полставки числился инженером-программистом в школе. После ухода из торговли примерно в 2007 году - своя фирма по прокату авто. И там понадобился уже свой сайт - это был мой приход в веб. Сначала что-то ужасное на народ.ру и хтмл, потом Вордпресс. Понял что мен этим интереснее заниматься чем прокатом и постепенно свернул деятельность, переключившись на интенет полностью. Вордпресс, Drupal, Jumla, YiII, Laravel, как полагается свой самописный фреймворк.Какие-то попытки в SEO - неинтерсно.
Ради интереса решил поискать вакансии по Вордпресс и в 2016 году попал в фирму продуктовую, где проработал 2 года начальником отдела веб-разработки. Пришел просто написать им сайт на вордпресс, но остался дольше ожидаемого, еще и отпускать не хотели.В это время хороший друг, с одного форума кстати, которого давно нет, окунул меня в мир Пайтон. С тех пор и все изменилось. Вполть до того, что я успешно прошел интервью на позицию Сеньор ПХП/Вордпресс разработчику в крупнейший белорусский аутсорс, но отказался от оффера.Правда через полгода получил оффер в эту же фирму на позицию Пайтон инженер. 2018 год. Ну и вот я все еще там, Поменял правда локацию.Ухты, надо сохранить это где-то сбе, второй раз я на такой повод не пойду.
Какие, раз уж ты об этом заговорил? Ладно, ты все равно не ответишь, поэтому сам. Цепь Маркова это самый примтивный предикт, распределение весов в зависимости от предыдущего состояния.Нейросеть математически это просто матрица весов, вектор входов, вектор смещения послойно. Когда ты заявляешь, что знаешь, как сделать лучше, что ты имеешь ввиду?Вот я субботу провел продуктивно.Так как ты кричишь - что я все делаю с помощью библиотек, тряхнул стариной. Начал без Pytorch/JAX, чтоб по олдскульному.Вот тебе простая нейросеть - корреляция температуры и влажности.
import math
def matmul(W, x):
"""
Матричное умножение W @ x.
W — список списков (матрица весов), размер [n_out x n_in].
x — список чисел (входной вектор), длина n_in.
Возвращает список длины n_out: каждый элемент —
скалярное произведение строки W на вектор x.
Пример:
W = [[1, 0], [0, 1]] # единичная матрица 2x2
x = [3.0, 5.0]
matmul(W, x) # → [3.0, 5.0]
return [
sum(W[i][j] * x[j] for j in range(len(x)))
for i in range(len(W))
]
def add(a, b):
Поэлементное сложение двух векторов: a + b.
a, b — списки чисел одинаковой длины.
Возвращает список той же длины.
Используется чтобы прибавить смещение b после matmul.
add([1.0, 2.0], [0.5, -0.5]) # → [1.5, 1.5]
return [a[i] + b[i] for i in range(len(a))]
def relu(z):
Активация ReLU (Rectified Linear Unit): max(0, z) для каждого элемента.
z — список чисел (выход линейного слоя до активации).
Возвращает список той же длины: отрицательные значения заменяются нулём,
положительные остаются как есть.
Зачем нужна: без нелинейной активации стек слоёв
математически равен одному матричному умножению.
relu([-1.2, 0.0, 3.4]) # → [0, 0, 3.4]
return [max(0, v) for v in z]
def sigmoid(z):
Активация sigmoid: 1 / (1 + e^(-z)) для каждого элемента.
z — список чисел.
Возвращает список значений в диапазоне (0, 1).
Удобна на выходном слое для задач бинарной классификации:
результат можно интерпретировать как вероятность.
sigmoid([0.0]) # → [0.5]
sigmoid([5.0]) # → [~0.993]
sigmoid([-5.0]) # → [~0.007]
return [1 / (1 + math.exp(-v)) for v in z]
def forward(x, W1, b1, W2, b2):
Полный forward pass: прогон входа через сеть.
Архитектура: вход → скрытый слой (ReLU) → выходной слой (sigmoid).
Аргументы:
x — входной вектор, список длины n_in.
W1 — матрица весов скрытого слоя, размер [n_hidden x n_in].
b1 — смещения скрытого слоя, список длины n_hidden.
W2 — матрица весов выходного слоя, размер [n_out x n_hidden].
b2 — смещения выходного слоя, список длины n_out.
Возвращает:
y — выходной вектор, список длины n_out.
Каждое значение в диапазоне (0, 1).
Внутри происходит:
z1 = W1 @ x + b1 # линейное преобразование
h = relu(z1) # нелинейная активация
z2 = W2 @ h + b2 # снова линейное
y = sigmoid(z2) # финальная активация
z1 = add(matmul(W1, x), b1)
h = relu(z1)
z2 = add(matmul(W2, h), b2)
y = sigmoid(z2)
return y
# ---------------------------------------------------------------------------
# Веса и смещения — здесь хранятся "знания" сети.
# В реальной задаче они подбираются обучением (backprop).
# Здесь заданы вручную для демонстрации forward pass.
W1 = [
[ 0.5, -0.3], # веса нейрона h0: смотрит на x[0] и x[1]
[ 0.8, 0.1], # веса нейрона h1
[-0.6, 0.9], # веса нейрона h2
b1 = [0.1, -0.2, 0.3] # смещения скрытого слоя
W2 = [[0.7, -0.4, 0.6]] # один выходной нейрон смотрит на h0, h1, h2
b2 = [0.0]
# Вход: два признака, например [температура, влажность]
# или просто любые два числа.
x = [1.0, 0.5]
y = forward(x, W1, b1, W2, b2)
print(f"Вход: {x}")
print(f"Выход: {y[0]:.4f} (вероятность от 0 до 1)")
Специально для тебя расписал все с комментариями. Это уже готовая нейросеть на чистой математике. Можно например обучить ее на простых данных - пульс, температура, возраст - на выходе получить здоров человек или болен.Но конечно, это все игрульки и трата времени, мы это на первом курсе универа проходили. Ух, как же я боялся нашего математика! Кто кто получал вышку в 90-х годах в Минске, навернаяка знают учебник ддля вузов, написанный Жевняк и Карпук - вот Карпук у нас все это безобразие и вел.Как я уже говорил - игрульки это когда есть Numpy. - математика под пайтон, написанная на плюсах.Кода немного меньше, но эффективность в 10-ки и сотни раз выше
import numpy as np
ReLU: max(0, z) поэлементно.
z — np.array любой формы.
Возвращает массив той же формы.
return np.maximum(0, z)
Sigmoid: 1 / (1 + e^-z) поэлементно.
Возвращает массив той же формы, значения в (0, 1).
return 1 / (1 + np.exp(-z))
Forward pass: вход → скрытый слой (ReLU) → выход (sigmoid).
x — np.array формы (n_in,)
W1 — np.array формы (n_hidden, n_in)
b1 — np.array формы (n_hidden,)
W2 — np.array формы (n_out, n_hidden)
b2 — np.array формы (n_out,)
y — np.array формы (n_out,), значения в (0, 1)
z1 = W1 @ x + b1
z2 = W2 @ h + b2
# Веса — в реальности подбираются обучением, здесь заданы вручную.
W1 = np.array([
[ 0.5, -0.3],
[ 0.8, 0.1],
[-0.6, 0.9],
])
b1 = np.array([0.1, -0.2, 0.3])
W2 = np.array([[0.7, -0.4, 0.6]])
b2 = np.array([0.0])
x = np.array([1.0, 0.5])
print(f"Выход: {y[0]:.4f}")
Разве тебя кто-то просил их все перечислить. Но если ты выступаешь как инноватор, то ты в состоянии предметно обьяснить претензию. Скорость - Окей, значит ты увидел какое-то узкое место, понял причину, есть идея как улучшить.
Забавное утверждение, но давай копнем поглубже...Если ты разобрался, тогда почему ты говоришь про оллама? Она не предназначена для создания нейросети. Нейросеть - это математика. Ты можешь вообще ее написать на листочке бумаги. Если в коде - то есть инструменты. От самых простых, типа NumPy, до специальных типа PyTorch/TensorFlow. Ты говоришь, что ты разобрался, а я тока поверхносно. Только вот я когда заинтересовался начал именно с математики, вообще с цепей Маркова.
Ты опять накидал набор слов, не понимая смысла. То оллама, то уже свой движок... Все что ты написал - давно существует.Как ты думаешь, чем занимаются все эти люди в Гугл, Антропик итд? Ищут варианты как усложнить, чтобы заставить любей купить больше токенов и видеокарт. А ты разобрался, почему на графике нейросеть работает быстрее?Твои заявления - это регресс на самом деле.
У меня например нет костылей, наоборот я работаю над минимально необходимой архитектурой. То есть простые задачи решаются на малых мощностях, сложные - подключаются монстры. Тут уже есть те, кто использует оркестраторы задач и вполне успешно. И опять какой фреймворк? Какие люди и что создавать? Я не понимаю) Обьяснишь?