배너
닫기

테크노트

배너

라온피플의 머신비전 아카데미 세번째 순서 'Neural Networks (3)'

  • 등록 2018.06.07 16:21:42
URL복사

[첨단 헬로티]

 

머신비전산업에서 인공지능 기술(머신러닝, 딥러닝)이 빠르게 확산되고 있다.  인공지능 기술을 통해 기존의 컴퓨터비전 기술로는 어려웠던 검사가 가능해질 뿐만 아니라 ‘데이터의 자기 학습’으로 보다 빠르고 쉬우며 신뢰성과 유연성을 갖춘 머신비전 검사가 가능해졌다. 이에따라 자연스럽게 인공지능 기술에 대한 관심이 높아지고 있다. 국내 대표적인 머신비전 전문업체인 라온피플은 'LAON PEOPLE’s 머신러닝 아카데미'를 통해 인공지능의 대표적인 기술인 머신러닝 기술에 대해 연재한다.  


1. Overview


통계에서 좋은 결과를 얻으려면, 표본조사를 할 때 전체를 대표할 수 있는 우량한 샘플을 취하고, 그 샘플들로부터 전체를 잘 설명할 수 있는 모델을 만들어야 한다. 


전체를 대표할 수 없는 치우친 샘플을 얻게 되면, “장님 코끼리 만지기”처럼 엉뚱한 결과를 초래할 수도 있다. 마찬가지로 지도학습(supervised learning)을 사용하는 기계학습법에서도 선택한 학습 알고리즘뿐만 아니라 학습을 위한 훈련 데이터(training data)의 질에 따라 학습의 결과가 좌우된다.


▲ 그림 1


Overfitting이란 통계나 기계 학습에서 사용되는 용어로서, 제한된 샘플(혹은 훈련에 사용한 한정된 데이터)에 너무 특화가 되어, 새로운 샘플에 대한 예측의 결과가 오히려 나빠지거나 학습의 효과가 나타나지 않는 경우를 말한다. 


▲ 그림 2


위 그림2와 같은 그래프는 Overfitting을 설명할 때 흔히 사용하는 그림이다. 


그림에서처럼 파란색의 점들이 있을 때, 그 점들을 대표하는 곡선을 추정하는 경우를 상상해보자. 왼쪽 그림2-(a)는 직선으로 단순하게 추정을 하는 경우로 얼핏 보기에도 오류가 많음을 알 수 있다. 오른쪽 그림2-(c)는 모든 점들을 그대로 살려 오차가 없이 추정을 하는 경우이다. 이 경우 주어진 샘플(훈련 데이터)에 대해서는 최적의 결과를 나타낼 수 있지만, 새로운 샘플이 주어지는 경우는 엉터리 결과가 나올 수도 있다.  가운데 그림 2-(b)는 주어진 점들의 특성을 잘 나타낸다는 것을 알 수가 있으며, 비록 약간의 오차는 있지만 새로운 샘플들이 들어올 때는 좋은 결과가 나올 수도 있다.


√ Overfitting을 해결하는 방법

그렇다면, 어떻게 예측하는 것이 최적의 결과를 도출해 낼 수 있을까? 즉, Overfitting의 문제에서 벗어날 수 있을까? 결론부터 말하면, 정답은 없다.


(c)가 올바른 추정일 수도 있고, (b)가 올바른 추정일 수도 있다. 결과적으로는 샘플의 수를 늘리거나 훈련 데이타의 양을 늘리는 것이 정답일 것이다. 


하지만 데이터의 양을 늘리는 것은 결과적으로 많은 비용과 노력을 필요로 하기 때문에, 여러 가지 대안의 방법들이 제시가 되고 있다.


위 그림에서처럼 (b)와 (c) 중 어느 것을 택할 것인가 선택의 상황이 있을 때 흔히 적용되는 방법이 “Occam’s Razor(오캄의 면도날)” 방법이다. 


14세기 영국의 신학자이자 논리학자인 오캄의 저서에 등장하며, 중세의 철학자와 신학자들이 복잡한 논쟁을 배제시키자는 뜻에서, 설명이 더 복잡한 이론은 배제할 때 흔히 사용이 된다. 


