gerçekten de dışbükeydir y ı . Ama eğer y ı = f ( x i ; θ ) o dışbükey olmayabilir θ , en doğrusal olmayan modellerle durum olan ve aslında içinde dışbükeylik önem İçeride ISTV melerin RWMAIWi'nin biz maliyet fonksiyonunu optimize şey bu çünkü üzerinde.Σben( yben- y^ben)2y^beny^ben= f( xben; θ )θθ
Örneğin, 1 gizli tabakası ile bir ağ düşünelim birimleri ve doğrusal bir çıkış tabakası: bizim fonksiyonudur
g ( α , W ) = Σ i ( y ı - α i σ ( W x i ) ) 2
burada x i ∈ R p ve W ∈ R N × p (ve basitlik için önyargı terimlerini atlıyorum). ( Α , W ) nin bir fonksiyonu olarak bakıldığında bu mutlaka dışbükey değildirN-
g( a , W) = ∑ben( yben- αbenσ( Wxben) )2
xben∈ RpW∈ RN-× p( a , W)(
bağlı olarak : eğer bir doğrusal aktivasyon işlevi kullanılıyorsa, o zaman bu hala dışbükey olabilir). Ağımız ne kadar derine girerse, dışbükey şeyler de o kadar az olur.
σ
Şimdi fonksiyonunu tanımlayın : R × R → R , h ( u , v ) =h : R × R → R burada W ( u , v ) olan B ile B 11 için resim u ve W, 12 , setin v . Bu, bu iki ağırlık değiştiği için maliyet fonksiyonunu görselleştirmemize izin verir.h ( u , v ) = g( a , W( u , v ) )W( u , v )WW11uW12v
n = 50p = 3N-= 1xyN-( 0 , 1 )
İşte bu rakamı yapmak için kullandığım R kodu (parametrelerin bazıları şimdi yaptığımdan biraz farklı değerlerde olsa da, aynı olmayacaklar):
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])))