Данная статья посвящена основе основ нейронауки — линейной алгебре. Если вы когда-либо планируйте изучать искусственные нейронные сети (и не только), то вам необходимо начать именно с этого. Причем не важно, собираетесь ли вы заниматься фундаментальными исследованиями (Data Science) или просто лепить модели в продакшн на конвейере (ML Engineering), вы обязаны знать их математику хотя бы поверхностно. Любые настройки, дообучение и применение даже готовой модели, требуют понимания основ. А по сему данное знание, как минимум, не будет избыточным.

Материал рассчитан на новичка. Если вы знаете школьную математику, то сможете освоить и мой курс. В будущем я напишу статью о линейном представлении нейросетей, где мы адаптируем полученное знание под прикладные задачи, напишем некоторые слои на Python и построим настоящую модель!

Также недавно я написал большую статью о работе трансформера, где детально на примере NumPy-модели разбирается весь механизм работы от внимания до параллельного обучения и стабилизации. Если считаете, что готовы, то она ждет вас! Статья написана циклично от поверхностного разбора до реализации кода. Вы сами можете выбрать тот режим глубины, который нужен для ваших целей.

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

В этой статье:

  • Понятие вектора;

  • Векторизация данных;

  • Умножение на скаляр;

  • Сложение векторов;

  • Норма вектора;

  • Скалярное умножение;

  • Векторное умножение;

  • Практика с кодом;

  • Домашняя работа.

Приятно чтения!

Почему линейная алгебра?

Линейная алгебра делает возможным существование всех современных моделей от полносвязных сетей до трансформеров. Она не только упрощает их представление и конструирование, но и ускоряет вычисления благодаря параллельной обработке данных в виде многомерных пакетов — тензоров.

Изображение Nvidia
Изображение Nvidia

Сами обучаемые параметры слоев также упакованы в матрицы в зависимости от типа операции. Таким образом, нейронная сеть представляется как последовательность матричных умножений, сдвигов и нелинейных функций, взаимодействующих с батчами данных. Любая операция в графе вычислений сети оперирует сразу множеством значений данных и весов. Это существенно оптимизирует процесс обучения.

Подробнее мы коснемся этого в следующих статьях, когда изучим основы ЛА.

Базовая единица линейной алгебры

Вектор — это математический объект, характеризующийся величиной и направлением и представленный в виде последовательности значений. Например:

a (2, 3, 4, 0, 8, ..., 7)

В геометрическом смысле он представляет из себя направленный отрезок в пространстве со списком координат, задающих направление и длину. В физическом смысле он олицетворяет силу с точкой приложения, величиной и направлением. В науке о данных, вектор — это конкретный пример с признаками.

На самом деле у вектора нет четкого представления, так как это абстракция — воображаемый объект, созданный по неким критериям без четкой привязки к реальности. Мы сами решаем какой смысл вкладывать в его математику (описание, законы, операции). А поскольку мы занимаемся нейронными сетями, то постепенно придем к собственному пониманию вектора и линейной алгебры в целом, адаптировав ее законы под свои нужды. Скоро вы сами в этом убедитесь.

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

Важно понять, что это не просто последовательность координат или бессвязный список, а единая сущность. Все координаты задают только одну точку в пространстве, следовательно описывают один объект. Именно по этой причине векторизация текста (и многих других дискретных структур) стала эталоном. При таком подходе мы не назначаем конкретному слову какое-то магическое число или абстрактный номер, а представляем его в виде цельного объекта, имеющего множество параметров, что расширяет возможности описания. Это простое решение дало старт всем современным языковым моделям.

Теперь разберемся с содержимым вектора: что могут означать его компоненты в контексте науки о данных?

Математически они представляют из себя координаты в системе. Если речь идет о данных, то каждая координата в отдельной записи описывает некую характеристику/особенность (feature). То есть, в этом случае, наш вектор становится уже объектом, пребывающем в пространстве признаков:

Вектор

Наличие защиты

Максимальная температура

Мощность

...

Цена

0

0

85

4000

...

1800

1

1

250

3200

...

7850

2

1

95

4000

...

2300

3

0

95

6000

...

5500

...

...

...

...

...

...

n

1

105

2500

...

2340

Приведенный выше пример датасета с описанием признаков имеет конкретный смысл, через призму которого мы рассматриваем принадлежащие ему вектора (строки таблицы). А вот в языковых моделях, где вектора получаются в процессе обучения, смысл признаков может быть абстрактным, то есть не иметь понятной интерпретации:

