nathan_H

Artificial Neural Networks 본문

Big Data/ML

Artificial Neural Networks

nathan_H 2019. 4. 16. 21:55

 

Artificial Neural Networks

 

Artificial Neural Networks은

인간의 뇌를 본따

입력층 은닉층 출력층 

이렇게 구성되어 있는 모델이다.

 

또한 Peceptron와는 다르게

다층으로 구성되어 있는 모델이다.

 

그래서 ANN을 MultiLayer Perceptron이라고

불리기도 한다.

 

 

 

출처 - https://www.digitaltrends.com/cool-tech/what-is-an-artificial-neural-network/

 

ANN와 Peceptron

 

그렇다면 ANN과 Peceptron 모두

인간의 뇌를 모티브로 해서 만든 모델인데

어떠한 차이점이 있는지 알아보자.

 

 

차이점

 

1) Layer

 

앞서 이야기 했듯이 

perceptron과 ANN의 가장 큰 차이는

Layer 개수이다.

 

Perceptorn은 입력층, 중간층, 출력층으로

구성되어 있는 반면

 

ANN은 똑같이 입력층, 출력층이 있으나

1개 이상의 hiddne layer을 가지고 있다.

 

그래서 Multi layer 모델이라고 불리고

다중 perceptron이라고 하는 것이다.

 

2) 패턴 인지.

 

중간층이 하나인 perceptron은 

선형패턴밖에 잡지 못하는 반면

ANN은 다중 층을 활용해

비선형 배턴도 잡아낼 수 있다.

 

그 이유로는 ANN은 다층을 활용해

activation function으로 선형 함수를 

사용하는 것이 아니라 sigmoid f을 활용해

비선형 패턴도 잡아 낼 수 있도로 설계 했기 때문이다.

 

 

유사점

1) Feed-forward

 

ANN과 perceptron 모두 한쪽 방향으로

학습이 되는 feed-forward 모델이다.

 

2) Fully-connect, bi-partitie graph

 

각 층과 같은 층 사이를 설계할때

각 층 사이는 기본적으로 모두 연결 되어 있는

fully-connect라는 성격을 가지고

같은 층 사이는 연결되어 있지 않는

bi-partite graph성격을 가지고 있다.

 

 

 

perceptron 한계 극복.

 

 

앞서 ANN과 Perceptron에 차이점에 대해 언급을 하였는데 

ANN은 perctron이 가진 한계인

Linearly non-separable case 에 대해서만

문제를 해결해줄 수 있다는 한계를 극복해줄 수 있는 모델이다.

 

 

그럼 어떻게 perceptron이 가진 한계를

극복했는지 알아보자.

 

 

 

1. Combination (multi-layer)

 

 

ANN은 peceptron과 달리 다층 모델로써

1개 이상의 hidden layer을 가짐으로써

선형 패턴보다 상위 패턴을 인지할 수 있다.

 

아래 그림을 참고하기 바란다.

 

 

 

 

 

Activation Function

 

 

ANN은  Perceptron와 달리

Weighted sum과 bias에 대한

임의의 함수로써 선형 함수가 아닌

Sigmoid function을 사용한다.

 

source- https://isaacchanghau.github.io/post/activation_functions/

 

 

 

왜냐하면 ANN은 Perceptron과 달리

비선형 패턴도 잡아낼 수 있도록 설계를

해야하는데 Perceptron과 똑같은 activation f으로

선형 함수을 채택을 하게 되면 다층 가졌더라도

선형 패턴 밖에 인지 할수 없게 된다.

 

 

이를 수식으로 설명하자면

 

->  f(x) = ax 일때, 3개의층에서는

-> f(f(f(x))) 인지가능 -> 즉, a3x
-> 어떤 임의의 g(x) = bx 의b = a3인 경우가 존재 할 수 있음

 

 

따라서, 각 층에서 ‘비선형 패턴‘을 인지할 수 있도록 해야한다.
f(x) = ax 가아니라, f(x) = ax2과 같이 비선형 함수를 써여 한다.

 

그래서 비선형 함수로써 Sigmoid 함수를 사용해 

미분 가능한 모델로 변형을 해주게 된다.

