24 votos

¿Por qué la función de coste de las redes neuronales no es convexa?

Hay un hilo similar aquí ( ¿La función de coste de la red neuronal no es convexa? ) pero no fui capaz de entender los puntos de las respuestas allí y mi razón para preguntar de nuevo esperando que esto aclare algunas cuestiones:

Si utilizo la función de coste de suma de diferencias al cuadrado, en última instancia estoy optimizando algo de la forma $ \Sigma_{i=1}^{N}(y_i - \hat{y_i})^2$ donde $y$ es el valor real de la etiqueta durante la fase de formación y $\hat{y}$ es el valor de la etiqueta prevista. Como esto tiene una forma cuadrada, debería ser una función de coste convexa. Entonces, ¿qué es lo que puede hacer que no sea convexa en una NN?

47voto

Paulius Puntos 369

$\sum_i (y_i- \hat y_i)^2$ es efectivamente convexo en $\hat y_i$ . Pero si $\hat y_i = f(x_i ; \theta)$ puede no ser convexo en $\theta$ que es la situación con la mayoría de los modelos no lineales, y realmente nos importa la convexidad en $\theta$ porque eso es lo que estamos optimizando la función de coste.

Por ejemplo, consideremos una red con 1 capa oculta de $N$ y una capa de salida lineal: nuestra función de coste es $$ g(\alpha, W) = \sum_i \left(y_i - \alpha_i\sigma(Wx_i)\right)^2 $$ donde $x_i \in \mathbb R^p$ y $W \in \mathbb R^{N \times p}$ (y omito los términos de sesgo para simplificar). Esto no es necesariamente convexo cuando se ve como una función de $(\alpha, W)$ (dependiendo de $\sigma$ (si se utiliza una función de activación lineal, ésta puede seguir siendo convexa). Y cuanto más profunda sea nuestra red, menos convexas serán las cosas.

Ahora define una función $h : \mathbb R \times \mathbb R \to \mathbb R$ por $h(u, v) = g(\alpha, W(u, v))$ donde $W(u,v)$ es $W$ con $W_{11}$ ajustado a $u$ y $W_{12}$ ajustado a $v$ . Esto nos permite visualizar la función de costes al variar estos dos pesos.

La figura siguiente lo muestra para la función de activación sigmoidea con $n=50$ , $p=3$ y $N=1$ (así que una arquitectura extremadamente simple). Todos los datos (tanto $x$ y $y$ ) son iid $\mathcal N(0,1)$ como los pesos que no varían en la función de trazado. Aquí se puede ver la falta de convexidad.

loss surface

Aquí está el código R que usé para hacer esta figura (aunque algunos de los parámetros están en valores ligeramente diferentes ahora que cuando lo hice, así que no serán 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])))

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X