[DL4J] 인공 신경망의 이해

※ 참고 사이트

– Java 기반 DeepLearing 오픈소스 : http://deeplearning4j.org

– Machine Learning : https://www.coursera.org/learn/machine-learning/

http://blog.naver.com/mypa3424?Redirect=Log&logNo=220541121553

– Alpha GO 논문 : http://arxiv.org/pdf/1511.06410v2.pdf

– 신경망 분석을 이용한 손글씨 인식 : http://neuralnetworksanddeeplearning.com/chap1.html

– 몬테카를로 : http://egloos.zum.com/yjhyjh/v/33072

– R RANN Package : https://cran.r-project.org/web/packages/RANN/RANN.pdf

– R 몬테카를로 : https://cran.r-project.org/web/packages/mc2d/vignettes/docmcEnglish.pdf

http://analyticsstory.com/103

[인공 신경망의 이해]

1. 인공신경망

구글의 알파고에서 사용한 신경망은 Depth가 20단계에 이르는 매우 복잡한 형태로 설계가 되어 있다고 한다

가장 복잡한 게임중의 하나인 바둑으로 사람을 이기는 알파고의 차이는 무엇일까?

dl1

untitled

궁극적인 AI  의 목표는 비지도 학습 (Unsupervised Learning) 일 것이라고 생각되지만, 현재 Machine Learning  , Deep Learning 등의 Concept 은 완전 비지도 학습에 있다기 보다는 그 규칙을 프로그래머가 지정하는 것이 아닌 데이터에서 패턴을 찾아낸다는 점에 중점을 둔다고 생각된다.

이러한 관점에서 Alpha GO 는 로직으로 풀기에는 매우 난해한 바둑의 규칙과 경우의 수를 바둑판 가로X세로 사이즈가 Input 이 되는 신경망을 사용하여 각 Step 에서 최선의 경우의 수를 축소하고 이를 몬테카를로 기법으로 반복 테스트 함으로써 다시 최선의 수를 찾아내는 방식으로 해결하였다라고 이해 하였다.

2. Perceptron의 기본적인 개념

(1) 가장 기본적인 개념

실질적으로 인공 신경망으로써의 형태를 갖추고자 한다면 훨씬 복잡한 형태가 되겠지만, 하나의 노드에 대한

개념을 설명한다면 아래와 같이 설명 될 수 있을 것 같다.

untitled2

[그림. Weight 와 Thread Hold를 이용한 예]

Perceptron은 x1,x2,x3 와 같은 몇개의 바이너리 값을 Input 으로 받아서 하나의 바이너리 output 값을 출력한다.

이 인공신경망의 결과 값은 0 혹은 1을 갖는데, 그 판단에 sigma x1,x2안 weight 라는 중요도 값과 Thread Hold라는

프로그램의 파라메터 값을 비교하여 0,1 을 판단한다. x의 수는 변동적이며, 수식으로 표현하면 아래와 같다.

sigma x1,x2 > Thread Hold = 0

sigma x1,x2 < Thread Hold = 1

(2) 논리 판단 모델 구현

untitle3d

[그림. Weight 와 Bias 를 적용하여논리 회로(NAND) 구성]

위와 같이 논리회로를 구성하는 방법도 가능하다.

(-2)*0+(-2)*0+3 = 3 is positive

(-2)*1+(-2)*1+3 = -1 is nagative

untit4led

[그림. 논리 회로 구성의 또 다른예]

(3) 다중 신경망 구성

untitl5ed

[그림. 한개 이상이며 결론이 하나인 Perceptron의 예]

1 Level 의 결과는 다시 Level2 의 입력값이 되는 형태로 복합적인 인공신경망을 구성하게 된다.

3. Data, Model 그리고 Cost Function

위에서Perceptron 이라고 불리는 노드는 위에서 설명한 것과 같은 가중치 혹은 논리판단 구조 등으로도 구현될 수 있으며,

데이터 기반의 모델링과 COst Function을 사용함으로써 데이터를 통한 자가 학습 신경망을 구성

– Model : BigData 분석기법에서 모델을 찾는다고 할때의 모델과 동일한 분석 기법들의 결과물을 말함

신경망 분석 기법이 1950년대부터 있던 이론임에도 지금에서 주목받기 시작하는 이유도 이러한 연관

관계 때문이라고 생각됨. 분산파일처리 시스템과 맵리듀스 등에 의한 대량 데이터 처리 기능 강화

– Cost Function : min WX s. t. y.=f(x)

