Линейная алгебра
Практика блока
Линейная регрессия двумя способами, PCA, сжатие и cosine similarity
Блок закрывается кодом. Ниже — что реализовать и какая теория за каждым пунктом стоит. Проверки внизу закрывают два из этих пунктов; остальные стоит сделать в своём репозитории.
1. Линейная регрессия через нормальное уравнение
Задача: найти , минимизирующую .
Решение целиком выводится из урока про проекции. Мы ищем ближайшую к точку в образе — то есть проекцию. Остаток обязан быть ортогонален всем столбцам :
Раскрываем — и получается нормальное уравнение:
2. То же через SVD, и сравнение устойчивости
Подставив , получаем — псевдообратная из прошлого урока.
Ключевая разница не в ответе, а в устойчивости. Число обусловленности равно квадрату числа обусловленности :
Если — совершенно обычное дело для сырых признаков в разных единицах, — то , и при двойной точности от ответа остаётся три-четыре значащих цифры.
Что реализовать: сгенерируйте плохо обусловленную (например, два почти
коллинеарных столбца), решите обоими способами и сравните с истинным
. Разница будет наглядной. Это, кстати, объяснение того, почему
np.linalg.lstsq предпочтителен inv(X.T @ X) @ X.T @ y.
3. PCA с нуля
Алгоритм в четыре строки, и каждая уже разобрана:
- Центрировать данные: вычесть среднее по каждому признаку.
- Взять ковариационную матрицу — симметричную и неотрицательно определённую.
- Найти её собственные векторы (спектральная теорема гарантирует ортонормированный базис).
- Спроецировать данные на первые векторов — это смена базиса с усечением.
Эквивалентно: взять SVD центрированной и оставить первые правых сингулярных векторов. Собственные значения связаны с сингулярными значениями как .
Центрирование пропускать нельзя. Без него первая главная компонента укажет в сторону среднего, а не в сторону максимальной изменчивости.
4. Сжатие изображения низкоранговым SVD
Прямое применение Эккарта–Янга: загрузите изображение в градациях серого, посчитайте SVD, оставьте слагаемых. Постройте график зависимости ошибки от и посмотрите, где картинка становится «достаточно похожей».
Тот же эксперимент в миниатюре — здесь. Сравните, как спад спектра зависит от структуры:
исходная
приближение · k = 2
спектр
- ошибка
- 3.831
- хранимых чисел
- 82 / 400
Ранг 6 против единицы у соседних картинок: резкая граница не разделяется на функцию от строки и функцию от столбца. Для 95% энергии хватает четырёх слагаемых — приближение работает, но экономия куда скромнее.
Круг против полос — это и есть ответ на вопрос, что сжимается: не «простое» и не «гладкое», а разделимое. У полос и у гауссова бугра ранг равен единице, потому что каждый распадается в произведение функции от строки на функцию от столбца. У круга такого разложения нет, и спектр спадает заметно медленнее — хотя описывается круг такой же одной строкой кода.
5. Cosine similarity на эмбеддингах
Проверьте поведение при масштабировании: умножьте один вектор на 100 — значение не изменится. Умножьте на — сменит знак. Это то, за что её и выбирают: она измеряет направление и сознательно игнорирует длину.
Заодно посмотрите, что происходит с обычным скалярным произведением в том же эксперименте, и почему в attention нормировки на длину нет — там она заменена делением на по совсем другой причине, дисперсионной. Разберём в блоке 6.
- скалярное произведение
- 7.5
- норма a
- 2.24
- норма b
- 3.35
- косинус
- 1
- угол
- 0°
Векторы выставлены коллинеарно. Потяните любой из них вдоль той же прямой: скалярное произведение поедет, косинус останется единицей.
Экзамен блока
Возьмите статью про LoRA и прочитайте раздел с методом. К этому моменту в формулах не должно остаться незнакомых объектов: низкоранговая поправка , ранг , инициализация, масштабный множитель. Если формулы читаются — блок закрыт.
Источники
- Deisenroth, Faisal, Ong — Mathematics for Machine Learning, гл. 9.2 и 10.1–10.4 — Метод наименьших квадратов, PCA
- Trefethen, Bau — Numerical Linear Algebra, лекции 11 и 18 — Наименьшие квадраты через QR и SVD, устойчивость нормального уравнения
Проверки
0 из 2Почему нормальное уравнение хуже SVD
Столбцы матрицы признаков почти коллинеарны, . Отметьте все верные утверждения.
Наименьшие квадраты для прямой
Реализуйте
fit_line(xs, ys)— подгонку прямой методом наименьших квадратов. Верните список[a, b].Это нормальное уравнение для из двух столбцов — самого и столбца единиц. Раскрыв систему, получаем закрытые формулы:
Знаменатель обращается в нуль, когда все равны: столбцы становятся пропорциональными, ранг падает, и прямая не определена однозначно. В этом случае верните
null(в PythonNone).Стоит заметить, что знаменатель — это , умноженное на дисперсию . Ровно поэтому предсказуемость страдает, когда признак почти не меняется: делить приходится на почти ноль. Это тот же разговор про обусловленность, только для самой маленькой из возможных задач.
Загрузка редактора…
Ctrl/⌘ + Enter