Чому функція витрат нейронних мереж не випукла?


22

Тут є подібна нитка ( Функція вартості нейронної мережі не випукла? ), Але я не зміг зрозуміти моменти у відповідях там, і моя причина знову запитати, сподіваючись, що це прояснить деякі проблеми:

Якщо я використовую функцію вартості різниці у квадраті, я в кінцевому підсумку оптимізую щось із вигляду де - фактичне значення мітки під час навчання фаза і - передбачуване значення мітки. Оскільки це має квадратну форму, це має бути функцією опуклої вартості. Отже, що саме може зробити його невипуклим в NN? у уΣi=1N(yiyi^)2yy^


7
тривіально, це тому, що , і взагалі немає гарантій, що довільна функція буде опуклоюy^=f(x)
generic_user

Відповіді:


35

i(yiy^i)2 дійсно опуклий у . Але якщо \ hat y_i = f (x_i; \ theta) він може не бути опуклим у \ theta , що є ситуацією з більшістю нелінійних моделей, і ми насправді піклуємось про опуклість у \ theta, тому що саме це ми оптимізуємо функція витрат закінчена. у я=п(хя;thetas)thetasthetasy^iy^i=f(xi;θ)θθ

Наприклад, розглянемо мережу з 1 прихованим шаром з N одиниць і лінійним вихідним шаром: наша функція витрат -

g(α,W)=i(yiαiσ(Wxi))2
де xiRp і WRN×p (і я опускаю терміни зміщення для простоти). Це не обов'язково опукло, якщо розглядати його як функцію (α,W) (залежно від σ : якщо використовується функція лінійної активації, вона все ще може бути опуклою). І чим глибше наша мережа стає тим менш опуклими.

Тепер визначимо функцію по , де є з встановити значення а встановити . Це дозволяє нам візуалізувати функцію витрат, оскільки ці дві ваги різняться. h ( u , v ) = g ( α , W ( u , v ) ) W ( u , v ) W W 11 u W 12 vh:R×RRh(u,v)=g(α,W(u,v))W(u,v)WW11uW12v

На малюнку нижче показано це для функції активації сигмоїдів з , та (тому надзвичайно проста архітектура). Усі дані (і і ) iid , як і будь-які ваги, які не змінюються у функції побудови графіку. Тут можна побачити відсутність опуклості.p = 3 N = 1 x y N ( 0 , 1 )n=50p=3N=1xyN(0,1)

поверхня втрат

Ось код R, за допомогою якого я робив цю фігуру (хоча деякі параметри мають дещо інші значення зараз, ніж коли я це зробив, щоб вони не були однаковими):

costfunc <- function(u, v, W, a, x, y, afunc) {
  W[1,1] <- u; W[1,2] <- v
  preds <- t(a) %*% afunc(W %*% t(x))
  sum((y - preds)^2)
}

set.seed(1)
n <- 75  # number of observations
p <- 3   # number of predictors
N <- 1   # number of hidden units


x <- matrix(rnorm(n * p), n, p)
y <- rnorm(n)  # all noise
a <- matrix(rnorm(N), N)
W <- matrix(rnorm(N * p), N, p)

afunc <- function(z) 1 / (1 + exp(-z))  # sigmoid

l = 400  # dim of matrix of cost evaluations
wvals <- seq(-50, 50, length = l)  # where we evaluate costfunc
fmtx <- matrix(0, l, l)
for(i in 1:l) {
  for(j in 1:l) {
    fmtx[i,j] = costfunc(wvals[i], wvals[j], W, a, x, y, afunc)
  }
}

filled.contour(wvals, wvals, fmtx,plot.axes = { contour(wvals, wvals, fmtx, nlevels = 25, 
                                           drawlabels = F, axes = FALSE, 
                                           frame.plot = FALSE, add = TRUE); axis(1); axis(2) },
               main = 'NN loss surface', xlab = expression(paste('W'[11])), ylab = expression(paste('W'[12])))

Фантастична відповідь; Я думаю, що незалежно від функцій активації, ми завжди можемо знайти певну перестановку ваг / прихованих одиниць, що в цілому означає невипуклість
information_interchange

1
@information_interchange дякую, і я думаю, що ти абсолютно прав, відповідь, що ОП пов'язує і з розмовами про цей підхід
jld

чудова відповідь, але якщо ми використовуємо MAE замість MSE, я не розумію, чому це буде невипуклий, склад опуклої та не спадаючої функції опуклий, тому, якщо у нас є MAE, ми все одно повинні мати опуклу функцію щодо В.
Панда
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.