Back-propagation (역전파)

2021. 8. 16. 17:04AI/Deep learning

    목차
반응형

제프리 힌튼이 찾은것은

계속 같은 parameter에 대해서 미분을 하고 있음

layer를 계속 거치면서 편미분의 횟수가 quadratic quadratic...으로 계산

이미지는 수만개의 learning parameter

이미지의 각 feature pixel !

 

 

중복 없이 하려면?

back-propagation

 

back-propagation

편미분의 중복을 없애고 효율적으로 수행

layer들의 여러 weight들의 최적화를 위해 미분값을 구함

 

미분의 체인룰 사용

 

               x3            x4
        ----> g(x) -------> f(x) ----> 
         x         g(x)           f(g(x))

         1           3             12

(x*3)*4

x가 소량 증가 시 g(x)가 얼마나 증가하는지 delta를 의미

 

f(g(x)) x로 미분하고자 함

           d f(g(x))
            ------
            g(x)

g(x)가 조금 증가할 경우 f(g(x))는 얼마나 증가하나

           d g(x)        f(x+t) - f(t)
           ------  = lim -------------
           dx               x

 

미분의 chain rule을 적용하면,

각 layer 별로 적용되는 함수들을 각각 자신의 가중치로 미분 시,

각 layer들의 미분은, 각각 layer의 "미분의 곱"으로 표현됨

 

내 뒷단의 출력을 '나'(현재 layer)의 가중치로 미분

 

z = g(f(x))

 

z' = dz/dy * dy/dx

연쇄범칙에 의해 z의 미분은 y = f(x)의 미분과 z = g(y)의 무분의 곱으로 구해짐

 

아무리 복잡하고 연결이 많다해도, 그 미분은 개별 함수의 미분의 곱으로 표현됨

국소적인 미분을 계산할 수 있다면 그 값들을 곱해서 전체의 미분을 구할 수 있음

 

끝단부터 자신의 가중치 변수로 기울기를 구하고(미분하고)

이를 앞단으로 기울기로서 전달

앞단은 다시 자신의 가중치 변수로 기울기를 구하고(미분하고) 이를 앞단으로 기울기로서 전달

반복...

 

forward pass 1회와

backward pass 1회로 모든 편미분을 한번에 계산함

 

forward pass

입력 layer 부터의 weight

여기서 data가 들어오면 pi(x) layer를 따라 아래와 같이 됨 

 

f1(x)

f2(f1(x))

f3(f2(f1(x)))

f4(f3(f2(f1(x)))) = output = f5

 

backward pass

출력단부터 입력단까지의 미분 체인룰을 통한 분해

                   d out
            g5   = ---   = 2*f5
                   df5

            g4 = d out   d f5
                 ----- = ---- * g5  = 2*f5
                 d f4    d f4

            g3 = d out   d f4
                 ----- = ---- * g4 = 2*f5
                 d f3    d f3

                ....
            d out   d f5   d f4          d f1
            ----- * ---- * ---- * .... * ----
            d f5    d f4   d f3          d v1

이기에,

            d out
            ----- <- f3의 경우 - 이걸로 f3의 weight을 갱신
            d f3

            d out
            -----  <- 최종단의 경우 - 이걸로 v1의 weight을 갱신
            d v1

중간의 미분 결과를 재사용하겠다는 것

 

back으로 가면서

기존 계산 결과를 재사용하면서 앞단으로 가는 것

이렇게 하면 중복된 계산이 많이 없어짐

한번 계산된 것을 재사용 하는 것 임

 

Optimization with backpropagation

GPU의 경우 100개의 data를 한번에 한번의 forward/backward pass

GPU를 사용해 데이터 별로 갱신

 

weight 갱신의 경우 GPU를 써서 돌려도 결국 batch 인 경우 batch data 를 모두 각각 GPU 를 써서 돌린 이후 1 weight 갱신임

 

미니배치가 100개일 때, 100회의 역전파가 병렬로 수행되면, 그렇게 구해진 100개의 가중치는 평균 -> 이는 병렬 처리 안 됨

 

이건 무시할 만한 연산

summation 정도임

 

GPU core 개수 뿐만 아니라 memory size가 매우 중요

 

반응형

'AI > Deep learning' 카테고리의 다른 글

data partitioning, hyper-parameter tuning  (0) 2021.08.16
data partitioning, hyper-parameter tuning  (0) 2021.08.16
딥러닝 성능 향상  (0) 2021.08.16
Activation functions  (0) 2021.08.16
SGD (Stochastic Gradient Descent)  (0) 2021.08.16