인공 신경망은 인간의 뇌가 패턴을 인식하는 방식을 모사한 알고리즘 이다. 인공 신경망은 시각, 청각 입력 데이터를 퍼셉ㅌ트론이나 분류 , 군집을 이요하여 해석하는데, 이렇게 해석한 결과를 이용하여 이미지, 소리,문자, 시계열 데이터에서 특정 패턴을 인식할 수 있습니다.


인공 신경망을 이용하면 각종 분류(Classification)및 군집화(Clustering)가 가능합니다. 지금부터 자세히 살펴 보겠지만, 단순하게 표현하면 ㅂㄴ류나 군집화를 원하는데이터 위에 여러가지 층(Layer)을 얹어서 원하는 작업을 하게됩니다. 각 층에서 라벨링이 되어있지 않은 데이터를 서로 비교하여 유사도를 구해주거나, 라벨링이 되어있는 데이터를 기반으로 분류기를 학습하여 자동으로 데이터를 분류하도록 할 수 있습니다. ( 구체적으로 이야기 하자면, 인공신뎡망으로 특징을 추출하고 그 특징을 다시 다른기계학습 알고리즘의 입력으로 사용하여 분류나 군집화를 할 수 있습니다. 즉 심층 신경망은 전체 기계학습 시스템의 구성요소로 생각하면 됩니다. 여기서 전체 시스템이란 강화하습, 분류 및 회귀를 말합니다.)


심층 신경망을 이용해보고 싶다면 우선 어떤 문제를 해결하고 싶은지 생각해보십시오. 즉 어떤 분류를 하고싶은지, 그리고 내가 어떤 정보를 취할 수 잇는지를 정해야 합니다. 예를들면 이메일 데이터를 과 으로 분류한다던지 고객을 과, 과로 분류할 수 잇씁니다. 이렇게 어떤 분류를 원하는 지 지정한뒤 분류에 필요한 데이터가 있는지생각해 보아야 합니다. 예를들어 이미과으로 라벨링된 이메일 데이터가 있는지 없다면 내가 직접 데이터셋을 만들 수 있는지를 고민해야 합니다.

또, 이 데이터로 원하는 라벨링이 과연 가능한 것인지도 생각해봐야 합니다.


예를들어, 암 고위험군에 속하는 사람들을 분류하는 알고리즘을 만들기위해서는 우선 암환자의 아닌 사람의 데이터가 필요합니다.

데이터는 사람들의 나이,흡연습관 같은 쉬운특징이나 일일활동량, 온라인 활동 로그같은 간접적인 특징등 무엇이든 가능합니다. 그러나 사람들의 건강과 관련된 개인정보가 전혀없는 상태라면 아무리 좋은 알고리즘이 있어도 암을 예측하니느 어려울것이다.


필요한 데이터가 잇따면 이제 인공신경망이 사람들의 암발병률을 예측허도록 학습을 할 수 있습니다.

즉, 암에 걸린/걸리지 않은 사람들이 각각 어떤 행동 패턴을 갖는지, 어떤 것을 기준으로 어떻게 분류하면 된는지를 신경망이 학습하도록 하는것입니다. 가지고 있는 데이터로 학습이 잘되었다면 이젠 사람들의 행동패턴을 이용해 그 사람들이 암에 걸릴 확률을 예상할 수 있습니다.


