티스토리 뷰

딥러닝

오차역전파법 - 계산 그래프

4567은 소수 2021. 1. 13. 03:03

오차 역전파법 : 신경망의 가중치 매개변수에 대한 손실함수의 기울기를 빠르게 구하기 위함 (효율적으로)

 

계산 그래프 : 계산 과정을 그래프로 나타낸 것 (노드와 엣지 이용)

ch5 149p

순전파 : 순서대로 진행한 것

 

ch5 159p

역전파 : 역으로 계산한 것 => 이를 이용해 미분을 구한다.

 

연쇄 법칙 이용해 계산 그래프의 역전파 계산

ch5 153p
기본 상황

 

 

덧셈의 경우 z=x+y 일 때 dz/dx=1, dz/dy=1 이므로 역전파시 E값에 1을 곱한다. (E=dL/dz)

곱셈의 경우 z=x*y 일 때 dz/dx=y, dz/dy=x 이므로 역전파시 x방향 E값에 y, y방향 E값에 x를 곱한다. (E=dL/dz)

 

예제) 다음 그림과 같은 경우에서 역전파법으로 계산 그래프를 완성하자.

ch5 149p

코드

class MulLayer:
    def __init__(self):
        self.x = None
        self.y = None
        
    def forward(self, x, y):
        self.x = x
        self.y = y
        out = x * y
        return out
    
    def backward(self, dout):
        dx = dout * self.y
        dy = dout * self.x
        
        return dx, dy
    
class AddLayer:
    def __init__(self):
        pass
    
    def forward(self, x, y):
        out = x + y
        return out
    
    def backward(self, dout):
        dx = dout * 1
        dy = dout * 1
        return dx, dy
    
apple = 100
apple_num = 2
orange = 150
orange_num = 3
tax = 1.1

# 가격 계산
mul_apple_layer = MulLayer()
mul_orange_layer = MulLayer()
add_apple_orange_layer = AddLayer()
mul_tax_layer = MulLayer()

mul_apple_price = mul_apple_layer.forward(apple, apple_num)
mul_orange_price = mul_orange_layer.forward(orange, orange_num)
add_apple_orange_price = add_apple_orange_layer.forward(mul_apple_price, mul_orange_price)
total_price = mul_tax_layer.forward(add_apple_orange_price, tax)

print("total_price={}".format(total_price))

# 미분 계산
dprice = 1
dapple_orange, dtax = mul_tax_layer.backward(dprice)
print("dprice={}, dapple_orange={}, dtax={}".format(dprice, dapple_orange, dtax))

dapple_mul, dorange_mul = add_apple_orange_layer.backward(dapple_orange)
print("dapple={}, dorange={}".format(dapple_mul, dorange_mul))

dapple, dapple_num = mul_apple_layer.backward(dapple_mul)
dorange, dorange_num = mul_orange_layer.backward(dorange_mul)

print("dapple={}, dapple_num={}, dorange={}, dorange_num={}".format(dapple, dapple_num, dorange, dorange_num))

정답 ch5 163p

total_price=715.0000000000001
dprice=1, dapple_orange=1.1, dtax=650
dapple=1.1, dorange=1.1
dapple=2.2, dapple_num=110.00000000000001, dorange=3.3000000000000003, dorange_num=165.0
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함