AI

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

개발자_WH 2022. 4. 21. 15:29
728x90
반응형
반응형

안녕하세요. WH입니다.

이번 글에서는 다룰 주제는 크게 2가지 입니다.

손실 함수와 최적화

 

저번 글 마지막에 화두를 던졌었죠?

저번 글을 반드시 읽고 이번 글을 읽으시길 바랍니다.

2022.04.21 - [AI] - computer vision AI( feat. linear classifier 선형 분류기 )

 

저번 글에서는 linear classifer 요소들의 의미에 대해 알아 보았습니다.

마지막 화두는

그럼 이 classifier를 믿을만 한가? 템플릿, 필터 즉 가중치를 더 좋게 만들 수는 없을까에 대한 내용이었죠

 

손실 함수

  손실 함수는 내가 사용하고 있는 이 분류기가 얼마나 구린지에 대한 정보를 주는 함수 입니다. 함수라는 것은 input이 있고 output이 있겠죠? input은 선형 분류기를 사용한다면 그 분류기의 결과 값( 즉, classes 에 대한 점수 )가 들어가고, outpuit으로는 이 분류기가 얼마나 구린지가 나오게 되죠.

 

그럼 어떻게 분류기가 구린지 알 수 있을까요? 우리가 점수( 결과 값 )을 활용하는 방식에 따라 나뉘게 되요. SVM, softmax loss, cross entropy 등이 그에 해당하죠. SVM 은 기본적으로 max 함수를 사용하고 softmax와 cross entropy는 softmax 함수를 사용하게 되죠. cross entropy와 softmax의 차이는 정보 공학 관점에서 보면 전달되는 정보량을 수식으로 나타낸 것이냐, 아니면 점수 자체만을 원하는 방향으로 크게하느냐의 차이를 가지게 되는 것이고요. 물론 모든 내용을 다루지는 않습니다. 여기서 기억하고 가실 부분은, 손실함수는 선형 분류기의 결과가 input으로 들어가고 얼마나 구린지를 판단할 함수가 들어가며 output으로는 얼마나 구린지에 대한 정보가 나온다는 겁니다.

 

그럼 우리는 손실 함수를 어디에 써야 될까요? 코드를 아직 다루진 않겠지만, 흐름을 보자면, 아래와 같을 겁니다.

 

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

 

  이런 형태가 되어야만 현재 분류기가 얼마나 구린지에 대한 판단이 서게 되겠죠. 이제 손실 함수가 무엇인지 감을 잡으셨나요? 기회가 되거나, 요청이 있다면 각각의 손실 함수에 대해 구체적으로 다뤄보도록 하고 이번 글에서는 이쯤하고 넘어가겠습니다. 헷갈리면 안되는 것은 classifier 라는 것은 말 그대로 input이 그곳을 통과하면 해당 주어진 가중치를 활용해 해당 클레스에 대한 점수를 준다는 것이고 그 뒤에 loss fuction이 나와 그 분류기의 성능을 체크한다는 것입니다. 이 기본을 절대 잊지 않길 바랍니다.

그럼 최적화는 무엇을 의미할까요?

 

최적화가 의미하는 것

  최적화는 W , 즉 템플릿, 필터, 가중치로 불리는 이 W를 좋게 만드는 것입니다. 즉 최적화를 통해서 우리는 더 좋은 분류기를 만들 수 있게 되는 겁니다. 어떻게요? 그 어떻게에 대한 답변을 이 글에서 다루게 되면 너무나 길어짐으로 다음 글로 넘기도록 하겠습니다. 여러분이 알고가셔야 할 것은 flow입니다. 모든 NN의 시작은 flow를 이해하고 나서 그 세부 내용을 이해하는 것입니다. 제가 여러 책을 보고, 여러 강의를 들어보면서 느낀 것은, 큰 flow보다 세세한 것에 집중하는 바람에 정작 내가 해야하는 것을 놓치게 되더라구요. 그래서 flow는 다음과 같습니다.

 

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

  이렇게 되겠죠? 즉 한번 더 정리하면서 말하면, 이미지가 들어가서 분류기를 통과하고 결과 값이 나오면 그 결과 값이 믿을 만한지( 구린지 ) 손실 함수를 통해 보고 최적화 과정을 통해 분류기를 좋게 만듭니다. 그리고 나서 다시 이미지를 분류기를 통과 시키고 구린지를 보고 최적화 시키고.. 이 과정을 반복하여, 좋은 결과를 내는 분류기를 만듦과 동시에 좋은 결과를 보여줄 수 있게 되는 것이지요.

 

  최적화 함수에는 기본적으로 SGD, adam, ada grade 등이 있는데요, 이는 물리학적 영감을 얻어 만들어낸 최적화 함수와 학습에 따른 step size를 맞춰주는 기법이 이용된 최적화 함수로 나눠집니다. 물론 모두 합쳐진 adam이라는 기법 역시 존재하지요, 이 또한 이 글에서 다루기 보다, 기회가 있거나 요청이 있다면 다뤄보도록 하겠습니다.

 

 지금까지 우리가 한 것은 층이 한 개 짜리의 신경망이 학습하는 과정에 대해 알아보고 있습니다. 학습이란, w를 좋게 만들어주는 것을 말하게 되겠지요, 어떤 과정을 거치냐고요? 위의 과정을 거칩니다. 이런 질문들이 나올 수 있어요. activation fuction, batch normalizaion, dropout, data augumentation 등은 뭔가요? 다 다룰 겁니다. 사실 장담은 못하겠어요. 어느 수준에 맞춰야 할지 감이 안오거든요. 다만 필요하다 싶으면 다 알려드릴 생각입니다. 다시 돌아와서 최적화 과정에 대해 개요를 알아보았는데요. 

 

아직 한 가지 질문이 남아있습니다. 뭐냐면, 최적화하는 방법이지요. 즉 어떻게 w가 update될 수 있는 지에 대해 다루지 않았습니다. 바로 다음 글에서 알아보도록 하겠습니다.

 

이 번글을 통해 얻어가셨으면 하는 것은 손실 함수와 최적화의 역할입니다. 아직 수식들을 하나도 다루지 않았습니다. 반드시 필요하지만 큰 틀을 잡는 것이 중요하다고 생각하기 때문이죠. 이번 글을 통해 손실 함수, 최적화의 역할 그리고 큰 flow 이것을 반드시 챙기시길 바랍니다.

 

읽어주셔서 감사합니다. 이상 WH였습니다. 뭐 별건 아니지만, 제 글이 늘어날수록 읽어주시는 분들은 늘어나는 데, 저도 언젠가는 누군가와 소통하는 날이 오겠죠? 소통을 하고 싶다는 작은 바람이있습니다.ㅎㅎ 여튼 행복하세요

728x90
반응형