• 검색 결과가 없습니다.

8장 신경망모형

N/A
N/A
Protected

Academic year: 2022

Share "8장 신경망모형"

Copied!
38
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

8장 신경망모형

충북대학교 정보통계학과 나 종 화 (cherin@cbnu.ac.kr)

(2)

8.1 서론

8.2 신경망모형

CONTENTS

2

(3)

8.1 서론

신경망 또는 인공신경망(artificial neural networks, 이하 ANN) 모형은 동물의 뇌신경계를 모방하여 분류(또는 예측)를 위해 만들어진 모형이다.

3

자연 뉴런(natural neurons)이 시냅스(synapse)를 통하여 신호를 전달받는 과정에서, 신호의 강도가 기준치를 초과 할 때 뉴런은 활성화되고, 신경 돌기(axon)를 통해 신호를 방출하듯이, 인공신경망에서 입력(inputs)은 시냅스에 해당하며 개별신호의 강도에 따라 가중(weight)되며, 활성함수(activation function)는 인공신경망의 출력(outputs)을 계산한다.

많은 데이터에 대해 학습(learning 또는 training)을 거쳐, 원하는 결과가 나오도록(오차가 작아 지는 방향으로) 가중치가 조정된다.

안정화된 모형에서 가중치는 회귀모형에서처럼 입력변수의 영향으로 해석될 수 있다.

(4)

8.1 서론

다음의 [그림 8.1]은 자연신경망과 이를 본뜬 인공신경망을 나타낸다.

4

(a) 자연 신경망 (b) 인공 신경망

[그림 8.1] 신경망의 구조

(5)

8.2 신경망모형

입력층이 (은닉층을 거치지 않고) 직접 출력층에 연결되는 단층신경망(single-layer neural network)의 네트워크 구조는 다음의 [그림 8.2]와 같다(단층신경망은 퍼셉트론(perceptron) 으로 불리기도 한다).

5

[그림 8.2] 단층신경망의 네트워크 구조

(6)

8.2 신경망모형

위 그림에서 -차원의 입력벡터 와 스칼라 값 는 다음의 관계

(또는 )

를 가지며, 값에 대해 활성함수가 적용되어 가 계산된다.

6

이 시스템에서 가중치 는 의사결정 경계(decision boundary)의 방향을 나타내는 모수이며, 편의(bias) 는 의사결정 경계의 위치(position)를 결정하는 모수이다.

(7)

8.2 신경망모형

가중치 와 절편 는 학습(learning)을 통해 오차제곱합이 최소가 되는 방향으로 갱신 (update)된다.

7

최종의 목표값(target value)는 는 에 대해 비선형 활성함수(activation function) 를 적용하여 구해진다.

(8)

8.2 신경망모형

많이 사용되는 활성함수의 예는 다음과 같다.

8

부호(sign) 또는 분계점(threshold)함수: 결과는 이진형(-1 또는 1) 이다.

= −1, < 0 1, ≥ 0

계단(step) 함수: 결과는 이진형(0 또는 1) 이다.

= 0, < 0 1, ≥ 0

시그모이드(sigmoid)함수: 결과는 연속형이며,0 ≤ ≤ 1이다.

= 1

1 + exp −

(9)

8.2 신경망모형

9

Softmax 함수: 이 함수는 표준화지수(또는 일반화로지스틱) 함수로도 불리며, 출력값 z가 여러 개(L 개)로 주어지고, 목표치가 다범주인 경우 각 범주에 속할 사후 확률을 제공한다.

= , = 1, … ,

tanh 함수: 결과는 연속형이며,−1 ≤ ≤ 1이다.

= exp − exp(− ) exp( ) + exp −

가우스(Gauss)함수: 결과는 연속형이며,0 ≤ ≤ 1이다.

= exp(− 2 )

(10)

8.2 신경망모형

다음의 [예제 1]은 R 패키지 {nnet}의 nnet() 함수를 이용하여 신경망 모형을 적합한다.

10

iris 자료에 대해 신경망 모형을 적합한다. 자료의 수는 150개이며 입력변수의 차원은 4이며, 목표값은 3개의 범주로 출력된다.

> library(nnet)

> nn.iris <- nnet(Species~., data=iris, size=2, rang=0.1, decay=5e-4, maxit=200)

> # 은닉층의 노드 수(size)는 2, 초기 랜덤 가중치의 범위는 [-0.1, 0.1], weight decay 모수는 0(디폴트), 최대반복수는 200(디폴트는 100)

# weights: 19

initial value 164.615923 iter 10 value 75.652589 iter 20 value 7.797320 (…)