Вокабуляр

0

1

2

3

...

n

Ананас

.24

.74

.15

.03

...

.90

Апельсин

.44

.87

.65

.32

...

.11

Арбуз

.12

.17

.33

.69

...

.31

...

...

...

...

...

...

...

Яблоко

.45

.38

.21

.80

...

.95

Также мы можем векторизовать не только объекты, но и состояния, явления и все остальное на что хватит воображения: движения механизма, болезни, поведение людей, эмоции на фотографиях, ремонтопригодность и состояние аппаратуры, погоду и т. д. Векторизация — это почти что универсальный метод для описания всего.

Давайте векторизуем храбрых героев в гипотетической игре:

В данном примере:

  • Каждый вектор — это единая и неделимая сущность, представляющая конкретного персонажа (словно экземпляр класса в ООП);

  • Каждая компонента вектора — это конкретное значение характеристик в общем пространстве признаков, связанных друг с другом;

  • Единое пространство позволяет вычислить сложные взаимоотношения, как между отдельными характеристиками, так и между героями.

Иными словами, объекты, описанные в одной системе, не просто взаимосвязаны, но и могут действовать по общим правилам и взаимодействовать друг с другом. Обучив такую систему, мы могли бы создать идеальный баланс сил, понятную интерпретацию характеристик и заранее спрогнозировать поведение нестандартных элементов, например живых игроков!

Таким же образом можно поступить с любыми данными. И чем их больше, чем более они разношерстны, тем гибче и сильнее (в смысле ИИ) получается итоговая модель.


Понять, что такое вектор не так уж и легко. Однако надеюсь, что теперь смысл его существования немного прояснился.

Операции с векторами

Далее практическая математика: описание операций с векторами и скалярами.

Скаляр — это величина, не имеющая направления и описывающаяся одним числом. Смысл скаляра в том, что он может взаимодействовать с другими объектами линейной алгебры. Некоторые операции между векторами и матрицами также могут приводить к скалярному результату.

Умножение на скаляр:

Это умножение каждой компоненты вектора на заданное число. На практике оно сжимает или растягивает конкретный вектор, а так же может изменить его направление на противоположное в зависимости от знака. Важно: результат всегда будет коллинеарен исходному вектору. То есть, подобное умножение не меняет его угол.

Пример TES

Для примера, мы можем использовать умножение на Скаляр, как буст характеристик героев. Пусть «Зелье могущества» улучшает все характеристики на 20%, а «Зелье божественной силы» увеличивает вдвое. Отсутствие отдыха может постепенно штрафовать статы, делая героев более слабыми.

Данная операция является фундаментальной и применяется постоянно. В машинном обучении ее могут использовать для масштабирования. Например, мы можем сложить два выхода независимых ветвей модели, используя обучаемые коэффициенты.

Практика

Решите примеры:

a (10, 20, 12, 700) * 1.1 = (11, 22, 13.2, 770)
a (10, 20, 12, 700) * 0.5 = (5, 10, 6, 350)
a (5, 7) * 2 = (10, 14)
a (10, 20, 12, 700) * 0 = (0)
a (10, 20, 12, 700) * 1 = (10, 20, 12, 700)

Сложение векторов:

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

Это также одна из основных операций. В машинном обучении ее можно встретить при сдвиге весов (bias), как обучаемый параметр.

Пример TES

Мы можем причислять вектора не только героям, но и различным модификаторам, например заклинаниям, ядам или зельям.

Пусть вектор «Зелья силы» изменит конкретно данную характеристику, «Зелье война» будет накладывать комплексный бафф, а «Яд паралича» оказывать разное отрицательное воздействие на все характеристики.

Практика

Решите примеры:

a (180, 240, 360, 0) + b (-40, -450, 5, 800) = c (140, -210, 365, 800)
a (11, 0, 97, 5) + b (-33, 22, -75, -27) = c (-22, 22, 22, -22)
a (0, 1, 0, 1, 0, 1) + b (-1, -3, -3, -5, -5, -7) = c (-1, -2, -3, -4, -5, -6)
a (48, 660, 31, 11) + b (-6, 6, 2, 2) = c (42, 666, 33, 13)
a (0, -4, 3, 11, -88, -58) + b (1, 6, 0, -6, 96, 71) = c (1, 2, 3, 5, 8, 13)