(Sigmoid f 이외에도 비선형 패턴을 잘 잡아내주는

함수가 있다면 그것을 연구하고 사용해도 된다.

무조건 Sigmoid를 사용해야 한다는 것은 아니다.)

 

 

 

Hidden Layer에서의 Activation Function

 

 

ANN의 Hidden layer의 역활은 비선형 패턴을 잡아내는 것이고

Hidden Layer에서의 각 ‘노드’의 역할은 임의의 패턴 인지하는
입력과 출력을 하는 역활을 한다.

 

 

ANN의 입 출력


- 입력: 노드와 연결된 이전 층 노드들의 출력 값들

 

- 출력: 입력값 들의weighted sum과 bias에 대하여,

임의의 ‘함수‘(동작)를 실행한 결과.

 

 

출력에서 임의의‘함수’는  Activation function(활성함수)을 의미한다.

 

앞서 이야기 했듯이 Hidden Layer에서는

비선형 패턴을 인지해야하기 때문에

Activation Function으로 선형 함수가 아닌

비선형 함수인 Sigmoid Function을 채택하여 사용한다.

(+ 미분 가능 함수)

 

soruce - https://www.researchgate.net/figure/A-Basic-sigmoid-function-with-two-parameters-c1-and-c2-as-commonly-used-for-subitizing_fig2_325868989

 

*Bias는 모델구현/설명편의상 생략하기도 한다.

 

 

 

Output Layer에서의 Activation Function

 

 

출처 - https://medium.com/coinmonks/the-artificial-neural-networks-handbook-part-1-f9ceb0e376b4

 

 

ANN에서 output layer는 

의사결정을 하는데에 사용되기 때문에

hidden layer와 다른 목적을 가진 함수이다.

 

그래서 Output layer에 쓰이는

activation function도 다르다.

 

 

1) Regression을 할때는f(x) = x

 


2) Classification을 할때는 Softmax function (확률로 변환)

 

 

 

* yk의 분모는 output에 들어온 값을 말한다.

 

Clssification에서 Soft Function을 사용하는 이유는

decision 즉 의사 결정을 할때는 확률이 좋기 때문에

output layer을 확률값으로 변환해줘 사용하는 것이다.

 

 

+추가로 Softmax function을 사용되지만 

구조상 지수 함수이기 때문에 컴퓨터 계산 도중 

값이 "무한대"로 되는 overflow가 발생할 수 있다.

그래서 개선식을 사용한다.

 

 

Weight matrix and Bias

 

 

이제 각층의 적용되는 임의의 함수인

Activation Function에 대해 알아봤으니

원점을 돌아와 ANN에 대해 들여다보자.

 

ANN은 Pecptron과 같이 패턴을 인지하는 모델이다.

그래서 패턴을 학습하는 형태로 모델이 구성되어 있다.

 

여기서의 패턴 학습은 각 층 연결해주는 Weight와 bias을

업데이트 함으로써 진행이 된다.

 

출처 - https://www.mdpi.com/1996-1073/8/2/1138

 

 

그럼 본질적으로 모델을 학습하기 전에 

weight sum과  bias가 무슨 역활을 하는지 알아보자.

 

 

Weight sum

 

- 두 개 층의 각 '노드 쌍' 사이의 관계 중요도 이며

실제로는 해당 '노드 쌍' 이 함께 등장(co-occurrence)한 빈도수에 기반한다.

 

 

Bias

-  각 노드 자체의 중요도로 

실제로는 해당 노드 빈도수에 기반한다.

 

 

위와 같이 Weight sum과 bias는 이러한 역활을 하게 되고

ANN 모델의 최적화될 파라미터가 된다.

 

그렇다면 이러한 weight sum과 bias는 어떤 형식으로

업데이트 되고 학습이 되는지 알아보자.

 

ANN 모델 학습.

 

 

 ANN 모델에서 파라미터(Weight sum, bias)를

직접 계산하기 위해서는 많은 어려움이 있는데

 

 

1) 미분에 대한 계산 복잡성.

 

'파라미터에 대한 편미분'을 통해