iter 110 value 6.298717 iter 120 value 6.298573 예제 1

(11)

11

> summary(nn.iris)

a 4-2-3 network with 19 weights

options were - softmax modelling decay=5e-04 b->h1 i1->h1 i2->h1 i3->h1 i4->h1

-8.80 -0.49 -1.38 1.88 3.77 b->h2 i1->h2 i2->h2 i3->h2 i4->h2 0.42 0.63 1.84 -3.13 -1.51 b->o1 h1->o1 h2->o1

-3.11 -3.09 9.68 b->o2 h1->o2 h2->o2 6.13 -8.57 -8.40 b->o3 h1->o3 h2->o3 -3.01 11.66 -1.28

8.2 신경망모형

위의 결과는 연결선의 방향과 가중치를 나타낸다. 다만, 초깃값이 별도로 지정하지 않으면 nnet() 함수가 실행될 때 마다 결과가 달라질 것이다.

(12)

8.2 신경망모형

12

적합결과를 시각화 하면 다음과 같다. 시각화를 위한 plot.nnet() 함수는 아래의 절차에 따라 불러올 수 있다.

> library(devtools)

> source_url('https://gist.githubusercontent.com/Peque/41a9e20d6687 f2f3108d/raw/85e14f3a292e126f1454864427e3a189c2fe33f3/nnet_plot_upd ate.r')

> plot.nnet(nn.iris)

(13)

8.2 신경망모형

위의 그림에서 선의 굵기는 연결선의 가중치(weight)에 비례한다. 위의 신경망 분석에 대한 시각화 결과는 다음 과정을 통해서도 가능하다(3개의 패키지를 인스톨 후 plot() 함수를 이용).

13

이 방법은 url로부터 파일을 가져오지 않아도 되므로 위의 방법보다 편리하다.

> library(clusterGeneration)

> library(scales)

> library(reshape)

> plot(nn.iris)

(14)

8.2 신경망모형

신경망 모형에 대한 정오분류표는 다음과 같다.

14

> table(iris$Species, predict(nn.iris, iris, type = "class")) setosa versicolor virginica

setosa 50 0 0

versicolor 0 49 1

virginica 0 1 49

분류된 데이터를 실제 값과 비교해보면 setosa는 50개 모두 잘 분류 되었고, versicolor은 50개 중 49개가 잘 분류되었으며 virginica는 50개중 49개가 잘 분류되었다.

(15)

8.2 신경망모형

다음의 [예제 2]는 패키지 {neuralnet}의 neuralnet() 함수를 통해 신경망 모형을 적합한다.

15

자료 infert는 자연유산과 인공유산 후의 불임에 대한 사례-대조 연구 자료로 8개의 변수와 248개의 관측치를 가지고 있다. 반응변수 case는 (1:사례, 0:대조)를 나타낸다.

> data(infert, package="datasets")

> str(infert)

'data.frame': 248 obs. of 8 variables:

$ education : Factor w/ 3 levels "0-5yrs","6-11yrs",..: 1 1 1 1 2 2 2 2 2 2 ...

$ age : num 26 42 39 34 35 36 23 32 21 28 ...

$ parity : num 6 1 6 4 3 4 1 2 1 2 ... # 출산아 수

$ induced : num 1 1 2 2 1 2 0 0 0 0 ... # 인공유산(induced abortion)

$ case : num 1 1 1 1 1 1 1 1 1 1 ... # 1:case, 0:control(불임여부)

$ spontaneous : num 2 0 0 0 1 1 0 0 1 0 ... # 자연유산(spontaneous abortion)

$ stratum : int 1 2 3 4 5 6 7 8 9 10 ... # 1~63

$ pooled.stratum: num 3 1 4 2 32 36 6 22 5 19 ...

예제 2

(16)

16

> library(neuralnet)

> net.infert <- neuralnet(case~age+parity+induced+spontaneous, data=infert, hidden=2, err.fct="ce", linear.output=FALSE, likelihood=TRUE)

> # hidden= 은닉층의 노드 수. err.fct= 오차(error) 계산에 사용되는 미분가 능 함수로 “sse”, “ce”(cross entropy) 지정 가능

> net.infert

Call: neuralnet(formula = case ~ age + parity + induced + spontaneous, data = infert, hidden = 2, err.fct = "ce", linear.output = FALSE, likelihood = TRUE)

1 repetition was calculated.

Error AIC BIC Reached Threshold Steps 1 125.213891 276.427782 322.1023557 0.009574020885 3926

8.2 신경망모형

(17)

8.2 신경망모형