a (0, 1, 2, 3, 4) + b (7, 5, 0, 4, 8) * 3 = c (21, 16, 2, 15, 28)
a (0, 1, 2, 3, 4) + b (0, 1, 3, 4) * 5 = неопределенность
a (4, 6, 8, 9) * 7 + b (8, 2, 6, 3) * 9 = c (100, 60, 110, 90)

a (0, 4, 0, 1) * 7 + b (4, 19, 16, 35) * 0 + c (10, -18, 10, 3) = d (10, 10, 10, 10)
( a (1, 4, 2, 1) * 4 + b (4, 19, 16, 35) ) * 3 = c (24, 105, 72, 117)
( a (1, 2, 3, 2) * 3 + b (11, 7, 3, 2) * 2 ) * 2 = c (50, 40, 30, 20)

Норма:

Это числовая характеристика вектора, которая обобщает понятие модуля. Простейший случай — Евклидова норма, характеризующая длину вектора, то есть расстояние от начала координат до заданной точки.

||x||2 = sqrt(x1**2 + x2**2 + ... + xn**2)

Есть и другие нормы, например Манхэттенское расстояние, которое иначе характеризует величину вектора и определяется как сумма модулей его компонент:

||x||1 = E |xi| (i=1, n) = |x1| + |x2| + ... + |xn|

Бесконечная норма равна модулю самой большой компоненты:

||x|| = max(x)

Пример TES

Норма позволит выяснить общий уровень развития персонажа.

Длина вектора характеристик будет зависеть не только от общего количества потраченных очков (Манхэттенское расстояние), но и его направленности. Другими словами, персонаж с явной специализацией будет эффективнее, чем герой с ровным распределением очков.

Практика

Вычислите евклидову норму для следующих векторов:

|| a (4, 3) || = 5
|| b (5, 12) || = 13
|| c (4, 7, 0, 4) || = 9

Вычислите манхэттенское расстояние:

|| a (1, 88, 3, 9) || = 101
|| b (5, -7, 15, 13) || = 40
|| c (79, -9, 21, -1) || = 110

Узнайте бесконечную норму векторов:

|| a (11, 88, 75, 900) || = 900
|| b (51, -47, -56, 49) || = 56
|| c (7, 0, 9, 11, -10, 11) || = 11

Скалярное произведение векторов:

Это умножение векторов, результатом которого является скаляр. На практике оно показывает взаимную направленность векторов. Результат произведения равен 0, если вектора перпендикулярны и достигает максимума при их коллинеарности.

Если нормировать скалярное произведение, то можно более точно определить направление векторов.

p_norm = a * b / (|a| * |b|):

  • Ортогональны при p_norm = 0;

  • Острый угол при p_norm (0, 1);

  • Сонаправлены при p_norm = 1;

  • Тупой угол при p_norm (0, -1);

  • Противоположны при p_norm = -1.

Пример TES

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

Нормирование помогает заключить результат в рамки. Чем ближе норма к 1, тем более похожи характеристики героев. Соответственно, чем ближе произведение к нулю, тем более они различаются, вплоть до ортогональности — полного отсутствия пересечений.

Практика

Решите примеры:

a (7, 1, 12, 0, -3, -5) * b (0, 1, 4, 2, 6, 3) = 16
a (200, 0, 0, 0) * b (0, 123, 70000, 4096) = 0
a (22, 34, 8, 17) * b (-1, 23, 2000) = неопределенность

Что вы можете сказать навскидку о сонаправленности следующих векторов, не прибегая к их скалярному умножению?

1) a (35, 12, 4) b (23, 17, 1)
2) a (1, 0, 0) b (0, 1, 16)
3) a (3, 3, 3) b (-2, -2, -2)
4) a (3, 3, 3) b (-2, 0, -2)

Вычислите нормированное скалярное произведение векторов:

a = (3, 9, 3, 0, 8, 2, 0, 4, 2)
b = (7, 2, 3, 7, 4, 6, 0, 2, 6)
c = (5, 8, 1, 7, 2, 9, 0, 2, 3)

a * b / (||a|| * ||b||) = 0.5748
a * c / (||a|| * ||c||) = 0.6555
b * c / (||b|| * ||c||) = 0.8525

Векторное произведение векторов:

В трехмерном пространстве результатом такого произведения является вектор ортогональный плоскости множителей, направление которого можно определить по правилу правой руки. Его длина будет равна произведению умножаемого вектора на перпендикуляр, опущенный от второго вектора. Или, в геометрическом смысле, произведению длин векторов на синус угла.

