220v
젝무의 개발새발
220v
전체 방문자
오늘
어제
  • 분류 전체보기 (255)
    • AI (35)
      • ML, DL 학습 (30)
      • 논문 리뷰 (4)
      • 실습 및 프로젝트 (1)
    • Algorithm (145)
      • LeetCode (13)
      • 프로그래머스 (35)
      • 백준 (96)
      • 알고리즘, 문법 정리 (1)
    • Mobile, Application (17)
      • Flutter (10)
      • iOS, MacOS (7)
    • BackEnd (7)
      • Flask (1)
      • Node.js (5)
      • Spring, JSP..etc (1)
    • Web - FrontEnd (18)
      • JavaScript, JQuery, HTML, C.. (12)
      • React (6)
    • DataBase (1)
      • MySQL (1)
      • Firebase Firestore (0)
      • Supabase (0)
    • Git (1)
    • 기타 툴 및 오류 해결 (3)
    • 강의 (5)
      • Database (3)
      • 암호학 (2)
      • 알고리즘 (0)
    • 후기와 회고 (2)
    • 블로그 꾸미기 (1)
    • 일상과 이것저것 (20)
      • 맛집 (12)
      • 세상사는일 (4)
      • 도서리뷰 (1)
      • 이런저런 생각들 (잡글) (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Minimum Spanning Tree
  • 티스토리챌린지
  • bitmasking
  • implementation
  • Lis
  • simulation
  • Priority Queue
  • 백준
  • two pointer
  • 구현
  • 오블완
  • union-find
  • Dynamic Programming
  • Mathematics
  • REACT
  • IMPLEMENT
  • dfs
  • dp
  • Greedy
  • 프로그래머스
  • 위상 정렬
  • BFS
  • disjoint set
  • topological sort
  • binary search
  • brute-Force
  • Backtracking
  • top-down
  • 다익스트라
  • Prefix Sum

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
220v

젝무의 개발새발

AI/ML, DL 학습

[ML/DL 스터디] <ANN - 3> Training ANN, Backpropagation

2024. 11. 9. 21:40

Reference

https://iai.postech.ac.kr/teaching/machine-learning
https://iai.postech.ac.kr/teaching/deep-learning
위 링크의 강의 내용에 기반하여 중요하거나 이해가 어려웠던 부분들을 정리하여 작성하였고,
모든 강의 슬라이드의 인용은 저작권자의 허가를 받았습니다.

또한, 모든 내용은 아래 Notion에서 더 편하게 확인하실 수 있습니다.
>>노션 링크<<

 

Keywords

  • Optimization
  • Loss Function, Gradient Descent
  • Backpropagation

 

Training(Fitting) ANN: Optimization

Neural Network를 training하는 과정

⇒ MLP 구조의 weight, bias들을 training data로부터 learn(estimate)하겠다.

 

이러한 Optimization의 관점에서 바라보았을 때, 3가지 정의해야 할 부분이,

Objective function / decision variable: weight (and bias) / constraint 이다.

그냥 간단하게 말해서, 앞에서 했던 것과 동일하게 $f(\omega)$를 minimize하겠다는 것이다.
여기에서 objective function인 $f$와 unknown인 $\omega$는 당연히 우리가 정의해줘야 하는 것이고.
(+ $\omega$에 대한 constraint는 일반적으로 ANN에서 존재하지 않는다. 마지막 줄에서 constraint에 대한 것이 없는 이유가 그것.)

 

ANN에서는 그러한 Objective Function을 Loss Function(Cost Function)이라고 할 것이며,

여기서 Loss Function은 target value(원래의 y, output값)과 prediction(예측된 y, output값) 사이의 error를 측정하는 함수이다.

결국 그러한 Loss Function을 minimize하는 것이 목적.

 

위에서 볼 수 있듯, Squared loss와 Cross entropy라는 Loss Function의 예시를 이미 학습하였다.

두 경우 모두, $y^{(i)}$와 $h_\omega(x^{(i)})=\hat{y}^{(i)}$ → target value와 prediction 사이의 error를 어떻게 정의하는 지만 달라질 뿐이고, 둘 사이의 error를 측정하여 그것을 minimize한다는 것은 같다.

 

그리고 NN을 training, Optimizing 하는 방법으로는, Gradient Descent를 이용할 것.

앞에서 이미 학습했으므로 따로 언급하지 않겠다.

 

ANN에서의 Gradient Descent에 대해 생각해 보자면,

모든 weight에 대한 Gradient ($\frac{\partial l}{\partial \omega}$)를 계산하여 하나하나 update를 해나가면, 연산량이 너무 많아짐.

→ training에 걸리는 시간이 너무 길어진다!

 

따라서, ANN의 구조적인 특징들을 이용하여 이를 효율적으로 계산할 것이다. (Back Propagation!)

우선 layer들이 중첩되는 과정에서 이것이 결국 함수들의 합성과 같은 역할을 한다. (ANN의 각 층은 이전 층의 출력을 입력으로 받아 변환하는 함수로 볼 수 있다. 이에 의해 ANN은 여러 층의 뉴런들이 연결된 합성 함수 형태로 볼 수 있다는 것!)

따라서 weight들이 모두 독립적이지 않으며, 각 구성 요소(layer)가 미분가능하므로 Chain rule을 적용할 수 있다.

여기서 미분가능하다는 것에 대해, 이전 장들에서 activation function을 step function에서 sigmoid(tanh, ReLU)로 변경했던 것을 상기하자. 변경한 이유에는 여기서 Chain Rule을 적용하기 위함(Gradient를 계산하기 위함)도 포함되어 있다.

 

Backpropagation

Forward Propagation (순전파):

initial information (input data, x)로부터, Network의 각각의 layer (hidden unit)에 전파되어, output을 만들어내는 것.

간단히 말해, 이미 Network는 구성되었고, weight, bias가 결정된 상태에서, input data를 집어넣고 Network를 따라 쭉 계산하여 output을 도출하는 것!

 

Backpropagation (역전파):

Backpropagation은 반대로, 마지막 prediction(output)을 통해 loss(cost)를 계산하여, 그 loss(cost)로부터 network를 반대로 거슬러가 gradient를 계산하는 것.

 

이 글 자체가 필자 자신의 이해를 돕고, 정리하기 위한 글이므로, 이미 잘 알고 있는 Chain Rule에 대해서는 따로 여기서 정리하지 않겠다.
이 게시글을 보는 사람들 중 Chain Rule에 대해 잘 모르는 사람이 있다면, 다른 더 잘 정리된 자료가 많을 것.

 

좌측의 식 및 우측의 그림을 보면 알 수 있듯이 Neural Network의 각 layer들 자체가 함수들의 합성이므로,

Chain Rule을 통해 각 Layer에서의 Input, Output에 대한 Gradient를 계산하여 이를 product하면, 최종적으로 맨 처음 input과 마지막 loss에 대한 Gradient를 얻을 수 있음을 알 수 있다.

 

좀 더 이해하기 쉽게, 각 layer에서 Gradient Descent를 적용해 변수들의 값을 update하는 과정을 생각해 보자.

$y ← y - \alpha\frac{dz}{dy}$

$x ← x - \alpha\frac{dz}{dx} = x - \alpha\frac{dz}{dy}\cdot\frac{dy}{dx}$

$w ← w - \alpha\frac{dz}{dw} = w - \alpha\frac{dz}{dy}\cdot\frac{dy}{dx}\cdot\frac{dx}{dw}$

$u ← u - \alpha\frac{dz}{du} = u - \alpha\frac{dz}{dy}\cdot\frac{dy}{dx}\cdot\frac{dx}{dw}\cdot\frac{dw}{du}$

위와 같이 Gradient Descent를 통해 각 layer의 변수를 update해나갈 것이다. (각 layer에서의 변수와 z에 대한 gradient값을 이전 layer의 gradient값을 이용해 계산할 수 있다는 것은 이미 Chain Rule을 통해 성립함을 위에서 확인하였다.)

여기서, $u$ 부터 (앞 부터) 먼저 gradient를 계산하여 update하는 것이 아니라, Network의 맨 뒤쪽 layer인 $y$ 부터 update를 해 나간다면 어떻게 될까.

우선 첫 줄의 $y ← y - \alpha\frac{dz}{dy}$ 를 계산하며, $\frac{dz}{dy}$를 계산하게 된다.

이 $\frac{dz}{dy}$는 마지막 layer의 input, output에 대한 gradient이기 때문에, 그 layer에서만 편미분하여 계산해주면 되므로 연산량이 많지 않을 것이다.

다음으로, 두 번째 줄의 $x ← x - \alpha\frac{dz}{dx} = x - \alpha\frac{dz}{dy}\cdot\frac{dy}{dx}$ 를 계산하며, $\frac{dz}{dx}$를 알아야 한다.

이 $\frac{dz}{dy}$는 Chain Rule에 의해 $\frac{dz}{dy}=\frac{dz}{dy}\cdot\frac{dy}{dx}$ 임이 확인되었고, $\frac{dz}{dy}$를 이미 계산하였기 때문에, 여기서는 $\frac{dy}{dx}$만 계산하면 된다.

이 $\frac{dy}{dx}$는 $x$가 있는 layer의 input, output에 대한 gradient이기 때문에, 그 layer에서만 편미분하면 된다!

…

이 과정을 맨 끝의 layer부터 맨 앞의 layer까지, 모든 Network 내의 layer를 거치며 Gradient Descent를 해나가는 것이다.

이렇게 계산을 하게 되면, 뒷 layer에서 이미 계산했던 gradient를 그 앞 layer에서 그대로 memoization하여 사용하므로, Network상의 모든 Parameter(weight)에 대한 Gradient를 계산하는 것보다 훨씬 빠르게 연산량을 줄여 계산할 수 있게 되는 것이다.

이것이 Backpropagation이다!

    'AI/ML, DL 학습' 카테고리의 다른 글
    • [ML/DL 스터디] <AE - 1> Autoencoder
    • [ML/DL 스터디] <ANN - 4> Vanishing Gradient, Batch Normalization, Dropout
    • [ML/DL 스터디] <ANN - 2> Artificial Neural Network (ANN) - 2
    • [ML/DL 스터디] <ANN - 1> Artificial Neural Network (ANN) - 1
    220v
    220v
    DGU CSE 20 / Apple Developer Academy @ POSTECH 2nd Jr.Learner.

    티스토리툴바