neuralnet() 함수는 다양한 역전파 알고리즘을 통해 모형을 적합하며, 수행 결과(객체)는 plot() 함수를 통해 다음과 같이 편리하게 시각화 된다.

17

> plot(net.infert)

(18)

8.2 신경망모형

neuralnet() 함수의 수행 결과의 추가적인 정보는 다음 과정을 통해 확인할 수 있다.

18

> names(net.infert)

[1] "call" "response" "covariate"

[4] "model.list" "err.fct" "act.fct"

[7] "linear.output" "data" "net.result"

[10] "weights" "startweights" "generalized.weights"

[13] "result.matrix"

이 가운데 결과 행렬에 대한 정보는 다음을 통해 확인할 수 있다.

> net.infert$result.matrix

(19)

8.2 신경망모형

19

원 자료와 함께 적합값을 출력하는 절차는 다음과 같다. 전체자료는 $data에 저장되어 있고, 모형 적합에 사용된 자료는 $covariate과 $response를 통해 확인 가능 하며, 적합값은

$net.result에 제공된다.

> out <- cbind(net.infert$covariate, net.infert$net.result[[1]])

> dimnames(out) <- list(NULL, c("age","parity","induced",

"spontaneous", "nn-output"))

> head(out)

age parity induced spontaneous nn-output

[1,] 26 6 1 2 0.1519017520

[2,] 42 1 1 0 0.6204067992

[3,] 39 6 2 0 0.1429523769

[4,] 34 4 2 0 0.1512545864

[5,] 35 3 1 1 0.3514344376

[6,] 36 4 2 1 0.4899127465

(20)

8.2 신경망모형

가중치의 초깃값과 적합값은 $startweights와 $weights에 제공되며, 적합값의 출력 결과는 위의 그림과 동일함을 확인할 수 있다.

20

아래의 $generalized.weights가 제시하는 일반화가중치(generalized weights)는 각 공변 량들의 효과를 나타내는 것으로 로지스틱 회귀모형에서의 회귀계수와 유사하게 해석된다(각 공변량이 로그-오즈(log-odds)에 미치는 기여도를 나타냄).

다만, 로지스틱 회귀와는 달리 일반화가중치는 다른 모든 공변량에 의존하므로 각 자료점에서 국소적인 기여도를 나타낸다.

예를 들어, 동일한 변수가 몇몇 관측치에 대해서는 양의 영향을 가지며, 또 다른 관측치에 대해 서는 음의 영향을 가지며, 평균적으로는 0에 가까운 영향을 갖는 것이 가능하다.

(21)

8.2 신경망모형

21

모든 자료에 대한 일반화가중치의 분포는 특정 공변량의 효과가 선형적인지의 여부를 나타낸다.

즉, 작은 분산은 선형효과를 제시하며, 큰 분산은 관측치 공간상에서 변화가 심하다는 것을 나타내므로 비-선형적인 효과가 있음을 나타낸다(Intrator와 Intrator, 2001).

> head(net.infert$generalized.weights[[1]]) # 열은 4개의 입력변수

[,1] [,2] [,3] [,4]

1 0.0087234026257 -0.131299974532 0.163398375432 0.2504961807 2 0.1488417866165 -2.240286689784 2.787960979568 4.2740545951 3 0.0004292800344 -0.006461292687 0.008040860114 0.0123269570 4 0.0081450933776 -0.122595574103 0.152566043635 0.2338897871 5 0.1073062184042 -1.615115608907 2.009956723690 3.0813432590 6 0.1359187791998 -2.045776517837 2.545899652333 3.9029649939

(22)

22

> par(mfrow=c(2,2))

> gwplot(net.infert, selected.covariate="age", min=-2.5, max=5)

> gwplot(net.infert, selected.covariate="parity", min=-2.5, max=5)

> gwplot(net.infert, selected.covariate="induced", min=-2.5, max=5)

> gwplot(net.infert, selected.covariate="spontaneous", min=-2.5, max=5)

> par(mfrow=c(1,1))

8.2 신경망모형

일반화가중치에 대한 시각화를 수행하면 다음과 같다.

(23)

23

8.2 신경망모형

(24)

8.2 신경망모형

일반화가중치의 분포로부터 공변량 age는 모든 값이 0근처의 값을 가지므로 사례-대조 (case-control) 상태에 따른 효과가(결과에 미치는 영향이) 없으며, 적어도 2개의 공변량

induced와 spontaneous는 일반화가중치의 분산이 전반적으로 1보다 크기 때문에 비선형 효 과를 가진다고 할 수 있다.

24

