Как стать автором
Обновить

Комментарии 42

Bring it on —…
Hurt me plenty —…
Nightmare —…


Сегодня им 25 лет ))
спасибо за статью, давно интересно в этом разобраться, но как-то лень, что ли…
Я так полагаю (точнее — надеюсь), предполагается цикл статей для тех, кому тоже лень самим все искать, как мне?
Если честно, то вы не убедили меня зачем мне нужно изучать математику для ML, тем более по книгам для математиков. Вы так ратуете за утилитарность, но не привели ни одного примера, когда знание математики помогает лучше и проще решить задачу, чем перебор гиперпараметров и нагромождение ансамблей.
Не могу ответить коротко, так что по пунктам :)

1. Я бы даже более общо ставил бы вопрос — а зачем вообще математику изучать? Математикой пичкают студентов на всех естественно-научных факультетах, и не только на них; даже психологи какие-нибудь вынуждены изучать математику. К сожалению (или к счастью?) это одно из тех немногих орудий, которое человечество имеет в своём арсенале для разгадок тайн природы.

2. Я не ставлю своей целью убедить кого-то изучать математику, поскольку невозможно в человека вложить такую чудовищной силы мотивацию извне. Математика сложная, она трудна, изучать её тяжко и энергозатратно, в жизни для многих есть более интересные занятия. Эта потребность должна идти изнутри, «почему оно так? почему не иначе?». Многими вещами я просто пользуюсь (как потребитель), к примеру, мне не очень интересно, как выращивать ананасы или персики, я их просто ем. Возможно, мне никогда не придётся этим заниматься. Я плохо разбираюсь в том, как работает медицина. Всё изучить невозможно, и надо отсеивать ненужное/неинтересное. Эта статья скорее для тех, кто хочет начать, но не знает, откуда.

3. Кто вам сказал, что это книги для математиков? Практически все книги 1-го уровня — книги для инженеров/программистов, которые исследуют математику как инструмент, а не как предмет изучения. В заглавии некоторых вообще прямым текстом написано «для программистов». Книги для математиков (уровня мехмата) — это книги 3-го уровня.

4. Где я ратую за утилитарность? Мне казалось, что я своим введением а) ясно обозначил, что математика может и не пригодиться в явном виде; б) профит, если и будет, то не сразу и не очевиден; в) в настоящей жизни «силовые» решения чаще продавливают элегантные математические.

5. Библиотеки машинного обучения (в частности, scikit и другие) часто работают хорошо за счет того, что в них уже с самого начала был заложен мощный потенциал умными людьми. Тем не менее, даже они не всегда хорошо работают из коробки. Очевидный пример: линейная регрессия на не-нормированных данных. Да и даже сам выбор модели по данным требует понимания, что теоретически может сработать, а что не «прокатит», как бы вы не подгонялись под ответ.
Очевидный пример: линейная регрессия на не-нормированных данных.

А почему он очевидный? Ведь если ваша цель — зафитить линрег, то вы сможете сделать это и на ненормированных данных.

Если один признак из диапазона 0..1, а второй – из 0..1000000, то решение в лоб будет намного дольше сходиться.

Что вы называете решением в лоб?

Подбор параметров с помощью градиентного спуска. Функция потерь будет иметь вид длинного оврага, где негде развернуться.


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


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


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


Кстати, kirtsar, я бы ещё добавил в диаграммку численные методы, раз уж о них заговорили.

Подбор параметров с помощью градиентного спуска.

Ну так вот это не решение в лоб. Это уже нужно, когда речь идет о регуляризации. Решение в лоб именно линейной регрессии — через уравнение.

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

Расчехляю sklearn, который автор привел в пример

Разница в коэффициентах в тринадцатом знаке. Это реальный пример реального использования линрега в лоб на ненормированных фичах.
А вот разница в скорости работы в этом же примере:

Скорость с отнормированными фичами лучше, но в пределах погрешности.

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

Обычно я бы никогда не сказал такой, на первый взгляд, бред, но в контексте ваших слов скажу: машинное обучение — это не численные методы. То расхождение, ради которого вы нормируете величины, в реальных задачах ML не выстрелит, если мы всё ещё говорим про пример с линрегом.

Нам в головы на матстате вдалбливают, что перед регрессией фичи надо нормализовывать. Но на практике это нужно в двух конкретных случаях: регуляризация и интерпретируемость.
Поэтому мне показалось забавным, что автор привел именно это полузаблуждение в качестве примера того, где математика нужна в ML.
Расчехляю sklearn, который автор привел в пример

Не очень удачный пример, так как метод fit как раз нормализует фичи перед непосредственно вычислениями.


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

Что ж, был невнимателен, согласен. (Впрочем, fit центрирует данные, так что предобработка всё же выполняется.)


