ASAC 빅데이터 분석가 7기/ASAC 일일 기록

ASAC 빅데이터 분석가 과정 43일차 (25.02.11)

junslee 2025. 2. 11. 09:41

FNN (Feedforward Neural Network) 순방향 신경망

  • FNN은 데이터 구조에 대한 특별한 가정사항 없는 가장 기본이 되는 신경망
  • 데이터가 한 방향으로 전달되는 연결 구조만을 갖는 구조


FNN 구조

  • 뉴런들이 모여 계층을 이루고 -> 이 계층이 쌓여 전체적인 신경망을 이루는 구조
  • Input Layer + Hidden Layer + Output Layer
  • Hidden Layer의 복잡도에 따라서 가변적으로 구성된다.
  • FCL 연결

  • 뉴런 Neuron

  • 얕은 신경망 Shallow Neural Network

  • 심층 신경망 Deep Neural Network (DNN)


FNN(특징추출) 뉴런 구조

  • 뉴런은 데이터에 내재한 특징을 추출하기 위해 가중치가 있는 선형결합을 입력으로 하여 Activation Function(활성화 함수)를 바탕으로 다음으로 넘겨준다.
  • Activation Function은 "Non-Linear"인 비선형적인 함수를 사용하여 비선형을 활용할 수 있게 함

 “선형결합” Why?

• 가중치를 바탕으로 중요한 특징에 대한 가중치를 반영을 하기에 특징을
추출하는 과정에서 영향이 큰 데이터를 선택할 수 있도록 역할을 함.
• +b의 상수항을 더하는 이유는 특징의 값을 공간상에 임의의 위치에 표현을
하기 위해서 보통 사용을 함. 그래서 W 가중치 벡터에 상수항을 포함해
서 표기를 하기 함.

Non-Linear Activation Function ?

• 실제로 Activation Function은 상당히 다양한 것을 사용을 한다.
• 기본적인 Activation Function으로는 ReLU등을 활용을 한다.
• 이러한 비선형을 사용을 하여 원하는 형태의 특징을 추출할 수 있게 해준다.
• Layer가 많이 쌓이게 되면  굉장히 복잡한 비선형적인 경계선을 얻을 수 있다.


FNN 기능 - 범용 함수 근사 -

  • 뉴런 : 입력 + 가중치에 대한 선형결합 -> Activation Function 적용을 하는 합성함수로 볼 수 있음.
  • Layer를 순차적으로 쌓은 형태도 마찬가지로 합성함수로 볼 수 있음

실함수

벡터함수

뉴런

가중치

4계층 신경망

분류와 회귀 문제에서의 연속 함수 근사

-> 비선형으로 복잡한 문제를 해결할 수 있음


뉴런과 계층의 기본 구조 및 수학적 표현

FNN의 개별 뉴런과 활성화 함수의 동작, 그리고 비선형 분류의 필요성을 설명

(a) 뉴런의 동작

  • 입력: 여러 입력값 x1,x2,…이 뉴런으로 들어온다.
  • 가중치(weight): 각 입력은 가중치 w1,w2,…와 곱해진다.
  • 선형결합(linear combination): 입력값과 가중치의 곱을 더한 결과를 구한다.
    z=∑(wi⋅xi)+b
    • 여기서 b 편향(bias) 입니다.
  • 활성화 함수(Activation Function): 선형결합 결과 z에 활성화 함수 f를 적용해 비선형성을 추가한 최종 출력 a를 계산한다.
    a=f(z)=f(∑(wi⋅xi)+b)

(b) 계층(Layer)와 구성

  • 각각의 뉴런은 위 과정을 거쳐 개별적으로 출력을 계산한다.
  • 여러 뉴런으로 구성된 입력층(Input Layer), 은닉층(Hidden Layer), **출력층(Output Layer)**을 갖춘 구조다.
  • 수학적으로, 각 계층의 출력은 h(l)로 표현되며,h(l+1)=f(l)(W(l)h(l)+b(l))

(c) 비선형 분류의 필요성

  • 이미지 하단의 "Non-linear Classification" 예시는 선형 모델로는 데이터(파란색 원과 빨간색 X)를 분리할 수 없음을 보여준다.
  • 따라서 비선형 함수와 다층 구조를 통해 복잡한 경계를 학습할 수 있는 FNN이 필요하다.

다차원 데이터 표현(텐서의 차원)

신경망에서 데이터를 텐서로 표현하는 구조(0D ~ ND)를 설명하며,

텐서 데이터가 다차원 구조를 가지는 이유를 명확히 보여준다.

데이터 차원에 따른 텐서의 표현 방식

차원의 구성:

  • 스칼라 (0D Tensor):
    단일 값으로 구성됩니다. 예를 들어 4와 같은 값.
  • 벡터 (1D Tensor):
    1차원 배열로 표현됩니다. 예: [1,2,5,9]
  • 행렬 (2D Tensor):
    2차원 배열로 표현됩니다. 예: [111222555999]
  • 3D 텐서:
    여러 개의 행렬이 쌓여 있는 형태입니다(즉, 3차원 구조). 주로 컬러 이미지 등에서 사용된다.
  • N차원 텐서:
    위 구조를 N차원으로 확장. 딥러닝에서는 고차원 텐서를 다룰 수 있습니다. 예: CNN에서 이미지 데이터를 배치(batch) 단위로 처리.