최적화를 시켜야 하는데 Layer가 여러개 쌓일 수록 계산이

복잡해지기 때문에 제약이 많이 따른다.

 

2) 불친절한 데이터 

각 파라미터의 '최적값'을 정확히 계산할려면 

파라미터 개수 이상의 데이터에서 해주어야 한다.

하지만 이부분은 보장되어 있지 않고, 

심지어 지저분한 데이터가 존재할수도 있다.

 

그래서 이러한 문제를 해결해주기 위해

ANN모델은 Backpropagation이라는 방법을 통해

모델을 학습 시킨다.

 

 

soruce - http://solarisailab.com/archives/2112

 

 

 

Backpropagation

 

Backpropagation은 전체에 대한 편미분을 바로 구하지 않고,

마지막에 위치한 Output layer에서 발생한

Loss를 '역방향'으로 전파해나가면서,

관련 Weight들을 업데이트 하는 형식의 방법으로 

역전파 알고리즘이라고 불린다.

 

 

즉 Backpropagation은 Loss을 최소화하는

방법으로 parameter을 구하는 것이다.

 

source - https://ml-cheatsheet.readthedocs.io/en/latest/backpropagation.html

 

모델 학습 순서는 다음과 같다.

 

1)Output layer의 loss로 부터 

Wa에 대한 파라미터 업데이터 수식 얻음

 

2) Output layer의 Loss와 W 파라미터를 기반으로

Wb에 대한 파라미터 업데이터 수식을 얻음.

 

 

 

Cost Function

 

 

ANN이 Backpropagation을 진행하면서 

자주 사용하는 Cost Function 으로는 크게 두가지가 있는데

 

1) MSE(Mean Squared Error)

 yk : 신경망의 출력

tk : 정답 레이블

k: 데이터 차원의 개수.

 

 

 

2) CEE(Cross entropy error)

 

yk : 신경망의 출력(신경망이 추정한 값)

tk : 정답 레이블

k : 데이터 차원의 수

 

*tk는 정답에 해당하는 인덱스의 원소만 1,

나머지는 0. 따라서 자연로그의 합과 같다.

 

이렇게 두가지를 가장 많이 사용한다.

 

두가지의 차이점으로는

 교차 엔트로피는 정답일 때의 출력이 전체 값을 결정하는

반면 MSE는 모든 값들에 대해 전체 값을 결정하는 방식이다.

 

 

 

 

Optimization

 

 

Backpropagation 알고리즘 기반으로

편미분하여 얻은 수식들을 사용하여

실제로 업데이트를 수행하는 

'최적화 알고리즘'이 필요하다.

 

파라미터 업데이트 수식을 적용할 때는 

'반대 방향'으로 적용한다.(뺄셈)

 

-> cost Function을 최소화 하는 것이 목표 이므로

 

 

Gradient Decent

 

ANN에서 파라미터를 Optimization하 위해

업데이트 수식을 적용할 때는 Linear Regression 에서 사용한

Gradien Decent을 사용한다.

 

이외에도 다양한 알고리즘들이 있는데

Adagard

Adadelta

Adam's optimizer 등등  있다.

 

 

Gradient Decent는 Linear Regression에서도

사용한 알고리즘으로 경사 하강 이라는 모티브로 

최적의 파라미터를 찾는 기법이다.

 

즉 backpropagation에서는 

cost function을 편미분으로써 

파라미터 업데이트 수식들을 적용해

Iterative한 방식으로 구하는 것이다.

 

iterative는 변화가 충분히 적을 때 ,

일정한 횟수로 진행이 된다.

 

 

출처 - https://www.youtube.com/watch?v=b4Vyma9wPHo

 

 

 

Gradient Decent에도 몇 가지 방법들이 있은데 다음과 같다.

 

Batch GD: 학습 Data가 N개 있을 때, N개 전체에 대한 gradient를 적용하는 것

 

 Stochastic GD: 학습 Data N개 각각에 대한 gradient를 적용하는 것

 

 Mini-batch GD: 학습 Data N개를 작은 mini-batch들로 쪼개서 gradient를 적용하는 것

 

 BGD와 조금 다른 결과를 낼 수 있지만, 비교적 빠른 속도로 학습되며, 여러
