For Beginners

[Deep Learning] Normalization에 대해서 알아봅시다. 본문

2021 이전 자료들/AI

[Deep Learning] Normalization에 대해서 알아봅시다.

.log 2020. 3. 17. 18:31
728x90

먼저 Normalization에 대한 설명을 들어가기 전에 이걸 알아봅시다.

Normalization은 왜 사용하는 것일까요?

 

학습 데이터가 중복이 있는 것도 아닌데 데이터베이스마냥 정규화를 사용하니

왜 사용하는지 이해가 잘 안되어서 저도 궁금했습니다.

제가 이해한 대로 적었지만, 정확한 책의 내용을 가져온 것은 아니고

영어 잘 못하는 제가 해석해서 쉽게 제 스스로 이해할 수 있게 분석한 것이니,

혹시 읽으시면서 음 아닌데? 싶은 부분이 있으시다면 언제든지 태클을 걸어주세요!

환영입니다~

 

학습이 진행되면서 데이터의 분포가 어떤 분포를 띄게 됩니다.

고등학교 때 통계를 배울 때 가우시안 함수 분포에 대해서 배웠듯이

특정 함수 모양으로 데이터가 분포하게 될 것입니다.

 

예를 들어서, 고양이와 강아지 사진을 분류한다고 했을 때, 

고양이 사진은 x요소값이 크고,

강아지 사진은 y요소값이 큰 분포가 나올 수 있다고 해봅시다.

그러면 어떤 사진을 입력 받는다고 가정했을 때

x요소 값이 크다면 고양이 사진일 것이다! 라고 가정하는 것이 기계학습의 예시가 되겠죠.

 

그런데 말입니다.

단순히 고양이와 강아지를 분류하게 되는 기준이 이렇게 간단하지는 않습니다.

예시를 쉽게 들어서 그렇지 사실은 더 많고 많은 기준에 따라서 고양이와 강아지를 분류하게 될 것입니다.

그러면 그 기준들 모두에 부합하는 고양이 사진이 있을 수 있고,

일부는 고양이 사진인데도 강아지 사진으로 분류될 수 있는 특징을 가지고 있을 수 있습니다.

 

뭐 고양이는 물을 싫어한다는 특징이 있어서 주변에 물로 추정되는 것이 있으면

고양이 사진이 아니다, 이런 기준이 고양이 사진을 분류하는 요소 중 하나라고 가정해봅시다.

만약 물에서 놀고 있는 변종 고양이 사진으로 학습을 진행하게 되면 어떻게 될까요?

그러면 물에 들어간 강아지 사진을 고양이 사진이라고 분류할 수 있는 문제가 생겨버립니다.

이 문제를 과적합이라고 합니다.

 

과적합: 학습된 모델이 기존 데이터는 잘 동작하였지만, 새로운 데이터에 대해서는 잘 동작하지 않는 현상

 

이 문제를 해결하기 위해서는 여러 방법들이 있는데, 

1. 데이터를 많이 집어넣는 방법이 있습니다.

물에 들어간 고양이 사진은 하나이고, 물에 들어간 강아지 사진은 100개라면,

물에 들어간 강아지 사진을 보았을 때, 강아지 사진이라고 분류하는 기준의 가중치가 더 높겠죠?

또한, 엄청 많은 데이터를 기준으로 학습하게 되면,

물에 들어간 고양이 사진을 보게 되어도, 무조건 강아지! 라고 분류하진 않고, 고양이일수도 있다!

비중도 존재하게 될 것입니다.

그런데 데이터가 많이 없는 실험이다 그러면,

데이터를 확대시키고, 자르고 돌리고 흐리게 하고 등등 변형을 가해서 한 사진을 여러 버전으로 만들어서

데이터를 증식 시키는 방법도 있습니다.

 

2. 데이터를 일부 잘라내는 방식도 있습니다.

심사위원들이 점수를 매길 때도 비슷한 원리를 적용하고 있는데,

보통 극단적으로 점수를 낮게 주는 심사위원이 있고,

극단적으로 점수를 후하게 주는 심사위원이 있는 경우를 대비해서

가장 최고점과 최저점을 뺀 평균 점수를 심사에 반영하는 심사방식이 있습니다.

이런 것을 데이터의 탈락으로 데이터를 정규화한 예시가 될 수 있습니다.

결국 아까 든 물에 든 고양이 사진을 탈락시키는 경우,

물과 고양이가 무조건 연관된 것이다 라고 학습하게 되는 일은 줄어들게 되는 것입니다.

 

3. 데이터를 부드럽게 만드는 방식도 있어야 합니다.

한국인은 김치를 좋아한다라는 가설을 만들기 위해서 여러 한국인들의 의견을 받아본다고 해봅시다.

