본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Artificial Neural Network, ANN; 人工神經網
사람의 뇌, 신경망에서 영감을 얻은 통계학적 학습 알고리즘 모델
  • 협의적으론 다수의 퍼셉트론을 중첩으로 엮어서 구성한 다층 퍼셉트론 모델

인공 신경망은 노드(뉴런)들이 층을 이루고, 앞 층의 노드와 다음 층의 노드가 가중치가 붙은 연결로 이어진 구조이다. 입력이 층을 차례로 지나며 변환되어 출력이 된다. 은닉층이 하나 이상인 구조를 다층 퍼셉트론(멀티 레이어 퍼셉트론)이라 하고, 은닉층을 여러 개 깊게 쌓은 신경망을 다루는 분야를 딥 러닝이라 한다.

요소 설명
입력층 (input layer) 입력 변수를 받는 층. 노드 수는 입력 변수의 수와 같다. 범주형 변수는 가변수로 바꾸어 넣는다.
은닉층 (hidden layer) 입력층과 출력층 사이의 층. 입력을 비선형으로 변환해 복잡한 패턴을 표현한다. 층 수와 노드 수는 분석자가 정한다.
출력층 (output layer) 결과를 내는 층. 회귀는 보통 노드 1개, 이진 분류는 1개(또는 2개), 다중 분류는 범주 수만큼 둔다.
가중치 (weight) 노드 사이 연결의 강도. 학습으로 조정되는 핵심 모수이다.
편향 (bias) 가중합에 더하는 상수항. 활성화 함수가 작동하는 기준점을 옮긴다.
활성화 함수 가중합을 받아 노드의 출력을 정하는 함수. 비선형 함수를 써야 층을 쌓는 의미가 있다.

노드 하나의 출력은 입력의 가중합에 편향을 더한 값을 활성화 함수 f에 넣은 것이다.

y=f(∑i=1nwixi+b)

단계 설명
순전파 (forward propagation) 입력을 입력층에서 출력층 방향으로 전달하며 각 층의 출력을 계산해 예측값을 얻는다.
오차 계산 예측값과 실제값의 차이를 손실 함수로 계산한다. 회귀는 평균 제곱 오차, 분류는 교차 엔트로피를 흔히 쓴다.
오차역전파 (backpropagation) 출력층의 오차를 출력층에서 입력층 방향으로 거꾸로 전달하며, 연쇄 법칙으로 각 가중치에 대한 손실의 기울기(편미분)를 구한다. 1986년 러멜하트(Rumelhart), 힌턴(Hinton), 윌리엄스(Williams)의 논문으로 널리 알려졌다. 자세한 내용은 역전파 문서를 참고한다.
가중치 갱신 경사 하강법으로 손실이 줄어드는 방향, 즉 기울기의 반대 방향으로 가중치를 조금씩 옮긴다. 이동 폭은 학습률로 정한다.
  • 가중치 갱신 식은 w←w−η∂E∂w이다. η는 학습률, E는 손실이다.
  • 순전파 → 오차 계산 → 역전파 → 가중치 갱신을 전체 학습 데이터에 대해 여러 번(에폭, epoch) 반복한다.
  • 손실 함수가 볼록하지 않으므로 경사 하강법은 지역 최솟값에 머무를 수 있고, 초기 가중치에 따라 결과가 달라진다.
함수 식 출력 범위 주된 용도와 특징
계단 함수 (step) 0 이상이면 1, 아니면 0 0 또는 1 초기 퍼셉트론에서 사용. 미분값이 0(또는 정의되지 않음)이라 역전파 학습에 쓸 수 없다.
시그모이드 (sigmoid) σ(x)=11+e−x (0, 1) 이진 분류의 출력층에서 확률처럼 해석. 도함수 최댓값이 0.25여서 층이 깊으면 기울기 소실이 생긴다.
하이퍼볼릭 탄젠트 (tanh) tanh⁡(x)=ex−e−xex+e−x (−1, 1) 은닉층에 사용. 출력의 중심이 0이라 시그모이드보다 학습이 잘 되는 경우가 많지만 기울기 소실은 남는다.
ReLU f(x)=max⁡(0,x) [0, ∞) 딥 러닝 은닉층에서 널리 사용. 양수 구간의 기울기가 1이라 기울기 소실이 줄고 계산이 빠르다. 음수 입력에서는 기울기가 0이다.
소프트맥스 (softmax) ezk∑j=1Kezj 각 값 (0, 1), 합계 1 다중 분류의 출력층. K개 범주 각각의 확률을 낸다.

