Шаг 97.
Задачи ComputerScience на Python.
Простейшие нейронные сети. Повышение скорости работы нейронной сети

    На этом шаге мы рассмотрим способы повышения работы нейронных сетей.

    Нейронные сети требуют множества операций с векторами и матрицами. По сути, это означает, что нужно взять список чисел и выполнить операцию для всех из них одновременно. Поскольку машинное обучение продолжает проникать в наше общество, библиотеки для оптимизированной, эффективной векторной и матричной математики приобретают все большее значение. Во многих библиотеках используются преимущества графических процессоров, поскольку они оптимизированы для этой роли. (На векторах и матрицах базируется компьютерная графика.) Более старая спецификация библиотеки, о которой вы, возможно, слышали, называется BLAS (Basic Linear Algebra Subprograms - подпрограммы базовой линейной алгебры). Реализация BLAS лежит в основе популярной числовой библиотеки Python NumPy.

    Помимо графических процессоров, можно использовать расширения центрального процессора, позволяющие ускорить обработку векторов и матриц. В состав NumPy входят функции, которые задействуют SIMD-инструкции (single instruction, multiple data - одна инструкция, несколько данных). SIMD-инструкции - это специальные инструкции для микропроцессора, которые позволяют обрабатывать несколько фрагментов данных одновременно. Их иногда называют также векторными инструкциями.

    Разные микропроцессоры содержат разные SIMD-инструкции. Например, SIMD-расширение для G4 (процессор архитектуры PowerPC, который встречается в ранних версиях Маc) называлось AltiVec. Микропроцессоры ARM-архитектуры, а также те, что устанавливаются в iPhone, имеют расширение NEON. Современные микропроцессоры Intel включают в себя SIMD-расширения, известные как ММХ, SSE, SSE2 и SSE3. К счастью, вам не нужно знать их все. Библиотека, подобная NumPy, автоматически выберет правильные инструкции для эффективного вычисления на той архитектуре, на которой работает программа.

    Поэтому неудивительно, что реальные библиотеки нейронных сетей, в отличие от игрушечной библиотеки, созданной в предыдущих шагах, используют в качестве базовой структуры данных массивы NumPy вместо списков стандартных библиотек Python. Но этим они не ограничиваются. Популярные библиотеки нейронных сетей Python, такие как TensorFlow и PyTorch, не только задействуют SIMD-инструкции, но и широко применяют вычисления на GPU. Поскольку графические процессоры специально оптимизированы для быстрых векторных вычислений, это на порядок ускоряет работу нейронных сетей по сравнению с работой только на центральном процессоре.

    Подчеркнем еще раз: вы вряд ли станете строить нейронную сеть для практической работы, используя только стандартную библиотеку Python, как мы делали на предыдущих шагах. Вместо этого следует задействовать хорошо оптимизированную библиотеку с поддержкой SIMD и GPU, такую как TensorFlow. Единственными исключениями будет библиотека нейронных сетей, предназначенная для обучения, или библиотека, которая должна работать на встроенном устройстве, не поддерживающем SIMD-инструкции и не имеющем GPU.

    На следующем шаге мы рассмотрим проблемы и расширения нейронных сетей.




Предыдущий шаг Содержание Следующий шаг