인공 신경망의 구조

생물학적 뉴런이 수상 돌기로부터 신호를 받아 세포체에 모으듯이, 인공 신경망도 입력 데이터가 가중치에 따라 계산된 후 출력된다.
인공신경망은 크게 입력층 (Input Layer), 가중치 (Weight), 그리고 출력층 (Output Layer)로 구성된다.

  1. 입력층 (Input Layer)
    • 외부에서 들어오는 데이터를 받는 부분을 의미한다
      예를 들어, 이미지 분류 문제의 경우, 한 픽셀 값이 하나의 입력 뉴런이 된다
    • 입력층에 있는 각 뉴런은 데이터를 그대로 다음 단계 (은닉층 또는 출력층)으로 전달하지 않고, 가중치와 곱해져 전달된다.
  2. 은닉층 (Hidden Layer)
    • 입력을 가중치와 활성화 함수를 거쳐 변환하는 층
  3. 가중치 (Weight)
    • 입력 신호의 중요도를 나타내는 값이다
    • 가중치는 학습 과정에서 조정되는 파라미터이며, 어떤 입력이 결과에 더 큰 영향을 미칠지를 결정한다.
      예를 들어, 이미지의 특정 feature (색상, 엣지, 패턴 등)이 결과에 중요한 영향을 미친다면, 그 입력의 가중치가 크게 조정된다.
  4. 출력층 (Output Layer)
    • 최종 결과를 내놓는 부분이다
    • 예측 값이 확률 형태 (예시: softmax 함수)일 수도 있고, 연속적인 값 (예시: 회귀 문제)일수도 있다
      고양이 vs 개 분류 문제에서는 출력층의 각 뉴런은 각각 "고양이일 확률"과 "개일 확률"을 나타낸다.

 

인공 신경망 구현을 위한 케라스 핵심 패키지와 함수

  • 모델 구성 (keras.models)
    • 입력층 → 은닉층 → 출력층으로 정의
    • 주요 클래스 및 함수
      1. Sequential: 층을 순차적으로 쌓아 만드는 가장 기본적인 모델로서, 신경망 모델에 전달할 층을 파이썬 리스트로 전달한다.
      2. Model: 함수형 API로 복잡한 구조를 만들 때 사용한다
      3. load_model, save: 모델 저장/불러오기
  • Input
    • 신경망의 입력 데이터 형태 (shape)를 정의하는 층
    • Sequential 모델에서는 보통 Dense(..., input_shape=(특징수, )) 형태로 입력 차원을 지정한다.
    • 함수형 API에서는 Input(shape=(특징수, )) 을 명시적으로 사용한다.
from keras.layers import Input, Dense
inputs = Input(shape=(100,))   # 입력 차원: 100
  1.  
  • Dense
    • 완전 연결층 (Fully Connected Layer)
    • 모든 입력 뉴련이 모든 출력 뉴런과 연결된다.
    • 주요 인자
      1. units: 출력 뉴런 개수
      2. activation: 활성화 함수 (예시: relu, sigmoid, softmax 등)
      3. input_shape: 첫 층에서 입력 데이터 형태 지정
Dense(64, activation='relu', input_shape=(100,))
  • Sequential
    • 층을 순차적으로 쌓는 방식으로 모델을 만드는 클래스
    • 가장 직관적이고 단순한 인공 신경망 모델을 구성하는 방법이다.
from keras.models import Sequential
from keras.layers import Dense

model = Sequential([
    Dense(64, activation='relu', input_shape=(100,)),
    Dense(10, activation='softmax')
])
  • compile()
    • 모델을 학습할 준비를 하는 단계
    • 최적화 알고리즘, 손실 함수, 평가 지표를 지정한다.
      • optimizer: Adam, SGD, RMSprop 등
      • loss: crossentropy (분류), mse (회귀) 등
      • metrics: 정확도, 오차율 등
  • fit()
    • 실제로 모델을 학습시키는 함수
    • 입력 데이터와 정답 레이블을 주면 지정한 epoch 동안 학습한다.
    • 주요 인자 
      • x, y: 학습 데이터와 레이블
      • epochs: 전체 데이터셋을 몇 번 반복 학습할지 정함
      • batch_size: 한 번에 학습할 데이터 묶음 크기
      • validation_data: 검증 데이터 (과적합 방지)
model.fit(x_train, y_train, epochs=10, batch_size=32,
          validation_data=(x_val, y_val))
  • evaluate()
    • 학습된 모델을 테스트 데이터에 대해 평가한다
    • compile() 에서 지정한 손실 함수 값과 지표 (예시: 정확도)를 반환한다
loss, acc = model.evaluate(x_test, y_test)
print("테스트 정확도:", acc)

 

 

혼공학습단 14기 - 6주차 과제 (확인 문제 풀이)

  1. 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때, 필요한 모델 파라미터의 개수는 몇 개일까요?
    • 정답: 3번 (1,010개)
      • 가중치: 100 x 10 = 1,000개
      • 편향: 10개
      • 총합: 1,000개 + 10개 = 1,010개
  2. 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?
    • 정답: 2번 ('sigmoid')
      • 'binary': 활성화 함수가 아님
      • 'softmax': 다중 클래스에서 단일 라벨에 표준으로 활용함
      • 'relu': [0, ∞) 범위로 확률 (0 ~ 1)로 해석이 불가함, 은닉층에서 비선형성을 주기 위해서 사용함
  3. 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?
    • 정답: 4번 (compile())
  4. 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때,
    케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가요?
    • 정답: 1번 ('sparse_categorical_crossentropy')
      • 'categorical_crossentropy': 원-핫 레이블을 전제로 함
      • 'binary_crossentropy': 이진 분류 또는 멀티라벨 분류에 맞는 손실 함수
      • 'mean_square_error': 회귀에 적절하며, 분류에 사용하기에 부적절한 손실 함수

 

+ Recent posts