∑나는( y나는− y^나는)2 는 실제로 에서 볼록 합니다. 그러나 경우 에서 볼록하지 않을 수 있습니다 . 이는 대부분의 비선형 모델의 상황 이므로 볼록 함을 실제로 관리 합니다. 비용 함수 이상. Y 난=F를(X나,θ)θθ와이^나는와이^나는= f( x나는; θ )θθ
예를 들어, 개의 숨겨진 레이어 1 선형 출력 레이어가 있는 네트워크를 생각해 보자 . 비용 함수는
여기서 와 (및 I는 편의상 바이어스 조건을 생략하고있어). 이것은 의 함수로 볼 때 반드시 볼록하지는 않습니다 ( 에 따라 : 선형 활성화 함수를 사용하는 경우 여전히 볼록 할 수 있습니다). 네트워크가 깊어 질수록 볼록한 것이 줄어 듭니다.g ( α , W ) = ∑ i ( y i - α i σ ( W x i ) ) 2 x i ∈ R p W ∈ R N × p ( α , W ) σ엔
g(α,W)=∑i(yi−αiσ(Wxi))2
엑스나는∈ R피여∈ R엔× p( α ,W)σ
이제 함수 정의 에 의해 여기서, 인 와 을 설정 하고 를 설정했습니다 . 이 두 가중치가 다양하므로 비용 함수를 시각화 할 수 있습니다.h : R × R → Rh ( u , v ) =g( α ,W( u , v ) )여( u , v )여여11유여12V
아래 그림은 , , (매우 간단한 아키텍처) 인 S 자형 활성화 함수에 대해이를 보여줍니다 . 플로팅 함수에서 변하지 않는 가중치가 있으므로 모든 데이터 ( 와 모두 )는 iid 입니다. 볼록성이 부족한 것을 여기서 볼 수 있습니다.n = 50피 = 3엔= 1엑스와이엔( 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])))