닫기
배너

라온피플의 머신러닝 아카데미 '머신러닝 기술 4'

  • 등록 2018.07.02 13:42:01
URL복사
[마감임박!! 무료] 생성형AI, 디지털트원, 제조AI, SaaS, 클라우드로 생산성 높이고, 비용절감 방안 제시.. AI자율제조혁신포럼 개최 (3/27~29, 코엑스3층 컨퍼런스룸 317~318호)

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


1. Cross-Entropy Cost Function


Cross-Entropy는 1997년 Rubinstein이 희소 사건의 확률을 추정하기 위한 용도로 발표 되었는데, 후에 희소 사건뿐만 아니라, 일반적인 조합 최적화(combinatorial optimization)에도 적용이 가능하다는 것이 밝혀지면서 널리 쓰이게 되었다. 원래 엔트로피(Entropy)는 클라우지우스가 열역학 제2의 법칙, 즉 “열은 높은 온도에서 낮은 온도로만 흐른다”는 것을 설명하기 위해 고안된 개념이지만, 1877년 볼츠만에 의해서 확률적인 방법으로 새롭게 정의가 되었으며, 열과 관계 없는 자연 현상도 설명할 수 있게 되었다. 현재는 분야를 가리지 않고 쓰이는 용어가 자연의 변화의 방향을 가리킬 때 사용된다.


?Information theory에서 엔트로피는 확률분포의 무작위성(randomness)을 설명하는 용도로 사용이 되며, 확률분포 p를 갖는 랜덤 변수 X를 표현하기 위한 최소의 비트 수를 나타내며 아래와 같이 표현된다.



Cross-Entropy는 2개의 확률 분포의 차이를 나타내는 용도로 정의가 되었다. 이 이름이 생소하다면, cross-correlation의 개념을 연상해보면 된다. Cross-correlation은 두 개의 함수간의 correlation 관계를 나타낼 때 사용이 된다. 반면에 CE(Cross-Entropy)는 두 개의 확률 분포가 얼마나 가까운지 혹은 먼지를 나타내며, 2개의 확률 분포 p와 m에 대한 CE는 아래와 같이 나타낸다.



위 식에서 p와 m이 같다면, Entropy와 식이 같아진다는 것을 알 수가 있다. 즉, 차이가 클수록 큰 값이 나오고, 두 개가 같아질 때 최소값이 나오게 된다. 위 수식을 잘 생각을 해보면, cost function처럼 기대값과 실제 연산값의 차가 클수록 큰 결과가 나오고, 항상 양이기 때문에 cost function으로 사용이 가능함을 알 수 있다. 


다음의 간단한 예를 보자. 랜덤 변수 X의 실제 분포가 p이고, 이것을 m1과 m2로 추정한 경우라고 하면, 어느 것이 더 좋은 추정일까?


얼핏 보기에는 별 차이가 없어 보이지만, Cross-entropy를 구하여 수치적 관점에서만 살펴보자. 그럼, Entropy H(p) = 1.86이고, Cross-entropy H(p, m1) = 2이고, H(p, m2) = 2.02이다. 결과만 놓고 본다면, m1이 좀 더 좋은 추정이 된다.


▲ 표 1


Cross-Entropy cost function은 아래 식과 같이 정의가 된다. 여기서 y는 기대값이고, a는 실제 망에서 출력된 값이라고 가정하고, n은 훈련 데이터의 개수라고 하자.



?이것을 sigmoid 함수를 활성함수로 사용하는 경우 와 를 구하면 다음과 같다. 체인 함수의 미분 과정은 생략한다.?



?처음 기대했던 것처럼, 기대값과 실제 출력의 차에 비례하는 결과를 얻을 수 있게 되었다. 결과적으로 CE cost function을 사용하여 학습을 수행하게 되면, 훨씬 빠른 속도로 학습이 진행이 되기 때문에 요즘은 MSE 보다는 CE cost function을 더 많이 사용을 한다.


속도 면에서는 Cross Entropy를 사용했을 경우 우월하다. 그렇다면 학습 결과는 어느 MSE와 CE 중 어느 것이 좋을까? 이 부분에 대해서는 논문마다 결과가 좀 다르지만, 상황에 따라서 결과가 MSE나 CE 중 한쪽이 좀 더 좋게 나오기도 하지만, 큰 차이는 없다.


2. Activation Function - SoftMax


신경망에서 뉴런의 활성 함수(activation function)로 주로 sigmoid 함수를 사용한다. sigmoid 함수를 사용하는 이유는 단순하게 step function이나 linear function을 사용할 때보다 훨씬 많은 일을 할 수 있기 때문이다. sigmoid 함수는 입력단이나 hidden layer에 주로 사용 되며, 출력단에서도 사용 된다. 하지만, 실제 신경망의 응용에서는 출력단에 SoftMax 함수를 더 많이 사용 하며, 특히 분류기(classifier) 관련 application은 SoftMax 함수를 쓰는 것이 효율적이다. 


