학부 '머신러닝과 데이터사이언스' 수업과, [딥러닝 파이토치 교과서]를 바탕으로 공부한 내용을 정리한 글입니다.
Neural Network and Backpropagation
forward : input → output (input 넣어 모델을 통해 output 도출해내는 과정)
backward : output → input (구한 output을 가지고 gradient 등을 사용하여 가중피치 업데이트)

- threshold logic unit

여러 step function을 통해서 binary한 출력값을 갖도록함.

+ 퍼셉트론에서, sign 함수 써서 잘못된 샘플에 한해서 부호만 바꿔서 weight에 더해나가는 방식으로 cost를 줄여나갔음.
- 퍼셉트론의 이슈 1

→ 가중치 업데이트 할 때 경사하강법을 도입하여 이슈를 보완함
- 퍼셉트론의 이슈 2

→ 다층 퍼셉트론 (hidden layer) 등장
-XOR 문제는 은닉층을 만들어 해결가능
-즉, 여러 퍼셉트론 레이어를 두어 해결
-입력과 출력이 아닌 숨겨진 은닉층을 만들면, 복잡한 문제 해결 가능



step function → activation function 다양하게 들어가며 비선형 함수 표현 가능.
- activation functions

- 다층 퍼셉트론의 또다른 이슈와 해결방안 : Back Propagatioin(오차 역전파)
- XOR 문제와 비선형적 문제는 다층 퍼셉트론의 은닉층 추가와 비선형 함수 추가로 해결
- 최적화를 위해, 결국 최종 예측값과 실제값과의 차이인 Loss 값을 최소로 해야하며, 이를 위해, 은닉층을 포함한 모든 가중치 업데이트 필요
- deep feedforward networks
- fully connected multi-layer
- feedforward(feedback이 없음) → feedback이 있는 신경망은 RNN
- nonlinear activation functions
- forward propagation
input → 모든 neuron의 출력값 계산 → output → (cross-entropy) cost, loss


- weighted sum인 z 하나 계산하는 법(전에 있던 a에 w곱해서 다 합친거)

- 정리하자면, l번째 hidden layer에 대해서


- cost function : cross-entropy
가장 마지막 layer에서,

z까지는 아직 activation function 거치지 않음. weighted sum 상태.
softmax - activ.function 대신 y 구하기 위한 layer.
최종 z에 softmax하면 y(output)나옴.

서로 다른 확률 분포 tj와 yj사용해서 cross-entropy 계산
tj = x의 class label(target value)
K = 출력층의 unit 수 = class의 수, Ml = K
ex) 하나의 샘플에 대해,
y = [0.8 0.1 0,1], target = [1 0 0]일 때
E = -(1log0.8 + 0log0.1 + 0log0.1)

- stochastic gradient and back propagation
SGD weight update rule - 모든 파라미터에 대해, 모든 화살표에 대해 fully connected에 있는 모든 거 미분 다 해야함 .

- fully connected기 때문에 잘못된 값 하나가 모든 값에 영향
- weight 값이 잘못되었기 때문에 cost가 발생 ⇒ 따라서 모든 weight에게 그 weight가 cost 발생에 기여한 만큼씩 gradient를 배분해주는 것.
- 문제는 weight들이 여러층에 분산되어 있으며, 각 층은 비선형 함수여서 배분 방법이 복잡함 ⇒ 이걸 구하는 과정이 backpropagation
- Backpropagation



1) 출력층에서 local gradient 계산


- output layer에서 local gradient 를 구하는 계산은 경우의 수가 2개
- 인덱스가 같은 경우 → 분모, 분자 다 미분해줘야함.
- 인덱스가 다른 경우 → 분모에 대해서만 미분하면 됨.
- 인덱스가 같은 경우 → 분모, 분자 다 미분해줘야함.
즉, 위에서 구한걸 토대로 output layer에서 local gradient를 구하면,
백터와 행렬로 표현하면,
2) 제일 마지막 layer에서 weight에 대한 미분

output layer에서 local gradient 가지고 output layer의 parameter에 대해 구하는 것!


그러므로,, weight update rule은

3) 뒤에 local gradient에서 하나 앞의 gradient 구하기

4) l번째 layer에서 local gradient가지고 파라미터에 대해 미분하기.


→ 위에 2) (젤 마지막 layer에서 weight에 대한 미분)과 동일함.
그러므로, weight update rule은

** SUMMARY**

'Deep Learning & AI > DNN' 카테고리의 다른 글
Classification 문제를 위한 softmax 핵심 이해 (0) | 2024.02.02 |
---|---|
Adam Optimizer (0) | 2024.02.02 |
DNN Pytorch 실습 (당뇨병 환자 데이터셋, fashion mnist 데이터셋) (2) | 2023.12.29 |