Почему функция стоимости нейронных сетей невыпуклая?


22

Здесь есть похожая тема ( функция стоимости нейронной сети невыпуклая? ), Но я не смог понять суть вопросов в ответах и ​​мою причину повторного запроса, надеясь, что это прояснит некоторые проблемы:

Если я использую функцию суммы квадратов разницы стоимости, я в конечном итоге оптимизирую что-то в форме где - фактическое значение метки во время обучения phase и - это прогнозируемое значение метки. Поскольку это имеет квадратную форму, это должна быть выпуклая функция стоимости. Так что же может сделать его невыпуклым в NN? у уΣязнак равно1N(Yя-Yя^)2YY^


7
тривиально, это потому что , и вообще нет никаких гарантий, что произвольная функция будет выпуклойY^знак равное(Икс)
generic_user

Ответы:


35

действительно выпуклый в у я . Но если у я = п ( х я , θ ) не может быть выпуклым в θ , что ситуация с большинством нелинейных моделей, и мысамом деле заботятся о выпуклости в & thetas , потому что это точто мы оптимизации функции затрат над.Σя(Yя-Y^я)2Y^яY^язнак равное(Икся;θ)θθ

Например, давайте рассмотрим сеть с 1 скрытым слоем блоков и линейным выходным слоем: наша функция затрат г ( α , W ) = Σ я ( у я - α я σ ( Ш х я ) ) 2 , где х яR p и W R N × p (и я опускаю смещающие члены для простоты). Это не обязательно выпукло, если рассматривать как функцию от ( α , W )N

г(α,W)знак равноΣя(Yя-αяσ(WИкся))2
ИксярпWрN×п(α,W)(в зависимости от : если используется линейная функция активации, то она все еще может быть выпуклой). И чем глубже наша сеть, тем менее выпуклые вещи.σ

час:р×ррчас(U,v)знак равног(α,W(U,v))W(U,v)WW11UW12v

Nзнак равно50пзнак равно3Nзнак равно1ИксYN(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 спасибо, и я думаю, что вы абсолютно правы, ответ, который ОП также связал с разговорами об этом подходе
JDD

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