Также можно встретить интерпретацию через площадь параллелограмма, образованного умножаемыми векторами. Чем ближе угол к 90 градусам, тем больше площадь фигуры, и тем больше результирующий вектор.

Это экзотическое умножение, которое часто используют в физике, например для определения силы Лоренца. Сила Лоренца, магнитная индукция и движение частицы — это векторные величины, которые достигают своего пика, если ортогональны друг другу.

Пример TES

Данная операция не определена для пространства с размерностью > 3, поскольку в таком случае может иметь бесконечное количество решений (целые пространства). Но мы можем использовать первые три компоненты: сила, ловкость и интеллект — основные характеристики персонажей.

Тогда умножение их векторов, будет тем больше, чем более различны их направления и достигнет своего пика при ортогональности героев (отсутствия пересечения). Сам вектор в таком случае, скорее всего, будет иметь отрицательные компоненты, что трудно интерпретировать. Однако, его норма покажет нам суммарную силу группы, привязанную к конкретным векторам (в отличии от скалярного умножения, привязанного лишь к направлению).

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

Практика

Ну и куда же без программирования... Давайте отработает все изученные операции в Python.

Мы не будем изучать специфические модули для линейной алгебры, а используем один из основных модулей языка — Numpy. Также в конце вас ждет домашнее задание и ссылка на мой учебный репозиторий, где собран весь нужный код, который можно использовать как шпаргалку.

Импортируем модуль:

import numpy as np
from numpy.linalg import norm

Создаем списки векторов, с которыми будем работать:

# Списки сущностей:
names = {
    0: "Элерон'Таз",
    1: "Чилит-в-Глубинах",
    2: "Ротгарн Стопа",
    3: "Ульфгард Золотая Струя",
    4: "Мурка",
    5: "Красная машина",
    6: "Носит-под-Гузник",
    7: "Куремар",
}

vec_list = np.array([
    [3, 9, 3, 0, 8, 2, 0, 4, 2],        # Элерон'Таз
    [2, 7, 4, 9, 8, 3, 0, 5, 4],        # Чилит-в-Глубинах
    [9, 3, 2, 0, 1, 8, 0, 5, 9],        # Ротгарн Стопа
    [7, 2, 3, 7, 4, 6, 0, 2, 6],        # Ульфгард Золотая Струя
    [5, 8, 1, 7, 2, 9, 0, 2, 3],        # Мурка
    [25, 10, 10, 0, 20, 30, 0, 0, 15],  # Красная машина
    [3, 3, 3, 3, 3, 3, 3, 3, 3],        # Носит-под-Гузник
    [1, 3, 9, 5, 1, 1, 0, 9, 1],        # Куремар
])

mods = [
    2.0,  # Зелье божественной силы
    1.2,  # Зелье могущества
    0.5,  # Сонливость
]

potions = np.array([
    [3, 0, 0, 0, 0, 0, 0, 0, 0],      # Зелье силы
    [2, 1, 0, 0, 0, 1, 0, 1, 1],      # Зелье война
    [-2, -1, 0, 0, 0, 0, 4, 0, -1],   # Яд паралича
    [0, 0, 3, 0, 0, 0, 0, 0, -1],     # Зелье ученого
    [1, 1, -1, 0, 0, 3, 0, 0, 1],     # Скама
    [0, 0, -2, -1, -1, 0, 0, 0, 1],   # Яд безумия
    [-2, 0, 0, 3, 1, 0, 0, -2, 0],    # Зелье красноречия
])

diseases = np.array([
    [-2, -2, -2, 0, -1, -3, 0, 1, 0],  # Простуда
    [1, 0, -1, -1, -1, 3, 9, 0, 0],    # Каменная хворь
    [-3, -1, 0, 1, -5, 0, 0, 3, 0],    # Чума
])
# Таблица героев:
print(f'{'Имя:':<25} {'Очки навыков:':<15} {'Мощь:':<10}')
for i in range(len(vec_list)):
    points = norm(vec_list[i], ord=1)
    power = round(norm(vec_list[i], ord=2), 2)
    print(f'{names[i]:<25} {points:<15} {power:<10}')

Далее будут показаны примеры основных операций.

Умножение на скаляр:

result = vec_list[0] * mods[1]
print(f"{vec_list[0]} * 1.3 = {result}")