활용:

  • 이 텐서 구조는 신경망에서 데이터를 입력하고 중간 계산을 처리하며, 최종 출력까지 이어지는 핵심 데이터 형식이다.

Feedforward Neural Network의 계산 흐름

신경망의 계산 흐름을 단계적으로 시각화하며, 입력층 → 은닉층 → 출력층으로 이어지는 연산 과정을 행렬 기반으로 설명한다.

Feedforward Neural Network의 자세한 행렬 표현

동일한 신경망을 더 복잡하게 확장한 구조를 설명하며, 각 계층에서의 행렬 연산 과정을 상세히 나타낸다.



FNN 네트워크 설계 요소


실제 문제에 적용 - 분류 문제

  • 분류 문제는 데이터의 클래스 or 카테고리를 예측하는 문제
  • 분류의 수에 따라서 : Binary Classififcation , Multi-Classification
  • 출력단을 확률로 설정을 하게 되면, 각 클래스에 대한 확률모델로 확률값으로 예측하게 된다

분류 문제 : Binary Classification

  • 출력 노드가 어떠한 값을 내보낼지 모른다 -> 그러나 우리는 이것을 각 클래스에 대한 확률값으로 변환을 해야 비교 & 해석의 용이한 점이 존재
  • 확률의 정의에 의해서 0~1사이의 값으로 변환을 해주는 Sigmoid라는 함수를 활용해서 출력단에서 Acitivation으로 활용한다. -> sigmoid 활용
    -> 다 여기서는 입력, 출력, 어떤 활성화 이런 관점임

분류 문제 : Multi Classification

  • 앞에서와 같이 확률로 여러 개의 클래스를 할당을 하고, 그 합이 1이 되도록 해야하는 경우의 활성화 함수는  “SoftMax”를 주로 사용한다.

실제 문제에 적용 - 회귀 문제

  • 회귀 문제의 경우에는 그 값을 그대로 받아야 하기 때문에 앞에서와 달리 변형을 하는 것이 아니라 그 값을 그대로 받는 “항등함수"를 활용한다.

FNN Input Layer

  • Input layer의 기능
    - 입력 데이터 -> 벡터 형태로 받아 들이기 -> 다음 레이어에 전달
    - 입력 데이터의 크기가 n개라면, input layer에 n개의 뉴런이 있어야 한다.

FNN Activation Function

 


ReLU : Rectified Linear Unit


FNN : Depth & Width

  • 신경망의 모델의 크기 : 너비 & 깊이
    너비 : 계층에 들어 있는 뉴런의 수
    깊이 : Layer의 수

  • 특징이 많고 데이터간의 관계가 복잡하면
    -> 특징 학습에 관련된 뉴런의 수 증가하도록 설계
    -> 절대치는 없어서, 경험 & 유사 모델 성능을 기반으로 하게 된다.

  • ML에서 사용한 Gridsearch & RandomGridSearch 등과 같은 방식도 사용함~ -> 최근 NAS(Network Architecture Search)

  • 일반적인 접근 방식 : 성능이 좋다고 검증된 모델 선택 -> 나의 문제에 맞게 거기서 수정


어제 내용 이어서..

08_dl

02_code

(gdrive에 정리)

 

1. 모델 구조

  • 모델 이름: sequential_2
  • 레이어 구성:
    • Flatten: 입력 데이터를 평탄화하여 (None, 784) 형태로 변환 (파라미터: 0)
    • Dense (첫 번째): 128개의 뉴런을 가지며 활성화 함수와 가중치를 포함 (파라미터: 100,480)
    • Dense (두 번째): 10개의 뉴런으로 출력층 구성 (파라미터: 1,290)
  • 총 파라미터 수:
    • 총 파라미터: 101,770 (397.54 KB)
    • 학습 가능한 파라미터: 101,770
    • 비학습 파라미터: 0

2. 모델 컴파일

  • 손실 함수: sparse_categorical_crossentropy (다중 클래스 분류 문제에 적합)
  • 최적화 알고리즘: Adam (학습률 등 하이퍼파라미터 포함)
  • 평가지표: accuracy (정확도를 기반으로 평가)

3. 모델 학습

  • 데이터셋: X_train, y_train 사용
  • 에포크(Epoch): 총 3회 반복
  • 학습 결과:
    • Epoch 1:
      • 손실(Loss): 0.4290
      • 정확도(Accuracy): 87.72%
    • Epoch 2:
      • 손실(Loss): 0.1251
      • 정확도(Accuracy): 96.22%
    • Epoch 3:
      • 손실(Loss): 0.0822
      • 정확도(Accuracy): 97.55%

4. 요약

이 파일은 간단한 딥러닝 모델을 설계하고 MNIST와 같은 이미지 분류 작업을 수행한 예제입니다. 모델은 입력 데이터를 평탄화한 후 두 개의 밀집(Dense) 레이어를 통과하며 학습됩니다. 최종적으로 높은 정확도를 달성했습니다(97.55%).