인공 신경망( Artificial Neural Networks, ANN)은 쉽게 말해 인간의 뇌 구조와 기능을 따라해 인간이 생각하고 말하는 것처럼, 모델도 똑같은 방식으로 학습하고 수행하는 기계이지만, 데이터를 처리하는 방식이 인간과 다를 뿐입니다.
퍼셉트론(Perceptron)은 인공신경망의 가장 기본적인 형태로, 이진 분류 문제를 해결하기 위해 설계된 단일 층 신경망입니다. 그냥 인간의 뉴런처럼 데이터를 처리하고 생각할 수 있게 하는겁니다.
즉, 쉽게 말하면 인간의 뇌는 뉴런이 있고, 그 뉴런을 통해 신경망을 형성을 하고 생각을 하는데, 뉴런이 퍼셉트론, 인공 신경망이 신경망이라 생각하면 편합니다.
예를 들어, 특정 값을 입력하고, 알맞게 계산되어 내가 원하는 답을 만들어주는 함수를 만들어주고, 최종적으로 값이 걸러지면서 끝내 데이터가 출력이 되는 겁니다.
다층 퍼셉트론
퍼셉트론이 값을 받으면 값을 걸러주는 역할을 한다면, 다층 퍼셉트론은 그 퍼셉트론이 다양한 층으로 나뉘어, 계속 걸러준다는 느낌이 있습니다.
이런 식으로 다층으로 된 퍼셉트론입니다. 그런데 퍼셉트론에는 3가지 층이 있습니다.
입력층: 데이터가 네트워크에 들어오는 첫 번째 층입니다. 각 노드는 입력 데이터를 하나의 특성(feature)으로 나타냅니다.
은닉층: 입력층과 출력층 사이에 위치하며, 하나 이상의 층이 있을 수 있습니다. 은닉층의 노드들은 입력층의 정보를 가공하여 다음 층으로 전달합니다. 은닉층의 수와 노드의 수에 따라 모델의 복잡성이 결정됩니다.
출력층: 최종 결과를 생성하는 층입니다. 분류 문제에서는 각 클래스에 대한 확률을 출력하고, 회귀 문제에서는 연속적인 값을 출력합니다.
즉, 입력층에 데이터를 받고, 은닉충이 데이터를 파악 밑 해석, 그리고 그 결과값을 출력증이 출력해줍니다.
활성화 함수
활성화 함수는 입력값을 받아서 출력값을 변환하는 역할을 하며, 신경망이 학습할 때 비선형성을 추가하여 복잡한 문제를 해결할 수 있도록 도와줍니다. 즉, 활성화 함수는 신경망이 단순한 선형 모델이 아닌 복잡한 패턴을 학습할 수 있게 해주는 도구입니다.
그렇기에 활성화 함수에는 여러 종류가 있습니다.
계단 함수(Step Function): 입력이 임계값을 넘으면 1을 출력하고, 그렇지 않으면 0을 출력합니다. 비선형성은 제공하지만, 실제로는 잘 사용되지 않습니다. 학습 중 미세 조정이 불가능하기 때문입니다.
시그모이드 함수(Sigmoid Function): 출력값을 0과 1 사이로 제한합니다. 뉴런이 활성화될 확률로 해석될 수 있습니다. 주로 이진 분류 문제에서 많이 사용됩니다. 단점: 큰 입력값일 경우 기울기가 0에 가까워져, 학습이 느려지는 기울기 소실 문제(vanishing gradient problem)가 발생할 수 있습니다.
하이퍼볼릭 탄젠트(Tanh) 함수: 시그모이드 함수와 유사하지만 출력 범위는 -1에서 1까지입니다. 음수 입력에 대해서도 신경망이 더 잘 반응하도록 도와줍니다. 단점: 기울기 소실 문제가 여전히 발생할 수 있습니다.
ReLU(Rectified Linear Unit): 가장 많이 사용되는 활성화 함수 중 하나입니다. 입력이 0보다 크면 그대로 출력하고, 그렇지 않으면 0을 출력합니다. 계산이 간단하고, 기울기 소실 문제를 어느 정도 해결합니다. 단점: 죽은 ReLU 문제(Dead ReLU)가 발생할 수 있습니다. 즉, 뉴런이 항상 0을 출력하게 되어 학습하지 않게 되는 문제입니다.
Leaky ReLU: 죽은 ReLU 문제를 해결하기 위해, 0보다 작은 입력값에 대해 아주 작은 기울기를 적용합니다. 소프트맥스(Softmax): 출력값을 0과 1 사이의 확률로 변환하여, 다중 클래스 분류 문제에서 사용됩니다. 모든 클래스에 대한 확률의 합이 1이 됩니다.
그리고 활성화 함수는 고르는 기준은 바로, 1. 이진 분류 문제에서는 시그모이드가 많이 사용됩니다. 2. 다중 클래스 분류 문제에서는 소프트맥스가 사용됩니다. 3. 신경망의 중간 층(hidden layer)에서는 주로 ReLU나 Leaky ReLU가 사용됩니다.
손실 함수
머신 러닝에서 모델이 데이터를 기반으로 학습하는 목표는 주어진 입력에 대해 정확한 출력을 예측하는 것입니다. 하지만 모델이 초기에는 예측을 잘 못하기 때문에, 이 예측값과 실제값 사이의 차이를 평가하여 그 차이를 줄이는 방식으로 학습을 진행하게 됩니다. 이때, 그 차이를 수치화하는 것이 바로 손실 함수입니다.
모델의 예측이 실제값과 얼마나 차이나는지에 따라 손실 함수 값이 크거나 작아집니다. 학습 과정에서 손실 함수의 값을 줄이는 방향으로 모델이 업데이트(최적화)되면서 더 나은 예측을 하게 됩니다.
하지만, 모델에 따라 손실 함수를 구하는 함수의 수식들도 달라집니다. 먼저, 회귀 문제에서의 손실 함수 입니다. 1. 평균 제곱 오차(Mean Squared Error, MSE): 가장 일반적으로 사용하는 회귀 손실 함수입니다. 예측값과 실제값 간의 차이를 제곱한 후 평균을 냅니다. 제곱을 사용하기 때문에 큰 오차에 더 큰 페널티를 부여하여, 큰 오차가 발생하지 않도록 모델을 유도합니다.
2. 평균 절대 오차(Mean Absolute Error, MAE): 예측값과 실제값 간의 절대 차이의 평균을 계산합니다. MSE와 달리 오차의 크기를 직접 반영하므로, 큰 오차에 대한 페널티가 MSE보다 작습니다.
두번째로 분류 문제에서의 손실 함수입니다. 1. 이진 크로스 엔트로피(Binary Cross-Entropy): 이진 분류 문제에서 사용되는 손실 함수로, 예측된 확률값과 실제값 사이의 차이를 측정합니다. 모델의 예측 확률이 실제 클래스와 얼마나 일치하는지를 평가합니다.
2. 범주형 크로스 엔트로피(Categorical Cross-Entropy): 다중 클래스 분류 문제에서 사용되는 손실 함수입니다. 소프트맥스(Softmax) 함수와 함께 주로 사용되며, 각 클래스에 대한 예측 확률과 실제 클래스 간의 차이를 측정합니다.
최적화 알고리즘
최적화 알고리즘(Optimization Algorithm):손실 함수의 값을 최소화하기 위해 모델의 파라미터(가중치)를 업데이트하는 방법입니다. 손실 함수가 제공한 정보를 바탕으로 파라미터를 조정하여 손실을 줄이는 방향으로 학습합니다. 최적화 알고리즘은 손실 함수가 제공한 "오차" 정보를 바탕으로, 가중치를 업데이트하여 손실을 최소화하려고 합니다.
주요 최적화 알고리즘
1. 배치 경사 하강법(Batch Gradient Descent): 모든 데이터 샘플을 사용해 한 번에 기울기를 계산하고 가중치를 업데이트합니다. 데이터가 클 경우 계산 비용이 큽니다.
2. 확률적 경사 하강법(Stochastic Gradient Descent, SGD): 한 개의 데이터 샘플에 대해 기울기를 계산하고, 그때마다 가중치를 업데이트합니다. 자주 업데이트되기 때문에 빠르지만, 최적점 근처에서 진동할 수 있습니다.
3. 미니 배치 경사 하강법(Mini-batch Gradient Descent): 데이터 샘플의 일부(미니 배치)를 사용하여 기울기를 계산하고 가중치를 업데이트합니다. SGD와 배치 경사 하강법의 장점을 결합한 방법입니다 . 4. Adam(Adaptive Moment Estimation): 가장 널리 사용되는 최적화 알고리즘 중 하나입니다. 학습률을 각 파라미터마다 다르게 조정해주며, 모멘텀을 적용하여 빠르게 수렴합니다. 장점: 계산 효율이 높고, 많은 문제에서 좋은 성능을 보입니다.
참고로 최적화 알고리즘은 손실 함수를 기반으로 모델의 가중치를 업데이트하여 손실 값을 줄여나가는 과정입니다. 그의 맞게. 손실 함수는 모델의 성능을 평가하는 기준이며, 모델이 잘못된 예측을 할 때 그 오류를 수치화해줍니다.
비유를 하면, 손실 함수는 우리가 목적지에서 얼마나 멀리 떨어져 있는지를 알려주는 지도입니다. 목적지에 얼마나 가까워지고 있는지를 확인하는 역할입니다. 최적화 알고리즘은 목적지로 가는 길을 안내해주는 내비게이션입니다. 길을 따라가면서 조금씩 더 나은 경로를 찾아서 목적지(최소 손실)에 도달하도록 도와줍니다.