[3 9 3 0 8 2 0 4 2] * 1.3 = [ 3.6 10.8 3.6 0. 9.6 2.4 0. 4.8 2.4]

Сложение векторов:

result = vec_list[0] + potions[0]
print(f"{vec_list[0]} + {potions[0]} = {result}")

[3 9 3 0 8 2 0 4 2] + [3 0 0 0 0 0 0 0 0] = [6 9 3 0 8 2 0 4 2]

Норма вектора:

result = round(np.linalg.norm(vec_list[0], ord=2), 2)
print(f"{vec_list[0]} + {potions[0]} = {result}")

[3 9 3 0 8 2 0 4 2] + [3 0 0 0 0 0 0 0 0] = 13.67

Скалярное произведение векторов:

p_norm1_0 = norm(vec_list[0], ord=2)
p_norm1_1 = norm(vec_list[1], ord=2)
result = vec_list[0] @ vec_list[1] / (p_norm1_0 * p_norm1_1)
result = round(result, 2)

print(f"{vec_list[0]} * {vec_list[1]} = {result}")

[3 9 3 0 8 2 0 4 2] * [2 7 4 9 8 3 0 5 4] = 0.81

Векторное произведение векторов:

a = vec_list[0][:3]
b = vec_list[1][:3]
result = np.cross(a, b)

print(f"{a} * {b} = {result}")

[3 9 3] * [2 7 4] = [15 -6 3]

Это все основные операции.

Домашняя работа

Предлагаю выполнить ряд забавных заданий, где будут задействованы все изученные операции, которые нужно применить со знанием смысла. Если вы внимательно изучили статью, то выполнить их не составит большого труда. Сразу скажу, что первые три задания можно (и желательно), решить на чистом numpy без применения циклов.

Задание 1. Магический эксперимент.

Куремар решил провести эксперимент по расширению своих возможностей. Для этого он употребил все зелья из доступных (potions) и, как побочный эффект, получил модификатор сонливости.
Вычислите изменение евклидовой нормы героя, чтобы узнать, стал ли он сильнее.

# Вводные:
kuremar = vec_list[7].copy()
sleepiness = mods[2]
print(kuremar)

[1 3 9 5 1 1 0 9 1]

Задание 2. Вызов на бой.

Носит-под-Гузник мечтает одолеть Красную машину в бою. Помогите ему в этом.

Наложите нужные модификаторы (mods, potions, diseases) на воинов так, чтобы евклидова норма вектора аутсайдера стала выше чем у противника.

Можно применить лишь по одному модификатору из каждого списка на одного героя.

# Вводные:
nappy = vec_list[6].copy()
red_machine = vec_list[5].copy()
print(nappy, red_machine)

[3 3 3 3 3 3 3 3 3] [25 10 10 0 20 30 0 0 15]

Задание 3. Тест на совместимость.

Мурка решила найти себе подходящую пару. Она испробовала все лунные гороскопы и тесты совместимости, но так и не удовлетворилась результатом.
Используйте векторный анализ, чтобы найти для нее наиболее похожего персонажа.

# Вводные:
murka = vec_list[4].copy()
print(murka)

[5 8 1 7 2 9 0 2 3]

Задание 4. Арена.

Настало время финальной битвы!

Герои прибыли на знаменитую арену и разбились на команды. Все, кроме Красной машины, которого оштрафовали за слишком высокий параметр дерзости (его вектор = [-1, -1, -1]). Перед тем как начнется битва, участникам предстоит сразиться с великаном, мощь которого равна 60. Те, кто одолеет испытание, пройдут в финальный раунд.

Разъяснение. Используя векторное умножение и евклидову норму, найдите все возможные пары героев и их суммарную мощь. Отсейте тех, кто не набрал 60 очков (x > 60). Выясните, количество уникальных пар, прошедших в финал, а также, какая команда станет победителем соревнования.

Подведите итоги, сделав информативную статистику:

  1. Основные итоги. Выведите топ уникальных пар, прошедших в финал в порядке убывания;

  2. Аутсайдеры. Отдельным списком выведите тех, кто не прошел в финал ни в одной из команд;

  3. Линый результат. Для каждого героя найдите сумму очков всех команд в которых он принимал участие. Выведите личный вклад героев (включая аутсайдеров) в порядке убывания.

Веди нас, Неревар!

# Вводные:
vec_short_list = vec_list[:, :3].copy()
vec_short_list[5] = [-1, -1, -1]
threshold = norm([60, 0, 0], ord=2)

