Введение в TensorFlow для разработчиков. Часть 5/?. Одномерная линейная регрессия.

Линейная регрессия — это первый алгоритм машинного обучения, который мы обсудим. Будем опираться на знания из предыдущих статей. Я покажу вам, как построить и обучить первую модель в tensorflow. Итак, начнем.

Начнем с очень простого примера одномерной линейной регрессии. В строках 1–4 мы подготавливаем некоторые данные, мы вернемся к ним позже. Построение нашей модели начинается в строке 8. Сначала мы определяем 2 заполнителя x, y. Заполнитель — это входные узлы графа вычислений, в которые мы собираемся передавать данные во время выполнения (момент, когда мы запускаем наш граф). С их помощью мы будем передавать результат наших наблюдений (опять же, об этом позже). Затем мы определяем две переменные a, b. В тензорном потоке переменные — это единственные примитивы, которые могут быть обновлены самим тензорным потоком. Вы можете видеть, что переменные имеют размер один [1]. Это потому, что у нас есть одномерная проблема. В строке 14, используя конструкции тензорного потока, мы написали простую одномерную линейную функцию. Мы называем это нашей гипотезой, она представляет собой предположение о том, что существует линейная зависимость между нашим входом (x) и выходом (y). Итак, учитывая x, мы можем вычислить y, используя следующую формулу

Теперь все, что нам нужно сделать, это найти a и b. Делаем это путем минимизации функции потерь (ссылка на статью). Просто для быстрого напоминания функция потери используется для представления ошибки нашего прогноза. Самый простой и довольно часто используемый метод называется среднеквадратическая ошибка (MSE).

И это то, что мы определили в строке 16. Вышеприведенное выражение представляет собой среднее значение ошибок. Где единственная ошибка — это разница между тем, что мы предсказали (Y без шляпы :)) и тем, что мы знаем как правду (Y со шляпой). Остальная часть кода, если вы будете следовать этой серии, не требует пояснений. Итак, когда мы запускаем его, мы получаем:

Вы можете спросить, почему это цифры. Мы должны перейти к месту, где мы генерируем наши данные. В строке 3 я написал выражение, которое эквивалентно: y = 2x + 3. Я использовал эту функцию для создания нашего обучающего набора. Как вы можете видеть, я установил значения a = 2 и b = 3. И, передавая алгоритму обучения набор x, y, сгенерированный с использованием этих двух чисел, я надеялся обучить свою модель, чтобы она возвращала мне те же значения a и б. Так и случилось :) по крайней мере, это было очень близко.

В порядке. Давайте немного замедлимся. Потому что это лежит в основе машинного обучения. В этом поле у ​​нас есть некоторые данные, и затем мы хотим использовать эти данные для обобщения зависимости. Например, мы можем использовать время рекламного ролика (или по оси X) и количество людей, которые его видели (по оси Y). Чтобы вывести формулу, чтобы, когда клиент приходит к нам и говорит нам, что он хочет, чтобы его рекламу увидели 100 человек, мы можем дать ему ответ, что он должен запустить свою рекламу в течение 10 секунд.

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

Я показываю, что у вас есть линейная регрессия 1D, но она не меняется для многомерной задачи. Допустим, у нас есть время рекламы, а также время суток. Мы все еще можем провести наилучшую прямую линию, но на этот раз она будет в 3D, а не в 2D :).

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