심층 신경망은 신경망 알고리즘 중에서 여러개의 층으로 이루어진신경망을 의미합니다. 한층은 여러개의 노드로 이루어져있습니다. 노드에서는 실제로 연산이 일어나는데, 이연산과정은 인간의 신경망을 구성하는 뉴런에서 일어나는 과정을 모사하도록 설계되어있습니다. 노드는 일정 크기 이상의 자그 받으면 일어나도록 되어있는데 그 반응의 크기는 입력값과 노드의 계수(또는 가중치(weight) 를 곱한값와 비례합니다. 일반적으로 노드는 여러개의 입력을 받으면 입력의 개수만큼 계수를 가지고 있습니다. 따라서 이계수를 조절함으로써 여러입력에 다른 가중치를 부여할 수 있습니다. 최종적으로 곱한값들은 전부 더해지고 그하바은 활성함수(activation function)의 입력으로 들어가게 됩니다. 활성 함수의 결과가 노드의 출력에 해당하며 이 출력값이 궁극적으로 분류나 회귀분석에 쓰이게 됩니다.

노드에서 일어나는 계산과정이 아래 다이어그램에 정리되어있습니다. 


Alt text


층은 여러개의 노드로 이루어져 잇으며 입력갑셍 따라 각노드의 활성화/ 비활성화 여부가 결정됩니다. 입력데이터는 첫번째 층의 입력이 되며 그이후엔 각층의 출력이 다시 다음층의 입력이 됩니다.

Alt text


이렇게 심층 신경망에서는 층마다 다른 층위의 특징이 학습이 됩니다. 낮은 층위의 특징은 단순하고 구체적이며 (예:이미지를 이루는 수평선, 수직선, 대각선) 높은 층위의 특징은 더욱 복잡하고 추상적입니다 (예:사람 모양, 자동차 모양, 고양이 모양, 얼굴 모양..). 이런 추상화 과정을 통해 심층 신경망이 아주 큰, 고차원의 데이터를 이해하며 이 과정은 수 억, 수 십억 개의 계수가 관여합니다. (이 과정에서 비선형함수를 사용합니다.)

또한 심층 신경망은 데이터를 이용해 데이터의 잠재적인 구조(latent structures)를 파악할 수 있습니다. 즉, 사진, 글, 비디오, 음성, 음악의 잠재적인 구조(어떤 물체가 사진에 있는지, 글의 내용과 감정이 무엇인지, 음성의 내용과 감정이 무엇인지 등)를 파악할 수 있습니다. 이를 통해 데이터가 라벨링되어있지 않아도 데이터간의 유사성을 효과적으로 파악할 수 있으며, 결과적으로 심층 신경망은 데이터 군집화에 아주 좋은 성능을 발휘합니다.

예를 들어 신경망을 이용해 대량의 사진 데이터를 받아서 비슷한 사진끼리 모아줄 수 있습니다. 구글 포토나 각종 사진 관리 앱의 스마트 사진 앨범 기능은 이런 기능을 이용한 것 입니다.

이런 군집화 기술은 다른 데이터에도 적용할 수 있습니다. 예를 들어 이메일에 이 기술을 적용하면 이메일의 내용에 따라 불만/항의 메일, 감사 메일, 문의 메일, 전혀 관계없는 스팸 메일 등 메일의 내용에 따른 분류를 할 수 있습니다. 이 분류 결과를 이용하면 고객관리에 큰 도움이 될 것입니다. 같은 방법을 전화 통화 녹음 데이터에도 적용할 수 있습니다. 사용자 로그같은 시계열 데이터를 사용하면 비정상 행위 탐지가 가능합니다. 스마트폰의 위치 데이터로는 사용자의 건강 상태 진단이 가능합니다.

심층 신경망이 일반적인 기계 학습과 다른 점은 특징 추출(feature extraction)이 자동적으로 이루어지는 점 입니다. 기존에는 효과적인 특징을 추출하기 위해 관련 분야 전문가가 오랜 시간동안 직접 특징을 추출하는 수식이나 방법을 고안해야 했습니다. 이 방법은 개발, 평가 및 보완에 많은 시간이 걸립니다. 심층 신경망은 이런 과정을 컴퓨터가 대신 하도록 알고리즘을 짠 것으로, 사람에 비해 훨씬 빠르고 효과적으로 수행해도록 학습시켜줍니다.

라벨링이 되어있지 않은 데이터를 학습하는 경우에 신경망은 데이터의 특징을 자동적으로 추출합니다. 이 자동 추출은 여러 가지 방법이 있는데, 보통 이 과정은 신경망을 통과시켰을 때의 출력이 입력과 같아지도록 학습합니다. 결과적으로 이 신경망은 입력을 효율적으로 인코딩하고 다시 이를 디코딩하는 - 간단하게 말하면 재구성(reconstruct)하는 - 작업을 합니다. RBM(Restricted Boltzmann machines)의 학습 과정도 이런 구조로 이루어져있습니다.


예제 인공신경망과 역전파(back prop)

인공신경망 학습의 목적은 출력의 오류를 최소화 하는것입니다. 운동장 주변의 트랙을 뛰는 달리기 경기를 생가해보자. 트랙을 여러ㅂ퀴 달리다보면 같은지점을 여러번 지나게 됩니다. 신경망 학습과정도 비슷하다. 우선 학습이 시작되면 뉴럴넷은  모든 계수를 초기화 합니다. 그리고 반복적으로 데이터를 보여주어서 학습을 합니다. 만일 학습이 잘되었다면 계수는 적절한 값으로 업데이트가 되어있을것이고, 이 인공신경망으로 각종 분류와 예측이 가능합니다.

학습과정 내부에선 같은 원리의 계수 업데이트가 반복적으로 일어납니다. 계수 업데잍의 원리는 우선 계수를 추정하고 그 계수를 사용했을때 발생하는 에러를 측정한 뒤 그에러에 기반해서 계수를 약간씩 업데이트 하는것입니다.

우리는 신경망의 여러계수를 합쳐서 모델이라고 부릅니다. 모델은 초기화 된 상태일 수도 있고, 학습이 완료된 상태일 수 도 있습니다. 실제로 데이터가 생성되는 원리는 알 수 없기 때문에 이것을 모사한 말그대로 모델인 셈입니다. 초기화된 모델은 의미있는 작업을 하지 못하지만, 학습이 진행될수록 모델은 임의의 값이 아닌, 실제와 유사한 결과를 출력하게 됩니다.

이는 인공 신경망이 데이터를 보기전까지는 아무것도 모르는상태이기 때문입니다. 계수를 임의의 값으로 초기화하는 이유도 마찬가지 입니다. 그리고 데이터를 읽어가면서 계수를 조금씩 올바른 방향을 업데이트 합니다.

이제 정말 단순하게 이과정을 식으로 표현하겠습니다.

입력값이 신경망에 들어오면 현재상태의 계수를 이용해 결과를 출력합니다.

그리고 이렇게 추정한 값을 실제정답과 비교합니다.

정답과 추정하는 차이가 바로 오차입니다. differ = (f(x) - y)^2 신경망은 오차를 측정하고 이오차를 반영해서 예수를 보정합니다. 이 아주 간략한 관계식에 인공신경망의 가장 중요한 내용이있습니다. 입력을 받아 출력을 내고, 오차를 계산한뒤 이를 반영해 계수를 업데이트 하는것입니다. 이 과정을 계속 반복하는 것이 학습과정 입니다.

이제 단계별로 자세히 살펴봅시다. 우선 입력을 받아서 출력을 추정하는 과정을 보겠습니다.


다중 회귀분석

인공신경망은 사람의 신경망을 모사한 측면이 있습니다. 하지만 결과적으로 인공신경망은 숫자와 수식으로이루어진 머신러닝 알고리즘 입니다. 사실 원리자체는 매우 간단해서 선형 회귀를 아는사람이라면 누구나 인공신경망을 이해할 수 잇ㅆ브니다. 선형회귀를 간단한 수식으로 표현하면 아래와 같습니다.

Y = b*X + a 

예를들면 X는 일일 운동량이고 Y는 발병률 , 또는 X는 비료 사용량이고 Y는 수확량이 될 수 있씁니다. Yrk ㅌ에 영향받는 모든 경우 이식으로 모델링 할 수 있습니다.

이제 회귀 분석식을 다중 회귀 분석으로 바꿔봅시다. 다중 회귀 분석은 회귀분석과 유사하지만 입력 변수가 여러개 입니다. 즉, 아래와 같은 식으로 표현가능합니다.

수확량을 예측경우라면 이 비료 사용량은 강루량은 일조량을 가정할 수있습니다. 이 세가지 변수는 모두 수확량에영향을 \끼칩니다.

사실 인공신경망의 모든 노드마다 별도의 다중 회귀분석이 이루어 집니다. 층의 출력은다음단계 층의 ㅇ입력이 된다고 이야기했었는데, 이 입력값이 바로위의 에 해당합니다. 그리고 노드가 갖고 있는 계수는 ...입니다. 다시말해 계수는 입력값을 얼마나 반영할 것인지를 정하는 가중치입니다. 그리고 신경망의 학습은 각 층의 입력 데이터중 어떤 값을 얼마나 반영할 것인지를정하는 과정입니다.

이렇게 계산된 추력은 나가진까지 비선형 함수를 한번 통과합니다. 여기에서 비선형 함수를 사용하는 이유는 여러가지 있습니다. 일반적으로, 출력의 범위를 제한하는 비선형 함수를 써서 노드의 출력값이 너무 크게 발산하지 않게합니다.( 이것보다 더중요한 목적은 함수의 비선형성이 필요하기때문입니다. 미분시 0으로 날아가버렷)

이렇게 회귀 분석과 비선형함수를 조합하면 노드는 켜고 끌수 잇는 스위치같은 역할을 합니다. (인간의 뉴런도 마찬가지입니다.) 이 스위치는 입력신호를 얼마나 출력에 전달하지를 정하고, 수많은 스위치의 조합이 최종 출력단에서 분류작업을 합니다.

전체 최종 출력단의 출력을 1/0제한하면 (binary decision)특정라벨에 대한 분류가 됩니다. 반면 로지스틱 회귀분석을 출력단에 붙이면 출력값이 0과 1사이의 연속적인 값이 나올수 있게됩니다.

각노드에서 비선형함수는 S자 모양의 비선형을 갖는 경우가 대부분입니다. Sigmoid 함수나 하이퍼 탄젠셜 함수가 여기에 해당합니다. 그리고 이 비선형 함수의 출력이 다음층의 입력값이 됩니다.

Gradient Descent

모델의 학습과정에서는 각 계수의값이 반복적으로 업데이트 됩니다. 이 업데이트 방법중 가장 널리 쓰이는 방법은"gradient descent" (경사 하강법)입니다.

Gradient는 경사 혹은 기울기를 의미합니다. x-y평면에서 기울기는 두변수의 관계를 설명해줍니다. x의 변화량에 따른 y의 변화량 - 예를 들어 시간에 따른 통장잔고의 변화량을 함수의 기울기로 설명할 수 있게됩니다. 인공신경망에서 우리는 신경망의 오차와 각 계수의 관심이 잇습니다. 즉, 각 계수의 값을 증가 혹은 감소시켰을때 신경망의 오차가 어떻게 변하는지 그 관계에 주목합니다.

조금 더 자세히 들여다봅시다. 계수를 어떤값으로 결정하면 전체에러가 가장 작앚질까요?

어떻게 노드의 계수를 설정해야 입력데이터에서 의미있는 정보를 추출할 수 있을까요?어떻게 해야 사진의 물체가 사람인지 자동차인지 고양이인지 알아낼수 있을까요?

인공신경망의 학습과정은 수많은 계수를 보정해나가는 과정입니다. 이계수는 오차를 ㅈㄹ이는 방향으로 보정되어야 하는 데이터에서 의미있는 추출 할 수 잇씁니다. 그리고 오차와 계수의 관계는 편미분으로 정의 할 수 있습니다. dE.dw가 계수의 변화량의 따른 오차의 변화량, 즉 우리에게 중요한 그 기울기에 해당합니다.

심층 신경망은 여러층으로 이루어져 있기 때문에 각 노드의 계수는 신호에 곱해지는 여러계수중 하나입니다. 따라서 이 관계를 미적분학의 Chain Rule을 사용해 설명할수 있습니다. 이 를 이용하면 신경망의 출력이 여러층과 갖는 관계를 구할수 잇씁니다. 그리고 결과적 각층의 계수와 최오 출력 과의 관계가 나옵니다.

Alt text

Alt text

즉 오차와 계수가 활성함수를 통해 정해지는 경우 최종적으로 계수값의 변화가 오차를 증가할지 혹은 감소할지를 구할수 잇씁니다. 반대로 활성함수를 바꾸는것이 어떤영향을 끼칠지도 구할수 잇씁니다.

이것이 심층신경망 학습 핵심입니다. 모델의 학습은 모델의 계수를 업데이트해서 오차를 줄이는 과정입니다.


로지스틱 회귀 함수

심층 신경망의 여러 층 중 마지막 층, 즉 출력층은 다른 층과 조금 다릅니다. 가장 흔한 작업인 분류(classification) 작업의 경우 출력 층은 데이터의 각 샘플이 여러 범주에 속할 확률을 구한 뒤 확률을 비교하여 그 중 하나의 범주를 선택합니다. 출력 층의 노드는 각각 하나의 범주에 해당하고 이 노드가 활성화 되는 정도를 비교하여 하나의 노드를, 즉 하나의 범주를 고릅니다.

분류 작업의 경우 최종적으로 출력 노드는 0 또는 1의 값을 가지게 됩니다. 즉, 무조건 해당 범주에 속하거나(1) 혹은 속하지 않는다(0)는 결론을 내리게 설계됩니다.

한편 입력 데이터는 출력과 달리 연속적인 값을 가지는 경우가 대부분입니다. 즉 입력 신호는 특정 범위에서 연속적인 값을 갖는 값으로 이루어져 있습니다.

예를 들어 추천 엔진을 구현하는 경우 최종 결과는 해당 아이템을 추천할 것 인지 아닌지로 딱 떨어지게 나와야 합니다. 하지만 입력 데이터는 고객이 해당 페이지에서 머무른 시간, 고객의 구매력 등 연속된 값을 갖습니다.

즉 입력으로 들어온 온갖 범위의 값(예: 3만원짜리 티셔츠, 고객이 과거에 구매한 내역, 고객이 웹사이트에 머무른 시간 등)을 압축해서 최종적으로 이 아이템을 어떤 범주에 넣을 것인지, 혹은 사용자가 어떤 타입의 고객인지 등 어떤 범주에 넣을지를 결정합니다.

이렇게 넓은 범위의 값을 0 또는 1의 값으로 결정해주는 과정을 로지스틱 회귀라고 합니다. 이 이름이 굉장히 헷갈리기 쉬운데, 회귀(연속된 값을 예측하는 작업)라는 이름이 붙여져 있지만 실제로는 분류 작업을 한다는 것을 유의하시기 바랍니다.

Alt text

로지스틱 회귀의 공식을 조금 들여다 보겠습니다.

연속된 값(예: -100, -0.5, 1.0, e^4, 300,…)을 확률로 표현해주려면 입력 값을 양수로 바꿔야 합니다. (확률은 0에서 1사이의 값을 가집니다.) 이렇게 양수로 바꿔주기 위해 분모에 e^(-x)가 들어갑니다. 왜냐하면 e^(-x)의 경우 x에 어떤 값이 들어오더라도 그 결과는 양수가 되기 때문입니다.

또 한 가지 고려할 내용은 바로 입력값 x가 클 경우 확률이 점점 증가하도록 설계해야 한다는 것 입니다. 그래서 e^(-x)가 분모에 포함되어 있습니다. 만일 x가 점점 커지면 e^(-x)는 (여전히 양수지만) 점점 작아집니다. 그러면 F(x)는 (확률의 최대 값인) 1에 가까워집니다. 반대로 x가 점점 작아지면 (-1, -10, -100…) e^(-x)의 값이 매우 커지고, F(x)는 0에 가까워집니다.

만일 이렇게 지수 함수로 처리를 하지 않는다면 결과를 0과 1 사이에 압축시키기가 매우 까다롭습니다. 따라서 지수 함수를 사용한 로지스틱 회귀를 인공 신경망의 출력층에 사용합니다.

최종적인 판단을 위해서 확률의 기준값을 세워주면 됩니다. 예를 들어 어떤 노드의 확률이 0.5보다 크다면 그 노드에 해당하는 범주에 속한다고 판별한다고 규칙을 만드는 것 입니다. 만일 이 기준값이 너무 작다면(예:0.0001을 넘기면 이 범주에 해당한다) false positive(긍정 오류, 거짓 양성: 실제로는 이 범주에 해당하지 않는데 이 범주라고 예측을 하는 것)가 많아지고, 기준값이 너무 크다면 반대로 false negative(부정 오류, 거짓 음성)이 많아집니다.

인공 신경망과 인공 지능

이렇게 임의의 값에서 출발해서 시행착오를 거듭하는 학습 과정 때문에 인공 신겸앙은 단순 무식한 방법(brute force)라고 비판받기도 합니다. 학습한 모델의 결과가 좋더라도 과정이 비효율적이라는 단점을 지적하는 사람들이 있기 때문입니다.

그러나 경사 하강법은 존재하는 모든 경우의 수를 다 따지는 것이 아닙니다. 계속해서 가능한 경우의 수를 줄여나가며 최적의 답을 찾는 과정이기 때문에 사실은 굉장히 효율적인 방법입니다.

학습 자료

인공 신경망 초보자들을 위한 강좌를 모아놓았으니 참고하시기 바랍니다.

Copyrig


Posted by MIDDLE
,