ANN & DL

2022. 10. 6. 14:52인공지능,딥러닝,머신러닝 기초

https://evan-moon.github.io/2018/07/19/deep-learning-backpropagation/#%EC%BD%94%EB%94%A9%ED%95%98%EA%B8%B0

01. perceptron

- 0과 1의 이진법 체계

- 변수값은 True/False

- NOT/AND/OR/XOR

 

02.Boolean Logic & Digital Logic gate

- Perceptron 이 Boolean logic 

 

03. Backpropagation

- 신경망 오차(예측값과 실제값의 차)를 Outputlayer -> Input layer 거꾸로 전파 각각 Layer의 w와 b업데이트함

- 입력->가중치 -> 가중합 -> 활성화함수로 수렴할때까지 -> 손실함수를 통해 역전파 하여 가중치 , 편향 업데이트 -> 출력

1. input is given, which gets weight assigned to it using a probability distribution

2. The activation functions use the weights to provide the predicted value

3. The cost or loss functions calculate the error of the prediction between the actual class and the predicted value

4. The optimization functions such as gradient descent use the reults of the cost function to minimize the error

- 개요

1. backpropagation은 오늘날 Artificial Neural Network를 학습시키기 위한 일반적인 알고리즘 중 하나임

2. 한국 말로 직역하면 역전파라는 뜻인데 내가 뽑고자 하는 target값과 실제 모델이 계산한 output이 얼마나 차이가 나는지 구한 후 그 오차값을 다시 뒤로 전파해가면서 각 노드가 가지고 있는 변수들을 갱신하는 알고리즘인 것

- 두가지 의문사항

1. 각 노드가 가지고 있는 weight이나 bias같은 변수들을 어떻게 업데이트할 것인가

2. Multi Layer NEtwork 에서 각 노드나 레이어가 가지고 있는 변수들은 다 제 각각인데 그 값들을 얼만큼 변경하는 지 어떻게 알 수 있는가?

** 다행이 이 문제들은 Chain Rule이라는 법칙을 사용해 해결할 수 있음

 

04. Chain Rule이란

- Chain Rule, 미분의 연쇄법칙이라고도 불리는 법칙

- 미분가능하다라는 말? : 미분 = x와 x'간의 기울기를 구한다 정도로 이해하고 있다

- 기울기를 구한다? : 변화량을 구한다

1. x가 변화했을 때 함수 g가 얼마나 변하는지

2. 함수 g의 변화로 인해 함수 f가 얼마나 변하는 지 알 수 있음

3. 함수 f의 인자가 함수 g이면 최종 값 F의 변화량에 기여한는 각 함수 f와 g의 기여도를 알 수 있다는 것

 

05. Forward-propagation

- Backpropagation이 어떻게 이루어지는가

a. 그 전에 먼저 Forward Propagation을 진행해야함

b. 초기화한 w값과 input x을 가지고 계산을 진행한 뒤 우리가 원하는 값이 나오는 지, 나오지 않았다면 얼마나 차이가 나는지를 먼저 구해야함

c. 

- 위 모델은 2개의 input 개의 output을 가지고 2개의 hidden layer를 가진 2-Layer NN모델임

- 각 변수에 값을 할당해보면 다음과 같음

- 먼저 필자가 output으로 원하는 y_1 의 값은 0.2, y_2 의 값은 0.7

- 그리고 input으로는 x_1 0.2, x_2 0.5를 넣어주었고, 각각의 값은 그냥 느낌 가는대로 넣어놓음

- Activation Function으로 Sigmoid함수를 사용하고, Error Function Mean Squared Error함수를 사용

 

1) Layer0에서 받을 값부터 계산

2) 행렬 곱을 풀어보면 다음과 같이 되고 결국 들의 합의 형태로 나타남

3)   의 값을 구했으면 이제 Activation Function을 사용하여  값을 구해야하며, 필자가 사용할 Activation Function Sigmoid의 수식은 다음과 같음

- 다음 레이어도 같은 방식으로 값을 계속 구해보면 다음과 같은 값들을 구할 수 있음

 

- Mean Squared Error함수를 사용하여 에러 E를 구하여야함

- 결과값으로 얻기를 바라는 값을 로, 실제 나온 값을 라고 할 때 에러 는 다음과 같음

-  마지막 Output Layer에서 뱉어낸 y들과 하나하나 레이블링했던 \hat{y}가 얼마나 차이나는 지 구한 다음에 그 값들의 평균을 내는 것

- ANN을 학습시킨다는 것은 이렇게 구한 에러 E의 값을 0에 근사시킨다고 볼 수 있으며 여기서 나온 E값을 이제 Back propagation하면 되는 것

- 필자는 이 중 현재 0.4로 할당되어 있는 w(1)10값을 업데이트 하려고한다면 w(1)10이 전체 에러인 에 얼마나 영향을 미쳤는지, 즉 기여도를 구해야하며 이때 Chain Rule이 사용됨

- 이때 값을 얼마나 건너뛸 것이냐 또는 얼마나 빨리 학습시킬 것이냐 등을 정하는 Learning Rate라는 값이 필요한데, 이건 그냥 사람이 정하는 상수이고 보통 0.1보다 낮은 값으로 설정하나 필자는 0.3으로 잡았음

- backpropagation의 한계

-> Vanishing gradient 현상 : 레이어가 깊을 수록 업데이트가 사라져감 그래서 fitting이 잘 안됨(under fitting)

- 해결책으로?

-> 죽지않는(양의 구간에서 전부 미분값(1)인 : sigmoid대신 ReLU가 있음(activation func)

04. Deep learning대표들

- DNN, FFNN(Feed Forward Networks)

- RNN -> LSTM (long-term memory)