밑바닥부터 시작하는 딥러닝 #3
2025. 1. 14. 17:31

신경망(Neural Network)이란?

신경망(Neural Network)은 인간의 뇌 구조를 모방하여 정보를 처리하는 인공지능 모델입니다. 인간의 뉴런이 서로 연결되어 신호를 전달하는 방식을 본뜬 것으로, 데이터를 학습하고 패턴을 인식하며 복잡한 문제를 해결할 수 있습니다. 신경망은 입력층(Input Layer)은닉층(Hidden Layer), 출력층(Output Layer)으로 구성되며, 각각의 층(layer)은 여러 노드(node)로 이루어져 있습니다.

신경망의 구조 (2층 구조)

 

입력층 (Input Layer)

입력층은 외부 데이터를 신경망으로 전달하는 역할을 합니다.

  • 데이터 형태: 입력층의 노드 개수는 입력 데이터의 특징(feature) 수와 동일합니다. 예를 들어, 이미지의 경우 각 픽셀 값이 입력값이 될 수 있습니다.
  • 처리 과정: 입력층은 데이터를 전달만 하고, 별도의 연산은 수행하지 않습니다.

 

은닉층 (Hidden Layer)

은닉층은 입력층에서 받은 데이터를 가공하여 패턴을 학습하고 추출하는 역할을 합니다.

  • 주요 특징:
    • 은닉층의 노드와 연결된 가중치(weight)는 입력 데이터의 중요한 특징을 강조하거나 덜 중요한 부분을 무시하는 방식으로 학습됩니다.
    • 활성화 함수(Activation Function)를 통해 비선형성을 도입하여 복잡한 데이터 패턴을 학습할 수 있습니다.
  • 층의 개수와 노드 수:
    • 은닉층이 많아지면 신경망의 깊이가 깊어지고 이를 심층 신경망(Deep Neural Network)이라 부릅니다.
    • 노드의 수와 층의 깊이는 문제의 복잡도와 학습 목표에 따라 조정됩니다.

 

출력층 (Output Layer)

출력층은 은닉층에서 가공된 데이터를 최종 결과로 변환하는 역할을 합니다.

  • 결과 형태:
    • 회귀 문제에서는 연속적인 실수 값. (온도, 집값 등 연속된 실수)
    • 분류 문제에서는 각 클래스에 대한 확률 값. (강아지, 고양이 분류 등)
  • 활성화 함수: 출력층의 활성화 함수는 문제 유형에 따라 선택됩니다.
    • Sigmoid: 이진 분류.
    • Softmax: 다중 클래스 분류.
    • Linear: 회귀 문제.

 

활성화 함수(Activation Function)란?

활성화 함수는 신경망에서 입력 데이터가 다음 층으로 전달될지 여부를 결정하는 함수입니다. 입력값을 비선형 변환하여 복잡한 패턴을 학습할 수 있도록 돕습니다.

활성화 함수의 주요 역할

  1. 비선형성 도입
    • 신경망이 단순한 선형 연산을 넘어서 복잡한 관계를 학습할 수 있도록 만듭니다.
    • 비선형 활성화 함수가 없다면, 신경망은 단순한 선형 모델과 다를 바가 없게 됩니다.
  2. 출력값의 제한
    • 출력값을 특정 범위로 제한하여 학습을 안정적으로 진행할 수 있도록 합니다. (발산 및 과적합 가능)
    • 예를 들어, 확률값은 0  사이로 제한되기 때문에 이진 분류 문제에 적합합니다.

 

스텝 함수 (Step Function)

스텝 함수는 특정 임계값을 기준으로 출력값을 이분화합니다.

  • 입력값이 0 이상이면 1, 그렇지 않으면 0을 출력.
  • 간단한 이진 분류에서 사용되었으나, 현재는 잘 사용되지 않음.

 

시그모이드 함수 (Sigmoid Function)

시그모이드 함수는 입력값을 0 1 사이로 변환하는 S자 형태의 함수입니다.

  • 출력값이 0  사이로 제한되어 확률값처럼 해석 가능.
  • 장점: 이진 분류 문제에서 자주 사용됨.
  • 단점:
    • 입력값이 매우 크거나 작으면 출력값이 0 또는 에 가까워져 기울기 소실(Vanishing Gradient) 문제가 발생.
    • 계산이 느림 (지수 함수 계산 필요).

 

ReLU 함수 (Rectified Linear Unit)

ReLU 함수는 입력값이 0 이상이면 그대로 출력하고, 0 이하이면 0을 출력합니다.

 

  • 장점:
    • 계산이 단순하여 매우 빠르고 효율적.
    • 비선형성을 도입하면서도 출력값이 무한대까지 커질 수 있어 기울기 소실 문제가 덜함.
  • 단점:
    • 입력값이 0 이하일 경우 출력이 0으로 고정되어 뉴런이 죽은 뉴런(Dead Neuron)이 될 수 있음.

 

행렬의 사용 이유의 관계

신경망의 뉴런 연결

신경망의 각 뉴런은 이전 층의 모든 뉴런과 연결됩니다. 이러한 연결은 각 입력에 대해 고유한 가중치를 갖습니다.

  • 뉴런과 연결을 단순히 나열하면 복잡하고 비효율적일 수 있지만, 이 연결 관계를 행렬로 나타내면 매우 간결하게 표현할 수 있습니다.

 

