от Доминик Уэйт
Введение
В недавней презентации, которую я сделал по алгоритму обратного распространения для оптимизации нейронной сети, возник вопрос дифференцируемости в отношении определенных функций активации. Алгоритм обратного распространения требует, чтобы все задействованные функции были дифференцируемыми, однако некоторые из наиболее популярных используемых функций активации (например, ReLU) фактически не дифференцируемы в определенных точках в пределах входного диапазона функций. Так как же эти функции на самом деле используются в обратном распространении? Простой ответ заключается в том, что с математической точки зрения мы обманываем, игнорируя вывод этих функций в недифференцируемых точках и перезаписывая вывод более приемлемым значением. В этом сообщении в блоге рассказывается о дифференциации и о том, как она применяется в этом случае. Я также опишу методы, с помощью которых можно обойти функции, которые не дифференцируемы во всей своей полноте, и каковы последствия для обратного распространения и нейронных сетей. Для этого я в значительной степени опираюсь на книгу Лары Олкок Как думать об анализе [«1], которая оказалась незаменимой для понимания этой темы, наряду с другими источниками.
Дифференциация и дифференцируемость
Во-первых, некоторые сведения о дифференциации и о том, что значит быть дифференцируемым. Например, функция 𝑓(𝑥) = 𝑥 — это функция, которая отображает действительные числа в действительные числа (𝑓 : ℝ → ℝ). Функция 𝑓(𝑥) = 𝑥² гладкая и в каждой точке дифференцируема.

Выше Визуализация функции 𝑓(𝑥) = 𝑥². С областью масштабирования, показанной справа касательной линией (синяя).
Функция 𝑓(𝑥) = 𝑥² непрерывна и дифференцируема: это означает, что в каждой точке 𝑓(𝑥) мы можем провести касательную и аппроксимировать градиент. Аналитически мы можем вывести производную от 𝑓(𝑥), и это справедливо для всего x, производная от 𝑓(𝑥) равна 𝑓ʹ(𝑥) = 2𝑥. Если вы сравните приведенную выше функцию с другой функцией, выпрямленной линейной единицей (ReLU), которая обычно используется в качестве функции активации. ReLU также является непрерывным, отображением (𝑓 : ℝ → ℝ), и поэтому любой ввод вещественных чисел приведет к выводу вещественных чисел. Однако, в отличие от 𝑓(𝑥) = 𝑥², эта функция имеет недифференцируемые части. Это ясно видно, когда мы увеличиваем масштаб функции и видим, что она не гладкая (имеет острый угол x=0). Острые углы — классический признак недифференциальной точки функции:

Вверху Визуализация функции ReLU (зеленая). С областью масштабирования, показанной справа, с неправильными касательными линиями (синие).
В остром углу заманчиво провести касательную, отстоящую на равном расстоянии от двух пересекающихся линий, или даже нарисовать несколько касательных, как если бы визуализировали линию, вращающуюся от одной линии к другой, однако все это было бы неверным. В любой точке график либо имеет единственный значимый градиент (и, следовательно, касательную), либо нет. В этом углу в пределе нет значимой касательной, поэтому эта точка функции не дифференцируема. Причина этого в том, что для того, чтобы функция была дифференцируемой в каждой точке, ее разностное частное должно удовлетворять следующим критериям:
f дифференцируема в точке 𝒂 тогда и только тогда, когда

существуют. Где 𝒂 — постоянная, очень похожая на 𝑓. Если мы подойдем к 𝑥 с 𝒂 из приведенного выше, мы увидим, что разностное частное стремится к бесконечности, что означает, что касательная в этой точке не существует.
Если вы разбиваете 𝑓(𝑥) на его компоненты и дифференцируете его аналитически, кажется, что он должен быть полностью дифференцируемым:

однако это неверно. Функция не дифференцируема в нуле, и производную этой функции следует записать в следующем виде:

. Таким образом, функции, которые не являются гладкими на всем протяжении и имеют острые углы, будут иметь недифференцируемые области. К острым углам не может быть приложена значимая касательная, и они не соответствуют основному критерию дифференцируемости, заключающемуся в том, что ограничения существуют.
Функции активации для глубокого обучения
Классические функции активации tanh, а также логистическая сигмовидная функция являются гладкими функциями, однако если вы визуализируете некоторые из недавно введенных функций активации, вы увидите, что они не являются гладкими и имеют углы, хотя они не дифференцируемы во всем, что легко понять. найти представления этих функций в Интернете, которые предполагают, что они:

Выше Производные функции активации показаны в общепринятых обозначениях, несмотря на то, что на некоторых функциях есть недифференцируемые точки [2].
Из приведенного выше примера [2] функции ReLU и PReLU не являются дифференциальными, несмотря на обозначения. Функция бинарного шага также недифференцируема, но автор рисунка выше указал это строкой «? для 𝑥= 0'. Так как же это возможно? Как получается, что мы используем функции, которые не являются полностью дифференцируемыми, для построения нейронных сетей, которые состоят из многих из этих функций и которые должны быть дифференцируемыми для выполнения процедуры обучения?
Использование функций активации для глубокого обучения, содержащих недифференцируемые точки
Такие функции, как ReLU, используются в нейронных сетях из-за вычислительных преимуществ использования этих простых уравнений по сравнению с более традиционными функциями активации, такими как tanh или логистическая сигмоидальная функция. Алгоритм обратного распространения, используемый для оптимизации нейронных сетей, работает при предварительном условии, что все функции, содержащиеся в системе, дифференцируемы. Как обсуждалось, ReLU и другие варианты не дифференцируемы в определенных точках, так как же они используются? По существу, в точках, в которых они недифференцируемы, функция не оценивается, а результат заменяется разумным значением. Например, для ReLU в 𝑓ʹ(𝑥) мы просто указываем, что вывод будет равен нулю или единице, что разумно, учитывая наше использование. В Theano [ 3], например, указано, что 𝑥 не оценивается и принимается равным 1 для 𝑥 ›= 0. Это не является математически чистым, и можно представить сценарии, в которых это вызовет проблемы, однако реальность такова, что нейронная сети, которые включают в себя эти функции, работают хорошо и стабильно, поэтому этот вопрос игнорируется в пользу вычислительной эффективности.
Вывод
Кто-то может возразить, что если мы в любом случае собираемся указать вывод в недифференцируемой точке, зачем беспокоиться о дополнительном тексте и обозначениях, необходимых для объяснения того, что эта точка не поддается вычислению. Другие скажут, что мы злоупотребляем обозначениями и слишком упрощаем вещи для непрофессионала. Что ж, я могу понять это с обеих точек зрения, а с точки зрения краткости и простоты это не часто проявляется, и поэтому текст, подобный приведенному выше, может быть полезен для полного понимания того, как возникают те или иные обстоятельства для любых заинтересованных сторон. .
использованная литература
[1] https://www.amazon.co.uk/Think-About-Analysis-Lara-Alcock/dp/0198723539
[2] https://www.quora.com/Why-do-we-not-use-a-дифференцированное-аппроксимация-оф-ReLUs
[3] https://groups.google.com/forum/#!topic/lasagne-users/_rWsIieuGmA
Первоначально опубликовано на https://dwaithe.github.io.