Por que a função de custo das redes neurais não é convexa?

22

Existe uma discussão semelhante aqui (a função de custo da rede neural não é convexa? ), Mas não consegui entender os pontos nas respostas e minha razão para perguntar novamente, esperando que isso esclareça alguns problemas:

Se estou usando soma de função de custo diferença de quadrados, sou em última análise, optimizando algo da forma em que y é o valor real da etiqueta durante a fase de formação e y é a etiqueta prevista valor. Como isso tem uma forma quadrada, essa deve ser uma função de custo convexa. Então, o que poderia torná-lo não convexo em um NN?Σi=1N(yiyi^)2yy^

Luca
fonte
7
trivialmente, é porque y = f ( x , e, em geral, não há garantia de que uma função arbitrária será convexay^=f(x)
generic_user

Respostas:

35

é, de facto convexa em y i . Mas se y i = f ( x i ; θi(yiy^i)2y^i pode não ser convexo em θ , que é a situação com a maioria dos modelos não lineares, e nós realmente se preocupam com convexidade em θ porque é isso que nós estamos otimizando a função de custo sobre.y^i=f(xi;θ)θθ

Por exemplo, vamos considerar uma rede com 1 camada oculta de unidades e uma camada de saída linear: nossa função de custo é g ( α , W ) = i ( y i - α i σ ( W x i ) ) 2 onde x iR p e W R N ×N

g(α,W)=i(yiαiσ(Wxi))2
xiRp (e estou omitindo termos de viés por simplicidade). Isso não é necessariamente convexo quando visto como uma função de(α,W)WRN×p(α,W)(dependendo de : se uma função de ativação linear for usada, ela ainda poderá ser convexa). E quanto mais profunda nossa rede fica, menos convexas são as coisas.σ

h:R×RRh(u,v)=g(α,W(u,v))W(u,v)WW11uW12v

n=50p=3N=1xyN(0,1)

superfície de perda

Aqui está o código R que eu usei para fazer essa figura (embora alguns dos parâmetros estejam com valores ligeiramente diferentes agora do que quando eu fiz isso para que eles não sejam idênticos):

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
fonte
Resposta fantástica; Acho que, independentemente das funções de ativação, sempre podemos encontrar alguma permutação dos pesos / unidades ocultas, o que geralmente significa não-convexidade
information_interchange
1
@information_interchange obrigado, e acho que você está absolutamente certo, a resposta que o OP vinculou às conversas sobre essa abordagem também
jld
ótima resposta, mas se usarmos o MAE em vez do MSE, não entendo por que não será convexo, a composição de uma função convexa e não decrescente é convexa, portanto, se tivermos o MAE, ainda devemos ter a função convexa sobre W.
Panda