Machine-Learning
為什麼神經網絡的成本函數是非凸的?
這裡有一個類似的線程(神經網絡的成本函數是非凸的?)但我無法理解那裡的答案中的要點以及我再次詢問的原因,希望這能澄清一些問題:
如果我使用平方差成本函數的總和,我最終會優化一些形式在哪裡是訓練階段的實際標籤值,並且是預測的標籤值。由於這是一個正方形,這應該是一個凸成本函數。那麼是什麼讓它在 NN 中成為非凸的呢?
確實是凸的. 但如果它可能不是凸的,這是大多數非線性模型的情況,我們實際上關心的是因為這就是我們優化成本函數的原因。
例如,讓我們考慮一個具有 1 個隱藏層的網絡單位和線性輸出層:我們的成本函數是
在哪裡和(為了簡單起見,我省略了偏見項)。當被視為一個函數時,這不一定是凸的(根據:如果使用線性激活函數,那麼這仍然可以是凸的)。我們的網絡越深,凸的東西就越少。 現在定義一個函數經過在哪裡是和設置和設置. 這使我們能夠可視化成本函數,因為這兩個權重不同。
下圖顯示了 sigmoid 激活函數,, 和(所以是一個非常簡單的架構)。所有數據(兩者和) 是獨立同住者,在繪圖函數中沒有變化的任何權重也是如此。你可以在這裡看到缺乏凸性。
這是我用來製作這個圖的 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])))