print(f"Мощь великана: {threshold}\n")
print(f"Таблица героев")
print(f'{'Имя:':<25}{'Сила:':<15}{'Ловкость:':<15}{'Интеллект:':<15}')
for i, row in enumerate(vec_short_list):
    print(f'{names[i]:<25}{row[0]:<15}{row[1]:<15}{row[2]:<15}')

Таблица героев:

Имя

Сила

Ловкость

Интеллект

Элерон'Таз

3

9

3

Чилит-в-Глубинах

2

7

4

Ротгарн Стопа

9

3

2

Ульфгард Золотая Струя

7

2

3

Мурка

5

8

1

Красная машина

-1

-1

-1

Носит-под-Гузник

3

3

3

Куремар

1

3

9

Послесловие

Весь код можно будет найти в учебном репозитории на GitHub.

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

Если чувствуйте, что готовы к гораздо более серьезным вещам, то всегда можете прочесть статью о реализации и обучении трансформера на голом Python. Там подробно описывается весь процесс работы этой сложной архитектуры до мельчайших деталей. А также имеется адаптированный для учебных целей код из моего собственного фреймворка. Он также доступен в собранном виде в учебном репозитории.


Изображения подготовлены мною в программах Krita и GoogleSheets.

Учебный репозиторий | Трансформер своими руками

