신경망이란?

인공 신경망은 뇌 신경계의 뉴런을 모방하여 만든 컴퓨터 계산 알고리즘으로, 딥러닝 알고리즘의 핵심이라고 할 수 있습니다.

신경망은 크게 입력층(Input layer) - 은닉층(hidden layer) - 출력층(Output layer)로 구성되어 있으며,

은닉층의 갯수가 2개 이상인 신경망을 심층 신경망(Deep Neural Network),

은닉층의 갯수가 수십, 수백 개 이상으로 구성된 신경망을 바탕으로 한 머신 러닝을 딥 러닝(Deep Learning)이라고 합니다.

 

출처:https://www.ibm.com/kr-ko/cloud/learn/neural-networks

 


그럼 신경망을 구성하는 뉴런(Neuron)과 신경망을 쓰는 이유와 동작방법 그리고 신경망의 학습에 있어서 핵심이 되는 활성화 함수 / 손실 함수 / 옵티마이저에 대해서 알아보겠습니다.

 

뉴런(Neuron)이란 무엇일까요?

앞서 설명해드렸듯이, 인공 신경망은 뇌 신경계를 모방하여 만들었습니다.

우리의 뇌에서 뉴런이 신경전달물질을 통해 신호를 전달하고 정보를 받아들이며, 처리하는 역할을 수행합니다.

 

이와 같이 신경망의 뉴런도 이전 뉴런의 값을 받아 연산을 거쳐 다음 뉴런으로 정보를 전달하는 역할을 수행합니다.


그럼 우리가 신경망을 사용하는 이유는 무엇일까요?

 

Universal Approximation Theorem이라는 하나의 정리가 있습니다.

 

특정 조건을 만족해야하지만 간단히 설명해보자면, 비선형성을 가진 활성화 함수를 가지는 뉴런들로 구성된 한 층의 은닉층이 있다면

어떠한 연속적인 함수에 대해서도 충분히 근사할 수 있다는 내용입니다.

 

즉, 하나의 뉴럴 네트워크 만으로 거의 모든 연속 함수에 근사하여 학습시킬 수 있다는 것이죠.

 

물론, 조건과 한계는 존재하지만 이러한 강력한 이점 덕분에 신경망은 현대 머신러닝 모델 구현에 있어서 핵심으로 자리잡고 있습니다.


이제 신경망을 어떻게 학습시키는지 알아볼 차례인데요. 그 전에 신경망을 학습에 필요한 핵심 요소와 순전파 / 역전파가 무엇인지 알아보겠습니다.

 

 

핵심 요소는 크게 활성화 함수 , 손실 함수, 옵티마이저 라는 것이 있습니다.

이 세가지 함수들을 왜 사용하는지 궁금하실텐데요. 

활성화 함수부터 알아보겠습니다.

 

 

활성화 함수는 쉽게 말해서 비선형성을 가진 함수입니다.

이를 바탕으로, 신경망에 비선형성을 부여하는 역할을 수행합니다.

자주 쓰이는 활성화 함수로는 ReLU(), 소프트맥스(Softmax) 함수 등이 있습니다.

 

여러번의 선형 결합은 한번의 선형결합으로 이루어 질 수 있기 때문에, 선형 결합만으로 심층 신경망을 구성하는 것은 의미가 없습니다.

선형 결합만으로 구성된 10개의 층은 1개의 층과 동일한 결과를 가질 수 있기 때문이죠.

( F(x) = x^2 , G(x) = ( x + 1 ), H(x)  = x^2 + 2x + 1 일 때, F(G(x)) = H(x)를 보시면 이해에 도움이 되실 것 입니다.)

또한 Universal Approximation Theorem에서도 보았듯이, 비선형 함수인 활성화 함수를 통과함으로서 보편적인 수학적 모델을 표현할 수 있음을 알 수 있습니다.

 

이에, 신경망을 구성하는 각 뉴런에 활성화 함수를 포함시켜주어 신경망에 비선형성을 부여해줍니다.

 

손실함수는 머신러닝에서 학습을 진행하며, 진행 과정에서 예측 값과 결과 값의 오차를 구해주는 함수입니다.

대표적으로 CrossEntropy 함수, 평균제곱오차(MSE) 함수 등이 있습니다.

 

옵티마이저는 신경망의 가중치를 업데이트 하는 알고리즘으로, 손실함수를 최소화 하는 파라미터를 찾아내는 최적화 알고리즘입니다.

대표적으로 SGD, Adam, 모멘텀(momentum) 등이 있습니다.

 

마지막으로 순전파와 역전파에 대해서 간단히 설명드리자면,

신경망에 데이터를 입력하여 각 Layer를 거치며 학습을 시켜나가는 과정을 순전파(Foward Propagation)이라고 합니다.

반대로, 순전파를 통해 구한 결과 값(손실함수의 편미분 계수)을 바탕으로 가중치를 업데이트 하는 과정을 역전파(Back Propagation)라고 합니다. 


 

신경망이 무엇이고, 신경망이 사용되는 이유까지 알아보았습니다. 그렇다면, 신경망을 통해 학습시키는 과정을 알아보도록 하겠습니다.

신경망 학습은 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning)등 이미 알려진 방식들이 있지만 큰 갈래의 과정을 알아보도록 하겠습니다.

 

 

신경망 학습이라 함은 주어진 입력 데이터에 대하여 원하는 결과 값을 도출해내기 위한 최적의 가중치 값을 찾아가는 과정이라고 할 수 있습니다.

순전파(Forward Propagation) 과정을 통해, 입력 값을 활성화 함수를 통과 시켜 손실함수를 통해 예측 값과 결과 값의 오차의 편미분계수를 구합니다.

이를 바탕으로 옵티마이저(Optimizer)를 통해 가중치를 업데이트 하는 방식으로 역전파(Back Propagation)를 진행합니다.

다시 업데이트된 가중치를 통하여 순전파를 진행시켜 같은 과정을 진행합니다.

 

이 과정을 반복하여 결과 값과 오차가 최소가 되는 최적의 가중치 값을 찾아갑니다.

 

 

 

출처: http://wiki.hash.kr/index.php/%ED%99%95%EB%A5%A0%EC%A0%81_%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95

 

최적의 가중치를 찾아 간다는 문장이 와닿지 않으시는 분도 계실거 같습니다.

 

결국 학습을 통해 하고싶은 것은 " 우리가 구하고자 하는 값과 신경망 학습을 통해 나오는 값이 같게 하는 것" 입니다.

이 말은 즉슨, 우리가 구하고자 하는 값과 학습을 통해 나오는 값이 같으면 되는 것이고, 이는 두 값의 오차가 0이 되게 하도록 하면 된다는 것입니다.

 

다만, 한정된 데이터 만으로 오차가 0이 되게 하는 것은 너무 어렵거나 불가능한 일이기에 결과 값의 오차를 최대한 작게해주는 값을 찾아 가는 과정이라고 이해하시면 보다 쉽게 이해하실 수 있지 않을까 생각합니다.

 

 

지금까지, 인공지능의 가장 기초가 되는 신경망과 신경망을 바탕으로 학습시키는 과정에 대하여 알아보았습니다.

 

읽어주셔서 감사합니다.

 

 

 

 

 

 

출처:

https://www.ibm.com/kr-ko/cloud/learn/neural-networks   

https://enfow.github.io/study/experiments/2020/10/23/universal_approximation_experiment/  

책 "파이썬 딥러닝 머신러닝 입문 (저자: 오승환)"

+ Recent posts