действительно выпуклый в у я . Но если у я = п ( х я , θ ) не может быть выпуклым в θ , что ситуация с большинством нелинейных моделей, и мысамом деле заботятся о выпуклости в & thetas , потому что это точто мы оптимизации функции затрат над.Σя( уя- у^я)2Y^яY^я= ф( хя; θ )θθ
Например, давайте рассмотрим сеть с 1 скрытым слоем блоков и линейным выходным слоем: наша функция затрат
г ( α , W ) = Σ я ( у я - α я σ ( Ш х я ) ) 2 ,
где х я ∈ R p и W ∈ R N × p (и я опускаю смещающие члены для простоты). Это не обязательно выпукло, если рассматривать как функцию от ( α , W )N
г( α , W) = ∑я( уя- αяσ( WИкся) )2
Икся∈ RпW∈ RN× р( α , W)(в зависимости от
: если используется линейная функция активации, то она все еще может быть выпуклой). И чем глубже наша сеть, тем менее выпуклые вещи.
σ
h : R × R → Rh ( u , v ) = г( α , W( ты , ты ) )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])))