따라서 모형의 단순화를 위해 age와 관련된 뉴런을 제외한 즉, 3개의 입력변수(parity, induced, spontaneous) 만으로 신경망모형을 적합할 수 있다.

compute() 함수는 각 뉴런의 출력값을 계산해 준다. 이를 이용하여 새로운 공변량 조합(또는 결측 조합)에 대한 예측값도 구할 수 있다.

예를 들어, age=22, parity=1, induced 1, spontaneous 1을 가지는 결측 공변량 조합에 대한 예측 결과는 다음과 같다.

(25)

25

> new.output <- compute(net.infert, covariate=matrix(c(22,1,0,0, 22,1,1,0, 22,1,0,1, 22,1,1,1), byrow=TRUE, ncol=4))

> new.output$net.result [,1]

[1,] 0.1477400869 [2,] 0.1927071407 [3,] 0.3146652582 [4,] 0.8512751119

8.2 신경망모형

위의 결과(new.output$net.result)는 주어진 공변량 조합에 대한 예측 결과로, 사전 낙태의 수에 따라 예측 확률이 증가함을 보여준다.

(26)

8.2 신경망모형

신경망모형에서 가중치(weights)들에 대한 신뢰구간은 confidence.interval() 함수를 통해 구할 수 있다. 이에 대한 자세한 내용은 Gunther와 Fritsch(2010)를 참고하기 바란다.

26

다층(multi-layer)신경망 또는 다층 퍼셉트론(perceptron)의 네트워크 구조는 다음과 같다.

다음의 [그림 8.3]은 2개의 은닉층(hidden layer)을 가지는 다층신경망의 구조이며, 그 목적은 입력벡터 를 출력벡터 로 맵핑(mapping)하는 것이다.

[그림 8.3] 다층신경망의 구조

(27)

8.2 신경망모형

위의 그림에서 입력층(input layer)은 자료벡터 또는 패턴을 받아들이고, 은닉층(hidden layer: 한 개 또는 여러 개)은 이전층(previous layer)으로부터 출력을 받아 가중을 취한 후 비 선형의 활성함수(activation function)로 넘긴다.

27

출력층(output layer)은 최종 은닉층으로부터 결과를 받아 비선형적으로 결과를 넘겨 목표값 (target value)을 제공한다.

다층신경망의 가중치는 학습과정에서 오차의 역전파(back-propagation) 알고리즘을 통해 갱신된다.

(28)

8.2 신경망모형

신경망 모형은 여러 개의 은닉층(hidden layer)을 가질 수 있다. 단층신경망과 다층신경망(2 or 3 layers)의 네트워크 구조와 의사결정 경계는 다음의 [그림 8.4]와 같다. 여기서 threshold 활성함수가 사용되었다.

28

[그림 8.4] 신경망 네트워크 구조와 의사결정경계

(29)

8.2 신경망모형

은닉층의 수는 의사결정 경계를 정하는데 중요하다. 은닉층의 수를 정할 때는 다음의 사항을 고려한다.

29

다층신경망은 단층신경망에 비해 훈련(training)이 어렵다.

시그모이드 활성함수를 가지는 2개 층의 네트워크(1개 은닉층)는 임의의 의사결정 경계를 모형화 할 수 있다.

각 층의 노드 수(또는 units)의 결정은 다음을 고려하여 결정한다.

출력층 노드(output units)의 수는 출력 범주의 수로 결정한다.

입력(inputs)의 수는 입력 차원의 수로 결정한다.

은닉층 노드(hidden units)의 수는 다음을 고려하여 정한다.

- 너무 적으면 네트워크이 복잡한 의사결정 경계를 만들 수 없다.

- 너무 많으면 네트워크의 일반화가 어렵다.

(30)

8.2 신경망모형

다음의 [예제 3]은 R 패키지 {neuralnet}의 neuralnet() 함수를 통해 다층신경망 모형을 적합 한다.

30

0과 100 사이의 난수를 50개 발생시키고, 제곱근을 취한 값을 결과로 하는 자료를 구축한다. 이 자료를 신경망으로 학습하여 새로운 자료에 대한 예측을 수행한다.

set.seed() 함수를 이용하여 초깃값을 지정한 후 아래의 절차를 수행하면 일정한 결과를 얻을 수 있다.

예제 3

(31)

31

> library(neuralnet)

> train.input <- as.data.frame(runif(50, min=0, max=100))

> train.output <- sqrt(train.input)

> train.data <- cbind(train.input, train.output)

> colnames(train.data) <- c("Input","Output")

> head(train.data)