Не буду спорить, что в sklearn (а точнее, его LAPACK-бэкэнде) алгоритм решения работает как надо. Но повторюсь, что если решать совсем-совсем в лоб, то масштаб влияет сильнее за счёт накопления погрешностей в алгоритмах.


Пример с псевдообратной матрицей, о котором я говорил
Они там есть, только в немного суженной форме (ЧМы именно линейной алгебры, я упоминаю в «практике» к линейной алгебре + книжки). ЧМы в общем виде — это скорее всяческие сплайны, квадратуры, решение дифуров; в данном случае (машинное обучение) нужны более специфические методы (подмножество всех численных методов, которые работают именно с СЛУ).
Обычно хотят ещё и коэффициенты более-менее интерпретируемые получить. С регрессией вообще не все так просто, там и статистика, и вероятность, и много линейной алгебры.
Интепретируемые коэффициенты — это другое дело. Или, например, регуляризованная регрессия. Там мне понятно, зачем нормировать данные.
Но если вы учите простой линрег с целью получить предсказание, то вроде бы и нормировать необязательно.
Нормируют чаще всего когда работают с (объясняемой) дисперсией. PCA самый простой пример, когда на ненормированных величинах нет смысла применять.
а зачем вообще математику изучать?

Математику уже затем изучать нужно, что она ум в порядок приводит. М.В. Ломоносов.

Другой пример (не знаю, насколько удачный), когда надо понимать механизмы под капотом – применение линейной регрессии из sklearn «в лоб», когда фичи зависимы.

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

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

Ну и у Гилберта Стренга есть еще более практически ориентированные курсы:
  1. Computational Science and Engineering I
  2. Computational Science and Engineering II

А еще и книга «Computational Science and Engineering» к этим курсам.

Где бы только столько времени на это все найти…
Потому и написал в заглавии, что первая часть :)
С теорвером сложно, поэтому решил отдельно вынести. Особенно с байесовским подходом — на русском вообще почти ничего не встречал, кроме упоминаний в учебниках по классической статистике.
Курсы хорошие, но там есть и такие вещи, наподобие численных решений всяческих диф. уравнений или расчёта электрических цепей. Я боюсь, что если вникать ещё и в эти (безусловно важные) области приложения линейной алгебры, то можно и не выкарабкаться никогда )) хотя наверное стоило упомянуть.
мир не устроен по законам математики
Не слишком ли категоричное утверждение? Простейший пример для школьника: дан диаметр круглой площадки, нужно найти количество досок, чтобы сделать глухой забор по окружности. Далее можно приводить примеры из физики, которая почему-то вся на математике ;)
Все существующие физические модели являются лишь аппроксимацией реального мира. Даже само существование точной модели вселенной не доказано, и, по моему мнению, является скорее философским вопросом.
Мир не устроен по законам математики


Тут слегка перевернуто с ног на голову.
  1. Не факт что мир вообще устроен по каким-то законам, неважно физический, экономический или химию взять,
  2. Тем не менее, математика призвана мир описывать, а машинное обучение как и весь data science — про то, как наблюдения (мира) собственно в саму математику уложить.


То что модели работают, пусть и не 100%, говорит о том что математика все же что-то описывает (где-то на процент своей точности), — с точки зрения математики опять же.

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

Тут не то чтобы курояичность, тут как бы универсальней математики у человека для работы с наблюдениями каких бы то ни было инструментов с предсказательной силой нет. С конкретно же описаниями разговорный язык лучше справляется…
Прежде всего есть качественные закономерности, а есть количественные. Некоторые качественные закономерности являются абсолютно точными. Нпр., при нормальных условиях и достаточных в широком интервале концентрациях (можно на глазок отсыпать) водный раствор щелочи вызовет красно-фиолетовое открашивание раствора фенолфталеина.
Вы лишь привели пример воспроизводимого эксперимента при определенном наборе начальных данных. И на его основе говорите об абсолютной точности некой закономерности. С таким таким же успехом можно наблюдать появление личинок в тухлом мясе и говорить об истиности самозарождения.
Про личинки не знаю, не биолог. А что в моем эксперименте неточного? Где тут «лишь аппроксимация реального мира»? Или Вы предлагаете каждое точное решение называть «аппроксимация»? — ИМХО у этого термина другой смысл.
Попытаюсь выразиться наиболее точно.

