ニューラルネットワークのコスト関数が非凸であるのはなぜですか?


22

ここにも同様のスレッドがあります(ニューラルネットワークのコスト関数は非凸状ですか?

差の二乗コスト関数の合計を使用している場合、最終的にという形式の何かを最適化します。ここではトレーニング中の実際のラベル値ですphaseおよびは予測ラベル値です。これは正方形の形をしているので、これは凸コスト関数でなければなりません。それでは、NNで非凸になる可能性があるのは何ですか?Σi=1N(yiyi^)2yy^


7
些細なのは、であり、一般に、任意の関数が凸であるという保証がないためですy^=fバツ
-generic_user

回答:


35

で実際に凸状である Y I。しかし、場合 yの私は = fはX I ; θ 、それは凸でないかもしれません θ、ほとんどの非線形モデルの状況である、と私たちは実際にある凸部を気 θそれは、我々はコスト関数を最適化しているものだから以上。yy^2y^y^=fバツ;θθθ

例えば、の1つの隠れ層を有するネットワークを考える単位と線形出力層:私達のコスト関数は、 G α W = Σ I Y I - α iが σ W X I 2 ここで、X IRの P及びW R N × P(私は簡単にするためにバイアス項を省略しています)。α W )の関数として見た場合、これは必ずしも凸型ではありませんN

gαW=yασWバツ2
バツRpWRN×pαW依存します:線形活性化関数が使用される場合、これはまだ凸状である可能性があります)。そして、ネットワークが深くなればなるほど、コンベックスは少なくなります。σ

今関数定義によって、H U V = G α W U V ここで、WはU V であり、WW 11の集合UW 12のセットにv。これにより、これら2つの重みが異なるため、コスト関数を視覚化できます。hR×RRhあなたはv=gαWあなたはvWあなたはvWW11あなたはW12v

次の図は、p = 3、およびN = 1のシグモイド活性化関数の場合を示しています(非常に単純なアーキテクチャ)。すべてのデータ(両方のxyは)IIDされたN0 1 、のような任意の重みはプロット関数で変化されていません。ここで凸性の欠如を見ることができます。n=50p=3N=1バツyN01

損失表面

この図を作成するために使用した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])))

素晴らしい答え; アクティベーション関数に関係なく、重み/隠し単位の順列を常に見つけることができると思います。これは一般に非凸性を意味します
information_interchange

1
@information_interchangeありがとう、絶対に正しいと思います、OPがそのアプローチについての話にもリンクした答え
jld

すばらしい答えですが、MSEの代わりにMAEを使用すると、なぜ非凸であるかがわかりません。凸関数と非減少関数の構成が凸であるため、MAEがある場合、凸関数が必要です。 Wに関して
パンダ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.