Machine-Learning

為什麼神經網絡的成本函數是非凸的?

  • May 23, 2017

這裡有一個類似的線程(神經網絡的成本函數是非凸的?)但我無法理解那裡的答案中的要點以及我再次詢問的原因,希望這能澄清一些問題:

如果我使用平方差成本函數的總和,我最終會優化一些形式在哪裡是訓練階段的實際標籤值,並且是預測的標籤值。由於這是一個正方形,這應該是一個凸成本函數。那麼是什麼讓它在 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])))

引用自:https://stats.stackexchange.com/questions/281240

comments powered by Disqus