상세 컨텐츠

본문 제목

학부연구생 딥러닝 기본개념 학습내용 복습-01 순전파와 역전파&활성함수

ML&DL

by 앱등개발자IOS 2022. 10. 9. 22:29

본문

1.    퍼셉트론이란

다수의 신호를 입력으로 받아 하나의 신호 출력하는 연산의 단위 ( 가중치, 편향값 )

 

 

        -   퍼셉트론의 한계

             XOR 같은 비선형 문제를 해결할 없다.

             => AND, NAND, OR 사용하여 층을 쌓아 (MLP) XOR 구현할 있다.

 

# 정리: 단일 Perceptron으로 AND, NAND, OR, NOR 같은 선형적인 문제만 해결 가능

     => Multi-Layer Perceptron으로 비선형적인 문제 (XOR) 해결

 

# 층을 쌓는다는 것은 더욱 복잡한 문제를 해결한다는 점이다 ( Deep Learning 같은 이치)

 

2.   신경망

퍼셉트론 : 매개변수, 편향값으로 뉴런이 얼마나 쉽게 활성화되는지 제어. 생명체 내에서 뉴런 대응

          -> when( w1x1 + w2x2 + b ) {  under 0  or  is 0  ->  0

                                                                             over  0  ->   1  }  

 

# But 가중치, 편향값을 사람이 수동으로 설정해줬어야 했다.

# 신경망 적절한 가중치 데이터로부터 자동으로 찾아준다!

 

이와 같은 입력신호, 편향의 계산값에 대한 최종 출력값 (0 or 1)” 활성함수”(ex. sigmoid, Softmax...) 만들어낸다

 

3.   활성함수

# 활성함수를 사용하는 이유?

  ->   비선형”적인 문제를 해결하기 위해!!

-        tanh, ReLu, Sigmoid 같은 activation function 사용한다면 입력에 대한 출력이 비선형적이게 된다는 것은 이해가 된다.

-        하지만 활성 함수 없이, 해당 Node 들어오는 input x1, x2…등에 대하여 a*x1 + b*x2.. 같은 선형적인 연산만 하고 Activation function 전달할 것이 아니라, 애초에 a * (x1**2) + b * (x2**3) 같은 비선형 연산 하여 출력하면 되는 것이 아닌가? 어차피  Relu계열의 활성함수를 사용한다는 것은 0 1사이가 아닌 값이 output되어도 상관 없다는 것인데.. ?????

 

=> Layer에서 선형연산만을 하는 것은 "미분 편의성"을 위해서라고 생각해두면 된다.

 

3.1 Step function과 Sigmoid 

계단 모양으로, 특정 임계값기준으로 활성 여부를 판단해주는 함수가 Step function

이를 대체하려고 나온 활성함수 “Sigmoid”  - S 모양 이라는

 

공통점 : 모두 비선형 함수 , 출력값이 0 1 사이

 

# 활성함수로 비선형 함수를 사용해야하는 이유?

    =>  선형함수를 활성함수로 이용, “신경망 깊게하는 의미 X

 

예시 ) 여러개의 입력값에 대한 계산값 w1x1 + w2x2 + w3x3 ….. + wnxn + b 대하여

 

            활성함수가 h(x) = cx + d 경우, 활성함수를 거쳐 나온 값은

            cw1x1 + cw2x2 + cw3x3 + …… + cwnxn + cb 이며,  상수 cw1 e1, cw2 e2 치환하면,

             식은 e1x1 + e2x2 + e3x3 + e4x4 + ….. + enxn + cb 이다.

 

            이렇게 나온 출력값 “e1x1 + e2x2 + e3x3 + e4x4 + ….. + enxn + cb” 다시 입력으로 다음 층의 입력으로 넣어주면,

            w1e1x1 + w1e2x2 + w1e3x3 + …. + w1enxn + cbw1 되며,

            이와 같은 과정을 거쳐 입력으로 들어온 여러 계산식들을 모두 합해도 여전히 “1차식이므로, 신경망을 깊게 만드는 이유가 없다.

            , 여전히 비선형적인 문제를 해결할 없다!

            따라서, 신경망의 층을 늘리는 효과를 보려면 비선형 함수 활성함수로 사용해야함!

 

 

# Step function 단점:

1.     출력값이 1 혹은 0으로, 활성함수로의 입력값의 크기 차이를 전혀 반영하지 못한.(데이터 손실)

2.     미분값이 어디서나 1이므로 (x=0제외) 역전파 불가능

 

# sigmoid ,단점:

    1.     출력값이 0~1 사이이므로 입력값의 크기 차이 반영 가능 ( 정교한 전달, 데이터 손실 less)

    2.     오차 역전파시, 0 가까운 sigmoid 기울기값을 계속 곱하며, 출력층으로부터 layer 필요한 변화를 충분히 전달할 없다.

             => 따라서 학습이 매우 느려진다 + Vanishing Gradient 현상의 주범@!

    3.     출력의 중심이 0 아니므로 학습이 느려진 =>  단점을 보완한 것이 tanh함수

 

# 출력층에서의 활성함수 - Softmax

출력층에서만

1. 애초에 태생이 (설계) 출력층에 사용하도록 설계

2.Normalize하면 정보가 뭉개지 때문 ( 추론 도중에 )

 

 

