Я начну составлять список тех, кого я выучил до сих пор. Как сказал @marcodena, плюсы и минусы сложнее, потому что в основном это просто эвристика, извлеченная из этих вещей, но я думаю, что, по крайней мере, у меня есть список того, чем они не могут навредить.
Во-первых, я определю нотацию явно, чтобы не было путаницы:
нотация
Это обозначение из книги Нильсена .
Нейронная сеть с прямой связью - это множество слоев нейронов, соединенных вместе. Он принимает входные данные, затем этот вход «просачивается» через сеть, и нейронная сеть возвращает выходной вектор.
Более формально, вызов активации ( так называемым выходом) из нейрона в слое, где является элементом входного вектора. j t h i t h a 1 j j t haijjthitha1jjth
Затем мы можем связать вход следующего слоя с его предыдущим с помощью следующего отношения:
aij=σ(∑k(wijk⋅ai−1k)+bij)
где
- σ - это функция активации,
- k t h ( i - 1 ) t h j t h i t hwijk - это вес от нейрона в слое до нейрона в слое,kth(i−1)thjthith
- J т ч я т чbij - это смещение нейрона в слое, иjthith
- J т ч я т чaij представляет значение активации нейрона в слое.jthith
Иногда мы пишем чтобы представить , другими словами, значение активации нейрона перед применением функции активации , ∑ k ( w i j k ⋅ a i - 1 k ) + b i jzij∑k(wijk⋅ai−1k)+bij
Для более кратких обозначений мы можем написать
ai=σ(wi×ai−1+bi)
Чтобы использовать эту формулу для вычисления вывода сети прямой связи для некоторого ввода , установите , а затем вычислите , где - количество слоев.a 1 = I a 2 , a 3 , … , a m mI∈Rna1=Ia2,a3,…,amm
Функции активации
(в дальнейшем мы будем писать вместо для удобства чтения)e xexp(x)ex
тождественность
Также известен как линейная функция активации.
aij=σ(zij)=zij
шаг
aij=σ(zij)={01if zij<0if zij>0
Кусочно-линейный
Выберите некоторые и , что является нашим «диапазоном». Все, что меньше этого диапазона, будет 0, а все, что больше этого диапазона, будет 1. Все остальное линейно интерполируется между. Формально:xminxmax
aij=σ(zij)=⎧⎩⎨⎪⎪⎪⎪0mzij+b1if zij<xminif xmin≤zij≤xmaxif zij>xmax
где
m=1xmax−xmin
а также
b=−mxmin=1−mxmax
сигмоид
aij=σ(zij)=11+exp(−zij)
Дополнительный лог-лог
aij=σ(zij)=1−exp(−exp(zij))
биполярный
aij=σ(zij)={−1 1if zij<0if zij>0
Биполярный сигмоид
aij=σ(zij)=1−exp(−zij)1+exp(−zij)
Tanh
aij=σ(zij)=tanh(zij)
LeCun's Tanh
Смотрите Эффективный Backprop .
aij=σ(zij)=1.7159tanh(23zij)
Чешуйчатый:
Hard Tanh
aij=σ(zij)=max(−1,min(1,zij))
абсолют
aij=σ(zij)=∣zij∣
выпрямитель
Также известен как выпрямленная линейная единица (ReLU), Макс или функция линейного изменения .
aij=σ(zij)=max(0,zij)
Модификации ReLU
Это некоторые функции активации, с которыми я играл, которые, по загадочным причинам, имеют очень хорошую производительность для MNIST.
aij=σ(zij)=max(0,zij)+cos(zij)
Чешуйчатый:
aij=σ(zij)=max(0,zij)+sin(zij)
Чешуйчатый:
Гладкий выпрямитель
Также известен как Smooth Recified Linear Unit, Smooth Max или Soft plus
aij=σ(zij)=log(1+exp(zij))
Logit
aij=σ(zij)=log(zij(1−zij))
Чешуйчатый:
единица вероятности
aij=σ(zij)=2–√erf−1(2zij−1)
.
Где - это функция ошибок . Это не может быть описано с помощью элементарных функций, но вы можете найти способы аппроксимации обратного на этой странице Википедии и здесь .erf
Альтернативно, это может быть выражено как
aij=σ(zij)=ϕ(zij)
.
Где - функция накопительного распределения (CDF). Смотрите здесь для способов приближения этого.ϕ
Чешуйчатый:
Косинус
Смотрите Случайные Кухонные Раковины .
aij=σ(zij)=cos(zij)
.
Софтмакс
Также известный как нормализованная экспонента.
aij=exp(zij)∑kexp(zik)
Это немного странно, потому что выход одного нейрона зависит от других нейронов в этом слое. Это также становится трудным для вычисления, поскольку может быть очень высоким значением, и в этом случае , вероятно, будет переполнен. Аналогично, если - очень низкое значение, оно опустится и станет .zijexp(zij)zij0
Чтобы бороться с этим, вместо этого мы будем вычислять . Это дает нам:log(aij)
log(aij)=log⎛⎝⎜exp(zij)∑kexp(zik)⎞⎠⎟
log(aij)=zij−log(∑kexp(zik))
Здесь нам нужно использовать трюк log-sum-exp :
Допустим, мы вычисляем:
log(e2+e9+e11+e−7+e−2+e5)
Для удобства мы сначала отсортируем наши экспоненты по величине:
log(e11+e9+e5+e2+e−2+e−7)
Тогда, поскольку является нашим самым высоким, мы умножаем на :e11e−11e−11
log(e−11e−11(e11+e9+e5+e2+e−2+e−7))
log(1e−11(e0+e−2+e−6+e−9+e−13+e−18))
log(e11(e0+e−2+e−6+e−9+e−13+e−18))
log(e11)+log(e0+e−2+e−6+e−9+e−13+e−18)
11+log(e0+e−2+e−6+e−9+e−13+e−18)
Затем мы можем вычислить выражение справа и взять его журнал. Это нормально, потому что эта сумма очень мала по отношению к , поэтому любое снижение значения до 0 не было бы достаточно значительным, чтобы все равно что-то изменить. Переполнение не может произойти в выражении справа, потому что мы гарантируем, что после умножения на все степени будут .log(e11)e−11≤0
Формально мы называем . Затем:m=max(zi1,zi2,zi3,...)
log(∑kexp(zik))=m+log(∑kexp(zik−m))
Наша функция softmax становится:
aij=exp(log(aij))=exp(zij−m−log(∑kexp(zik−m)))
Также в качестве идентификатора производная функции softmax имеет вид:
dσ(zij)dzij=σ′(zij)=σ(zij)(1−σ(zij))
Использовать полностью
Этот тоже немного хитрый. По сути, идея заключается в том, что мы разбиваем каждый нейрон в нашем слое maxout на множество субнейронов, каждый из которых имеет свои веса и смещения. Затем входные данные для нейрона поступают вместо каждого из его субнейронов, и каждый субнейрон просто выводит свои (без применения какой-либо функции активации). Тогда этого нейрона является максимумом всех выходов его субнейрона.zaij
Формально, в одном нейроне, скажем, у нас есть субнейронов. затемn
aij=maxk∈[1,n]sijk
где
sijk=ai−1∙wijk+bijk
( является точечным произведением )∙
Чтобы помочь нам подумать об этом, рассмотрим матрицу весов для слоя нейронной сети, которая использует, скажем, функцию активации сигмоида. является 2D матрицей, где каждый столбец является вектором для нейрона содержащим вес для каждого нейрона в предыдущем слое .WiithWiWijji−1
Если у нас будут субнейроны, нам понадобится двумерная весовая матрица для каждого нейрона, поскольку каждому субнейрону понадобится вектор, содержащий вес для каждого нейрона в предыдущем слое. Это означает, что теперь является трехмерной весовой матрицей, где каждый является двумерной весовой матрицей для одного нейрона . И тогда - это вектор для субнейрона в нейроне который содержит вес для каждого нейрона в предыдущем слое .WiWijjWijkkji−1
Аналогично, в нейронной сети, которая снова использует, скажем, сигмовидную функцию активации, является вектором со смещением для каждого нейрона в слое .bibijji
Чтобы сделать это с субнейронами, нам нужна двумерная матрица смещения для каждого слоя , где - вектор со смещением для каждого субнейрона в нейрон.biibijbijkkjth
Имея весовую матрицу и вектор смещения для каждого нейрона, становится очень понятным вышеприведенное выражение, оно просто применяет веса каждого субнейрона к выходам из слой , затем применяя их смещения и беря их максимум.wijbijwijkai−1i−1bijk
Радиальные базисные функциональные сети
Радиальные базовые функциональные сети являются модификацией нейронных сетей с прямой связью, где вместо использования
aij=σ(∑k(wijk⋅ai−1k)+bij)
у нас есть один вес на узел в предыдущем слое (как обычно), а также один средний вектор и один вектор стандартного отклонения для каждого узла в предыдущий слой. k μ i j k σ i j kwijkkμijkσijk
Затем мы вызываем нашу функцию активации чтобы не путать ее с векторами стандартного отклонения . Теперь, чтобы вычислить нам сначала нужно вычислить один для каждого узла в предыдущем слое. Одним из вариантов является использование евклидова расстояния:σ i j k a i j z i j kρσijkaijzijk
zijk=∥(ai−1−μijk∥−−−−−−−−−−−√=∑ℓ(ai−1ℓ−μijkℓ)2−−−−−−−−−−−−−√
Где - это элемент . Этот не использует . В качестве альтернативы есть расстояние Махаланобиса, которое предположительно работает лучше:μijkℓℓthμijkσijk
zijk=(ai−1−μijk)TΣijk(ai−1−μijk)−−−−−−−−−−−−−−−−−−−−−−√
где - ковариационная матрица , определяемая как:Σijk
Σijk=diag(σijk)
Другими словами, - это диагональная матрица с качестве ее диагональных элементов. Мы определяем и как векторы столбцов, потому что это обозначение, которое обычно используется.Σijkσijkai−1μijk
Они на самом деле просто говорят, что расстояние Махаланобиса определяется как
zijk=∑ℓ(ai−1ℓ−μijkℓ)2σijkℓ−−−−−−−−−−−−−−⎷
Где - это элемент . Обратите внимание, что всегда должен быть положительным, но это типичное требование для стандартного отклонения, так что это не так уж удивительно.σijkℓℓthσijkσijkℓ
При желании расстояние Махаланобиса является достаточно общим, чтобы ковариационная матрица могла быть определена как другие матрицы. Например, если ковариационная матрица является единичной матрицей, наше расстояние Махаланобиса уменьшается до евклидова расстояния. довольно распространен и известен как нормализованное евклидово расстояние .ΣijkΣijk=diag(σijk)
В любом случае, когда наша функция расстояния выбрана, мы можем вычислить черезaij
aij=∑kwijkρ(zijk)
В этих сетях они выбирают умножение на вес после применения функции активации по причинам.
Здесь описывается, как создать многослойную сеть с радиальной базисной функцией, однако обычно существует только один из этих нейронов, и его выход является выходом сети. Он нарисован как несколько нейронов, потому что каждый средний вектор и каждый вектор стандартного отклонения этого одиночного нейрона считается одним "нейроном", а затем после всех этих выходов появляется другой слой это берет сумму тех вычисленных значений, умноженных на веса, точно так же как выше. Разделение его на два слоя с «суммирующим» вектором в конце кажется мне странным, но это то, что они делают.μijkσijkaij
Также смотрите здесь .
Функция радиальной основы Функции активации сети
Gaussian
ρ(zijk)=exp(−12(zijk)2)
Multiquadratic
Выберите точку . Затем мы вычисляем расстояние от до :(x,y)(zij,0)(x,y)
ρ(zijk)=(zijk−x)2+y2−−−−−−−−−−−−√
Это из Википедии . Он не ограничен и может иметь любое положительное значение, хотя мне интересно, есть ли способ его нормализовать.
Когда , это эквивалентно абсолютному (с горизонтальным смещением ).y=0x
Обратное мультиквадратичное
То же, что квадратичный, за исключением перевернутого:
ρ(zijk)=1(zijk−x)2+y2−−−−−−−−−−−−√
* Графика из графиков intmath с использованием SVG .