เป็นที่แน่นอนนูน Yฉัน แต่ถ้า Yฉัน = F ( x ฉัน ; θ )มันอาจจะไม่นูน θซึ่งเป็นสถานการณ์ที่มีรูปแบบไม่เป็นเส้นตรงมากที่สุดและเราจริงเกี่ยวกับการดูแลนูนใน θΣผม( yผม- y^ผม)2Y^ผมY^ผม= f( xผม; θ )θθเพราะนั่นคือสิ่งที่เรากำลังเพิ่มประสิทธิภาพการทำงานของค่าใช้จ่าย เกิน.
ตัวอย่างเช่นลองพิจารณาเครือข่ายที่มี 1 เลเยอร์ที่ซ่อนอยู่ของหน่วยและเลเยอร์เอาท์พุทแบบเชิงเส้น: ฟังก์ชันต้นทุนของเราคือ
g ( α , W ) = ∑ฉัน( y ฉัน - α i σ ( W x i ) ) 2
โดยx i ∈ R pและW ∈ R N × p (และฉันไม่ใช้เงื่อนไขอคติสำหรับความเรียบง่าย) สิ่งนี้ไม่จำเป็นต้องนูนออกมาเมื่อมองว่าเป็นฟังก์ชั่นของ( α , W )ยังไม่มีข้อความ
ก.( α , W) = ∑ผม( yผม- αผมσ( วxผม) )2
xผม∈ RพีW∈ Rยังไม่มีข้อความ× p( α , W)(ขึ้นอยู่กับ
: หากใช้ฟังก์ชั่นการเปิดใช้งานเชิงเส้นฟังก์ชันนี้จะยังคงเป็นแบบนูนได้) และยิ่งเครือข่ายของเราได้รับมากขึ้นสิ่งที่นูนน้อยก็คือ
σ
ตอนนี้กำหนดฟังก์ชั่นโดยh ( u , v ) = g ( α , W ( u , v ) )โดยที่W ( u , v )เป็นWพร้อมW 11ตั้งค่าเป็นUและW 12ตั้งค่าเป็นv . สิ่งนี้ช่วยให้เราเห็นภาพฟังก์ชั่นต้นทุนเนื่องจากน้ำหนักสองอย่างนี้แตกต่างกันไปh : R × R → Rh ( u , v ) = g( α , W( u , v ) )W( u , v )WW11ยูW12โวลต์
n = 50p = 3ยังไม่มีข้อความ= 1xYยังไม่มีข้อความ( 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])))