▲ 그림 3


물론 항상 진리는 아니지만, 필연성 없는 개념을 배제하려고 한 “사고 절약의 원리” 라고도 불리며, 같은 현상을 설명하는 두 개의 주장이 있다면 간단한 쪽을 선택하라고 한다.


오캄의 원리에 의해서 주어진 점들을 추정한다면 당연히 (b)를 선택하는 것이 맞다.


2. Regularization (Overfitting에 대한 해결책)


Overfitting의 문제를 피하기 위한, 가장 확실한 대책 중 하나는 훈련 데이터(Training data)의 양을 늘리는 것이다. 


하지만, 훈련 데이터는 아무런 대가 없이 그냥 얻어지는 것이 아니다. 양질의 훈련 데이터를 얻으려면 많은 시간과 비용을 필요로 하며, 어떤 경우는 추가 데이터의 확보가 어렵거나 불가능한 경우도 있다. 또한, 학습 데이터의 양이 많아지면 결과적으로 학습에 걸리는 시간이 늘어나는 문제도 있다.


√ Overfitting 해결을 위한 Regularization 방식

이 때 사용하는 방식이 regularization이다. Regularization은 ‘정규화’라는 말로 번역이 되기도 하지만, ‘일반화’ 라고 번역을 하는 것이 더 적합한 것 같다. 이 용어는 기계 학습뿐만 아니라 통계에서도 흔히 사용이 되는 용어이다. Regularization은 일종의 penalty 조건에 해당이 된다. 


통상적으로 기계학습이나 통계적 추론을 할 때 cost function 혹은 error function이 작아지는 쪽으로 진행을 하게 된다. 단순하게 작아지는 쪽으로만 진행을 하다 보면, 특정 가중치 값들이 커지면서 오히려 결과를 나쁘게 하는 경우도 있다. 아래 그림4는 regularization을 통해 더 좋은 학습 결과를 가져오는 경우를 보여주는 그림이다.


▲ 그림 4


√ Regularization 수학적 표현

① L2 Regularization

Regularization은 (정확하게 표현하면, L2 regularization) 아래의 수식으로 표현할 수 있다.



위 수식에서 C0는 원래의 cost function이며, n은 훈련 데이터의 개수, λ는 regularization 변수, w는 가중치를 나타낸다. 위 식처럼 regularization 항목이 들어가면, 학습의 방향이 단순하게 C0 값이 작아지는 방향으로만 진행되는 것이 아니라, w 값들 역시 최소가 되는 방향으로 진행을 하게 된다. 이렇게 정의된 cost function을 가중치 w에 대해서 편미분을 수행하면, 결과적으로는 새로운 가중치는 아래와 같이 결정이 된다.



위 식에서 (1 - ηλ/n)w는 원래의 w 값에 (1 - ηλ/n) 항목을 곱한 형태가 되기 때문에 값이 작아지는 방향으로 진행을 하게 된다. 이를 “weight decay” 라고 한다. 이에 의해 특정 가중치가 비이상적으로 커지고 그것이 학습의 효과에 큰 영향을 끼치는 것을 방지할 수 있다.


② L1 Regularization

Regularization은 통상적으로 L1과 L2 regularization으로 나눠지게 된다.

 

앞서 살펴본 수식은 L2 regularization에 속하고, L1 regularization은 2차항 대신에 1차항이 오며, 식은 아래와 같다.



앞서 살펴본 것과 마찬가지로 가중치 w에 대해서 편미분을 수행하면, 결과적으로는 새로운 가중치는 아래와 같이 결정이 된다.



결과적으로 위 식을 보면, weight 값 자체를 줄이는 것이 아니라 w의 부호에 따라 상수 값을 빼주는 방식으로 regularization을 수행한다.


√ L1 / L2 Regularization의 차이점과 선택 기준

L1과 L2 regularization은 어떤 차이가 있을까? 그리고 언제 어떤 regularization 방법을 선택할까? 


이것에 대한 답은 L1과 L2 regularization 수식을 살펴보면 이해를 할 수가 있다. 