iteration을 거치면 BGD와 유사한 결과를 낸다고 알려있다.

 

 

위와 다양한 Optimization 방법들이 있지만

주로 Mini-batch GD, Adam’s optimizer을 주로 쓴다고 한다.

 

 

 

 

 

 

 

 

 

실전 ANN 적용 과정.

 

1) 데이터 전처리

 

데이터의 각 feature 값을 scaling
1. 정규화(normalization): 0~1로 변환
2. 표준화(standardization): Normal 분포

 

normalization
standardization

 

 

2) parameter 초기값 (Layer 간의 weight matrix)

 

1. 0으로 초기화

 

-> 한계: Backpropagation 진행 시, 

모두 같은 양만큼 gradient 가 계산된다.

 

2.  Normal(0, 0.012)
-> 한계: 학습이 진행됨에 따라 표준편차가 0 으로 수렴한다.
-> 표준편차를 크게 해줘도 0으로 수렴한다

 

3)  Xavier 초기화 방법 (2010년)
- >Layer의 node 개수 고려

-> Activation function 을 어떤 것을 

쓰는지에 따라 성능 천차만별

-> 한계: ReLU activation function 쓰면 0 으로 수렴한다.


4. He 초기화 방법 (2015년)

->  ReLU 에서도 잘 동작


5. 이외에도 흔히 쓰는 방법

 W = uniform(-1, 1), B = 0 

(혹은 0에 근접한 real value) 있지만

아직까지 계속해서 초기값 설정에 대한

연구가 진행되고 있다고 한다.\

 

 

3) overfitting 방지.

 

 

1. 데이터 늘리기

 

-> 가장 좋은 방법이지만

데이터를 무한정 얻을 수는 없다.

 

2. feature 줄이기.

 

3. 모델 복잡도 줄이기

-> 노드 개수, 층 개수 등등

 

4. 일반화.

 

-> Weight matrix 가 비정상적으로 커지는 것을 막는다.

 

-> 학습시 최소화 해야할 대상인 cost function 수식에 

'weight matrix 크기'를 추가한다.

 

수식 예) L2 regularization

 

* L1, L2 regularizaition 바교 : L2가 주로 쓰임.

 

 

 

Batch GD에 대한 L1 정규화

 

수식

 

 

Weighted matrix w에 대한 업데이트 수식에 적용.

w부호에 따라 빼주므로 0 근처 값들이 0으로 수렴하여, 

중요한 가중치 값만 남게 된다.

-> 데이터의 feature가 sparse한 경우에 적절

 

 미분이 불가능하므로, GD 방식에 적용할 때는 주의 필요하다.

 

Batch GD에 대한 L2 정규화

 

수식

Weighted matrix w에 대한 업데이트 수식에 적용.

 

 

 

W가 작아지도록 만듦으로써 noise에 robust(강인)해지는 효과가 있다.

 

 

 

 

4) Incremental Learning

 

점진 학습법으로 

새로 들어온 데이터들에 대해 

모델 x의 파라미터를 그대로 초기값으로

(기존 파라미터를 그대로 사용)

사용하여 새로 들어온 데이터에 대해서

그대로 학습을 진행한다.

 

-> 전혀 다른 데이터를 학습한 모델에 대해서도

유의미한 이득을 얻은 사례도 있다.

 

5) Auto Encoder

 

Neural Network는 보통 supervised learning 으로 학습되지만, 

AutoEncoder 는 unsupervised learning이다. 

 

 

AutoEncoder 의 기본 구조
 Input을 Label로 활용
-> Input을 reconstruction

-> 즉, f(x) = x 를 학습하는 것.

 

주로 이미지와 같은 파일들을 

압축하는 용도로 많이 쓰인다.

 

'Big Data > ML' 카테고리의 다른 글

K-means Clustering(평균 군집화)  (0) 2019.05.31
Support Vector Machine .  (0) 2019.05.11
Deep Learning intro - Perceptron  (0) 2019.04.16
Supervised Learning - Regression, Classification  (0) 2019.04.16
Linear Regression, Classification  (0) 2019.04.12
Comments