Input Output 1 55.82573598 7.471662196 2 97.54545894 9.876510463 3 69.04914395 8.309581455 4 74.84172906 8.651111435 5 58.61191761 7.655842058 6 95.93060503 9.794417034

8.2 신경망모형

(32)

8.2 신경망모형

1개의 은닉층과 10개의 은닉노드를 가지는 신경망모형을 적합한다. threshold= 옵션은 오차 함수의 편미분에 대한 값으로 정지규칙으로 사용된다.

32

> net.sqrt <- neuralnet(Output~Input,train.data, hidden=10, threshold=0.01)

> print(net.sqrt)

Call: neuralnet(formula = Output ~ Input, data = train.data, hidden = 10, threshold = 0.01)

1 repetition was calculated.

Error Reached Threshold Steps 1 0.0008207268678 0.006319500312 2988

(33)

8.2 신경망모형

적합된 신경망모형은 plot() 함수를 통해 다음과 같이 시각화 된다.

33

> plot(net.sqrt)

(34)

8.2 신경망모형

몇 개의 검증용 자료에 대해 구축된 신경망 모형을 적용한다. 1~10 정수값의 제곱을 취하여 검증용 자료(test.data)를 만든 후, 이 자료에 대해 compute() 함수를 통해 신경망 모형 (net.sqrt)을 적용하고, 그 결과를 출력한다.

34

> test.data <- as.data.frame((1:10)^2)

> test.out <- compute(net.sqrt, test.data)

> ls(test.out)

[1] "net.result" "neurons"

(35)

35

> print(test.out$net.result) [,1]

[1,] 1.033835841 [2,] 2.001018917 [3,] 3.002359799 [4,] 3.996234450 [5,] 4.999236314 [6,] 6.003807929 [7,] 6.994699389 [8,] 7.995124460 [9,] 9.009047033 [10,] 9.982951660

8.2 신경망모형

(36)

8.2 신경망모형

이제 은닉층이 2개인 모형을 적합해 보자. 각각의 은닉 노드의 수는 10개, 8개로 한다. 이를 위 해 neuralnet() 함수의 옵션을 hidden=c(10,8)으로 수정하여 위 과정을 실행한다. 그 결과는 다음과 같다.

36

> net2.sqrt <- neuralnet(Output~Input,train.data, hidden=c(10,8), threshold=0.01)

> plot(net2.sqrt)

(37)

37

> test2.out <- compute(net2.sqrt, test.data)

> print(test2.out$net.result) [,1]

[1,] 1.029998134 [2,] 1.991761598 [3,] 3.001090908 [4,] 4.002236233 [5,] 4.998659956 [6,] 6.002985162 [7,] 7.003229266 [8,] 7.994328369 [9,] 9.005849907 [10,] 9.986495689

8.2 신경망모형

(38)

8.2 신경망모형

이상에서 다룬 신경망 모형의 장, 단점을 정리해 보면 다음과 같다.

38

신경망 모형의 장점은 변수의 수가 많거나 입, 출력 변수 간에 복잡한 비선형 관계가 존재할 때 유용하며, 잡음에 대해서도 민감하게 반응하지 않는다는 점이다.

단점은 결과에 대한 해석이 쉽지 않으며, 은닉층의 수와 은닉노드 수의 결정이 어려우며, 초깃 값에 따라 전역해가 아닌 지역해로 수렴할 수 있으며, 모형이 복잡하면 훈련과정에 시간이 많이 소요될 수 있다는 점을 들 수 있다.

참조

관련 문서

Hash(record of all sent and 21 received

표면 불순물층 중부인 dark gray 상 (Zr-rich zone) 의 안쪽 부위까지는 Si 침투가 이뤄지지 않음. • Uranium은 중부 dark gray

• Mechanism of boundary layer growth on a smooth flat plate - Boundary layer flow: laminar → transition → turbulent - Velocity of the fluid particle at the body wall is

19 Movie: Boundary layer concept (Velocity profile near plate, Boundary layer thickness on moving plate) ./mmfm_movies/1_02035_04.mov ./mmfm_movies/2_02005.mov. 20 Movie:

• Prandtl (1904) suggested the boundary layer concept in which viscous effects are important only in the boundary layer regions, and outside boundary layer, the fluid acts as

□ Each host and router on a subnet needs a data link layer address to specify its address on the subnet. § This address appears in the data link layer frame sent on

congestion avoidance: additive increase loss: decrease window by factor of 2 congestion avoidance: additive increase loss: decrease window by factor of

&amp; Balakrishnan, 2013), the ratio of the current MI’s mean latency to minimum observed mean latency of any MI in the connection’s history; and (iii) sending ratio, the