L1 regularization은 통상적으로 상수 값을 빼주도록 되어 있기 때문에 작은 가중치들은 거의 0으로 수렴이 되어, 몇 개의 중요한 가중치들만 남게 된다. 그러므로 몇 개의 의미 있는 값을 끄집어내고 싶은 경우에는 L1 regularization이 효과적이기 때문에 “sparse model(coding)”에 적합하다. 단, 기본 수식에서도 알 수 있듯이 미분이 불가능한 점이 있기 때문에 gradient-based learning에 적용할 때는 주의가 필요하다. Regularization은 그 개념을 정확히 이해를 하는 것이 중요하기 때문에, 가급적이면 수식을 배제하고자 하였으나, L1과 L2 regularization의 차이를 설명하고, 개념 이해를 위해 일부 수식을 사용하였다. 


3. 지능적 훈련 데이터 (Overfitting에 대한 해결책)


Overfitting의 문제를 피하기 위한 가장 확실한 대책 중 하나는 훈련 데이터(Training data)의 양을 늘리는 것이다. 하지만, 훈련 데이터는 아무런 대가 없이 그냥 얻어지는 것이 아니다. 양질의 훈련 데이터를 얻으려면 많은 시간과 비용을 필요로 하며, 어떤 경우는 추가 데이터의 확보가 어렵거나 불가능한 경우도 있다.


√ ‌[CASE STUDY] "필기체 숫자 인식"을 위한 지능적 훈련 데이터 만들기

예를 들어, 필기체 숫자를 인식하는 알고리즘을 개발한다고 하면, 훈련 데이터 확보를 위해 수만 혹은 수십만 명을 만나 아래 그림5와 같은 필기체 훈련 데이터를 확보해야 한다. 누군가 미리 표준 데이터 집합을 만들어 놓은 경우라면 그나마 다행이다.


▲ 그림 5


그런데 다양한 필기체 훈련 데이터 확보를 위해 과연 그렇게 많은 사람들을 만나서 설명을 하고 데이터를 확보하고, 그것을 스캔하고, 데이터베이스에 넣는 일을 과연 해야 할까? 기 확보한 데이터로부터 효과적인 훈련 데이터를 만들어내는 방법은 없을까? 결론부터 말하면 있다. 


① Affine Transform을 이용한 지능적 훈련 데이터 생성.


▲ 그림 6


위 그림6은 왼쪽의 기 확보된 데이터를 반시계 방향으로 15도 회전하여 얻은 데이터이다. 이렇게 affine transform을 거치고 나면, 다양한 데이터를 얻을 수 있다. Affine transform은 아래 그림7과 같은 4가지 연산이 있으며, 이것들을 조합하면 많은 훈련 데이터를 확보할 수가 있다.


▲ 그림 7


② Elastic Distortion을 이용한 지능적 훈련 데이터 생성

마이크로소프트 社에서는 효과적인 훈련 데이터 생성을 위해 “Elastic distortion”이라는 방법을 개발하였고 특허 출원을 하였다. Elastic distortion이란 위 그림의 affine transform과 같은 단순한 변형이 아니라, 아래 그림8처럼 다양한 방향으로의 displacement vector를 만들어내고 그것을 통해 좀더 복잡한 형태의 훈련 데이터를 만들어 낼 수 있게 되었으며, 필기체 인식에 유용한 훈련 데이터 집합이 될 것이라는 것은 자명하다.


▲ 그림 8


√ 기타 분야에서의 지능적 훈련 데이터 만들기

음성 인식의 경우에도 비슷하게 다양한 훈련 데이터를 만들어 낼 수 있다. 가령, 잡음이 없는 상태에서 녹음을 한 뒤에, 다양한 배경 잡음과의 합성을 통해, 다양한 훈련 데이터 집합을 만들어 낼 수 있다. 또한 속도를 빠르게 혹은 느리게 조절하는 방법과 위 방법과의 조합으로 역시 많은 훈련 데이터 집합을 얻어낼 수가 있다.  학습에서 좋은 결과를 얻으려면 대표성을 갖는, 전문적인 용어로 orthogonal한 벡터 집합을 얻는 것이 중요하며, 환경을 잘 이해하고 있다면, 적용 환경에 맞게 지능적인 방법으로 훈련 데이터를 획득하는 것 역시 효율적임을 알 수 있다.


