@Flipzy
Веб-разработчик

Как и где учить математику, если вкатываешься в нейросети?

начал изучать построение нейросетей на Python и столкнулся с тем, что базы высшей математики, которую мне дали в учебном заведении не хватает. Хочу узнать, кто как учился и постигал трудности высшей математики. Может кто даст советы, поделится книгами или курсами.
  • Вопрос задан
  • 749 просмотров
Пригласить эксперта
Ответы на вопрос 4
Maksim_64
@Maksim_64
Data Analyst
Ну смотри если речь о нейронных сетях именно то как таковой сложной математики там нет. Что такое нейронная сеть это последовательность слоев. Каждый слой представляет из себя нелинейную геометрическую трансформацию в многомерном пространстве. Для лучшего понимания и изучения можешь взять двумерные данные. Взять четыре точки квадрат с координатами. У тебя получится матрица A размерность (4, 2). Так что происхдит в скрытом слое.

relu(dot(A, W) + b) - все как бы это не звучало но это ровно то что происходит внутри скрытого слоя. Мы инициализируем случайную матрицу весов размерностью которая подходит для математического умножения матриц. При математическом умножении матриц порядок важен и правило следующее количество колонок в первой матрице должно совпадать с количество рядов во второй матрице. Если матрица A у нас (4,2), то матрица весов у нас должна быть (2, любое значение) пусть будет 16 например. И результатом будет матрица (4, 16)
Например
A = np.array([[0,0],
              [0,2],
              [2,2],
              [2,0]])
W = np.random.uniform(-1,1,size=(2,16)
result = np.dot(A,W)
Здесь мы осуществили геометрическую трансформацию, мы получили представление данных в 16 мерном пространстве. Далее мы просто прибавляем также случайно инициализированный вектор b в подходящей размерности и все. Все эти трансформации линейны. Не линейность достигается функцией активации например relu то есть весь наш код будет
import numpy as np

A = np.array([[0,0],
              [0,2],
              [2,2],
              [2,0]])
W = np.random.uniform(-1,1,size=(2,16))
b = np.zeros(16)
result = np.dot(A,W) + b
np.maximum(result,0)
Все теперь у нас не линейная геометрическая трансформация. Затем посредством обратного распространения ошибки будет находится полезные геометрические трансформации, и будет происходит настройка значений (параметров модели) в наших матрицах весов (которые минимизируют loss функцию), то есть обучение модели. Это то что происходит в одном слое, последний слой там не много по другому, в зависимости от задачи и размерности которую мы хотим получить.
Что выучить. Линейная алгебра Khan Academy. Обратное распространение ошибки осуществляется за счет подсчета градиента. Лучше начать с Single Variable Calculus курсы Calculus AP и ВС там же Khan Academy, и затем Multivariable Calculus Khan Academy. Все для нейронных сетей этого хватит, статистика как таковая для нейронных сетей на прямую не требуется, скорее для общего понимания и косвенно там выборку осуществить. Эти курсы шикарные и их достаточно для нейронных сетей. Для других алгоритмов их будет не достаточно. Ну и надо иметь ввиду, что у нас не обязательно математическое умножение тенсоров второго порядка (матриц), у нас могут быть конволюции. Пример что я привел это самый распространенный случай. Так что основы линейной алгебры, дифференцирование функции одной переменной затем многих (именно они и нужны), не пытайся сразу в дифференцирование функции многих переменных иначе не будешь понимать что к чему.
Ответ написан
Комментировать
@Korv1n
64f7917c5d51b764033547.png

Есть такой список из Obsidian(программа для заметок), если совсем плохо с школьной, то можно пройти на Яндекс Практикум тренажёр математики для цифровых профессий. На ютубе есть плейлисты "Сущность линейной алгебры" и "Суть Матанализа" от 3Blue1Brown, хорошие лекции для того, что бы войти в суть дела. Если совсем сложно, но хорошо с английским, то можно зайти на Khan Academy в разделы "Linear algebra" и "Calculus". На русском есть хорошие курсы на Stepik - "Линейная алгебра", "Введение в математический анализ" и "Математическая статистика" от CS центр. Так же для глубокого и машинного обучения нужна Мат. статистика. Хорошие курсы - Основы статистики(Часть 1, 2, 3) на Stepik, но я считаю, что курс от CS центра приоритетнее, чем эти три курса.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
начал изучать построение нейросетей на Python и столкнулся с тем, что базы высшей математики, которую мне дали в учебном заведении не хватает.

Все зависит от твоих собственных амбиций. Современные фреймворки машинного обучения не требуют
от тебя знания тройных интегралов и систем дифуров. В простейшем случай ты - читаешь документацию.
Настрашиваешь параметры (гипер-параметры) и наблюдаешь как идет процесс обучения). Где и в какой
части этот фреймворк требует интегралов - непонятно. Вроде нигда. С амбициями дата-инженера
тебе будет просто достаточно знать внешний API этих фреймворков.

Если же ты идешь в дата-сайентисты и от тебя заказчик требует обоснования внедрения данного метода
например - то здесь тебе надо просто чуть глубже знать некоторые математические свойства формул
применяемых в ML. Когда например градиентный спуск лучше а когда лучше отжиг.
Ответ написан
Комментировать
@rPman
Построение нейронных сетей из готовых инструментов (типа pytorch или для конкретных сетей типа transformer для llm), как это ни странно, не требует никаких знаний математики.

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

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы