심층 신경망-ReLU를 통한 역 전파


17

ReLU를 사용하여 전파를 되 찾는 데 어려움을 겪고 있으며 일부 작업을 수행했지만 제대로 진행되고 있는지 확실하지 않습니다.

비용 함수 : y는실수 값이고, y는 예측값이다. 또한항상x> 0이라고 가정하십시오.12(yy^)2yy^x


1 층 ReLU, 1 층의 무게는 w1

여기에 이미지 설명을 입력하십시오

dCdw1=dCdRdRdw1

dCw1=(yReLU(w1x))(x)


첫 번째 레이어의 가중치가 w2 이고 두 번째 레이어가 2 레이어 ReLU, w1그리고 첫 번째 레이어 w 2 를 업데이트하고 싶었습니다.w2

여기에 이미지 설명을 입력하십시오

dCdw2=dCdRdRdw2

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

이후 ReLU(w1ReLU(w2x))=w1w2x


3 층 ReLU, 여기서 1 층의 무게는 , 2 층 w 2 및 3 층 w 1입니다.w3w2w1

여기에 이미지 설명을 입력하십시오

dCdw3=dCdRdRdw3

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

이후 ReLU(w1ReLU(w2(ReLU(w3))=w1w2w3x

연쇄 법칙은 층 만큼 길 수있는 S 자형에 비해 2 개의 도함수로만 지속되기 때문 입니다.n


은 3 번째 레이어, w 2 는 2 번째 레이어, w 1 은 3 번째 레이어 인 3 개의 레이어 가중치를 모두 업데이트하고 싶다고 가정 해 보겠습니다.w1w2w1

dCw1=(yReLU(w1x))(x)

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

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

이 파생이 올바른 경우 어떻게 사라지는 것을 방지합니까? 시그 모이 드와 비교하여 방정식에 0.25를 곱한 반면 ReLU에는 상수 값 곱셈이 없습니다. 수천 개의 레이어가있는 경우 가중치로 인해 곱셈이 많이 발생하여 사라지거나 폭발적인 그래디언트가 발생하지 않습니까?


@NeilSlater 답장을 보내 주셔서 감사합니다! 당신은 무엇을 의미하는지 잘 모르겠습니다.
user1157751

아, 네가 무슨 뜻인지 알 것 같아 글쎄, 내가이 질문을 제기 한 이유는 내가 파생 된 것이 정확하다고 확신하기 때문입니까? 나는 주변을 검색하고 처음부터 완전히 파생 된 ReLU의 예를 찾지 못했습니까?
user1157751

답변:


15

ReLU 함수 및 그 파생어에 대한 작업 정의 :

ReLU(x)={0,if x<0,x,otherwise.

ddxReLU(x)={0,if x<0,1,otherwise.

미분은 단위 단계 함수 입니다. 그래디언트가 엄격하게 정의되지는 않지만 신경망에는 실질적인 관심사가 아닌 x=0 의 문제는 무시합니다 . 위의 공식을 사용하면 0의 도함수는 1이지만 신경망 성능에 실제로 영향을 미치지 않으면 서 0 또는 0.5로 동등하게 취급 할 수 있습니다.


단순화 된 네트워크

이러한 정의를 통해 예제 네트워크를 살펴 보겠습니다.

비용 함수 C = 1로 회귀 분석을 실행 중입니다.C=12(yy^)2. 인공 뉴런의 출력으로R을정의했지만 입력 값을 정의하지 않았습니다. 완성도를 위해z를 추가하고 레이어별로 인덱싱을 추가하고 벡터의 경우 소문자와 행렬의 경우 대문자를 선호하므로첫 번째 레이어의r(1)출력은z(1)입니다.뉴런을 입력x(더 큰 네트워크에서 더 깊은r에연결할 수 있음)에 연결하는 가중치에 대한입력 및W(0)xr대신 값). 또한 가중치 매트릭스의 색인 번호를 조정했습니다. 더 큰 네트워크에서 이것이 더 명확 해지는 이유는 무엇입니까? NB 저는 현재 각 층에 뉴런 이상의 것을 무시하고 있습니다.

간단한 1 레이어, 1 뉴런 네트워크를 보면 피드 포워드 방정식은 다음과 같습니다.

z(1)=W(0)x

y^=r(1)=ReLU(z(1))

예시적인 견적으로 비용 함수의 미분은 다음과 같습니다.

Cy^=Cr(1)=r(1)12(yr(1))2=12r(1)(y22yr(1)+(r(1))2)=r(1)y

사전 변환 ( z ) 값으로 역 전파하기 위해 체인 규칙 사용 :

Cz(1)=Cr(1)r(1)z(1)=(r(1)y)Step(z(1))=(ReLU(z(1))y)Step(z(1))

Cz(1)

웨이트 W ( 0)에 대한 기울기를 구하려면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

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: No, Cy^=Cr(1) because y^=r(1). The cost function C is simple enough that you can take its derivative immediately. The only thing I haven't shown there is the expansion of the square - would you like me to add it?
Neil Slater

But C is 12(yy^)2, don't we need to perform chain rule so that we can perform the derivative on y^? dCdy^=dCdUdUdy^, where U=yy^. Apologize for asking really simple questions, my maths ability is probably causing trouble for you : (
user1157751

확장하여 일을 더 간단하게 만들 수 있다면. 그런 다음 사각형을 확장하십시오.
user1157751

@ user1157751 : 예, 당신 그런 식으로 체인 규칙을 사용할 있으며 그것은 내가 보여주는 것과 같은 대답을 줄 것입니다. 방금 정사각형을 확장했습니다. 표시하겠습니다.
Neil Slater
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.