Сейчас, в эпоху науки о данных, когда все без ума от машинного обучения, мы часто забываем основы. Теперь в нашем распоряжении множество данных, новые модные графические процессоры, библиотеки ML / DL. Кого волнуют лежащие в основе линейная алгебра и исчисление?

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

Обратное распространение - это первый шаг к пониманию того, как мы обучаем машину обучению.

Это слишком ТЕМНО. Блех!

Начнем уже с интересного.

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

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

Смена сцены: мы на станции, спускающейся с холма.

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

Теперь, когда мы очистили обзор с высоты птичьего полета, давайте перейдем к техническим (немного математическим).

Функция потерь:

Вот как мы вычисляем, насколько далеко наше прогнозируемое значение от исходного значения. Теперь я знаю, о чем вы думаете. Простая разница между прогнозируемым и исходным значением должна подойти, не так ли?

Вообще-то, нет. Функция потерь должна удовлетворять двум свойствам (двум причудливым математическим терминам).

  1. Он должен быть дифференцируемым.
  2. Он должен быть выпуклым.

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

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

Существует множество функций потерь, которые удовлетворяют двум вышеупомянутым свойствам. Например: Среднеквадратическая ошибка, Средняя абсолютная ошибка и т. Д.

Градиентный спуск:

Предположим, мы строим график нашей функции потерь, которая удовлетворяет двум свойствам относительно исходного и прогнозируемого значения. У нас получится такой красивый график.

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

Еще несколько очков:

  1. Скорость обучения: определяет, сколько шагов мы будем делать. Меньшая скорость обучения займет больше времени, чтобы достичь самой низкой точки. Взяв более высокую скорость обучения, мы можем перешагнуть и достичь чего-то близкого, но не самого низкого уровня.
  2. Функция затрат: на этапе обучения мы имеем дело с несколькими примерами, чтобы алгоритм был обобщен. Функция стоимости - это среднее значение всех потерь.

Надеюсь, это поможет.

Ссылка:

Https://www.coursera.org/learn/neural-networks-deep-learning