4. Dropout (Overfitting에 대한 해결책)


Regularization이 error 함수 또는 cost 함수에 penalty 함수를 추가하고 그 penalty 부분에 대한 조작을 통해 결과를 얻는 방식이라면, dropout은 망 자체를 변화시키는 방식이기 때문에 둘은 근본적으로 다르다. 


Hidden Layer의 개수가 많아질 경우의 장단점?

일반적으로 신경망에서 hidden layer의 개수가 많아지면, 즉 deep neural network이 되면, 더욱 많은 문제를 해결할 수 있도록 학습 능력이 좋아진다. 하지만, 망의 크기가 커지면 커질수록 overfitting에 빠질 가능성이 높아지고, 신경망에 대한 학습 시간도 길어지는 문제가 있으며, 적절한 결과를 도출하려면 훈련 데이터의 양 또한 늘려야 한다. 


Dropout 개요

이렇게 망의 크기가 커질 경우 Overfitting 문제를 피하기 위한 방법이 dropout이며, 논문이 발표된 지 채 10년이 넘지 않았다. Dropout은 아래의 그림9-(a)에 대한 학습을 할 때, 망에 있는 모든 layer에 대해 학습을 수행하는 것이 아니라 그림 9-(b)와 같이 망에 있는 입력 layer나 hidden layer의 일부 뉴런을 생략(dropout)하고 줄어든 신경망을 통해 학습을 수행한다. 일정한 mini-batch 구간 동안 생략된 망에 대한 학습을 끝내면, 다시 무작위로 다른 뉴런들을 생략(dropout) 하면서 반복적으로 학습을 수행한다.


▲ 그림 9


Dropout 효과

그럼 이렇게 dropout을 하는 이유는 무엇이고, dropout은 과연 효과가 있을까? 


① Voting 효과

Dropout을 하는 첫 번째 이유는 투표(voting) 효과 때문이다. 일정한 mini-batch 구간 동안 줄어든 망을 이용해 학습을 하게 되면, 그 망은 그 망 나름대로 overfitting이 되며, 다른 mini-batch 구간 동안 다른 망에 대해 학습을 하게 되면, 그 망에 대해 다시 일정 정도 overfitting이 된다. 이런 과정을 무작위로 반복을 하게 되면, voting에 의한 평균 효과를 얻을 수 있기 때문에, 결과적으로 regularization과 비슷한 효과를 얻을 수 있게 되는 것이다.


② Co-adaptation을 피하는 효과

또 다른 이유로 co-adaptation을 피하는 효과를 들 수 있다. Regularization에서 살펴본 것처럼, 특정 뉴런의 바이어스나 가중치가 큰 값을 갖게 되면 그것의 영향이 커지면서 다른 뉴런들의 학습 속도가 느려지거나 학습이 제대로 진행이 되지 못하는 경우가 있다. 하지만 dropout을 하면서 학습을 하게 되면, 결과적으로 어떤 뉴런의 가중치나 바이어스가 특정 뉴런의 영향을 받지 않기 때문에 결과적으로 뉴런들이 서도 동조화(co-adaptation)이 되는 것을 피할 수 있다. 특정 학습 데이터나 자료에 영향을 받지 않는 보다 강건한(robust)한 망을 구성할 수가 있게 되는 것이다. 이것은 마치 오랜 시간 동안 지구상에 존재하는 생명체들이 유전자 복제가 아닌 양성 생식을 통해 유전자를 결합하고 보다 강인한 유전자들이 자연의 선택을 받아 살아남는 것과 마찬가지이다.


5. 학습 속도 저하 현상의 원인