의 해 x*(w, y)를 조건부요소 수요함수(conditional factor demand function)라 하고, 이것을 화폐액으로 표시한 C(w, y)=wx*(w, y)가 비용함수이다.

한편 이 비용함수는 생산함수가 주어져 있으면 비용최소화 문제로부터 도출할 수 있고, 역으로 비용함수가 주어져 있으면

(생산함수가 준오목 등 일정한 성질을 만족할 때)이 비용함수로부터 생산함수를 도출할 수 있다. 따라서 생산함수 대신에 비용함수로서 생산이론을

전개할 수 있는 것이다. 이것을 생산이론에서 쌍대성()(duality)이라 한다.

(1) 데이터를 통한 최적 설명 모델 추출

아래는 집의면적 증가에 따른 비용의 증가 데이터를 최적으로 표현할 수 있는 수식을 도출하는 과정이다.

http://blog.naver.com/mypa3424?Redirect=Log&logNo=220541121553 에서 무려 15개 이상의 챕터에 걸쳐

설명하고 있는 내용으로 데이터를 최적으로 설명할 수 있는 식을 도출하는 과정을 설명하고 있다.  물론 이러한 과정은 실제 개발시에는 DL4J 내에서 자동으로 이루어지기 때문에 직접 개발할 필요는 없다

untitle6d

4. Sigmoid Function

학습 알고리즘이란 단어는 매우 매력적이다. 예를 들어 input 데이터가 스캐너의 raw data라든지, handwritten된 숫자 이미지일 경우에,

숫자의 정확한 분류를 output으로 출력하기 위해 weight와 bias를 학습해야 할 것이다. 어떻게 학습이 이루어지는지를 확인하기 위해서,

네트워크의 몇몇의 weight 또는 bias를 약간 변경할 수 있다고 가정하자. 우리가 weight를 조금 변경하면 그와 일치하게 output도

변화가 일어날 것이다. 이러한 속성은 학습을 가능하게 한다.

만약에 weight 혹은 bias의 변화를 준 결과 값이 참이라면, 우리는 해당 결과를 얻기 위해서 weight와 bias들을 수정할 수가 있다.

예를 들어 “9”라는 이미지 숫자를 “8”로 분류된 뉴럴 네트워크가 있다고 가정해보자. 우리는 weight와 bias를 변경함으로써 “9”에

근접하게 분류가 가능하도록 수정을 해야 한다. 그리고 이 작업을 반복을 해야 한다. weight와 bias값이 변경 되면 될 수록 그

결과값은 점점 더 나아딜 것이다. 네트워크가 학습이 되고 있는 것이다.

문제는 네트워크가 perceptron을 포함하고 있다면 이러한 일들이 발생하지 않는다는 것이다.

사실 하나의 perceptron의 weight 혹은 bias를 약간 변경함으로써 완변하게 반전되는 perceptron의 output을 야기할 수가 있다. (0에서 1로)

이러한 반전은 네트워크의 나머지 행동들이 매우 복잡한 방법으로 변경될 수 있음을 야기할 수있다. 당신의 “9”라는 숫자가 완벽하게

분류될 수 있을지는 몰라도, “9”이외의 나머지 이미지들은 다소 제어하기 어려운 방향으로 변 될 수가 있다.

이것은 weight와 bias를 점진적으로 수정함으로써 원하는 네트워크의 행동을 얻는 것이 얼마나 어려운지를 보여주고 있다.

아마도 이 문제를 해결할 수 있는 명백한 방법이 있을 것이다. 하지만 학습을 위한 perceptron의 네트워크를 얻는 방법으로는 적절하지가 않다.

그래서 계단형 그래프를 점진형 그래프로 바꾸어 0,1로 나오던 결과를 0과 1사이의 값으로 도출할 수 있도록 하는 것을 Sigmoid Function 이라고 한다.

untit8leduntitle9d

5. 인공 신경망의 설계

구글의 Aplha GO 와 이세돌 9단의 대결은 끝나지 않았지만, 혹자들은 “불공정한 대결이다 컴퓨터 1202대와 인간의

대결이다. 이것은 순수하게 컴퓨팅 파워로 인간을 압도한 것이다.” 와 같은 불평을 한다. 이에 대해 AlphaGO의 수장은

클라우드 컴퓨터를 연결하지 않더라도 75%의 성능(승률)은 보장되며, AlphaGo의 핵심은 계산 능력이 아닌 신경망에

있다고 이야기를 한다. AlphaGo 의 경우 20Depth 가 넘는 엄청난 신경망을 설계하였다고 알려진다. (아쉽게도 논문에서도

해당 신경망의 설계에 대해서는 공개하지 않고 있다) 현재로써는 목적별로 신경망을 새롭게 설계해야 하는 상황이지만,

