본문 바로가기
HRDI_AI/[인공지능] 인공신경망 이론과 DNN, CNN 모델의 아키텍처 이해 및

1. 인공신경망

by Toddler_AD 2025. 12. 4.

1-1. 인공신경망과 딥러닝

  • AI vs 머신러닝 vs 딥러닝

  • 딥러닝 정의
    • 딥러닝은 머신러닝 알고리즘의 집합
    • 최근의 딥러닝은 인공신경망 CNN을 기반으로 함
    • 비선형 변환으로 구성된 아키텍처를 사용하여 데이터로부터 모델을 만듬

  • 인공지능의 역사 및 딥러닝의 혁신

1-2. 인공신경망의 구조

  • 뉴런

  • 얕은 신경망

  • 심층 신경망
    • 비선형 문제를 해결해야 할 경우면 더 깊은 신경망이 필요함
    • 은닉층이 여러 개로 구성된 인공 신경망을 다층신경망(Multi Layered Perceptron)이라고 불렀음
    • DNN(Deep Neural Network)은 다층 인공신경망임
    • 실제로 구현된 DNN의 경우에는 단순히 층을 쌓는 구조는 아님
    • GPT3는 파라미터 개수가 1750억 개로 층이 깊고 구조가 복잡함
    • 입력 계층(Input layer)
      • 입력 값으로 구성된 레이어
      • 학습 데이터셋의 "입력 변수의 개수" 만큼의 노드로 구성
      • IRIS 중 분류를 할 경우 입력층의 뉴런은 4개
    • 은닉 계층(Hidden layer)
      • 입력층과 출력층 사이의 레이어
      • 뉴런(neuron)과 시냅스(synapse)로 구성된 인간의 두뇌를 모방하는 레이어
      • 은닉층으로 들어오는 입력값의 합을 계산한 후 활성화 함수를 적용(활성화 함수에 따라 출력되는 값이 다름)
      • 은닉층의 개수와 각 층의 뉴런의 수를 정하는 것은 연구자의 몫
    • 출력 계층(Output layer)
      • 모델의 출력값을 만들어 내는 레이어
      • 멀티 클래스 분류 문제의 경우 소프트맥스(softmax) 함수를 출력함수로 사용
      • IRIS 종 분류를 할 경우 출력층의 뉴런은 3개

  • 인공신경망 모델을 정의할 때에 연구자가 고려해야 할 사항
    • 레이어의 수 : 인공신경망 모델에서 은닉층의 수를 지정하는 것
    • 뉴런의 수 : 입력층의 뉴런의 수는 입력데이터 변수의 수와 동일해야 하며, 출력츠의 뉴런의 수는 분류분석의 경우 분류 레이블의 수이며, 회귀분석의 경우 1개, 은닉층의 개수와 구조는 연구자가 선택함
    • 활성화 함수 : 각 계층에서 사용할 활성화 함수를 지정하는 것
    • 가중치 초기 값 : 각 층의 가중치 초기 값을 지정
    • 드롭아웃 비율 : 과적합을 줄이기 위해 일부 뉴런의 출력을 0으로 하기 위한 비율
    • 배치정규화 : 오차의 경사가 묻히는 현상(gradient vanishing)을 줄이기 위해 은닉층 뉴런의 출력값을 정규화 할지 여부
    • 손실함수 : 예측한 값과 실제 값과의 차이를 계산하는 함수를 지정
    • 옵티마이저 : 손실함수를 최소화 하도록 가중치를 갱신시키기 위한 옵티마이저
    • 학습률 : 옵티마이저가 사용할 학습률
    • 학습 횟수(epoch) : 모든 데이터가 입력되어 가중치가 업데이트 되는 학습 횟수
    • 배치 크기 : 1회 epoch가 학습될 동안 가중치가 업데이트 되어야 하는 입력데이터의 크기

1-3. 인공신경망 딥러닝 모델 구현

  • iris 데이터
from sklearn import datasets
iris = datasets.load_iris()
iris
{'data': array([[5.1, 3.5, 1.4, 0.2],
        [4.9, 3. , 1.4, 0.2],
        [4.7, 3.2, 1.3, 0.2],
        [4.6, 3.1, 1.5, 0.2],
        [5. , 3.6, 1.4, 0.2],
        [5.4, 3.9, 1.7, 0.4],
        [4.6, 3.4, 1.4, 0.3],
        [5. , 3.4, 1.5, 0.2],
        [4.4, 2.9, 1.4, 0.2],
        [4.9, 3.1, 1.5, 0.1],
        [5.4, 3.7, 1.5, 0.2],
        [4.8, 3.4, 1.6, 0.2],
        [4.8, 3. , 1.4, 0.1],
        [4.3, 3. , 1.1, 0.1],
        [5.8, 4. , 1.2, 0.2],
        [5.7, 4.4, 1.5, 0.4],
        [5.4, 3.9, 1.3, 0.4],
        [5.1, 3.5, 1.4, 0.3],
        [5.7, 3.8, 1.7, 0.3],
        [5.1, 3.8, 1.5, 0.3],
        [5.4, 3.4, 1.7, 0.2],
        [5.1, 3.7, 1.5, 0.4],
        [4.6, 3.6, 1. , 0.2],
        [5.1, 3.3, 1.7, 0.5],
        [4.8, 3.4, 1.9, 0.2],
...
  'sepal width (cm)',
  'petal length (cm)',
  'petal width (cm)'],
 'filename': 'iris.csv',
 'data_module': 'sklearn.datasets.data'}

  • 구현할 인공신경망 모델의 구조

  • iris 데이터셋 불러오기
from sklearn import datasets
iris = datasets.load_iris()
iris
X_iris = iris.data
y_iris = iris.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris, random_state=1)
  • MLPClassifier 클래스를 이용한 분류 모델 생성

from sklearn.neural_network import MLPClassifier
model = MLPClassifier(hidden_layer_sizes=(50,30))
model.fit(X_train, y_train)
model.score(X_test, y_test)