Комментарии (17)


  1. starfair
    12.03.2026 10:57

    Интересный подход, для изложения! Не останавливайтесь. Особенно любопытно, сможете ли вы таким же образом изложить основы тензорного анализа?


    1. KuzMax13 Автор
      12.03.2026 10:57

      Спасибо за поддержку!
      Думаю все возможно, но стоит ли оно того?
      Все основы можно было изложить одной статьей в виде сухого сжатого материала. Тут же большая часть времени ушла на работу с его подачей.
      К сожалению, пока моя работа не пользуется большим спросом.


      1. starfair
        12.03.2026 10:57

        Понимаю! Сам не скажу, что прямо завален отзывами на свои статьи. С другой стороны, у вас достаточно оригинальная идея, показать элементы линейной алгебры в разрезе сразу и практического применения для игростроя, так и как весьма упрощенной, но очень важной при этом для понимания некоторых основ для работы языковых моделей ИИ. Поэтому и любопытно было бы, как оно быдет продолжено в более сложных вариантах. Но - понимаю! Работа колосальная, а выхлоп - неизвестен.


        1. MasterMentor
          12.03.2026 10:57

          "Выхлоп" на благодатной публике Хабра заранее известен. Описывается он формулой "не в коня корм". Однако, полагаю, статьи здесь публикуют не ради "выхлопа". :)


  1. LORDDREGS
    12.03.2026 10:57

    Здравствуйте, а можно с вами как-нибудь связаться и написать пару вопросов по нейронным сетям? Я сам начинаю их изучать но пока у меня выходит не очень, да и проходить в вузе нейросети мы будем только в следующем семестре, поэтому заранее хочу изучить и попробовать себя в этом


    1. KuzMax13 Автор
      12.03.2026 10:57

      Считайте, что уже связались.
      Задавайте ваши вопросы. Я отвечу, если будет время.


      1. LORDDREGS
        12.03.2026 10:57

        Ну хорошо. Для начала опишу свою ситуацию: изучаю С++ и Питон пока знания на начальном уровне, но уже пишу некоторые проекты самостоятельно и подтягиваю знания по алгоритмам чтобы проходить успешно собеседования, также начинаю работать с коммитами крупных проектов, отправляя свои good first Issue(TensorRt-llm, DALI, onnxruntime, OpenVino, Varm, LLVM и другие). По нейросетям я делаю упор на решение различных problems или competition в основном в Кеггле, и недавно приметил для себя несколько проектов ( Ribonza-RNA folding, CRISP), (детекция и сегментация и поиск уязвимостей). И тут я столкнулся с проблемой что допустим немного не понимаю как допустим реализовать сложную ии модель путем объединения трансформеров и граф нейронных сетей(про их наличие я узнал случайно когда просил гпт дать ссылки на научные статьи), а также реализацией метрике от MSE/MSA до RMSD/TM-score. Можете ли вы порекомендовать что для начала взять чтобы отталкиваться от этого и самостоятельно решать задачи/писать проекты. Очень много информации и невозможно её нормально структурировать


        1. KuzMax13 Автор
          12.03.2026 10:57

          В последнем предложении вы сами ответили на свой вопрос. Вы так много всего перечислили, особенно серьезных проектов. Зачем это, если нет даже знания языка?

          Поэтому сначала нужно ответить на вопрос: "Для чего?", а уже потом "Как именно?". Дата-сайентист, дата-инженер, ML-инженер - это все разные специальности. Я сам занимаюсь чистыми исследованиями (data science) и из фреймворков знаю только TF/Keras.

          Так что, совет простой: чем проще, тем лучше, а не наоборот. Начните с базы и сконцентрируйтесь на чем-то одном, максимум 2 вещах, если они работают параллельно. Иначе получится как с двумя зайцами.

          Если это язык, то пусть для начала будет один Питон, поскольку именно на нем пишутся все скрипты. Параллельно можно будет изучать нейронные сети, начав, конечно же, с математики. Далее классическое ML (поверхностно), чтобы понять, как обучаются модели, что такое обобщающая способность, какие есть фундаментальные проблемы при обучении. Только потом нейронные сети. Это лучше, чем изучить 1000 крутых проектов, которые завтра устареют. А линейная алгебра и backprop не устареют никогда.

          Простой вопрос, сможете вручную рассчитать прямой и обратный проход маленькой полносвязной сети из пары слоев по паре нейронов?


          1. LORDDREGS
            12.03.2026 10:57

            Ну я перечислил два направления в которых я развиваюсь в С++ (написание различных программ под Hardware) и Питон ( работа с нейронками). Вы как писали что нужно искать так чтобы одно другому не мешало, лично я исхожу из такого мнение, что сейчас очень много Hardware компаний выпускают различные проекты/библиотеки/кроссплатформенные фреймворки и тд.(например Daly, onnxruntime, OpenVino, Warp, Pytorch, TensorRt-llm and etc.) где так или иначе нужны будут знания по С++ и питону (например реализовать функции, библиотеки, модули все это протестировать и отладить) - поэтому на основе этого я делаю ставку на С++/Питон(ну и немного шарпов/реакта, для кросс мобильной разработки). По поводу незнания языка: соглашусь у меня есть с этим проблемы, но прилагаю усилия (пока трачу 1 час на написание кода и 2-3 часа теории от изучения языка до его паттернов + 1 час математики ). Но думаю увеличить темп чтобы уже уверенно и самостоятельно писать код. И вам огромное спасибо за советы а можете написать авторов и книги по линейной алгебре (можно даже и советских).

            Честно рассчитать в уме пока не смогу но если допустим будет методичка с формулами (чтобы не запутаться) то да смогу).

            По итогу: огромное спасибо вам за ОС(обратную связь) обязательно воспользуюсь вашими советами


  1. MasterMentor
    12.03.2026 10:57

    Статья/карма/подписка: +++. Сразу видно, когда пишет практик, а не "теоретик".

    По мелочам:

    -- по определению векторов - чтобы не напускать туману одним предложением можно было сказать что это математические объекты, которые по-разному определены в разных областях математики. Алгебраический вектор - многокомпонентная (или многоместная) конструкция образца (x,y,z), геометрический вектор - направленный отрезок. И над ними можно построить однозначные соответвия (в обе стороны :) ).

    -- по геометрическому отображению можно было упомянуть, что прямоугольная система координат хороша тем, что на ней просто отрезками отобразить компоненты алгебраического вектора. Но это годится лишь для векторов местности не более 3, а дальше "ну... мы работаем по аналогии". И упомянуть удобство такого отображения независимых величин.

    Из близких русской душе примеров приведу пример векторизации рассыпания пачки семок по независимым карманам: количество семок засыпанных в каждый карман - хорошо отображается на прямоугольных ортах*. Ну а сам геометрический вектор - это все заспанные семки. Кстати, персыпание семок из кармана в карман - вполне иллюстрирует закон сохранения энергии. (И тут же можно показать годограф вектора, рисующий в пространстве кривые в процессе этого пересыпания.)

    -- всегда немного коробит уши когда слышишь от математиков (и упаси бог - инженеров) слово "сущность". Этому понятию, полне соответствует слово "объект" - предмет произвольной природы, у которого, вероятно, есть внутрення структура, о которой в данный момент мы просто не хотим говорить. "Сущности" расплодились среди "программистов", но я встречал их и во вполне добропорядочных ортодоксальных книгах по матетематике 1980-х. Полагаю "сущности" появились в результате неудачного перевода переводчиками английского слова entity, которым "у них" эти "сущности" и обозначаются. Но если заглянуть в словарь, то окажется, что слову entity вполне соответствут перевод "объект".

    PS Давайте дружить на математической почве. Я собираю банду любителей математики (телеграм в профиле).


    1. KuzMax13 Автор
      12.03.2026 10:57

      Спасибо за обратную связь!
      По вашему стилю предположу, что вы, должно быть, преподаватель: они любят, чтобы все было строго и споры о том, какая книга каноничное и ближе к истине. Благо, я не математик, а всего лишь энтузиаст ;)

      Не стал писать про систему координат, потому как собираюсь создать отдельную статью посвященную базису. По задумке, читатель-ученик, как бы еще принимает все как данность и не видит разницы и надобности в чем-то другом. Но в итоге именно этот момент с линейными операторами меняет все представление.

      Что касается сущности. Я намеренно называл одно и то же разными словами. Цель: создать параллельную логическую связь между вектором (во всех его смыслах), строкой датасета, объектом класса и сущностью в самом широком смысле понятия, которой может быть все что угодно, поддающееся описанию. Как говорится, все есть информация, и все взаимосвязано.

      Мне нужно чтобы читатель осознал, что вектор может описывать все: эмоции и болезни людей, тенденции экономики, состояния объектов, музыку, личность и все что угодно и даже больше. Это крайне абстрактно, но только это позволит понять нейронные сети.

      P.S. Получилось у меня или нет, судить вам!


      1. MasterMentor
        12.03.2026 10:57

        >>По вашему стилю предположу, что вы, должно быть, преподаватель...

        Предположение неверно. Любитель (я ж так и написал). Но не только математики, но немного и языка на котором говорил бессмертный Гоголь ... и Белинский. Отсюда и стремление к его точности.

        >>они любят, чтобы все было строго и споры о том, какая книга каноничное и ближе к истине

        Если послушать средней руки "преподавателя" математики, то тезис "они любят, чтобы все было строго" - не выдеривает никакой критики. Обычно там борщ в речах и бардачок в голове. А вот "споры о том, какая книга каноничное и ближе к истине" - они действительно любят. Особенно в оплачиваемое из бюджета время. Оно и не удивительно: солдат спит, служба - идёт.

        >>что вектор может описывать все: эмоции и болезни людей, тенденции экономики, состояния объектов, музыку, личность и все что угодно и даже больше

        Ойли. Эта тема - предмет начал математики. А насколько Вы в них сильны?

        >> только это позволит понять нейронные сети

        "Понять нейронные сети" - тут ничего не понял. Да и понимать, обоснованно полагаю, ничего и не нужно: в мире достаточно прекрасных курсов, где всё объяснено "на пальцах"; ясно и в страницы текста. Было бы желание и трудолюбие. К примеру, рекомендую взглянуть на эти курсы от того же автора*. Что ещё нужно?

        https://qudata.com/ml/ru/index.html - сам предмет

        https://synset.com/ - хорошая подготовка к предмету для школьников 7 класс+.

        PS И почему "только это"? Позволю себе поразглагольствовать на тему. Чтобы "понимать" нейросети нужно "немного" понимать и физику, и философию. Нет?


  1. Deosis
    12.03.2026 10:57

    На картинках векторного произведения надо бы проверить направление результата


    1. KuzMax13 Автор
      12.03.2026 10:57

      Дельное замечание. Отзеркалил. Спасибо!


  1. oforum
    12.03.2026 10:57

    хороший текст. Если будете продолжать курс, логично следующим шагом сделать такую же «игровую» статью про матрицы и базисы — с упором на то, как матричное умножение реализует слой нейросети (линейную регрессию / полносвязный слой) и как выбор базиса меняет интерпретацию признаков, но не саму задачу; это хорошо подготовит читателя к вашей статье про трансформеры.


    1. KuzMax13 Автор
      12.03.2026 10:57

      Благодарю. Так и было запланировано. Уже задумал набор аналогий для матриц, операторов и изменения пространства признаков. Только где найти время, силы и желание не знаю пока.


  1. cpud47
    12.03.2026 10:57

    Векторные произведения концепт чисто геометрический, и вне собственно геометрических задач смысла особо не имеет. Поэтому, учитывая упор на анализ данных, как, было бы лучше вообще не рассказывать про векторное произведение. Пример крайне притянутым за уши выглядит...