Dlaczego funkcja kosztowa sieci neuronowych nie jest wypukła?

22

Jest tutaj podobny wątek ( funkcja kosztu sieci neuronowej nie jest wypukła? ), Ale nie byłem w stanie zrozumieć punktów w odpowiedziach i mój powód, by zapytać ponownie, mając nadzieję, że rozwiąże to niektóre problemy:

Jeśli używam sumy kwadratowej funkcji różnicy kosztów, ostatecznie optymalizuję coś w postaci gdzie jest rzeczywistą wartością etykiety podczas treningu faza i to przewidywana wartość etykiety. Ponieważ ma on kwadratową postać, powinna to być funkcja wypukłego kosztu. Więc co może sprawić, że będzie niewypukły w NN? y yΣi=1N(yiyi^)2yy^

Luca
źródło
7
trywialny, to dlatego, y = f ( x ) , w ogóle nie ma gwarancji, że dowolna funkcja będzie wypukłay^=f(x)
generic_user

Odpowiedzi:

35

rzeczywiście wypukły r I . Ale jeśli rw I = f ( x I ; θ ) nie może być wypukła w θ , który jest sytuacja z większością modeli nieliniowych, a my faktycznie dbają o wypukłość w θ bo to co mamy optymalizację funkcji kosztu koniec.i(yiy^i)2y^iy^i=f(xi;θ)θθ

Rozważmy na przykład sieć z 1 ukrytą warstwą jednostek i liniową warstwą wyjściową: naszą funkcją kosztu jest g ( α , W ) = i ( y i - α i σ ( W x i ) ) 2 gdzie x iR p i (i dla uproszczenia pomijam terminy stronniczości). Niekoniecznie jest to wypukłe, gdy jest postrzegane jako funkcja (w zależności odN

g(α,W)=i(yiαiσ(Wxi))2
xiRp ( α , W ) σWRN×p(α,W)σ: jeśli stosowana jest funkcja aktywacji liniowej, może ona nadal być wypukła). Im głębsza jest nasza sieć, tym mniej wypukłe są rzeczy.

Teraz zdefiniuj funkcję przez gdzie jest z ustaw na a ustaw na . To pozwala nam wizualizować funkcję kosztów, ponieważ te dwie wagi różnią się. 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

Poniższy rysunek pokazuje to dla funkcji aktywacji sigmoidalnej przy , i (tak bardzo prosta architektura). Wszystkie dane (zarówno jak i ) to iid , podobnie jak wszelkie wagi niezmienne w funkcji kreślenia. Tutaj widać brak wypukłości.p = 3 N = 1 x y N ( 0 , 1 )n=50p=3N=1xyN(0,1)

powierzchnia strat

Oto kod R, którego użyłem do stworzenia tej figury (chociaż niektóre parametry mają teraz nieco inne wartości niż wtedy, kiedy to zrobiłem, więc nie będą identyczne):

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])))
jld
źródło
Fantastyczna odpowiedź; Myślę, że niezależnie od funkcji aktywacyjnych, zawsze możemy znaleźć permutację wag / jednostek ukrytych, co ogólnie oznacza brak wypukłości
information_interchange
1
@information_interchange dzięki, i myślę, że masz rację, odpowiedź, że PO połączone z rozmów o tym podejściem a także
JLD
świetna odpowiedź, ale jeśli użyjemy MAE zamiast MSE, nie rozumiem, dlaczego będzie ona nie wypukła, skład funkcji wypukłej i nie malejącej jest wypukły, więc jeśli mamy MAE, powinniśmy nadal mieć funkcję wypukłą odnośnie W.
Panda