CNN에서 역 전파


15

다음과 같은 CNN이 있습니다.

네트워크 layour

  1. 5x5 크기의 입력 이미지로 시작합니다.
  2. 그런 다음 2x2 커널과 stride = 1을 사용하여 회선을 적용하여 크기가 4x4 인 기능 맵을 생성합니다.
  3. 그런 다음 stride = 2로 2x2 최대 풀링을 적용하여 기능 맵을 크기 2x2로 줄입니다.
  4. 그런 다음 로지스틱 시그 모이 드를 적용합니다.
  5. 그런 다음 2 개의 뉴런이있는 하나의 완전히 연결된 레이어.
  6. 그리고 출력 레이어.

간단하게하기 위해 이미 전달 패스를 완료하고 δH1 = 0.25δH2 = -0.15를 계산 했다고 가정하겠습니다.

따라서 전체 정방향 통과 및 부분적으로 완료된 역방향 통과 후 내 네트워크는 다음과 같습니다.

정방향 통과 후 네트워크

그런 다음 비선형 레이어 (로지스틱 시그 모이 드)에 대한 델타를 계산합니다.

δ11=(0.250.61+0.150.02)0.58(10.58)=0.0364182δ12=(0.250.82+0.150.50)0.57(10.57)=0.068628δ21=(0.250.96+0.150.23)0.65(10.65)=0.04675125δ22=(0.251.00+0.150.17)0.55(10.55)=0.06818625

그런 다음 델타를 4x4 레이어로 전파하고 최대 풀링으로 필터링 된 모든 값을 0으로 설정하고 그라디언트 맵은 다음과 같습니다.

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

거기에서 커널 가중치를 어떻게 업데이트합니까? 네트워크에 5x5 이전에 또 다른 컨볼 루션 레이어가 있다면 커널 가중치를 업데이트하기 위해 어떤 값을 사용해야합니까? 그리고 전반적으로 내 계산이 정확합니까?


혼란스러운 점을 명확히하십시오. 이미 최대의 미분을 수행하는 방법을 알고 있습니다 (값이 최대 인 경우를 제외하고 모두 0 임). 따라서 최대 풀링을 잊어 봅시다. 컨볼 루션에 문제가 있습니까? 각 컨볼 루션 패치에는 자체 파생물이 있으며 계산 프로세스가 느립니다.
Ricardo Cruz

가장 좋은 소스는 딥 러닝 북입니다 -쉽게 읽을 수는 없습니다 :). 첫 번째 회선은 이미지를 패치로 나누고 일반 신경망을 적용하는 것과 같습니다. 여기서 각 픽셀은 가중치를 사용하는 "필터"수에 연결됩니다.
Ricardo Cruz

1
본질적으로 질문은 역 전파를 사용하여 커널 가중치를 어떻게 조정합니까?
JahKnows

@JahKnows .. 및 해당 예를 고려하여 컨볼 루션 레이어의 그라디언트 계산 방법.
koryakinp

컨볼 루션 레이어와 관련된 활성화 기능이 있습니까?
JahKnows

답변:


9

컨볼 루션은 가중치 공유 원리를 사용하여 수학을 크게 복잡하게 만들지 만 잡초를 통과하려고합시다. 나는 이 소스 에서 대부분의 설명을 그리고 있다 .


포워드 패스

컨볼 루션 레이어의 순방향 패스는 다음과 같이 표현할 수 있습니다.

xi,jl=mnwm,nloi+m,j+nl1+bi,jl

k1k2k1=k2=2x0,0=0.25mn

역 전파

다음과 같이 정의 된 평균 제곱 오차 (MSE)를 사용한다고 가정합니다.

E=12p(tpyp)2

우리는 결정하고 싶다

Ewm,nlmnw0,01=0.13HK

(Hk1+1)(Wk2+1)

44w0,01=0.13x0,01=0.25

Ewm,nl=i=0Hk1j=0Wk2Exi,jlxi,jlwm,nl

이는 전체 출력 공간에서 반복되고 출력이 기여하는 오류를 결정한 다음 해당 출력에 대한 커널 가중치의 기여 요인을 결정합니다.

단순성을 위해 출력 공간 델타의 오류에 대한 기여를 호출하고 역 전파 된 오류를 추적하도록하겠습니다.

Exi,jl=δi,jl

가중치의 기여

컨볼 루션은

xi,jl=mnwm,nloi+m,j+nl1+bi,jl

그러므로,

xi,jlwm,nl=wm,nl(mnwm,nloi+m,j+nl1+bi,jl).

By expanding the summation we end up observing that the derivative will only be non-zero when m=m and n=n. We then get

xi,jlwm,nl=oi+m,j+nl1.

Then back in our error term

Ewm,nl=i=0Hk1j=0Wk2δi,jloi+m,j+nl1.

Stochastic gradient descent

w(t+1)=w(t)ηEwm,nl

Let's calculate some of them

import numpy as np
from scipy import signal
o = np.array([(0.51, 0.9, 0.88, 0.84, 0.05), 
              (0.4, 0.62, 0.22, 0.59, 0.1), 
              (0.11, 0.2, 0.74, 0.33, 0.14), 
              (0.47, 0.01, 0.85, 0.7, 0.09),
              (0.76, 0.19, 0.72, 0.17, 0.57)])
d = np.array([(0, 0, 0.0686, 0), 
              (0, 0.0364, 0, 0), 
              (0, 0.0467, 0, 0), 
              (0, 0, 0, -0.0681)])

gradient = signal.convolve2d(np.rot90(np.rot90(d)), o, 'valid')

array([[ 0.044606, 0.094061], [ 0.011262, 0.068288]])

Now you can put that into the SGD equation in place of Ew.


Please let me know if theres errors in the derivation.


Update: Corrected code


How Ewm,nl will look like in case my filter has multiple channels ?
koryakinp

1
gradient = signal.convolve2d(np.rot90(np.rot90(d)), o, 'valid')
Sun Bee

I would like suggest to review this answer. In particular, the provided code in python might be checked
Duloren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.