구글은 범용 신경망 혹은 자가 발전이 가능한 신경망에 대해서 이야기 하고 있다. 아마 그 수준이 된다면 진정으로 AI 로

불러도 될 것으로 보인다. 여기서는 손글씨를 인식하는 인공신경망 설계를 예로 신경망 설계에 대해서 정리해 보고자 한다.

untitledaaa

[그림. 손글씨 학습 데이터]

untitlebbbd

[그림. 1~9 까지 숫자를 판단하는 신경망]

(1) Layer 1

위의 신경망은 28 X 28 Pixel 사이즈의 이미지를 Input 으로 사용하기 때문에 입력 뉴런의 수는 28 X 28 로 784개가 된다

즉 각각의 픽셀 값이 인풋 값이 된다는 의미이다.

(2) Layer 2

Layer2 는 10개로 구성되어 있다. 28 X 28 사이즈의 이미지를 10개의 구획으로 나누어 판단하는 뉴런들이 Layer 2 에 위치한다.

Layer2 를 설계하기 위해서는 다양한 통계 기법 및 이미지 분석기법을 이해하고 있어어하며 본 문서에서는 생략하도록 한다.

untitlessssd

(3) Layer 3

Layer 3 는 결과 값이다. 0 ~ 9까지 결과 값을 판단하는 레이어다.

6. 프로그래밍

가장 널리 사용되는 오픈소스는 아래의 Pyton 기반 DL 오픈소스이지만, Enterprise 확장성 및 Liscense 등을 생각한다면

JAVA 기반의 DL4J 에 유리할 것이라 판단하며, DL4J 에 대한 내용 정리는 아래와 같이 진행한다.

○ DL4J 중요 포인트

지금까지 파악한 DL4J 활용을 위해 필요한 내용은 아래와 같다.

아래의 Step 을 숙지한다면 데이터 추출 > 망선택 > Activation Func 선택 > Loss Func 선택 > 결과 평가 및 사용

전체에 Process 를 수행 할 수 있을 것이라 생각된다.

앞으로는 이미지, 음성처리 등 보다는 시간관계상 Regression(회귀) 분석에 해당하는 Layer, Activation , Loss

위주로 정리하여, 업무에 적용할 수있는 방안으로 빠르게 정리해야 할 것으로 보인다.

(1) Data Iterator : 사용하고자 하는 데이터를 DL4J 에서 사용가능한 형태로 변환하는 작업 개발 필요

• Canova: The Rosetta Stone of Vectorization

(2) Net : 사용할 신경망의 형태가 어떤 것이 있는지 이해하고 선택, 활용 할 수 있어야 함
• Restricted Boltzmann machines
• Convolutional nets
• Recursive autoencoders
• Recurrent nets: Long Short-Term Memory (LSTM) (including bi-directional LSTMs)
• Deep-belief networks
• Denoising and Stacked Denoising autoencoders
• Deep autoencoders

[NET 선택 참조 표]

K-031

(3) Activation : Weight + Bias 결과 다음 적용할 함수 결정 (예 : SigMoid : Chap1 에서 설명한 것)

• ReLU
• Leaky ReLU
• Tanh
• Sigmoid
• Hard Tanh
• Softmax
• Identity
• ELU: Exponential Linear Units
• Softsign
• Softplus

(4) Loss&Objective Functions : 일부 데이터를 누락함으로써 더 Robust 한 모델을 만들 수 있다.
• Reconstruction entropy
• Squared loss
• Mean squared error
• Multi-class cross entropy for classification
• Negative log likelihood
• RMSE_XENT

(5) Hyperparameters : 모든 Layer 에 공통적으로 적용되는 파라메터로 숙지 필요

• Dropout (random ommission of feature detectors to prevent overfitting)
• Sparsity (force activations of sparse/rare inputs)
• Adagrad (feature-specific learning-rate optimization)
• L1 and L2 regularization (weight decay)
• Weight transforms (useful for deep autoencoders)
• Probability distribution manipulation for initial weight generation
• Gradient normalization and clipping

(6) Event Listener & Result Anal : 분석 중간 발생하는 이벤트를 받아서 처리 및 결과에 대한 검증 및 비지니스 연동 등

[그림. 아래는 Pyton 코드의 예제이다]

http://neuralnetworksanddeeplearning.com/chap1.html

Leave a Reply

Your email address will not be published. Required fields are marked *