자세한 내용은 활성화 함수 문서를 참고한다.

은닉층과 노드 수

편집 원본 편집
  • 은닉층 수와 은닉 노드 수는 모형의 복잡도를 정하는 하이퍼파라미터이다. 정해진 공식은 없고 검증 데이터로 성능을 비교해 고른다.
  • 노드나 층이 너무 적으면 자료의 패턴을 충분히 표현하지 못해 과소적합(underfitting)이 생긴다.
  • 노드나 층이 너무 많으면 학습 데이터의 잡음까지 외워 과적합이 생기고 학습 시간도 길어진다.
  • 과적합을 막는 방법으로 가중치 감쇠(weight decay, 가중치 크기에 벌점), 조기 종료(검증 오차가 늘기 시작하면 학습 중단), 드롭아웃 등이 있다.

기울기 소실 문제

편집 원본 편집
  • 역전파에서는 출력층에서 입력층 쪽으로 갈수록 각 층의 활성화 함수 도함수가 계속 곱해진다. 시그모이드처럼 도함수가 1보다 작은 함수를 쓰면 기울기가 층마다 작아져, 입력층에 가까운 층의 가중치가 거의 갱신되지 않는다. 이를 기울기 소실(vanishing gradient)이라 한다.
  • 은닉층이 많은 깊은 신경망에서 두드러지며, 은닉층에 ReLU 계열 함수 사용, 적절한 가중치 초기화, 배치 정규화 등으로 완화한다.
  • 반대로 기울기가 층마다 커져 학습이 불안정해지는 현상은 기울기 폭주라 한다.
장점 단점
변수 사이의 복잡한 비선형 관계와 상호작용을 스스로 학습한다. 가중치가 무엇을 뜻하는지 해석하기 어렵다(블랙박스 모형). 결과를 설명해야 하는 분석에는 의사결정 나무나 로지스틱 회귀가 더 적합할 수 있다.
분류와 회귀(수치 예측)에 모두 쓸 수 있다. 은닉층·노드가 많으면 과적합되기 쉽다.
잡음이 있는 자료에도 비교적 잘 작동한다. 초기 가중치에 따라 결과가 달라지고 지역 최솟값에 빠질 수 있다.
입력 변수 사이에 상관이 있어도 쓸 수 있다. 입력 변수의 척도에 민감하다. 척도를 맞추지 않으면 값이 큰 변수가 학습을 좌우하고 수렴이 느려지므로, 입력을 표준화하거나 0~1 범위로 변환해서 넣는다.
새 자료로 계속 학습시킬 수 있다. 학습에 시간이 오래 걸리고, 은닉층 수·노드 수·학습률 등 정할 것이 많다.

R의 nnet 패키지는 은닉층이 하나인 순전파(feed-forward) 신경망과 다항 로그선형 모형을 제공한다.

library(nnet)
set.seed(123)
idx   <- sample(1:nrow(iris), 100)
train <- iris[idx, ]
test  <- iris[-idx, ]

# size: 은닉 노드 수, decay: 가중치 감쇠, maxit: 최대 반복 횟수
model <- nnet(Species ~ ., data = train, size = 3, decay = 5e-4, maxit = 200)

pred <- predict(model, test, type = "class")
table(actual = test$Species, predicted = pred)   # 혼동 행렬
  • 입력 변수의 척도가 크게 다르면 scale() 등으로 먼저 표준화한다.
  • 초기 가중치가 무작위로 정해지므로 set.seed()를 주지 않으면 실행할 때마다 결과가 달라진다.
  • 수치 예측(회귀)에는 linout = TRUE를 준다.
  • 입력층·은닉층·출력층의 구성과 가중치·편향의 역할, 은닉층 노드 수가 너무 적으면 과소적합, 너무 많으면 과적합이라는 점
  • 학습은 순전파로 예측하고, 오차역전파로 기울기를 구해, 경사 하강법으로 가중치를 갱신하는 과정이다.
  • 활성화 함수별 출력 범위: 시그모이드 (0, 1), tanh (−1, 1), ReLU [0, ∞), 소프트맥스는 합이 1인 확률(다중 분류 출력층)
  • 기울기 소실은 시그모이드 같은 함수를 깊게 쌓을 때 생기며 ReLU 등으로 완화한다.
  • 결과 해석이 어렵고, 초기값과 입력 척도에 민감하므로 입력을 표준화한다.