Пост с моей версией ответа на холиварные вопросы "зачем нужна высшая математика", а также его более узкие версии "нужна ли математика программисту" и "нужна ли математика MLщику".
Короткая версия:
Иметь возможность использовать высшую математику на работе - скорее привилегия, чем обязанность.
Длинная версия:
На тех работах, где я была обычным разработчиком ПО (включая и около-ML-ное ПО для разметки данных или тестирования работы алгоритмов), мое математическое образование не давало прямых преимуществ. В основном там требовалось знание основ ООП и базовых принципов того, как писать адекватный код, а также идеологий конкретных языков и фреймворков. В меньшей степени затрагивались базовые основы дискретной математики и теории алгоритмов - и то не на том уровне, как их знает математик, а где-то на уровне книги "Cracking The Coding Interview". Например, иногда нужно было позаниматься побитовыми операциями, перевести что-то из одной системы счисления в другую; один раз потребовалось придумать подходящий алгоритм кеширования для куска расчетов, у которого была плохая асимптотическая сложность, чтобы приложение работало с адекватной скоростью. Время от времени было нужно посчитать что-то по формуле, имеющей интересный математический или физический смысл, но понимать этот смысл для выполнения работы было не обязательно.
Не обязательно было понимать университетскую математику и на моей первой работе, связанной с обучением ML-моделей. Почти вся ML-ная часть сводилась к тому, чтобы обучать CRF-ки для задачи извлечения сущностей, используя ручной feature engineering. Для каждой сущности нужно было обучить отдельный экземпляр CRF со своим набором фичей, и это было, на самом-то деле, довольно монотонным занятием. По факту, можно было не знать ни линейной алгебры, ни теории вероятности, стоящих за моделью, ни что из себя представляет модель вообще, а просто лупить fit-predict на наборах векторов. А примерные типы фичей, которые нужно перебрать и параметры оптимизации узнать у коллег, далее следуя методу тыка. Нужно было, конечно, понимать формулу, по которой рассчитывалась функция ошибки и знать концепцию вектора, но для этого достаточно и школьной математики.
На той стажировке, где нужно было спроектировать и обучить оригинальную архитектуру, математики использовалось уже больше, т.к., чтобы выполнить такую задачу качественно, уже существенны знания основ линейной алгебры (в т.ч. для подготовки и преобразования данных) и понимание того, как работает backpropagation. Иными словами, материал первого курса мехмата по линалу и матану на уровне формулировок без доказательств плюс интуитивное понимание основ оптимизации.
На моей текущей работе, где основная часть - это разбор сложных статей и свои собственные исследования, наконец, используется более-менее существенная часть математики первых трех курсов, включая первый год, проведенный на кафедре высшей геометрии и топологии. (Для справедливости отмечу, что чтобы полностью корректно описать теорию, стоящую за математическим аппаратом топологического анализа данных, который я использую, требуется красивая и сложная теория категорий, что изучается на старших курсах; но чтобы сделать расчет на практике, понимание категорной части не является обязательным).
Подводя итог, по вышесказанному и по тому, что можно услышать и от многих других людей, на многих программистских и даже на какой-то части ML-ных работ (не берусь судить о пропорции) необходимый минимум знаний по математике довольно мал. С другой стороны, более глубокое знание математики открывает двери к бОльшему ассортименту специализаций, в том числе и очень интересных, связанных с исследованиями, доступ к которым без математической базы закрыт. Так что я считаю попадание на работу, где существенно применяется интересный и глубокий мат.аппарат, удачей.
Да и в более общем случае, работ, которые требуют нетривиальных навыков (уже не обязательно математических), гибкости мышления и подразумевает разнообразие задач, меньше, чем тех, где 95% времени занимает copy-paste и fit-predict, но зато они намного интереснее.
Короткая версия:
Иметь возможность использовать высшую математику на работе - скорее привилегия, чем обязанность.
Длинная версия:
На тех работах, где я была обычным разработчиком ПО (включая и около-ML-ное ПО для разметки данных или тестирования работы алгоритмов), мое математическое образование не давало прямых преимуществ. В основном там требовалось знание основ ООП и базовых принципов того, как писать адекватный код, а также идеологий конкретных языков и фреймворков. В меньшей степени затрагивались базовые основы дискретной математики и теории алгоритмов - и то не на том уровне, как их знает математик, а где-то на уровне книги "Cracking The Coding Interview". Например, иногда нужно было позаниматься побитовыми операциями, перевести что-то из одной системы счисления в другую; один раз потребовалось придумать подходящий алгоритм кеширования для куска расчетов, у которого была плохая асимптотическая сложность, чтобы приложение работало с адекватной скоростью. Время от времени было нужно посчитать что-то по формуле, имеющей интересный математический или физический смысл, но понимать этот смысл для выполнения работы было не обязательно.
Не обязательно было понимать университетскую математику и на моей первой работе, связанной с обучением ML-моделей. Почти вся ML-ная часть сводилась к тому, чтобы обучать CRF-ки для задачи извлечения сущностей, используя ручной feature engineering. Для каждой сущности нужно было обучить отдельный экземпляр CRF со своим набором фичей, и это было, на самом-то деле, довольно монотонным занятием. По факту, можно было не знать ни линейной алгебры, ни теории вероятности, стоящих за моделью, ни что из себя представляет модель вообще, а просто лупить fit-predict на наборах векторов. А примерные типы фичей, которые нужно перебрать и параметры оптимизации узнать у коллег, далее следуя методу тыка. Нужно было, конечно, понимать формулу, по которой рассчитывалась функция ошибки и знать концепцию вектора, но для этого достаточно и школьной математики.
На той стажировке, где нужно было спроектировать и обучить оригинальную архитектуру, математики использовалось уже больше, т.к., чтобы выполнить такую задачу качественно, уже существенны знания основ линейной алгебры (в т.ч. для подготовки и преобразования данных) и понимание того, как работает backpropagation. Иными словами, материал первого курса мехмата по линалу и матану на уровне формулировок без доказательств плюс интуитивное понимание основ оптимизации.
На моей текущей работе, где основная часть - это разбор сложных статей и свои собственные исследования, наконец, используется более-менее существенная часть математики первых трех курсов, включая первый год, проведенный на кафедре высшей геометрии и топологии. (Для справедливости отмечу, что чтобы полностью корректно описать теорию, стоящую за математическим аппаратом топологического анализа данных, который я использую, требуется красивая и сложная теория категорий, что изучается на старших курсах; но чтобы сделать расчет на практике, понимание категорной части не является обязательным).
Подводя итог, по вышесказанному и по тому, что можно услышать и от многих других людей, на многих программистских и даже на какой-то части ML-ных работ (не берусь судить о пропорции) необходимый минимум знаний по математике довольно мал. С другой стороны, более глубокое знание математики открывает двери к бОльшему ассортименту специализаций, в том числе и очень интересных, связанных с исследованиями, доступ к которым без математической базы закрыт. Так что я считаю попадание на работу, где существенно применяется интересный и глубокий мат.аппарат, удачей.
Да и в более общем случае, работ, которые требуют нетривиальных навыков (уже не обязательно математических), гибкости мышления и подразумевает разнообразие задач, меньше, чем тех, где 95% времени занимает copy-paste и fit-predict, но зато они намного интереснее.