해당 본문은 전 글과 이어집니다! 해당 내용이 궁금하다면 전 본문을 참고해주세요!! 그러면 본격적으로 인공 신경망(ANN)의 개념과 그 종류에 대해 알아보도록 하겠습니다.
인공 신경망 (FFNN & RNN)
앞서 퍼셉트론을 배우면서 'MLP(다층 퍼셉트론) 구조'를 언급했다. 퍼셉트론의 관점에서 층을, 그 중에서도 '은닉층'이라고 하는 입력층과 출력층 사이의 layer를 겹겹이 쌓는다고 했을 때, 이를 다층 퍼셉트론(multi - layer perceptron)이라고 부른다.
이 MLP 중에서도 연산이 전개되는 방향에 따라 두 가지로 구분이 가능하다. 입력층에서 출력층으로 연산이 흐르는 통상적인 형태면, 이를 '순방향 신경망(FFNN)' 이라고 부르며, 입력층과 출력층 사이 은닉층 사이에서 또다시 연산값이 입력으로 사용되는 경우, 이를 '순환 신경망(RNN)'이라고 부른다.
- 순방향 신경망 (Feed Forward Neural Network)
- 순환 신경망 (Recurrent Neural Netwok)
1. FNN (피드 포워드 신경망)
'FFNN'은 정보가 한 방향으로만 흐르는 구조를 갖고 있으며, 입력 데이터가 네트워크를 통과하여 출력을 생성하는 방식으로 동작한다(인공신경망의 가장 기본적인 형태). 입력층에서 출력층으로 향하는 방향성으로 인해 피드 포워드 신경망(FFNN)은 순방향 신경망 또는 전방향 신경망이라고도 부른다.
이 신경망의 각 '뉴런'은 입력값에 대해 가중치(w)를 적용하고, *활성화 함수를 통해 활성화된 출력값을 계산한다. 이러한 가중치와 활성화 함수는 학습 과정에서 최적의 출력값을 도출하기 위해 조정된다. 가장 일반적인 활성화 함수로는 '시그모이드 함수', 'ReLU (Rectified Linear Unit) 함수', '소프트맥스 함수' 등이 있다. 앞서 퍼셉트론 파트에서 다루었던 계단 함수(Step function)도 이 활성화 함수들 가운데 퍼셉트론 알고리즘에서 사용되는 활성화 함수 가운데 한 종류다.
피드 포워드 신경망은 입력이 출력층으로 향하는 순방향 구조를 지닌다고 했다. 입력이 각 층에서 가중치와 편향을 곱하고, 활성화 함수를 통해 변환된다. 이 때 각 '입력 데이터는 서로 독립적으로 학습된다.' 이 말은 데이터의 순서에 상관없이 학습이 된다는 뜻과 같고, 순서가 있는 데이터(ex. 시계열 데이터)의 특성을 이해하기 어려울 수 있다.
2. RNN (순환 신경망)
결국, 피드 포워드 신경망은 간단한 구조와 계산이 필요한 경우에 용이하다는 장점과 함께 복잡한 데이터를 분석하기 어렵다는 단점을 갖고 있다.
반면 'RNN(Recurrent Neural Network)'은 시간에 따라 누적된 정보를 처리할 수 있는 신경망으로, 이전의 정보를 이용해 현재의 결과를 예측하거나, 분류할 수 있다. MLP 를 예시로 보면, 은닉층에서 나온 결과값이 다시 해당 은닉층의 input값으로 들어가게 되어 최적의 결과값이 나올 때까지 순환하게 된다. 결국 각 데이터 간 독립적 학습이 진행되지 않는다. 'Recurrent'는 '반복되는'의 의미를 지니고 있는데, 은닉층의 output이 다시 해당 은닉층의 input으로 반복되어 들어가면서 학습을 하게 되기 때문에 그렇다.
따라서 RNN은 시계열 데이터와 같은 종류를 활용하기 적합하고 언어 모델링, 시퀀스 생성, 시계열 예측 등의 문제에서 매우 효과적이다.
활성화 함수 (Activation Function)
활성화 함수(Activation function)는 입력층으로부터 입력값을 받아 수학적 변환을 수행하고 최종 출력값을 생성하는 함수다. 앞서 배운 시그모이드 함수나 소프트맥스 함수도 대표적인 활성화 함수 중 하나로 본격적으로 활성화 함수에 대해 알아보자.
활성화 함수는 비선형(non-linear)적이어야 한다?
우리는 퍼셉트론 알고리즘을 간단하게 배우면서 XOR 연산의 경우, 1개의 직선으로 모든 영역을 구분하여 설명할 수 없다고 했다. 활성화 함수의 경우에도 비슷한 논리로 이해할 수 있다. ("물론 더 복잡한 개념으로 들어가면 그 의미가 약간 다르다.")
인공신경망은 성능을 높이기 위해 은닉층을 계속해서 늘린다. (즉, Multi-layer가 계속 쌓이는 것.) 그렇게 되면 단편적인 연산이 불가능해질 수 있다. 그래서 " 우리는 y = Wx + b와 같은 선형(일차원) 직선을 활성화함수로 사용하지 않는다. "
1. 시그모이드 함수 (Sigmoid function)
가장 대표적인 활성화 함수로 '시그모이드 함수'를 들 수 있다. 사실 시그모이드 함수의 경우 앞서 [머신러닝] 파트에서 언급한 적이 있다. 바로 '로지스틱 회귀'에서 가중치와 특성값에 따라 0과 1 사이의 값으로 나타나는 함수로, 분류를 위한 확률값('z')을 도출하는데 사용되었다.
https://jhklee-coder.tistory.com/7
로지스틱 회귀(Logistic Regression) [머신러닝]
# 글 작성에 앞서.. 본 글은 이번 2023 여름 방학 가운데 공부했던 머신러닝에 대한 일종의 회고(?)글로, 기존 네이버 블로그에 있던 글을 다시 들여다보고자 가져왔다. (복습이라고 하지만 그대로
jhklee-coder.tistory.com
위 그래프를 통해 도출해낸 시그모이드 함수의 특징은 다음과 같다.
장점
- 완만한 기울기를 가진 함수: 시그모이드 함수는 입력값이 증가함에 따라 출력값이 S자 형태로 변하는 특징을 가지고 있다. 이는 입력값의 변화에 따른 출력값의 부드러운 변화를 의미하며, 딥러닝에서 활성화 함수로 많이 사용되는 이유 중 하나다.
- 비선형 함수: 시그모이드 함수는 비선형 함수(non-linear function)로 분류된다. 비선형 함수는 다층 퍼셉트론(Multi-Layer Perceptron) 등의 신경망에서 사용되어야 효과적으로 모델을 학습시킬 수 있기 때문.
- 확률값의 변환: 시그모이드 함수는 입력값을 0부터 1 사이의 확률값으로 변환된다. 따라서 이진 분류(Binary Classification)를 위한 문제에서 모델의 출력값으로 사용된다. 예를 들어, 어떤 이미지가 강아지인지를 판별하는 문제가 있다고 가정해보자. 시그모이드 함수의 출력값이 0에 가까우면 "강아지가 아니다"라고 분류하고, 1에 가까우면 "강아지다"라고 분류할 수 있다.
단점
- 가중치(계수) 소실 문제(Vanishing Gradient Problem): 시그모이드 함수는 입력값이 크거나 작을 경우, 가중치값이 점점 작아져서 학습이 어려워지는 문제가 발생한다. 이로 인해 신경망이 더 깊어질수록(= '은닉층이 늘어날수록') 가중치 정보가 손실되어 학습이 제대로 이루어지지 않는 문제가 있다.
- 출력값 중심의 문제(Output Centered Problem): 시그모이드 함수는 출력값의 평균이 0.5로 중심이 되는 특징을 가지고 있다. 따라서 데이터의 분포의 중심이 0.5가 되지 않는 경우, 신경망이 제대로 학습하지 못할 수 있다.
2. 소프트맥스 함수 (Softmax function)
소프트맥스 함수의 경우에도 시그모이드 함수처럼 출력층의 뉴런에서 주로 사용된다. (마찬가지로 주로 분류를 위한 함수로 사용.) 다만 시그모이드 함수가 두 가지 선택지 중 하나를 고르는 이진 분류 (Binary Classification) 문제에 사용된다면, 소프트맥스 함수는 세 가지 이상의 (상호 배타적인) 선택지 중 하나를 고르는 다중 클래스 분류(MultiClass Classification) 문제에 주로 사용된다.
시그모이드 함수와의 차이점이라면 다중 클래스 분류를 위한 문제에 주로 사용된다는 점인데, 0과 1의 결과값을 도출하는 공식을 살펴보자.
소프트맥스 함수는 지수 함수를 사용하는데 이 지수함수는 큰 값을 쉽게 반환한다는 점에서 장점이 있다. 하지만 동시에 큰 값을 도출해내는 지수함수를 사용하기 때문에 계산에 따른 비용이 많이 든다. 그래서 출력값을 바로 도출하기 전에 입력 값에 대해 선형 변환을 먼저 적용하고 출력값을 도출하는 방식을 주로 사용한다.
3. 렐루 함수 (ReLU function)
'머신러닝(ML), 딥러닝(DL)' 카테고리의 다른 글
트랜스포머 (Transformer) 살펴보기 [딥러닝] (0) | 2024.03.30 |
---|---|
자연어 처리 토큰화(Tokenize) [머신러닝/딥러닝] (0) | 2024.03.23 |
퍼셉트론(Perceptron) [딥러닝] (0) | 2024.03.12 |
비지도 학습 [머신러닝] (1) | 2024.01.13 |
트리 알고리즘 [머신러닝] (1) | 2023.12.26 |