Есть физическая модель, некое решение. И есть наша действительность, о которой что-либо узнать можно лишь посредством эксперимента. Решение точно тогда и только тогда, когда для любого входного значения, результат решения равен наблюдению эксперимента. Учитывая размеры пространства и неточность измерительных приборов доказать точность решения невозможно.
Учитывая размеры пространства и неточность измерительных приборов доказать точность решения невозможно.
Для количественных задач. А в качественной — среда щелочная или нет, т.е. без цвета или красный — высокой точности не нужно. Аналогично: какой свет на светофоре: зеленый или красный. На практике и в количественных задачах задаются разумной точностью. Так земельный участок, ограниченный окружностью диаметром 20 м, будет ограничен «не точной окружностью», нпр., где-то на см меньше, а где-то больше. И это обычно устраивает.
Такое впечатление, что математику начали вспоминать только с ростом популярности машинного обучения. По крайней мере области, с ним не связанные, изучать ни кто не собирается.
Я по образованию политолог, сейчас отвечаю за архитектору нескольких приложений в крупном Швейцарском банке. Математики выше школьного курса тут не надо вообще. Говорю это как человек, привязывающий себе к стулу с книгами Странга почти каждый день после работы. Clean Code — да, тысячу раз да. А вот все, что описано в статье, стало актуально только при изучении 3D движков и вот теперь ML. И да, устройство яблони интересует меня лишь в той мере, в какой его надо знать для производства яблок. Я все-таки политолог инженер, а не математик.
Это примерно как плотнику гордиться тем, что он построил дом без единого гвоздя.
Да, опытный программист может много чего написать без представления о математики.
Но по моим наблюдениям, основная проблема в IT сейчас — низкая надежность софта. Основная идея математики — доказательство. Она так же предоставляет мощные инструменты для этого — формальную логику, теорию множеств, теорию типов. Если бы программисты взяли на вооружение эту идею (что правильность программы хорошо бы доказать) и инструменты (хотя бы перешли на языки с хорошей типизацией), проблема надежности стала бы не такой острой.
Это не про гордость, это наблюдение. Изучение продвинутой математики никак не коррелирует с качеством производимого человеком кода и тестов в бизнес приложениях. Формальная логика, теория множеств, теория типов — в объёме нужном для программиста — элементарщина. Статья, ИМХО, про гораздо более продвинутые разделы.

П.С. На тему гордости за дом без гвоздей — Building Without Nails The Genius of Japanese Carpentry
Может и элементарщина, но и ее почти ни кто не знает. Очень часто сталкиваюсь с программистами, не понимающими что из себя представляет сумма и произведение множеств, и основанные на этом алгебраические типы данных.
то чувство, когда читая статью про около математику, видишь знакомые вещи) значит усилия не проходят даром. Есть ли мнения о книге Г. Г. Харди — курс чистой математики?
Есть ли мнения о книге Г. Г. Харди — курс чистой математики?
Да, это копролит, и читать его вредно.
Пример хорошего современного учебника — Львовский (НМУ).
Пожалуй самая увесистая и охватывающая книга по линейной алгебре
Handbook of Linear Algebra
www.amazon.com/Handbook-Algebra-Discrete-Mathematics-Applications/dp/1138199893

А по матану нравится
Modern Engineering Mathematics
www.amazon.com/Modern-Engineering-Mathematics-Always-learning/dp/1292080736
Advanced Modern Engineering Mathematics
www.amazon.com/Advanced-Modern-Engineering-Mathematics-James/dp/129217434X
Алгебра — Винберг, Ленг (в 3-ем издании)
Линал — Кострикин-Манин (и только он!)
Calculus — Зорич 1-ый том
Топология — Виро-Нецветаев-Харламов-Иванов
Analysis — Львовский, Шварц

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

Это был комментарий к «Nightmare»
Кострикина-Манина без базы из курса «Общей алгебры» тяжеловато будет читать. Весь Ленг здесь действительно не нужен, но его нельзя не упомянуть, так как это лучший учебник алгебры.
И добавлю, что в Зориче нету теории меры и интеграла Лебега, которая необходима для ТВ.
Про то, что мехмат слабее матфака — слышал такое мнение, но не понимаю, чем оно подкрепляется. Если сравнить программы мехмата и матфака, то никакой принципиальной разницы я не вижу. Единственное что находил (что есть на матфаке и не представлено на мехмате в явном виде) — отсутствие теории категорий в алгебре, некоторые части перечислительной комбинаторики. Анализ везде одинаковый, алгебра тоже, дифгеом и там и там без теории категорий.

С НМУ сравнивать не буду, очевидно там математика гораздо сильнее (чем на любом математическом факультете любого российского вуза, уровень слушателей позволяет).

Про теорвер думаю попозже расписать, в части 2. С теорией меры всё сложно: с одной стороны кажется, что без неё нормально не изложить теорию вероятностей (те же условные мат. ожидания), с другой — слишком это абстрактные вещи, чтобы в них лезть в такой прикладной области.
Раньше сильные мехматяне ходили в НМУ, в 2007-ом он «легализовался» в виде матфака.
Со временем там произошли неприятные метаморфозы (I, II, Обсуждение), и в итоге его уровень заметно упал. Тем не менее, олимпиадники и матшкольники предпочитают матфак. Если даже посмотреть на студентов НМУ, параллельно учащихся в вышке, и сравнить их с НМУшниками-мехматянами, то у первых уровень заметно выше. Вот что говорит о матфаке и мехмате один из преподавателей пресловутой кафедры матана МГУ.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации