Deep Neural Network - Backpropogation ด้วย ReLU


17

ฉันมีปัญหาในการได้รับการเผยแพร่กลับด้วย ReLU และฉันทำงานบางอย่าง แต่ฉันไม่แน่ใจว่าฉันกำลังถูกทาง

ฟังก์ชันต้นทุน:โดยที่คือค่าจริงและเป็นค่าที่คาดการณ์ไว้ นอกจากนี้สมมติว่า > 0 เสมอ12(yy^)2yy^x


1 Layer ReLU โดยที่น้ำหนักที่ชั้นที่ 1 คือw1

ป้อนคำอธิบายรูปภาพที่นี่

dCdw1=dCdRdRdw1

dCw1=(yReLU(w1x))(x)


2 Layer ReLU โดยที่ตุ้มน้ำหนักที่ชั้นที่ 1 คือและชั้นที่สองคือและฉันต้องการอัปเดตชั้นที่ 1w2w1w2

ป้อนคำอธิบายรูปภาพที่นี่

dCdw2=dCdRdRdw2

dCw2=(yReLU(w1ReLU(w2x))(w1x)

ตั้งแต่ReLU(w1ReLU(w2x))=w1w2x


3 Layer ReLU โดยที่ตุ้มน้ำหนักที่ชั้นที่ 1 คือ , 2nd layer w 2และ 3rd layer w 1w3w2w1

ป้อนคำอธิบายรูปภาพที่นี่

dCdw3=dCdRdRdw3

dCw3=(yReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

ตั้งแต่ReLU(w1ReLU(w2(ReLU(w3))=w1w2w3x

เนื่องจากกฎลูกโซ่ใช้เวลาเพียง 2 อนุพันธ์เมื่อเทียบกับ sigmoid ซึ่งอาจเป็นจำนวนชั้นn


ว่าฉันต้องการอัปเดตน้ำหนักของทั้ง 3 เลเยอร์โดยที่คือเลเยอร์ 3, w 2คือเลเยอร์ที่ 2, w 1คือเลเยอร์ที่ 3w1w2w1

dCw1=(yReLU(w1x))(x)

dCw2=(yReLU(w1ReLU(w2x))(w1x)

dW3=(Y-RอีLยู(W1* * * *RอีLยู(W2(* * * *RอีLยู(W3)))(W1W2x)

หากการสืบทอดนี้ถูกต้องสิ่งนี้จะป้องกันไม่ให้หายไปได้อย่างไร เมื่อเทียบกับ sigmoid ที่เรามีจำนวนมากคูณ 0.25 ในสมการในขณะที่ ReLU ไม่มีการคูณค่าคงที่ใด ๆ หากมีหลายพันชั้นจะมีการคูณจำนวนมากเนื่องจากน้ำหนักแล้วจะไม่หายไปหรือระเบิดไล่ระดับสี?


@ NeilSlater ขอบคุณสำหรับคำตอบของคุณ! คุณสามารถทำอย่างละเอียดฉันไม่แน่ใจว่าคุณหมายถึงอะไร?
user1157751

อาฉันคิดว่าฉันรู้ว่าคุณหมายถึงอะไร เหตุผลที่ฉันถามคำถามนี้คือฉันแน่ใจว่าการได้มานั้นถูกต้องหรือไม่ ฉันค้นหาไปรอบ ๆ และไม่พบตัวอย่างของ ReLU ที่ได้มาอย่างสมบูรณ์ตั้งแต่ต้น?
user1157751

คำตอบ:


15

นิยามการทำงานของฟังก์ชัน ReLU และอนุพันธ์:

RอีLยู(x)={0,ถ้า x<0,x,มิฉะนั้น.

ddxRอีLยู(x)={0,ถ้า x<0,1,มิฉะนั้น.

อนุพันธ์เป็นหน่วยฟังก์ชั่นขั้นตอน สิ่งนี้ไม่สนใจปัญหาที่x=0โดยที่การไล่ระดับสีไม่ได้ถูกกำหนดอย่างเคร่งครัด แต่นั่นไม่ได้เป็นปัญหาสำหรับเครือข่ายประสาทเทียม ด้วยสูตรข้างต้นอนุพันธ์ที่ 0 คือ 1 แต่คุณสามารถปฏิบัติต่อมันอย่างเท่าเทียมกันเป็น 0 หรือ 0.5 โดยไม่มีผลกระทบต่อประสิทธิภาพเครือข่ายประสาทเทียมอย่างแท้จริง


เครือข่ายง่าย

ด้วยคำจำกัดความเหล่านั้นมาดูเครือข่ายตัวอย่างของคุณ

คุณกำลังดำเนินการถดถอยด้วยฟังก์ชันต้นทุน=12(Y-Y^)22 คุณได้กำหนดRเป็นเอาท์พุทของเซลล์ประสาทเทียม แต่คุณยังไม่ได้กำหนดค่าอินพุต ฉันจะเพิ่มว่าเพื่อความสมบูรณ์ - เรียกว่าZเพิ่มการจัดทำดัชนีบางส่วนโดยชั้นและฉันชอบกรณีที่ต่ำกว่าสำหรับเวกเตอร์และกรณีบนสำหรับการฝึกอบรมเพื่อให้R(1)การส่งออกของชั้นแรก,Z(1)สำหรับ อินพุตและW(0)สำหรับน้ำหนักที่เชื่อมต่อเซลล์ประสาทกับอินพุตx(ในเครือข่ายขนาดใหญ่ที่อาจเชื่อมต่อกับr ที่ลึกกว่าRค่าแทน) ฉันได้ปรับหมายเลขดัชนีสำหรับเมทริกซ์น้ำหนักด้วย - เหตุใดจึงมีความชัดเจนมากขึ้นสำหรับเครือข่ายที่ใหญ่ขึ้น NB ฉันไม่สนใจมีมากกว่าเซลล์ประสาทในแต่ละชั้นตอนนี้

ดูที่ 1 เลเยอร์เครือข่ายเซลล์ประสาท 1 แบบเรียบง่ายสมการป้อนไปข้างหน้าคือ:

Z(1)=W(0)x

Y^=R(1)=RอีLยู(Z(1))

อนุพันธ์ของฟังก์ชันต้นทุน wrt การประมาณตัวอย่างคือ:

Y^=R(1)=R(1)12(Y-R(1))2=12R(1)(Y2-2YR(1)+(R(1))2)=R(1)-Y

การใช้กฎลูกโซ่สำหรับการกระจายกลับเป็นค่า pre-transform ( Z ):

Z(1)=R(1)R(1)Z(1)=(R(1)-Y)Sเสื้ออีพี(Z(1))=(RอีLยู(Z(1))-Y)Sเสื้ออีพี(Z(1))

Z(1)

W(0)

CW(0)=Cz(1)z(1)W(0)=(ReLU(z(1))y)Step(z(1))x=(ReLU(W(0)x)y)Step(W(0)x)x

. . . because z(1)=W(0)x therefore z(1)W(0)=x

That is the full solution for your simplest network.

However, in a layered network, you also need to carry the same logic down to the next layer. Also, you typically have more than one neuron in a layer.


More general ReLU network

If we add in more generic terms, then we can work with two arbitrary layers. Call them Layer (k) indexed by i, and Layer (k+1) indexed by j. The weights are now a matrix. So our feed-forward equations look like this:

zj(k+1)=iWij(k)ri(k)

rj(k+1)=ReLU(zj(k+1))

In the output layer, then the initial gradient w.r.t. rjoutput is still rjoutputyj. However, ignore that for now, and look at the generic way to back propagate, assuming we have already found Crj(k+1) - just note that this is ultimately where we get the output cost function gradients from. Then there are 3 equations we can write out following the chain rule:

First we need to get to the neuron input before applying ReLU:

  1. Czj(k+1)=Crj(k+1)rj(k+1)zj(k+1)=Crj(k+1)Step(zj(k+1))

We also need to propagate the gradient to previous layers, which involves summing up all connected influences to each neuron:

  1. Cri(k)=jCzj(k+1)zj(k+1)ri(k)=jCzj(k+1)Wij(k)

And we need to connect this to the weights matrix in order to make adjustments later:

  1. CWij(k)=Czj(k+1)zj(k+1)Wij(k)=Czj(k+1)ri(k)

You can resolve these further (by substituting in previous values), or combine them (often steps 1 and 2 are combined to relate pre-transform gradients layer by layer). However the above is the most general form. You can also substitute the Step(zj(k+1)) in equation 1 for whatever the derivative function is of your current activation function - this is the only place where it affects the calculations.


Back to your questions:

If this derivation is correct, how does this prevent vanishing?

Your derivation was not correct. However, that does not completely address your concerns.

The difference between using sigmoid versus ReLU is just in the step function compared to e.g. sigmoid's y(1y), applied once per layer. As you can see from the generic layer-by-layer equations above, the gradient of the transfer function appears in one place only. The sigmoid's best case derivative adds a factor of 0.25 (when x=0,y=0.5), and it gets worse than that and saturates quickly to near zero derivative away from x=0. The ReLU's gradient is either 0 or 1, and in a healthy network will be 1 often enough to have less gradient loss during backpropagation. This is not guaranteed, but experiments show that ReLU has good performance in deep networks.

If there's thousands of layers, there would be a lot of multiplication due to weights, then wouldn't this cause vanishing or exploding gradient?

Yes this can have an impact too. This can be a problem regardless of transfer function choice. In some combinations, ReLU may help keep exploding gradients under control too, because it does not saturate (so large weight norms will tend to be poor direct solutions and an optimiser is unlikely to move towards them). However, this is not guaranteed.


Was a chain rule performed on dCdy^?
user1157751

@ user1157751: ไม่ Y^=R(1) เพราะ Y^=R(1). ฟังก์ชันต้นทุน C นั้นง่ายพอที่คุณจะสามารถหาอนุพันธ์ได้ทันที สิ่งเดียวที่ฉันไม่ได้แสดงนั่นคือการขยายตัวของสแควร์ - คุณต้องการให้ฉันเพิ่มเข้าไปหรือไม่
Neil Slater

แต่ คือ 12(Y-Y^)2เราไม่จำเป็นต้องทำกฎลูกโซ่เพื่อให้เราสามารถทำอนุพันธ์ได้ Y^? ddY^=ddยูdยูdY^ที่ไหน ยู=Y-Y^. ขออภัยที่ถามคำถามง่าย ๆ ความสามารถทางคณิตศาสตร์ของฉันอาจเป็นปัญหาสำหรับคุณ: (
user1157751

หากคุณสามารถทำให้สิ่งต่าง ๆ เรียบง่ายขึ้นด้วยการขยาย จากนั้นโปรดขยายพื้นที่สี่เหลี่ยม
user1157751

@user1157751: Yes you could use the chain rule in that way, and it would give the same answer as I show. I just expanded the square - I'll show it.
Neil Slater
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.