?SoftMax는 수식으로 정리하면 아래 식과 같다.



위 식은 K-차원을 갖는 벡터 z를 (0,1) 범위를 갖는 σ(z)로 치환시키는 것과 같다. 자세히 보면, 확률 분포와 같다는 것을 알 수가 있으며, logistic regression이라고도 불린다.


Zk에 대해 편미분을 실시하면, j = k 일 때는 양수이고, j ≠ k 일 때는 음수가 된다. 즉, Zk를 증가시키면 해당 뉴런의 출력값 σ(z)는 증가하고, 다른 뉴런의 출력값은 감소하게 되는 성질을 갖게 된다. 위 성질은 강화 학습(reinforcement learning)에 매우 유용하다. 강화 학습이란 학습 결과에 대한 상과 벌을 보상(reward)으로 학습을 진행한다는 개념이기 때문에 SoftMax의 개념과 맞아 떨어진다고 볼 수 있다. Sigmoid를 사용하면, 해당 뉴런으로 들어오는 입력들과 바이어스에 의해 출력이 결정이 된다. 하지만 SoftMax를 사용하면, 해당 뉴런으로 들어오는 입력들과 바이어스의 의해 출력이 결정이 되는 구조는 비슷하지만, 다른 뉴런의 출력값과의 상대적인 비교를 통해 최종 출력값이 결정된다는 점이 다르다. 이것을 전문 용어로는 “non-locality”라고 부른다. SoftMax의 수식을 살펴보면 알 수 있는 것처럼, 모든 뉴런의 출력값들의 합하면 ‘1’이 되기 때문에 평균화(normalization)의 효과를 얻게 된다. 


그렇기 때문에 문자 인식이나 숫자 인식과 같은 분류를 목적으로 하는 신경망의 최종단에 SoftMax 함수를 쓰면, 해당 값이 나올 확률을 알 수가 있으며, 가장 큰 값이 나오는 쪽으로 분류가 됨을 알 수 있다. 또한 특정 항목의 변화가 최종 출력에 어떤 영향을 끼치는지를 바로 파악 가능한 효과도 얻을 수 있다. 



3. Hyperparameters Optimization


신경망을 통해 학습을 하게 되면, 쉽게 설명하기 어려운 많은 문제들을 해결할 수가 있을 것 같은데, 안타깝게도 잘 안 되는 경우도 많다. 이는 신경망의 학습 방법이나 구조의 문제가 아니라, 신경망의 hyperparameter 들이 제대로 설정되지 못해, 학습이 효과적으로 발휘하지 못하기 때문이다. 이것은 마치 사람들이 학습할 때, 학습에 좋은 환경이 조성이 되어 있어야 학습이 효과적으로 되는 것과 비슷하다고 생각하면 된다.


신경망에서의 hyperparameter란 신경망 학습을 통해서 튜닝 또는 최적화 해야 하는 주 변수가 아니라, 학습 진도율이나 일반화 변수처럼, 사람들이 선험적 지식으로(priori) 설정을 하거나 또는 외부 모델 메커니즘을 통해 자동으로 설정이 되는 변수를 말한다. 그렇기 때문에 “meta-parameters” 또는 free parameters”라고도 불린다. Bayesian statistics에서는 사전분포(priori distribution)을 나타내기 위한 용어로도 사용이 된다. 이는 Bayesian statistics에서 사후 분포만으로 추정을 하는 것보다 선험적 지식에 해당하는 사전 분포를 알고 있을 때 훨씬 더 잘 추정을 할 수 있는 것과 같다. 그렇다면 hyperparameter에는 어떤 것들이 있을까?


1. Learning rate

학습 진도율은 “gradient”의 방향으로 얼마나 빠르게 이동을 할 것인지를 결정 한다. 학습 진도율이 너무 작으면 학습의 속도가 너무 느리게 되고, 반대로 너무 크면 학습의 결과가 수렴이 안되고 진동을 하게 될 수도 있다.  사람마다 또는 학습하는 분야마다 최적의 학습 진도율이 다르듯이 유감스럽게도 학습 진도율을 학습하고자 하는 대상이나 망에 따라 적절하게 조절해야 한다.


2. Cost function

