Эндрю Нг о TensorFlow: «Вам больше не нужно реализовывать backprop вручную»

DeepLearning.AI 44,4 тыс. 16 мин 4 мин 25.08.2017
Главное

В новом обучающем видео от DeepLearning.AI основатель платформы Эндрю Нг знакомит слушателей с основами TensorFlow — одного из ведущих фреймворков для глубокого обучения. На примере минимизации простой квадратичной функции автор демонстрирует, как структура программы позволяет автоматизировать сложные математические вычисления и оптимизировать параметры нейронных сетей.

🧠 Основы минимизации функций в TensorFlow 0:00

Эндрю Нг начинает демонстрацию с постановки классической задачи оптимизации. Вместо того чтобы сразу переходить к сложным нейронным сетям, он предлагает рассмотреть простую функцию стоимости $J(w) = w^2 - 10w + 25$ . Лектор поясняет, что эта функция эквивалентна выражению $(w - 5)^2$, а значит, её минимальное значение достигается при $w = 5$ .

Основная идея использования TensorFlow заключается в том, что разработчику достаточно описать саму функцию, а фреймворк самостоятельно найдет способ её минимизации. По словам Эндрю Нг, такой подход масштабируется на любые сложные нейросети, где функция стоимости зависит от сотен тысяч или миллионов параметров (весов $W$ и смещений $b$) .

Для начала работы в среде Python (используется Jupyter Notebook) необходимо импортировать ключевые библиотеки:

🛠 Структура программы и определение параметров 1:44

Первым шагом в TensorFlow является определение параметров, которые алгоритм будет изменять в процессе обучения. Для этого используется конструкция tf.Variable. В примере Нг определяет переменную w как число с плавающей точкой (tf.float32) и инициализирует её значением 0 .

Далее описывается сама функция стоимости. Лектор показывает два способа записи:

  1. Функциональный стиль: Использование встроенных функций tf.add, tf.multiply и возведения в степень . Это выглядит как громоздкая цепочка вложенных операций.
  2. Перегрузка операторов: Эндрю Нг подчеркивает, что TensorFlow поддерживает стандартные математические символы (+, -, *, **), что делает код более читаемым и компактным .

Ключевым элементом программы является выбор оптимизатора. В данном примере используется tf.train.GradientDescentOptimizer с заданной скоростью обучения (learning rate) 0.01 . Инструкция optimizer.minimize(cost) сообщает фреймворку, какую именно величину нужно уменьшать .

🚀 Запуск вычислений и сессии 3:14

Особенностью старых версий TensorFlow (которые рассматриваются в данном контексте обучения) является разделение этапа описания графа и этапа его выполнения.

Эндрю Нг демонстрирует процесс обучения в динамике:

📊 Работа с данными: Placeholder и Feed Dict 6:23

В реальных задачах машинного обучения данные (обучающая выборка) постоянно меняются, в отличие от фиксированных коэффициентов в уравнении. Для решения этой проблемы в TensorFlow используется механизм плейсхолдеров (tf.placeholder) .

Эндрю Нг модифицирует пример, превращая коэффициенты квадратичной функции в переменные данные:

  1. Создается плейсхолдер x для массива из трех чисел .
  2. Функция стоимости теперь зависит от x: $x[0] \cdot w^2 + x[1] \cdot w + x[2]$ .
  3. При запуске session.run() данные передаются через аргумент feed_dict .

Этот механизм крайне важен для реализации mini-batch gradient descent (мини-пакетного градиентного спуска), где на каждой итерации в граф «скармливаются» новые порции данных . Эндрю Нг демонстрирует гибкость подхода: просто сменив входные данные в feed_dict (например, на коэффициенты 1, -20, 100), он заставляет алгоритм мгновенно перенастроиться на поиск минимума новой функции (в данном случае $w=10$) .

🏗 Граф вычислений и автоматическое дифференцирование 11:15

Основная мощь TensorFlow, по мнению Эндрю Нг, заключается в автоматическом построении графа вычислений . Когда разработчик описывает формулу, фреймворк создает структуру узлов, где каждый узел — это либо переменная, либо математическая операция (сложение, умножение, возведение в квадрат) .

Главные преимущества такого подхода:

В завершение лекции Эндрю Нг отмечает, что современная документация TensorFlow может использовать разные нотации для графов — где-то узлы обозначают значения, а где-то — сами операции, но суть вычислений остается прежней .

💬 Цитаты

«TensorFlow уже имеет встроенные необходимые обратные функции. Вот почему, используя встроенные функции для вычисления прямой функции, он может автоматически выполнять и обратные функции.»

«Всё, что вам нужно сделать, это указать, как рассчитать функцию стоимости, а затем он берет производные и может применить оптимизатор градиента всего одной или двумя строками кода.»

👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Placeholder
Тип переменной в TensorFlow, значение которой задается позже, во время выполнения графа (обычно для обучающих данных).
Backpropagation
Метод обратного распространения ошибки, используемый для вычисления градиентов в нейронных сетях.
Computation Graph
Представление математических вычислений в виде направленного графа, где узлы — это операции или данные.
Feed Dict
Словарь, который используется для передачи конкретных значений в плейсхолдеры при запуске сессии.
📊 Цифры
🗓 Хронология
  1. C2W3 Курс 2, неделя 3 обучения глубокому обучению, где вводится TensorFlow.
⚖️ Другая сторона
Искусственный интеллект TensorFlow Эндрю Нг градиентный спуск граф вычислений DeepLearning.AI