Питон: ваш путь к захватывающему миру нейронных сетей

В предыдущей статье мы уже рассмотрели 4 языка программирования, на которых, в основном, пишутся приложения для нейронных сетей и сами сети.
Теперь сравним их между собой.
По простоте синтаксиса сравнивать не будем. В этом Питон — вне конкуренции. В следующей статье приведем конкретный наглядный пример.
Поэтому принимаем во внимание другие критерии.
Питон (Python), Javascript и MATLAB являются интерпретируемыми языками, а C++ и Java — компилируемыми.
Что значит интерпретируемый язык
Команды на интерпретируемых языках пишутся в обычном текстовом файле, только со своим расширением. Специальная программа интерпретатор читает строчку за строчкой. Прочитанная строка за кадром превращается сначала в последовательность команд, а затем сразу же выполняется.
Система счисления
Программы работают с ячейками памяти, байтами. В одном байте могут храниться целые числа без знака от 0 до 255 или от -128 до 127, если со знаком. Всего 256 значений: 2 в степени 8.
Программы работают с переменными, которые хранят свои значения в байтах. Чтобы машинный код знал, сколько байтов памяти выделить под ту или иную переменную, нужно объявить ее тип. При этом мы в явном виде указываем ее длину.
Так, если в нашей переменной должно храниться не больше 65536 (2 в степени 16) значений, нам хватит двух байтов. Если не больше 2 в степени 32, то 4 байта. И т. д. Для хранения вещественных чисел памяти требуется больше.
В случае, если нам нужно оперировать со структурами данных типа список или массив, под них память нужно выделять последовательно, одним куском.
Компиляция
Компилятор, превращая строки кода в машинные команды, выделяет под переменные ячейки памяти, соответствующие их типу. При этом он проверяет, чтобы случаи применения какой-то переменной во всей программе не противоречили друг другу. Если это не так, то еще при компиляции возникнет ошибка несоответствия типов. Например, функция или подпрограмма предполагает работу с целыми длиной два байта, а ей на вход подается значение 100000, которое в двух байтах не помещается. Возникнет ошибка. Программа не сможет пройти компиляцию.
Прошедший компиляцию код оптимизирован по выделению памяти и поэтому выполняется быстрее. Ошибка при его выполнении может возникнуть только из-за слишком больших значений во входных данных.
Компилируемый код vs интерпретируемый
В случае интерпретируемых языков программа налету создает команды для процессора. При этом тип переменных (кроме массивов и списков) объявлять не обязательно. Память выделяется по умолчанию. Ошибка может возникнуть уже при выполнении, когда в данных придет значение, которому не хватает выделенной памяти.
Таким образом, в компилируемых языках время тратится на компиляцию. А само выполнение проходит быстро. В интерпретируемых языках код построчно сначала переводится в машинные команды, а затем выполняется. Понятно, что в последнем случае времени уйдет больше.
Предпочитаем интерпретируемые языки
На создание непротиворечивого кода со всеми правильными объявлениями типов в компилируемых языках может уходить много времени. Время написания кода на интерпретируемом языке значительно меньшее. Следить нужно только за правильными входными данными. А ошибки во время выполнения сразу же явно указывают на причину их возникновения. Например, функция на входе ожидает единственное значение, а получает целый массив. Или наоборот. Такие огрехи могут быть исправлены очень быстро.
Код программ на интерпретируемых языках не загроможден всеми объявлениями типов и намного легче читается. Логика легко просматривается и изменяется, если необходимо. Трудоемкость сопровождения и модификации таких программ небольшая. Это может быть очень важно при больших объемах кода или при сложной логике, если время выполнения программы не критично.
Отказываемся от компилируемых языков
Таким образом, для работы с нейронными сетями сразу отказывамся от языка С++. И от Java. Но оставляем JavaScript. Изначально это была интерпретируемая версия Java. Сейчас он развивается самостоятельно.
Остается 3 кандидата с интерпретируемым кодом: Питон, JavaScript и MATLAB.
Основным предварительно выбираем Питон, т. к. общепринято, что его код самый простой, легкий для понимания и наглядный. По умолчанию такой код более медленный. Но он не требует предварительной компиляции.
Чем еще отличается Питон от собратьев?
Важные аспекты интерпретации Python
- Встроенный интерпретатор Python называется CPython, который написан на языке C (а значит, он быстрый) и является наиболее широко используемой реализацией Python.
- Преимущества интерпретации: помимо скорости и легкости отладки и разработки, Python обладает динамической типизацией, что позволяет изменять типы переменных во время выполнения программы. В большинстве ситуаций разница в производительности не является решающим фактором. Выбор между компилируемыми языками и Python зависит от других факторов, таких как сложность задачи, доступность библиотек и инструментов, опыт разработчика и т. д.
- Недостаток интерпретации (более медленная скорость) частично компенсируется использованием оптимизированных библиотек (NumPy и TensorFlow), написанных на языках программирования с компилируемым кодом.
Особенности JavaScript
JavaScript — язык интернета. На нем можно сделать почти всё что угодно, но в основном его используют в браузере. На JavaScript можно создавать и сложные программы, но для этого нужны дополнительные инструменты.
К его особенностям относятся:
— Использование в вебе
Если нужно добавить на сайт анимацию или изменить цвет оформления — понадобится JavaScript. Изначально он задумывался для интернета, чтобы быстрее и проще работать с веб-страницами.
JavaScript — пока единственный язык для браузеров. Работает на всех платформах и операционных системах: Windows, Android, Linux, macOS и других.
— Связь со средой запуска
На JavaScript можно написать любые языковые конструкции. Но он всегда работает со своим окружением. Например, при работе с сайтами, он взаимодействует с HTML и CSS.
— Количество библиотек и инструментов для разработки нейронок невелико
На Java и JavaScript выполняется около 5–10% разработок в сфере искусственного интеллекта.
Понятно, что Питон выигрывает.
Python vs MATLAB
Хотя на MATLAB пишется около 5–10% разработок для нейронных сетей, я бы не стал выделять его в полноценного конкурента. Тем более, что большая часть его функций есть в Питоне. Например, библиотека визуализации matplotlib.
К тому же, сфера применения Питона намного обширнее, чем у MATLAB, и он позволяет делать почти все, что умеет MATLAB. Для большинства разработчиков широкопрофильный Python предпочтительнее более специализированного MATLAB.
Выбор № 1

Чтобы не оставалось никаких сомнений в выборе, глянем на популярность языков программирования по самым известным индексам и рейтингам:
- Python
- JavaScript
- Java
- C/C++
- C#
- PHP
- Swift
- TypeScript
- Ruby
- Go
Хотя сама последовательность может слегка меняться в зависимости от выбранных критериев ранжирования, уверенное первое место занимает Питон. На нем выполняется около 70–80% разработок в области нейронных сетей.
Де-факто Python уже давно №1 в сфере искусственного интеллекта. Выигрывает у всех своей простотой, богатством инструментов, большим количеством наработок и активным сообществом разработчиков.
По поводу объема информации по Python есть анекдот.
— Why did the Python developer bring a ladder to work?
— He wanted to reach the Python’s documentation on the top shelf.
— Почему разработчик на Python принес лестницу на работу?
— Он хотел достать документацию Python, нужная ему была на самом верху этих полок.
Итак, для увлекательного путешествия в мир искусственного интеллекта выбираем Python. Или Питон по-русски. А в произношении можно встретить и питон, и пАйтон, на английский манер. Последнее слышишь даже чаще. Чем лучше вы знаете английский, тем легче вам будет осваивать и Питон, и сферу нейронных сетей.