연산의 반복적인 패턴

입력 데이터를 받아 가중치와 곱한 뒤 더하고 활성화 함수를 적용하는 연산은 모든 뉴런에서 공통적으로 일어납니다.

  • 이 반복되는 계산 패턴을 벡터와 행렬 곱셈으로 표현하면 동일한 연산을 한꺼번에 처리할 수 있습니다.

예를 들어,

같은 계산을 행렬 연산으로 나타내면:

이렇게 훨씬 간결하고 직관적으로 표현할 수 있습니다.

 

GPU 계산에 효율적

신경망에서 행렬 곱셈이 사용되는 이유 중 하나는 GPU의 병렬 처리 능력을 최대한 활용할 수 있기 때문입니다. GPU는 본래 그래픽 렌더링을 위해 설계되었지만, 행렬 연산이 중요한 역할을 하는 신경망에도 매우 적합합니다.

 

기계학습 문제: 분류와 회귀

기계학습 문제는 크게 분류(Classification)회귀(Regression)로 나눌 수 있습니다. 이 두 가지 유형은 우리가 해결하려는 문제의 목적 출력값의 형태에 따라 구분됩니다. 아래에서 간단히 살펴보겠습니다.

 

분류(Classification): 카테고리를 예측하는 문제

분류는 데이터를 분석하여 미리 정의된 카테고리 또는 클래스 중 하나로 분류하는 것이 목표입니다.

  • 예시:
    • 이메일 스팸 필터링: 이메일이 "스팸"인지 "정상"인지 분류
    • 이미지 분류: 사진 속에 고양이가 있는지 없는지 판별
    • 질병 진단: 환자가 특정 질병에 걸렸는지 여부 예측
  • 출력값:
    • 이산적(discrete) 값 (예: "0" 또는 "1", "고양이", "강아지")

분류 문제는 데이터가 어떤 범주에 속하는지 알아내기 때문에, 결과가 명확히 구분되는 문제를 해결할 때 사용됩니다.

 

회귀(Regression): 연속적인 값을 예측하는 문제

회귀는 데이터를 기반으로 연속적인 값을 예측하는 것이 목표입니다.

  • 예시:
    • 집값 예측: 특정 지역의 집값을 예측
    • 날씨 예측: 내일의 기온이나 강수량 예측
    • 주식 가격 예측: 특정 주식의 미래 가격 예측
  • 출력값:
    • 연속적(continuous) 값 (예: 150.5, 23.8 등)

회귀 문제는 데이터의 연속적인 패턴이나 추세를 찾아내고자 할 때 적합합니다.

 

출력층 활성화 함수: 회귀와 분류에서의 차이

기계학습에서 출력층의 활성화 함수(Activation Function)는 모델이 문제를 해결하는 데 중요한 역할을 합니다. 특히, 회귀(Regression) 분류(Classification) 문제에서는 목적에 따라 다른 활성화 함수가 사용됩니다. 이번 글에서는 두 문제 유형에 적합한 활성화 함수와 그 이유를 간단히 살펴보겠습니다.

 

회귀 문제: 항등 함수(Identity Function)

회귀는 연속적인 값을 예측하는 문제로, 출력값 자체가 최종 예측 결과가 됩니다.
이를 위해 출력층에서는 보통 항등 함수를 활성화 함수로 사용합니다.

  • 항등 함수의 정의: 입력값을 그대로 출력합니다.

  • 왜 항등 함수를 사용할까?
    • 회귀 문제는 연속적인 실수값(예: 0.5, 23.7 등)을 예측하므로, 출력값에 어떤 제약을 두지 않아야 합니다.
    • 예를 들어, 집값이나 온도 같은 값을 예측할 때는 결과값이 제한 없이 모든 실수 범위에 걸쳐야 하기 때문입니다.
  • 활용 예시:
    • 선형 회귀(Linear Regression)
    • 딥러닝 기반 주식 가격 예측

 

분류 문제: 소프트맥스 함수(Softmax Function)

분류는 데이터가 특정 클래스에 속할 확률을 계산하는 문제입니다. 출력층에서는 보통 소프트맥스 함수를 활성화 함수로 사용합니다.

  • 소프트맥스 함수의 정의:
    • zi: 클래스 에 대한 출력값(로짓)
    • K: 클래스의 개수
  • 왜 소프트맥스를 사용할까?
    • 소프트맥스 함수는 출력값을 확률 분포로 변환합니다.
      • 모든 출력값의 합이 1이 되도록 정규화.
      • 각 클래스가 선택될 확률을 직관적으로 이해할 수 있음.
    • 분류 문제에서는 최종적으로 가장 높은 확률을 가지는 클래스를 선택합니다.
  • Exp(e)를 사용하는 이유
    • 확률개념으로 사용하기 위해 양수값 보장
    • 값의 차이를 더 극대화 하여 구분을 명확화
    • 미분 계산의 효율성 증가
  • 활용 예시:
    • 이미지 분류(CNN에서 다중 클래스 분류)
    • 텍스트 분류(LSTM, Transformer 기반 모델)