Этот курс посвящен вопросу: как выполнять матричные вычисления с приемлемой скоростью и приемлемой точностью?
Этот курс преподавался в рамках программы магистра наук в области аналитики Университета Сан-Франциско летом 2017 года (для аспирантов, готовящихся стать специалистами по анализу данных). Курс преподается на Python с помощью Jupyter Notebooks, для большинства уроков используются такие библиотеки, как Scikit-Learn и Numpy, а также Numba (библиотека, которая компилирует Python в C для более высокой производительности) и PyTorch (альтернатива Numpy для графического процессора). за несколько уроков.
К блокнотам прилагается плейлист с видеолекциями, доступными на YouTube. Если лекция вас сбивает с толку или она идет слишком быстро, посмотрите начало следующего видео, где я рассматриваю концепции предыдущей лекции, часто объясняя вещи с новой точки зрения или с разными иллюстрациями, и отвечаю на вопросы.
Вы можете задавать вопросы или делиться своими мыслями и ресурсами, используя категорию «Вычислительная линейная алгебра» на наших дискуссионных форумах fast.ai.
Следующий список ссылается на блокноты в этом репозитории, созданные с помощью службы nbviewer. Затронутые темы:
Мы начнем с общего обзора некоторых фундаментальных концепций числовой линейной алгебры.
Мы будем использовать набор данных групп новостей, чтобы попытаться определить темы различных сообщений. Мы используем матрицу терминов-документов, которая представляет частоту употребления словарного запаса в документах. Мы учитываем это с помощью NMF, а затем с помощью СВД.
Еще одно применение СВД — идентификация людей и удаление фона с видео наблюдения. Мы рассмотрим надежный PCA, который использует рандомизированное SVD. А рандомизированный SVD использует факторизацию LU.
Сжатое зондирование имеет решающее значение для проведения компьютерной томографии с более низким уровнем излучения — изображение можно реконструировать с меньшим количеством данных. Здесь мы изучим эту технику и применим ее к изображениям КТ.
Мы применили SVD для тематического моделирования, удаления фона и линейной регрессии. SVD тесно связан с разложением собственных значений, поэтому теперь мы научимся вычислять собственные значения для большой матрицы. Мы будем использовать данные DBpedia, большой набор данных ссылок Википедии, поскольку здесь главный собственный вектор определяет относительную важность различных страниц Википедии (это основная идея алгоритма PageRank Google). Мы рассмотрим 3 различных метода вычисления собственных векторов, возрастающей сложности (и возрастающей полезности!).
Этот курс построен по нисходящему методу обучения, который отличается от того, как работает большинство курсов по математике. Обычно при восходящем подходе вы сначала изучаете все отдельные компоненты, которые будете использовать, а затем постепенно выстраиваете их в более сложные структуры. Проблема в том, что учащиеся часто теряют мотивацию, не имеют представления о «общей картине» и не знают, что им понадобится.
У профессора Гарвардского университета Дэвида Перкинса есть книга «Как сделать обучение целостным», в которой он использует бейсбол в качестве аналогии. Мы не требуем, чтобы дети запоминали все правила бейсбола и понимали все технические детали, прежде чем позволить им играть в игру. Скорее, они начинают играть, имея только общее представление, а затем постепенно изучают больше правил/деталей с течением времени.
Если вы прошли курс глубокого обучения fast.ai, мы использовали именно его. Вы можете узнать больше о моей философии преподавания в этой публикации в блоге или в докладе, который я провел на встрече по машинному обучению в Сан-Франциско.
Все это говорит о том, что не волнуйтесь, если вы сначала не все поймете! Вы не должны этого делать. Мы начнем использовать некоторые «черные ящики» или матричное разложение, которые еще не объяснены, а затем углубимся в детали более низкого уровня.
Для начала сосредоточьтесь на том, что вещи ДЕЛАЮТ, а не на том, чем они ЕСТЬ.