옛날에 오줌싸개 어린이는 키를 씌워서 동네 한 바퀴를 돌게 했고, 그 이유는 아이가 크게 망신을 당해 다음부터는 오줌을 가리도록 해주기 위함이라고 했다. 물론 지금은 잘못된 이론이라는 말도 있다. 이처럼, 사람은 크게 망신을 당할 정도로 큰 실수를 하게 되면, 그 충격으로 인해 다음부터는 그 실수를 하지 않게 되는 경향이 있다. 즉 큰 에러가 발생할수록 학습이 잘 되는 경우가 종종 있다. 신경망 학습에서도 이런 일이 일어날까? 원래 나와야 할 값(훈련 데이터의 결과 값)과 망에서 실제로 수행을 한 결과의 차가 크면 학습을 정말로 잘 하게 될까? 일반적으로 신경망의 cost function으로 사용하는 MSE(평균제곱오차, Mean Square Error) 방식을 사용하면 유감스럽게도 그렇지 못하다. 이는 cost function으로 MSE 방식을 사용하고 활성함수로 Sigmoid 함수를 사용하는 경우 Sigmoid 함수의 미분 특성과 결합하면서 문제가 생기기 때문이다.


▲ 그림 10


설명을 쉽게 하기 위해, 위 그림10과 같이 1개의 뉴런이 있고, 뉴런의 가중치는 w, 바이어스는 b이고, 활성함수로 Sigmoid 함수를 사용한다고 하자. 이런 뉴런에 입력 x를 가하면, 뉴런의 입력은 z = wx + b가 되고, 이것이 활성함수 σ(z)를 거치면 출력 a가 나오게 된다.


만약 x를 입력으로 넣었을 때의 원래 나와야 할 기대값이 y라고 한다면, cost function은 위 그림의 빨간 박스처럼 나오게 된다. 여기서 (y - a)는 오차가 되고, 에러를 역전파(back-propagation) 시키게 되면, 오차가 클수록 학습 속도가 빨라져야 할 것 같은데 그렇지 못하다.


가중치와 바이어스의 값을 갱신하려면, cost function C를 가중치와 바이어스에 대해서 편미분을 수행한다. 편미분을 수행하면, 아래 그림의 빨간 박스처럼 결과가 나온다.


▲ 그림 11


위 그림11의 식을 살펴보면 알겠지만, 가중치와 바이어스의 편미분값에는 Sigmoid 함수의 미분값을 곱하는 부분이 있다. 바로 이 것이 문제의 주범이다. Sigmoid 함수에 대한 미분을 취하게 되면, 위 그림과 같은 결과가 나온다. 즉 z가 0일 때 최대값을 갖고, 0으로부터 멀어질수록 미분값이 0에 수렴하는 작은 값으로 가게 된다. 즉, 바이어스나 가중치의 갱신값이 아주 작은 값을 곱해주는 형태가 되기 때문에 (6 -y) 항이 크더라도 결국은 가 아주 작은 값으로 되기 때문에 학습 속도 저하가 일어난다.


신경망의 학습속도가 느려지는 이유 - Gradient descent 특성으로 인해

편미분 식 ∂c/∂w와 ∂c/∂w를 살펴보면, (a - y)의 차가 작아지면, 즉 target 값과 망의 실제 계산값이 거의 같아지면, (a - y)가 다시 0으로 수렴하게 되기 때문에 결과적으로 바이어스와 가중치의 갱신값이 작아지게 된다. 결과적으로 target 근처로 가게 되면 학습의 속도가 저하되게 된다. 이는 Gradient descent 방법이 갖는 구조적인 특징에 기인한다. gradient descent 방법은 결과적으로 아래 그림 12와 같다.


▲ 그림 12


높은 곳에서 공을 떨어뜨리게 되면, 어느 곳에서 시작을 하더라도 낮은 곳으로 굴러가게 되며, 경사가 클수록 (gradient가 클수록) 빠르게 이동을 한다. 그러다가 거의 바닥에 오게 되면 (즉, target 근처에 오게 되면), 경사가 거의 없기 때문에 공이 굴러가는 속도가 느려지게 된다. 결과적으로 (a - y)가 0 근처에 오게 되면, 학습의 속도가 현저하게 저하되며, 학습을 더 시키더라도 학습의 결과가 그렇게 좋아지지 않는 현상이 발생하기 된다. 학습의 시간도 결과적으로는 비용에 해당이 되기 때문에 학습의 결과가 더 이상 개선이 되지 않는 경우는 적절한 곳에서 stop을 해줘야 한다. 


(주)라온피플









배너










주요파트너/추천기업