일반적으로 사용하는 최소 자승법을 사용할 수도 있고, [Part Ⅲ. Neural Networks 최적화 6. Cross-Entropy Cost Function 에서 살펴본 것처럼 cross-entropy 함수를 사용할 수도 있다. 


3. Regularization parameter

Overfitting의 문제를 피하기 위해, [Part Ⅲ. Neural Networks 최적화 2. Regularization 에서 살펴본 것처럼 L1 또는 L2 regularization 방법을 사용할 수 있으며, 거기서 사용하는 일반화 변수(λ)는 weight decay의 속도를 조절하기 위한 용도로 사용할 수가 있다.


4. Mini-batch 크기

Mini-batch의 크기가 큰 경우는 병렬연산 구조를 사용할 때 효과적일 수 있으며, 크기가 작으면 더 많은 update를 할 수가 있다.


5. Training 반복 횟수

학습의 조기 종료(early stopping)을 결정하는 변수가 된다.  Early-stopping이란 validation set을 이용해서 학습의 효율이 더 이상 올라가지 않게 되면, 조기에 학습을 종료하는 것을 말하며, overfitting을 방지할 때 중요하게 사용된다.


6. Hidden unit의 개수

hidden layer의 개수가 많아질수록 특정 훈련 데이터에 더 최적화 시킬 수가 있고 모든 hidden layer의 뉴런의 개수를 동일하게 유지하는 것이 같은 hidden layer의 개수에 뉴런의 개수를 가변적으로 하는 것보다 효과적이다. 또한 첫번째 hidden layer에 있는 뉴런의 개수가 input layer에 있는 뉴런의 개수보다 큰 것이 효과적인 경우가 많다.


7. 가중치 초기화 (Weight initalization)

바이어스는 일반적으로 0으로 초기화가 많이 된다. 하지만 가중치의 경우는 초기화가 학습 결과에 큰 영향을 끼치기 때문에 주의가 필요하다. 가중치는 보통 무작위로 초기화가 되며 범위는 [-r, r] 범위를 가진다. 이 때 r은 input layer에 있는 뉴런의 개수 제곱의 역수가 된다. 가령 입력 뉴런의 개수가 6이라면, [-1/36, 1/36] 범위 내에서 무작위로 설정을 한다.


위에서 살펴 본 것처럼, 많은 hyperparameter들이 있으며, 위에서 열거하지 않은 것들도 있다. 하지만 이런 hyperparameter들이 어떤 경우에 최적의 결과를 내는지 아직은 정립된 이론은 없으며, 현재 최적의 hyperparameter들을 찾기 위한 4가지 방법이 있는 것으로 의견들이 모아지고 있다. 


?1. Manual Search

말 그대로 설계자의 직관이나 경험에 기반하여, 최적의 파라미터를 추정하고 결과를 관찰하는 방법이다. 가령 학습 진도율(learning rate)에 대한 최적화 작업을 수행한다고 하면, 먼저 임의 값을 대입하여 결과를 살핀 후 그 값으로부터 일정 정도 떨어진 값을 다시 적용하여 결과가 움직이는 방향으로 추정해보고, 이런 과정을 반복하여 좋은 과정을 추정한다. 어떤 “탐색 이론”을 사용하는가에 따라 시간이나 질이 달라질 수 있다. 값을 하나씩 대입해보며, 최적의 답을 찾거나 시간이 허용하는 선에서의 최적의 답을 찾으면 멈춘다.


2. Grid Search

Grid search의 경우는 선험적인 지식을 활용하여 문제를 분석하고, hyperparameter의 범위를 정한다. 그리고 그 범위 안에서 일정한 간격으로 점을 정하고 그 점들에 대해 1개씩 차례로 실험을 해보면서 최적의 값을 찾은 후 다시 best로 추정이 되는 점을 기준으로 세분화하여 최적값을 찾는 방법이다. 그렇기 때문에 Grid search는 ‘Parameter sweep’이라고도 불린다. Manual search나 Grid search를 할 때는 결과를 판정하기 위한 validation set가 필요하다. 큰 틀에서 보면, Manual search와 큰 차이가 없으며, 개념적으로도 비슷하다.


3. Random search

Grid search와 마찬가지로 선험적인 지식을 이용하여 hyperparameter의 범위를 정한다. 그 이후에 일정한 간격으로 탐색하는 대신에 무작위로 최적값을 찾는 작업을 진행을 한다. Grid search와 차이점은 hyperparameter를 찾는 과정에서 시간이라는 ‘유한 자원’을 기반으로 해야 한다는 것이다. Bengio 박사의 “Random search for Hyperparameter optimization” 논문에 따르면, 일정한 시간 안에 결과를 내야 하는 경우, Random search를 할 때 더 좋은 결과를 내는 경향이 있다고 한다.


4. Bayesian optimization

앞서 살펴본 3가지 방식이 좀 효율적이지 못한 감이 있다. Bayesian optimization의 기본 원리가 prior knowledge를 활용하는데 있으므로, 현재까지의 실험 결과를 바탕으로 통계적인 모델을 만들고, 그것을 바탕으로 다음 탐색을 해야 할 방향을 효과적으로 정하자는 것이 이 방법의 핵심이다. 유명한 논문으로는 Adams 등이 쓴 “Practical Bayesian optimization of machine learning algorithms” 가 있다. Bayesian optimization 방법을 사용하면 Random search나 Grid search를 사용하는 것에 비해 좀 더 짧은 시간에 최적값을 찾아내는 경향이 있다. 


(주)라온피플










배너









주요파트너/추천기업