
인공 신경망의 구조

생물학적 뉴런이 수상 돌기로부터 신호를 받아 세포체에 모으듯이, 인공 신경망도 입력 데이터가 가중치에 따라 계산된 후 출력된다.
인공신경망은 크게 입력층 (Input Layer), 가중치 (Weight), 그리고 출력층 (Output Layer)로 구성된다.
- 입력층 (Input Layer)
- 외부에서 들어오는 데이터를 받는 부분을 의미한다
예를 들어, 이미지 분류 문제의 경우, 한 픽셀 값이 하나의 입력 뉴런이 된다 - 입력층에 있는 각 뉴런은 데이터를 그대로 다음 단계 (은닉층 또는 출력층)으로 전달하지 않고, 가중치와 곱해져 전달된다.
- 외부에서 들어오는 데이터를 받는 부분을 의미한다
- 은닉층 (Hidden Layer)
- 입력을 가중치와 활성화 함수를 거쳐 변환하는 층
- 가중치 (Weight)
- 입력 신호의 중요도를 나타내는 값이다
- 가중치는 학습 과정에서 조정되는 파라미터이며, 어떤 입력이 결과에 더 큰 영향을 미칠지를 결정한다.
예를 들어, 이미지의 특정 feature (색상, 엣지, 패턴 등)이 결과에 중요한 영향을 미친다면, 그 입력의 가중치가 크게 조정된다.
- 출력층 (Output Layer)
- 최종 결과를 내놓는 부분이다
- 예측 값이 확률 형태 (예시: softmax 함수)일 수도 있고, 연속적인 값 (예시: 회귀 문제)일수도 있다
고양이 vs 개 분류 문제에서는 출력층의 각 뉴런은 각각 "고양이일 확률"과 "개일 확률"을 나타낸다.
인공 신경망 구현을 위한 케라스 핵심 패키지와 함수
- 모델 구성 (keras.models)
- 입력층 → 은닉층 → 출력층으로 정의
- 주요 클래스 및 함수
- Sequential: 층을 순차적으로 쌓아 만드는 가장 기본적인 모델로서, 신경망 모델에 전달할 층을 파이썬 리스트로 전달한다.
- Model: 함수형 API로 복잡한 구조를 만들 때 사용한다
- load_model, save: 모델 저장/불러오기
- Input
- 신경망의 입력 데이터 형태 (shape)를 정의하는 층
- Sequential 모델에서는 보통 Dense(..., input_shape=(특징수, )) 형태로 입력 차원을 지정한다.
- 함수형 API에서는 Input(shape=(특징수, )) 을 명시적으로 사용한다.
from keras.layers import Input, Dense
inputs = Input(shape=(100,)) # 입력 차원: 100
- Dense
- 완전 연결층 (Fully Connected Layer)
- 모든 입력 뉴련이 모든 출력 뉴런과 연결된다.
- 주요 인자
- units: 출력 뉴런 개수
- activation: 활성화 함수 (예시: relu, sigmoid, softmax 등)
- 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주차 과제 (확인 문제 풀이)
- 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때, 필요한 모델 파라미터의 개수는 몇 개일까요?
- 정답: 3번 (1,010개)
- 가중치: 100 x 10 = 1,000개
- 편향: 10개
- 총합: 1,000개 + 10개 = 1,010개
- 정답: 3번 (1,010개)
- 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?
- 정답: 2번 ('sigmoid')
- 'binary': 활성화 함수가 아님
- 'softmax': 다중 클래스에서 단일 라벨에 표준으로 활용함
- 'relu': [0, ∞) 범위로 확률 (0 ~ 1)로 해석이 불가함, 은닉층에서 비선형성을 주기 위해서 사용함
- 정답: 2번 ('sigmoid')
- 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?
- 정답: 4번 (compile())
- 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때,
케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가요?- 정답: 1번 ('sparse_categorical_crossentropy')
- 'categorical_crossentropy': 원-핫 레이블을 전제로 함
- 'binary_crossentropy': 이진 분류 또는 멀티라벨 분류에 맞는 손실 함수
- 'mean_square_error': 회귀에 적절하며, 분류에 사용하기에 부적절한 손실 함수
- 정답: 1번 ('sparse_categorical_crossentropy')
'Study Group > 혼공학습단 14기' 카테고리의 다른 글
| [혼공학습단 14기] 활동 회고 및 앞으로의 계획들 (0) | 2025.08.24 |
|---|---|
| [혼공학습단 14기_혼공머신 5주차] K-평균 알고리즘 (0) | 2025.08.10 |
| [혼공학습단 14기_혼공머신 4주차] 교차 검증 (Cross Validation) (3) | 2025.08.03 |
| [혼공학습단 14기_혼공머신 3주차] 로지스틱 회귀 (Logistic Regression) (0) | 2025.07.24 |
| [혼공학습단 14기_혼공머신 2주차] k-최근접 이웃 회귀 모델의 변화 (1) | 2025.07.13 |