PReLU или Parametric ReLU — это логическое развитие обыкновенной активационной функции ReLU. Основное отличие между ними состоит в том, что у PReLU есть обучаемые параметры.

PReLU определяется следующей формулой:

\[f(y_i)= \begin{cases} y_i, &y_i > 0\\ a_iy_i, &y_i \le 0 \end{cases}\]

В этой формуле \(y_i\) — это то, что приходит на вход активационной функции канала \(i\), а \(a_i\) — это коэффициент, отвечающий за наклон отрицательной части. Индекс \(i\) у параметра \(a_i\) показывает, что нелинейная активация может быть разной для разных каналов. При этом, если \(a_i\) приравнять к нулю, активационная функция превратится в простую ReLU.

Формулу выше можно записать ещё и немного по-другому:

\[f(y_i) = \max(0, y_i) + a_i\min(0, y_i)\]

Вот как выглядит PReLU на графике, при параметре \(a_i = 0.25\):

Если значение параметра \(a_i\) мало и фиксированно, например 0.01, PReLU становится Leaky ReLU (LReLU). Основной идеей создания LReLU было устранение нулевого градиента, однако, по факту, LReLU даёт ничтожно малый прирост точности, по сравнению с обычной ReLU, поэтому о ней нет смысла говорить.

Функция PReLU хороша тем, что с её добавлением, количество параметров сети увеличивается незначительно: общее количество новых параметров каждого слоя всего лишь равно количеству каналов этого слоя.

PReLU может быть channel-shared. Это означает, что значение параметра \(a\) будет общим для всех каналов. В этом случае в формуле у параметра не будет индекса:

\[f(y_i) = \max(0, y_i) + a\min(0, y_i)\]

Оптимизация

Градиент параметра \(a_i\) для одного слоя вычисляется по формуле:

\[\frac{\partial \mathcal{E}}{\partial a_i} = \sum_{y_i}\frac{\partial \mathcal{E}}{\partial f(y_i)} \frac{\partial f(y_i)}{\partial a_i}\]

где \(\mathcal{E}\) — это оптимизируемая функция.

Левая часть произведения под знаком суммы — это градиент, пришедший с более глубокого слоя:

\[\frac{\partial \mathcal{E}}{\partial f(y_i)}\]

а правая часть — градиент активации, который вычисляется как:

\[\frac{\partial f(y_i)}{\partial a_i} = \begin{cases} 0, &y_i > 0\\ y_i, &y_i \le 0 \end{cases}\]

Для channel-shared варианта в формулу добавляется ещё один знак суммы:

\[\frac{\partial \mathcal{E}}{\partial a_i} = \sum_{i}\sum_{y_i}\frac{\partial \mathcal{E}}{\partial f(y_i)} \frac{\partial f(y_i)}{\partial a_i}\]

потому как в этом случае требуется суммировать все каналы слоя.

Обновление значения параметра \(a_i\) производится по формуле:

\[\Delta a_i := \mu \Delta a_i + \varepsilon\frac{\partial \mathcal{E}}{\partial a_i}\]

в которой \(\mu\) — это momentum, а \(\varepsilon\) — скорость обучения.

При обновлении значения параметра \(\varepsilon\) не используется L2-регуляризация (weight decay), поскольку она быстро приводит значение параметра к нулю, а это превращает PReLU в обычную ReLU.


Kaiming He et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. arXiv:1502.01852 [cs.CV]