김치를 좋아하는 사람의 비율이 0.666666... 이런식으로 무한정으로 소수로 진행되는 경우도 있을 것이고,

뭐 상황에 따라서 숫자가 0.248232498823749... 이렇게 알 수 없는 숫자의 나열들로 연산을 계속할 수도 있을 것입니다.

이럴 때 이런 숫자들의 자릿수를 적당히 커트할 수 있는 방식도 존재해야 합니다.

또한, 데이터 자체의 숫자로 따지면 백만명의 의견을 받았을 지라도 확률적으로 계산하여

숫자 자체의 크고 작음에 의해 학습이 더뎌지는 문제를 해결할 수도 있습니다.

 

4. 데이터의 범주를 줄이는 것도 필요합니다.

중고 차량의 거래 가격을 예측하는 시스템을 만든다고 가정했을 때,

중고 차량의 주행 거리는 몇 km 로 끝나는 것이 아니라 몇 만 km까지도 갈 수 있습니다.

그런데, 이 주행 거리와 엔진 효율 등의 수치는 각각 다르기 때문에 이 수치들을 모두 0과 1 사이의 값으로 바꾸어주어야 합니다.

 

5. batch normalizaton

학습을 진행하는 동안 특정 데이터가 어떤 뉴런에 유달리 매우 큰 값을 전달하게 된다면 어떻게 될까요?

예를 들어서 겁나 불 수능 문제가 나왔는데 이번 대입 결과를 예측하는 시스템을 만든다고 생각해봅시다.

그런데 그 불 수능을 본 학생들의 시험 성적이 다 엉망이었는데

한 영재가 수능을 만점을 받았다고 해봅시다.

그리고 그 다음 타자가 만점이 아닌 80점 이하의 점수라고 가정" 해봅시다.

그러면 그 영재의 점수를 대입 예측 결과에 반영하게 되면 영재의 점수는

다른 사람들과 달리 훤씬 높은 만점의 점수가 나왔기 때문에

영재를 고려한 대입 예측 결과와 영재를 고려하지 않은 대입 예측 결과는 매우 다르게 나올 것입니다.

그래서 인공지능에서 이러한 데이터가 존재한다는 것을 감안하기 위해서

batch normalization 을 사용하는데,

평균값과 분산으로 일단 normalize한 수를 변수로 하여, 임의의 수들로 곱하고 더하기 연산한 값을 생성하게 됩니다.

이 임의의 수는 학습이 될 수 있습니다.

그래서 이렇게 학습하는데 균형이 무너지게 되는 일을 방지할 수 있습니다.

 

그래서 쉽게 설명하자면

처음에 학습 데이터를 넣는데 정제하는 그냥 정규화가 있고,

학습 데이터를 학습하는 중간중간에 삐죽삐죽하게 결과가 나오는 데이터들의 영향을 너무 받지 않게 조정해주는 batch normalization이라는 것이 있습니다.

그래서 batch size라는 것이 중요해지게 되는데,

그 이유는 이 batch normalization 을 진행하는 단위가 한 배치에서 이루어지기 때문입니다.

그리고 여기서 중요한 것은 batch normalizaiton 을 진행하면서 설정해주어야 하는 것이 axis이다.

이 axis는 이미지의 경우 channel dimension으로 설정한다.

이게 무슨 말이냐면 nomalize를 진행하게 되면 어떤 부분은 독립되어야 하는 부분이 있다.

channel의 경우 r g b 이렇게 세 가지의 채널이 있다고 하면 r은 이런 특징을 가지고 있고,

g는 이런 특징을 가지고 있고가 확실히 다르기 때문에

주로 이미지를 가지고 batch normalization을 진행하게 되면 

채널끼리는 분리해서 normalization 을 합니다.

 

 

 

 

 

 

 

 

 

 

정규화에 대한 정보 출처: http://papers.nips.cc/paper/8440-positional-normalization.pdf

불러오는 중입니다...

https://brunch.co.kr/@kakao-it/137

 

[카카오AI리포트]딥러닝과 데이터

신정규 | 텍스트큐브 개발자 | 데이터는 기하급수적으로 늘어났다. 단위 연산당 비용은 엄청나게 줄어들었다. 그 결과 인공 신경망 기반의 기계 학습 분야가 각광받고 있다. 과거 인공 신경망은 다른 기계 학습 방법론들에 비해 여러 단점*1을 가지고 있었다. 그러나 21세기 들어 많은 문제들이 해결되었다. 다수의 은닉층(hidden layer) 기반 심층 인공 신경망*2은 1990년대에는 시도

brunch.co.kr

설명을 위해서 참고한 사이트: https://wikidocs.net/61374

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

Comments