# Batch 처리

  Batch처리를 하는 이유? :

                    1. 배열을 효율적으로 처리할 있게 최적화 Library

                      2. 데이터 전송 병목 방지 & Bus 부하 감소

 

# 적절한 Batch size?

 => 경험적으로 찾아나가야한다. 너무 Batch Size 모델의 일반화성능을 감소시킨다고

 

4.    순전파 ( forward propagation )

정해진 매개변수 사용하여 학습 없이 추론하는 과정만 순전파라고 지칭

5.    신경망 학습

학습이란?  -- Train Dataset으로부터 weight parameter값을 스스로 변경해나가며, 올바른 추론을 하도    

             모델을 개선해나가는

 

** 퍼셉트론 수렴 정리 : 선형분리 가능한 문제는 유한번의 학습 통해 있다.

 

5-1. 기계학습 패러다임 변화

6.    Train, Test data 

Train data Test data 나누는 이유 ?  -- 신경망의 목적은 범용성이기 때문.

, “임의의” data 들어왔을 , 올바른 output 내기 위하여.

Train Data에만 지나치게 최적화된 상태를 “Overfitting”

 

7.    Loss function

The most used loss functions –  1. MSE , 2. Cross Entropy Error

# In actual code, we must add very small real number to Log Input value to prevent “-INF output of Log

 

7-1.  Why we use Loss Function instead of accuracy?

 =>   If accuracy is taken as an indicator, most of derivatives of NN parameters become “0”

 

reason?

 

      1.     매개변수의 미분값을 조금 바꾼다고 해도, 정확도 변화가 일어나기 어려움

      2.     매개변수 수정에 의한 정확도 변화가 갑작스레 (연속적이지 못하고 이산적으로)변화

      3.     이는 활성함수로서 계단 함수 사용하지 않는 이유와 일맥상통

 

, 매개변수의 작은 변화가 주는 파장을 계단함수가 없애버, 손실함수값에는 아무런 변화가 없게되고, 매개변수의 변화가 있어야만 계단함수를 거친 출력값에 변화가 생기고 손실함수/ 혹은 정확도에 변화가 생기기 때문에,

계단함수 대신 Sigmoid 손실함수로 사용하게 이유와 같다.

 

, 미세한 변화와 방향성을 연속적으로 측정하여 매개변수를 수정하기 위함

 

8.    수치미분 vs 해석적 미분

 

l  수치미분 : 점에서의 함수 ( 차분 ) 이용하여 미분하는

l  해석적 미분 : 미분식을 이용한, 오차를 포함하지 않는 진정한 미분

10-1. Numerical Differentiation ( 수치미분 )

 

### 중심차분이 전방차분보다 항상 오류가 적다!!

 

9.    Mini Batch 학습

# 배치 학습과 확률적 경사하강법 (SGD) 중간자 학습 방법

l  배치 학습 : 모든 샘플을 보여준 , 개별 샘플의 오차를 모두 이용하여 모델의 가중치를 변경하는 방법

l  확률적 경사 하강법 (SGD) : 하나의 마다 오차를 계산하여 가중치 변경하는 학습 방법

 

# 배치학습 장단점 :

1.     데이터셋 전체를 번에 메모리에 올리기 쉽지 않다.

2.     너무 오래걸린다.

3.     Noise 영향을 받음 ( 느려도 올바른 방향으로 모델 개선 )

 

# SGD 장단점 :

1.     Noise 심해 ( 개별 데이터마다 parameter 갱신하므로 ) 원치 않는 방향으로 진행 가능

, 학습 과정에서 결과의 진폭이 크고 불안정 ( 오차가 크다 )

2.     데이터를 하나씩 처리하기 때문에, GPU성능을 모두 활용하지 못한다.

3.     학습 진행속도는 매우 빠르다. ( 정확도는 보장 X )

 

# Mini Batch:

1.     속도 적당히 빠르고, Noise 영향 적음

보다 안전한 Point 찾아가므로 오히려 SGD보다 빠른 학습법이라고 있다.

 

10.    오차역전파 (Back Propagation)

 

l  순전파: 해당 프로세스에 정해진 값들로 output 추론해가는 ( -> )방향의 전파과정

 

l  역전파: output 레이어로부터 weight값들을 수정하기위해 수정의 방향( +,-) 정도를 수치로 전달해주는 과정

 

l  순전파 , 국소적 계산을 하는 이유? : 전체가 아무리 복잡해도 노드에서는 단순 계산에 집중하여 문제를 단순화시킬 있다.

역전파 편미분이 간단해진다.

l  , 연산 단계 , 최종 출력값에 어떤 영향을 미치는지 분석 그에 따른 갱신 용이해진다

ex) 사과 가격이 오르면 최종 금액에 끼치는 영향을 알고싶다? -> dPrice / dApple 편미분

 

l  국소적 계산을 하는 이유

1.     노드의 연산을 단순화

2.     중간 계산 결과를 모두 있다.

3.     변수에 대한 편미분을 효율적으로 계산할 있다.

 

11.     활성화 함수의 역전파

 

11-1. ReLU (Rectified Linear Unit)

l  On Implementation

We use self.mask to process I/O values less than zero at “ONCE”

 

11-2. Sigmoid Function

 

l  On Implementation

 

  We can see that the back propagation value is completed by using Only the value returned from the forward function.

관련글 더보기