본문 바로가기

AI

computer vision AI ( feat. 역전파, backpropagation, computational graph )

728x90
반응형

오늘도 좋은 하루 보내시고 계실까요? 

WH입니다. 오늘은 조금은 머리가 아플 수도 있는 내용을 다뤄보려고 합니다.

마지막 글에서 다룬 내용은

손실함수와 최적화 그리고 전체적 flow였습니다.

( linear classifier 를 사용 할 때 )

그리고 큰 흐름이 매우 중요하다고 했습니다

 

아래 글을 리마인드하시고 보시길 추천드립니다.

2022.04.21 - [AI] - computer vision AI ( feat loss fuction, 손실 함수, 최적화 )

 

computer vision AI ( feat loss fuction, 손실 함수, 최적화 )

안녕하세요. WH입니다. 이번 글에서는 다룰 주제는 크게 2가지 입니다. 손실 함수와 최적화 저번 글 마지막에 화두를 던졌었죠? 저번 글을 반드시 읽고 이번 글을 읽으시길 바랍니다. 2022.04.21 - [AI

developer-wh.tistory.com

반응형

 

잠깐 복습하고 가겠습니다.

어떤 flow로 학습이 진행 된다고 했었냐

input( 이미지 ) -> classifier( 분류기 ) -> Loss function ( 손실 함수 ) -> optimization( 최적화 )

 

  이런 flow를 따라간다고 했죠? 그리고 마지막 화두로 최적화가 어떻게 이루어져, w가 업데이트 되는지에 대해 다루겠다고 했습니다. 그럼 시작하겠습니다. 우선 결론부터 말씀드리면 backpropagation 알고리즘을 통해 가중치를 업데이트 하게 됩니다. 벌써부터 머리가 아픕니다. 그쵸? 지금부터 매우 긴 여정이 될 겁니다. 차분히 따라와 주세요, 이 과정을 넘으면 여려분은 한 단계 성장했으리라 장담합니다. 한 가지 가정을 하고 시작하겠습니다. 우리는 layer가 2개의 층인 선형 분류기를 사용한다고 할게요. 이해를 위해서요. 그리고 L 함수는 softmax loss function를 사용한다고 해봅시다. 또한 activation function은 Relu를 사용한다고 하겠습니다. 갑자기 너무 많은 것이 나오나요? 오늘 나온 것들은 찬찬히 설명하고 넘어가도록하겠습니다.

 

우리가 가정한 간단한 NN( Neural Network ) 입니다.

 

 

즉 각 층을 이루고 있는 선형 함수는 아래와 같습니다. 즉 두 개의 층은 아래의 수식을 이용한다는 말이죠

 시작하겠습니다. 우선 층을 통과해서 L를 구하는 과정까지를 순전파라고 합니다. 그럼 어떻게 층을 통과하며 가게 될까요? 1번 째 층의 경우, input으로 X( 이미지 )는 위 수식에 의해 W*x ( 행렬 곱 ) 을 하게 되고 bais가 더해지며 output이 나옵니다. 여기서 나온 결과 값을 아직은 준비가 되지 않은 h라고 하겠습니다. 왜냐하면 이 output은 선형성을 띄기 때문에 비선형성을 더해주어야 합니다. 비 선형성을 더해주는 역할을 하는 것이 activtion function이며 여기서는 Relu를 사용합니다. ( 참고로 비선형성을 더해주지 않는다면 층을 쌓아주는 의미가 사라지게 됩니다. ) Relu ( 즉 activation function )을 통과한 후에야 새로운 층으로 들어갈 준비가 된 h 가 나오게 되죠. h를 쓰는 이유는 hidden layer의 앞글자를 따서 관례적으로 사용한 것이구요, 

 

참고 : 왜 activation function을 사용해야 하는가?

 

여기에 설명된 모든 이미지나, 영어는 제가 발표자료로 사용했던 직접 만든 자료입니다.

위의 내용을 설명해 보자면, f(x) = cx 라는 일차함수를 가정하고, 층을 3개 쌓으면 우리는 계산 결과가 1차 함수를 3번 통과하기는 바라는 것인데, 선형성을 띄게 되면 합성이 되어, 3차 함수를 쓰는 것과 같게 되기 떄문에 활성화 함수를 통해 비 선형정을 더해주어야 하는 것입니다.

 

  여튼 진행하겠습니다. 2번째 층 역시 input만 h로 바뀌고 1번째 층과 같은 과정을 거치게 됩니다. 그런데 위의 그림에 오해할 만한 소지가 있어, 하나 말씀드리면 첫 번째 층은 activation function이 Relu 이지만 2번째 층의 경우 activation function이 S로 표현된 박스 즉, softmax입니다. softmax를 사용하는 이유는 마지막 output은 추론하고자 하는 class에 대한 점수라고 했죠? 그 class의 분류를 위해 사용된다고 생각하시면 됩니다. 또한 헷갈리지 않으셔야할 것은 L의 softmax Loss와 activation function의 softmax는 전혀 다른 것임을 잊지 말아주세요. 이 말을 하고 싶어 일부러 softmax Loss를 사용했습니다 여기까지 진행되고 나면 우리는 우리가 예측하고자 하는 대상( class ) 에 대해 점수를 얻게 됩니다.

 

  다음으로 진행되는 과정은 손실함수를 계산하는 겁니다. 우리의 분류기가 낸 점수가 얼마나 구린지 판단해야 겠죠? 구린지 판단하는 함수로 softmax를 사용하겠다는 겁니다. 즉 softmax의 Loss function의 수식입니다. 수식을 넣기 싫지만...이해해 주세요. 이제부터는 수식이 없으면 설명이 안됩니다 ㅠㅠ

 

 우리가 원하는 것이 뭐죠? 현재 우리의 분류기가 얼마나 구린지를 봐야하는 거겠죠? 그럼 편의상 손실 함수를 L 이라고 하겠습니다. 요소를 먼저 설명드리면 s_y_i는 우리가 정답이라고 설정한 클래스의 점수이고 s_j는 그를 제외한 나머지 클래스의 점수입니다. ( 즉 개, 고양이, 나무 가있고 정답이 개라면 s_y_i는 개가 되고 s_j는 나무와 고양이가 된다는 것이죠) 그리고 R term은 regularization  term으로 과적합이 일어나는 것을 방지하기 위해 추가해주는 term입니다. 위 수식에 들어가는 것은 마지막 층을 통과하고 나온 S의 값들 중에 클래스에 따라 다르게 들어가게 됩니다. 자 여기까지 손실함수를 통해 분류기가 얼마나 구린지 구했습니다. 여기까지가 어제까지의 내용이 흘러온 flow를 조금더 자세히 설명한 부분입니다.

 

W를 업데이트하기 위해

  지금까지 순전파 과정으로 우리의 분류기가 얼마나 구린지 판단하는 부분까지 했습니다. 지금부터는 w를 더 좋게 만드는 방법에 대해 말씀드리겠습니다. 자 우선 필요한 것부터 체크하고 넘어가시죠.  손실 함수를 통과하여 나온 값이 작다면 우리의 분류기가 좋다고 생각할 수 있겠습니다. 그럼 우리가 알아야하는 것은 손실 함수의 변화가 되겠지요? 그렇다면 이것을 파악하기 위해, 현재 이 손실함수가 순간 어떻게 변하는지에 대한 정보가 필요합니다. 여기에 더해서 그럼 조금 돌아가서 S에 영항을 미치는 component가 무엇인지 알 필요가 있습니다. input은 같다고 생각했을 때, bias 역시 변화가 없을 거라 생각해볼 수 있다면 W에 따라 변화가 발생할 겁니다. 즉 L( loss )는 W의 변화가 L를 좋게 할지 나쁘게 할지를 결정하게 되겠죠. 이를 수식으로 표현한다면 우리가 필요한 것은 아래 수식입니다.

  여기 나온 역삼각형은 gradient를 나타냅니다. gradient는 L가 증가하는 방향으로 방향을 가지게 됩니다. 따라서 L function에 - 가 붙은 것이고, 범위를 한정하기 위해 log를 붙여주게 된 겁니다. 여튼 다시 돌아가서 우리는 최종적으로 위해 대한 값을 원합니다. 그럼 앞의 모든 gradient를 계산해서 L의 gradient를 구해야되는 번거로움이 발생합니다. 이 번거로움을 간단하게 해결해주는 방법이 backpropagation입니다. backpropagation 알고리즘을 쉽게 설명하자면, 너무나도 복잡하고 번거로운 gradient를 chain rule과 local gradient를 활용하여 간편하게 구하는 방법이라고 생각하시면 됩니다. 위의 층에 대한 local gradient를 구하는 방법이나 chainrule을 활용하는 방법은 손으로 풀어놓고 발표에 사용했던 이미지를 첨부하겠습니다. 다만 다소 복잡한 내용을 포함함으로 이 글에서 설명은 생략합니다. 미분을 위해서는 크로네커 곱에 대한 이해와, tensor에 대한 이해, 행렬과 벡터의 미분에 대한 이해가 필요합니다.

backpropagation for 2-layer-NN

compute softmax loss

svm loss

cross entropy

  즉 이 과정을 통해 우리는 loss의 gradient를 구할수 있게 되고 그를 활용해 필요한 w를 업데이트하게 되는 겁니다.

솔직히 다 설명드리고 싶지만, 수식이 너무 많아지면 읽기 싫어지기 때문에, 여기까지만 정리하도록하겠습니다. 이 글에서 기억하셔야 할 점을 마지막으로 정리해 드리면,

 

Back propagation은 loss function의 gradient를 쉽게 계산하기 위함이며, local gradient와 chain rule을 활용하여 계산합니다. 또한 w의 업데이트는 loss가 줄어드는 방향으로 backpropagation을 통해 업데이트 하게 됩니다.

갑자기 어려워졌다면... 어쩔 수 없는 부분이긴 하지만, 이번 글을 통해 많은 것을 얻어가시길 바랍니다.

이상 WH였으며, 그 다음 글부터는 CNN을 위한 기초이론들을 다루도록 하겠습니다.

아 그리고 마지막으로 우리가 다룬 linear classifier의 층들을 fc layer( fully connected layer )라고 부릅니다.

 

궁금하시거나 추가로 알고 싶은 내용이 있다면 댓글로 남겨주시면 친절히 알려드리겠습니다.

소통은 언제나 환영합니다. 이번 글은 여기까지 할게요

728x90
반응형