Neural Network Analysis

소개

인공신경망분석(Artificial Neural Network: ANN)은 생물체의 신경 시스템을 본뜬 계산 알고리즘이다. 입력과 출력 사이를 은닉 노드들로 연결하고, 이들의 경로 하나하나가 기능적 목적을 가진다고 본다. 경로들이 복잡하게 얽혀 있는데 이미 알려진 결과들을 바탕으로 파라미터들의 가중치 값을 귀납적으로 추론한다. 간단하게 생각하면 입력노드의 값들을 집계하는 함수가 존재하고 그 함수값을 보존함으로써 이를 출력 노드로 이어지는 또 다른 함수의 입력값으로 쓴다. 이때 집계 함수를 activation function 혹은 transfer function이라고 한다.

인공신경망분석은 직접 설명하기 곤란한 경험적 현상을 귀납적 데이터를 바탕으로 설명할 때 아주 좋은 성능을 보이는 것으로 알려져왔다. 로지스틱 회귀 분류의 대안으로 쓰이거나 회귀분석과 종종 비교되기도 한다.

몇 가지 용어를 익히고 다음을 설명하자.

  1. learning rate: 가중치의 크기를 조절하고 계산 상의 오류를 처리하기 위한 값
  2. momentum: 가중치를 업데이트하여 조정하는 값
  3. epoch: 연산을 수행하는 반복 구간(=iteration)의 상한
  4. minimum error: (간단히 말해) 네트워크로 뽑은 목표값과 실제값의 조정된 차이  

종류


  • Feed-forward Systems {neuralnet:neuralnet}
  • Radial Basis Function Networks {RSNNS:rbf}
  • Recurrent Networks (Elman Network) {RSNNS:elman}
  • Hopfield Networks {COSNet:COSNet}
  • Self-organizing Map {RSNNS:som}
  • ART Models {RSNNS:art1}
이것 이외에도 Echo State Networks이 있다. 내가 알기로 아직 R 패키지로 나와 있지 않아서 다음 코드로 직접 구현해야 한다. --> 참고



간단히 {neuralnet}으로 FFS를 사용하는 예를 들었다.

# install.r
# 신경망 패키지 neuralnet 설치
if(!require("neuralnet")) {
  install.packages("neuralnet")
}

# data.r
# 학습데이터, uniform distribution 0~100까지 50개 생성
traininginput <-  as.data.frame(runif(50, min=0, max=100))
trainingoutput <- sqrt(traininginput)
# 출력은 학습에 제곱근으로 가정
trainingdata <- cbind(traininginput,trainingoutput)
colnames(trainingdata) <- c("Input","Output")

# 테스트 데이터 생성, 1~10까지 제곱항
testdata <- as.data.frame((1:10)^2)

# main.r
# 신경망 학습 neuralnet()
# 인자 1: 구분되어야 할 결과 ~ 구분하는 설명물
# 인자 2: 데이터 프레임
# 인자 3: 은닉 노드의 수(hidden)
# 인자 4: 오차 함수(error function)의 한계치 
net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=10, threshold=0.01)
# 결과 출력하기
print(net.sqrt)
#플롯팅 하기
 plot(net.sqrt)



# 학습 결과를 새로운 데이터에 접목
net.results <- compute(net.sqrt, testdata)
print(net.results$net.result)
# 결과 출력
# 대비가 편하게 하려면?
cleanoutput <- cbind(testdata,sqrt(testdata),
                     as.data.frame(net.results$net.result))
colnames(cleanoutput) <- c("Input","Expected Output","Neural Net Output")
print(cleanoutput)

   Input Expected Output Neural Net Output
1      1               1       1.009193672
2      4               2       1.999715664
3      9               3       3.001308584
4     16               4       3.998627834
5     25               5       5.001204805
6     36               6       6.002078109
7     49               7       6.994684220
8     64               8       7.996689130
9     81               9       9.007109599
10   100              10       9.986093586


Expected Output이 거의 Neural Network Output가 유사하다.

댓글

이 블로그의 인기 게시물

R에서 csv 파일 읽는 법

xlwings tutorial - 데이터 계산하여 붙여 넣기