ทำไมฟังก์ชั่นต้นทุนของโครงข่ายประสาทเทียมจึงไม่นูน?


22

มีเธรดที่คล้ายกันที่นี่ ( ฟังก์ชั่นต้นทุนของเครือข่ายประสาทเทียมไม่ใช่แบบนูน? ) แต่ฉันไม่สามารถเข้าใจประเด็นในคำตอบที่นั่นและเหตุผลของฉันในการถามอีกครั้งโดยหวังว่าสิ่งนี้จะชี้แจงปัญหาบางอย่าง:

ถ้าฉันใช้ผลรวมของฟังก์ชั่นค่าใช้จ่ายผลต่างยกกำลังสองในที่สุดฉันก็ปรับรูปแบบโดยที่คือค่าฉลากจริงในระหว่างการฝึก เฟสและเป็นค่าป้ายกำกับที่คาดการณ์ไว้ เนื่องจากนี่เป็นรูปสี่เหลี่ยมจัตุรัสจึงควรเป็นฟังก์ชันต้นทุนนูน แล้วอะไรคือสิ่งที่ทำให้นูนใน NN ไม่ได้? Y YΣi=1N(yiyi^)2yy^


7
นิด ๆ ก็คงเป็นเพราะY = F ( x )และโดยทั่วไปมีการค้ำประกันที่ฟังก์ชั่นโดยพลการจะนูนไม่มีy^=f(x)
generic_user

คำตอบ:


35

เป็นที่แน่นอนนูน Yฉัน แต่ถ้า Yฉัน = F ( x ฉัน ; θ )มันอาจจะไม่นูน θซึ่งเป็นสถานการณ์ที่มีรูปแบบไม่เป็นเส้นตรงมากที่สุดและเราจริงเกี่ยวกับการดูแลนูนใน θΣผม(Yผม-Y^ผม)2Y^ผมY^ผม=(xผม;θ)θθเพราะนั่นคือสิ่งที่เรากำลังเพิ่มประสิทธิภาพการทำงานของค่าใช้จ่าย เกิน.

ตัวอย่างเช่นลองพิจารณาเครือข่ายที่มี 1 เลเยอร์ที่ซ่อนอยู่ของหน่วยและเลเยอร์เอาท์พุทแบบเชิงเส้น: ฟังก์ชันต้นทุนของเราคือ g ( α , W ) = ฉัน( y ฉัน - α i σ ( W x i ) ) 2 โดยx iR pและW R N × p (และฉันไม่ใช้เงื่อนไขอคติสำหรับความเรียบง่าย) สิ่งนี้ไม่จำเป็นต้องนูนออกมาเมื่อมองว่าเป็นฟังก์ชั่นของ( α , W )ยังไม่มีข้อความ

ก.(α,W)=Σผม(Yผม-αผมσ(Wxผม))2
xผมRพีWRยังไม่มีข้อความ×พี(α,W)(ขึ้นอยู่กับ : หากใช้ฟังก์ชั่นการเปิดใช้งานเชิงเส้นฟังก์ชันนี้จะยังคงเป็นแบบนูนได้) และยิ่งเครือข่ายของเราได้รับมากขึ้นสิ่งที่นูนน้อยก็คือσ

ตอนนี้กำหนดฟังก์ชั่นโดยh ( u , v ) = g ( α , W ( u , v ) )โดยที่W ( u , v )เป็นWพร้อมW 11ตั้งค่าเป็นUและW 12ตั้งค่าเป็นv . สิ่งนี้ช่วยให้เราเห็นภาพฟังก์ชั่นต้นทุนเนื่องจากน้ำหนักสองอย่างนี้แตกต่างกันไปชั่วโมง:R×RRชั่วโมง(ยู,โวลต์)=ก.(α,W(ยู,โวลต์))W(ยู,โวลต์)WW11ยูW12โวลต์

n=50พี=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])))

คำตอบที่ยอดเยี่ยม; ฉันคิดว่าไม่ว่าจะเปิดใช้งานฟังก์ชั่นใดเราสามารถหาการเปลี่ยนแปลงของน้ำหนัก / หน่วยที่ซ่อนอยู่ซึ่งโดยทั่วไปหมายถึงการไม่นูน
information_interchange

1
@information_interchange ขอบคุณและฉันคิดว่าคุณพูดถูกต้องคำตอบที่ OP เชื่อมโยงกับการพูดคุยเกี่ยวกับวิธีการนั้นด้วย
jld

คำตอบที่ดี แต่ถ้าเราใช้แม่แทนที่จะเป็น MSE ฉันไม่เข้าใจว่าทำไมมันจึงไม่ใช่แบบนูนส่วนประกอบของฟังก์ชันนูนและไม่ลดลงเป็นนูนดังนั้นถ้าเรามีแม่เราก็ควรจะมีฟังก์ชันนูน เกี่ยวกับ W.
Panda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.