모두야

CH5) 오차역전파법 본문

밑.시.딥/1권

CH5) 오차역전파법

미미밍2 2021. 7. 24. 00:02
반응형

신경망 학습

: 데이터로부터 매개변수 값을 정하는 방법

 

학습 : 훈련 데이터로부터 가중치 매개변수의 최적값 자동으로 획득하는 것


0. 신경망 학습 이란 데이터의 가중치를 정하는 것이다.

  1. 가중치 라는 매개변수가 있다.
  2. 각 값에 알맞는 가중치의 값을 찾자.
  3. 어떻게 찾지? 
  4. 손실 함수의 최소값이 가중치의 최적값 일것이다. 
  5. 손실 함수 최솟값은 어떻게 구해?
  6. 경사하강법을 이용해서!

순전파 forward( )

역전파 backward( )

곱셈 노드 MulLayer

덧셈 도드 AddLayer

 

지금까지는 단순한 계층이다.

다음장부터는 신경망을 구성하는 '계층' 각각을 하나의 클래스로 구현한다.

계층이란, 신경망의 기능 단위이다.

     ex) 시그모이드 함수를 위한 Sigmoid 기능 계층

           행렬 내적을 위한 Aiffne 기능 계층 


미분 : x 변화량에 대한 Y의 변화량 

ex) 사과 가격이 오르면 최종 금액에 어떤 영향을 끼치는지!

      = 사과 가격에 대한 지불 금액의 미분

곱셈 계층


활성화 함수 계층 구현하기

계산 그래프를 신경망에 적용!!!!

신경망을 구성하는 층 (계층) 각각을 클래스 하나로 구현한다.

 

1. ReLu 계층

순전파 입력 x 가 0보다 크면, 역전파는 그대로 보낸다.

순전파 입력 x가 0보다 작으면, 역전파는 0으로 보낸다.

 

 

2. Sigmoid 계층

시그모이드 함수
시그모이드 함수 순전파
시그모이드 함수 역전파
         


5.6 Affine / Softmax 계층 구현하기

 

 

    Y : 뉴런의 가중치 합

   

    Y를 활성화 함수로 변환하여, 다음층으로 전파하면 

    신경망의 순전파 흐름이 된다.

 

 

 

 

 

 

 

 

어파인 변환 : 신경망의 순전파 때, 수행하는 행렬의 내적 => Aiffne 계층

Affine 계층의 계산 그래프

역전파도 구할 수 있다. 

행렬을 사용한 역전파 -> 전치행렬 이용

지금까지 나타난 Affine 계층은 입력 데이터 X 하나만 고려한 것이다.


배치용 Affine 계층

데이터 N개를 묶어 순전파 하는 경우를 살펴보자.

묶은 데이터를 '배치'라고 한다.

배치용 Affine 계층을 살펴보자.

배치용 Affine계층 계산 그래프

 

 

순전파 편향 계산 / 역전파 편향 계산


Softmax - with - Loss 계층

: 마지막 출력층에서 사용하는 소프트맥스 함수

소프트맥스 함수 - 입력값을 정규화하여 출력한다.

                         = 정규화 : 출력의 합이 1이 되도록 변형한다.

 

신경망에는 학습과 추론 두가지 작업을 진행한다.

추론할 때는 Softmax 계층을 사용하지 않고, 마지막 Affine 계층의 출력을 인식 결과로 이용한다.

+) 정규화 하지 않은 출력 = Affine 계층의 출력 결과는 신경망에서 점수(score)라고 한다.

 

=> 신경망에서는 추론의 답을 내는 과정에서, 가장 높은 점수만 알면 되서 굳이 Softmax 계층까지 필요가 없다.

하지만, 신경망 학습 과정에서는 Softmax 계층이 필요하다. why?


소프트맥스 계층 + 손실함수(교차 엔트로피 오차) = Softmax-with-Loss 계층

[ 과정은 부록 A 살펴보자 ]

 

간소화 ver.

 

순전파

  1. 3클래스 분류인 3개의 입력 a1,a2,a3 를 받는다. 
  2. Softmax 함수로 정규화한 y1,y2,y3를 출력한다.
  3. Cross Entropy Error를 이용하여, 출력된 ( y1,y2,y3 )와 정답레이블 ( t1,t2,t3 )를 계산한다.
  4. 둘의 차이를 손실 L로 표시한다.          

역전파

Softmax 계층의 역전파는 ( y1-t1, y2-t2, y3-t3 )라는 결과가 나타난다.

Softmax 순전파 출력과 정답 레이블의 차이이다.

 

신경망의 역전파에서는, 출력과 정답의 차이인 오차가 앞 계층에 전해진다. 

 

신경망의 목적은 신경망의 출력(softmax 출력)이 정답과 가까워지도록 가중치 매개변수 값을 조정하는 것이다.

따라서, 신경망의 출력과 정답과의 차이를 앞 계층에 전달해야한다.

 

class SoftmaxWithLoss:
    def __init__(self):
        self.loss = None  # 손실
        self.y = None    # softmax의 출력
        self.t = None    # 정답 레이블 (원-핫 벡터)
        
    def forward(self,x,t):
        self.t = t
        self.y = softmax(x)
        self.loss = cross_entropy_error(self.y,self.t)
        
        return self.loss
    
    def backward(self,dout=1):
        batch_size = self.t.shape[0]
        dx = (self.y - self.t) / batch_size   # 데이터 1개당 오차를 앞 계층으로 전파함
        
        return dx

5.7 오차 역전파법 구현하기

지금까지 구현한 계층을 조합하여 신경망에 구축한다.

 

0. 전제
신경망에는 가중치, 편향이 있다.
이 가중치와 편향을 훈련 데이터에 맞게 조정하는 과정을 '학습'이라고 한다.

신경망 학습 4단계
1. 미니배치
훈련 데이터 중 일부를 무작위로 가져와 선별한다. 이를 "미니배치"라고 한다.
미니배치의 손실함수 값을 줄이는 것이 목표이다.

2. 기울기 산출  (오차역전파법)
미니배치의 손실 함수 값을 줄이기 위하여, 각 가중치 매개변수의 기울기를 구한다.
기울기는 손실 함수 값을 가장 작게 하는 방향으로 제시한다.

3. 매개변수 갱신
가중치 매개변수를 기울기 방향으로 아주 조금 갱신한다.

4. 반복
1~3단계를 반복한다.

신경망 계층을 OrderedDict에 보관한다.

OrderedDict : 순서가 있는 딕셔너리 -> 딕셔너리에 추가한 순서를 기억한다.

=> 순전파 때는, 추가한 순서대로 각 계층의 forward() 메서드를 호출하면 처리 완료

=> 역전파 때는, 계층을 반대 순서로호출하면 된다.

반응형

'밑.시.딥 > 1권' 카테고리의 다른 글

CH7) 합성곱 신경망 ( CNN )  (0) 2021.07.25
CH6) 학습 관련 기술들  (0) 2021.07.24
CH4) 신경망 학습 - (2)  (0) 2021.07.23
CH4) 신경망 학습 - (1)  (0) 2021.07.15
CH3) 신경망 - (2)  (0) 2021.07.12