ここにも同様のスレッドがあります(ニューラルネットワークのコスト関数は非凸状ですか?)
差の二乗コスト関数の合計を使用している場合、最終的にという形式の何かを最適化します。ここではトレーニング中の実際のラベル値ですphaseおよびは予測ラベル値です。これは正方形の形をしているので、これは凸コスト関数でなければなりません。それでは、NNで非凸になる可能性があるのは何ですか?
ここにも同様のスレッドがあります(ニューラルネットワークのコスト関数は非凸状ですか?)
差の二乗コスト関数の合計を使用している場合、最終的にという形式の何かを最適化します。ここではトレーニング中の実際のラベル値ですphaseおよびは予測ラベル値です。これは正方形の形をしているので、これは凸コスト関数でなければなりません。それでは、NNで非凸になる可能性があるのは何ですか?
回答:
で実際に凸状である Y I。しかし、場合 yの私は = fは(X I ; θ )、それは凸でないかもしれません θ、ほとんどの非線形モデルの状況である、と私たちは実際にある凸部を気 θそれは、我々はコスト関数を最適化しているものだから以上。
例えば、の1つの隠れ層を有するネットワークを考える単位と線形出力層:私達のコスト関数は、 G (α 、W )= Σ I (Y I - α iが σ (W X I)) 2 ここで、X I ∈ Rの P及びW ∈ R N × P(私は簡単にするためにバイアス項を省略しています)。(α 、W )の関数として見た場合、これは必ずしも凸型ではありません
今関数定義によって、H (U 、V )= G (α 、W (U 、V ))ここで、Wは(U 、V )であり、WとW 11の集合UとW 12のセットにv。これにより、これら2つの重みが異なるため、コスト関数を視覚化できます。
次の図は、、p = 3、およびN = 1のシグモイド活性化関数の場合を示しています(非常に単純なアーキテクチャ)。すべてのデータ(両方のxとyは)IIDされたN(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])))