Производная тензорной операции - PullRequest
0 голосов
/ 11 июля 2019

Я читаю книгу о глубоком обучении, и меня немного смущает одна из идей, упомянутых автором.Это из книги

«1001 * Глубокое обучение с Python» : Градиент - это производная от тензорной операции.Это обобщение концепции производных функций многомерных входных данных: функций, которые принимают тензоры в качестве входных данных.

Рассмотрим входной вектор x, матрицу W, цель y и потерю функции потерь.Вы можете использовать W для вычисления целевого кандидата y_pred и вычисления потери или несоответствия между целевым кандидатом y_pred и целевым y:

y_pred = точка (W, x)

loss_value= потеря (y_pred, y)

Если входные данные x и y заморожены, то это можно интерпретировать как функцию отображения значений W на значения потерь:

loss_value = f (W)

Допустим, текущее значение W равно W0.Тогда производная от f в точке W0 является тензорным градиентом (f) (W0) той же формы, что и W, где каждый коэффициент градиента (f) (W0) [i, j] указывает направление и величину изменениязначение потери, которое вы наблюдаете при изменении W0 [i, j].Этот тензорный градиент (f) (W0) является градиентом функции f (W) = loss_value в W0.

Ранее вы видели, что производную функции f (x) от одного коэффициента можно интерпретировать как наклон кривой функции f.Аналогично, градиент (f) (W0) можно интерпретировать как тензор, описывающий кривизну f (W) вокруг W0.

По этой причине, почти так же, как для функции f (x), вы можете уменьшить значение f (x), немного сдвинув xa в противоположном направлении от производной, с помощью функции f (W) тензора, вы можете уменьшить f (W), переместив W в противоположном направлении отградиент: например, W1 = W0-шаг * градиент (f) (W0) (где шаг - это небольшой коэффициент масштабирования).Это означает идти против кривизны, что интуитивно должно поставить вас ниже на кривой.Обратите внимание, что шаг коэффициента масштабирования необходим, потому что градиент (f) (W0) только приближает кривизну, когда вы близки к W0, поэтому вы не хотите слишком далеко уходить от W0.

Я не понимаю, почему мы вычитаем -step * градиент (f) (W0) из веса, а не просто -step, так как -step * градиент (f) (W0) представляет потерю, в то время как -step является параметром (т.е.значение х, т.е. небольшое изменение в весе)

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Градиент сообщает вам, в каком направлении двигаться , и шаг поможет контролировать величину, которую вы перемещаете, так что ваша последовательность сходится.

Мы не можем просто вычесть step. Напомним, что step это просто скалярное число. W0 - тензор. Мы не можем вычесть тензор из скалярного числа. Градиент - это тензор того же размера, что и W0, и это позволило бы правильно определить вычитание.

Показания по градиентному спуску могут помочь вашему пониманию.

1 голос
/ 11 июля 2019

Вам нужно немного изменить параметр, противоположный его градиенту, чтобы убедиться, что потери снижаются. Использование только step не гарантирует уменьшения потерь. Это называется градиентным спуском при оптимизации и есть доказательство сходимости. Вы можете проверить онлайн-учебники по этой теме, такие как this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...