HAZEL

[Deep Learning 01 ] 얕은 신경망의 구조 ( Shallow Neural Network ) 본문

DATA ANALYSIS/ML & DL

[Deep Learning 01 ] 얕은 신경망의 구조 ( Shallow Neural Network )

Rmsid01 2021. 1. 22. 16:11

Deep Learning 01. 얕은 신경망의 구조

1. 인공 신경망 ( Artificial Neural Network )


1.1. 신경 세포(뉴런)

: 여러 신호를 받아, 하나의 신호를 만들어 전달하는 역할. 출력을 내기전에 활성 함수(activation function)을 통해 비선형 특성을 가할 수 있다.  앞 단계에서는 linear한 연산만 가능한데, 활성화 함수를 통해 비선형 특성을 가할 수 있게 된다.  

: node는 단일 뉴런 연산 , edge는 뉴런의 연결성의 의미한다.

: 활성화 함수의 특징은 선형 함수가 아닌 비선형 함수여야 한다는 것이다.

 -> 입력이 들어오면, 각 입력에 가중치가 곱해지고 그것을 다 더한 후, 활성화 함수를 통과하는 과정을 거친다. 

: 편향이 없다면, 뉴런이 표현할 수 있는 것이 원점을 지난 것으로 제한이 되기 때문에, 공식에 편향을 넣어준다. 

 

뉴런은 수학적으로 두 벡터의 내적으로 표현할 수 있다.

 

1.2. 인공 신경망 

: 뉴런이 모여 서로 연결된 형태를 인공신경망이라고 부름. 

 

1.3. 전결합 계층 ( Fully - Connected Layer : FC Layer)  = Dense Layer

: 이전 계층의 뉴런과 서로 모두 연결되어 있는 **계층( layer )

: 연결할 수 있는 가능성 모두 다 연결하는 것

** 계층 : 뉴런이 모인 한 단위

 

 

이미지 출처 : https://www.gabormelli.com/RKB/Fully-Connected_Neural_Network_Layer

- 연결의 수는 입력과 출력 뉴런 갯수를 곱하면 나온다.

 

: FC 계층은 여러 개의 뉴런을 한 곳에 모아둔것으로, Matrix 곱셈 연산으로 표현됨.

 

- Tensorflow 

# Tensorflow 2.X
# Dense Layer

tf.keras.layers.Dense(
    units, activation=None, use_bias=True, kernel_initializer='glorot_uniform',
    bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None,
    activity_regularizer=None, kernel_constraint=None, bias_constraint=None,
    **kwargs
)

 

- PyTorch

# PyTorch
# Linear

torch.nn.Linear(in_features, out_features, bias=True)

 

 

1.4. 얕은 신경망 ( Shallow Neural Network )

: input layer, hidden layer , output layer 3가지 계층으로 되어 있으며, 은닉 계층과 출력 계층이 Fully Connected 계층인 모델

: 얕은 신경망의 반대는 Deep Neural Network 이다. 

이미지 출처 : https://subscription.packtpub.com/book/programming/9781788996242/10/ch10lvl1sec90/fully-connected-layer-acceleration-with-cublasand-xa0

1) 입력 계층 ( input layer )

: 입력을 받아서, 다음 계층으로 넘기는 역할만 하고, 연산을 일어나지 않는다. 

:  무엇을 입력으로 주어야 하는가? -> 특징 추출 문제 (머신러닝에서는 특징추출을 직접 해줘야 함 ) 

계층의 크기 = Node의 개수 = 입력 스칼라의 수 = 입력 Vector의 길이.

: x = $ [x_0, x_1, x_2, ..., x_{n-1}]^T $

** 여기서는 행 벡터에 Transpose를 해주어, 열벡터를 의미하게 된다.

** x : 스칼라를 의미, x ( 이텔리체 ) : 벡터를 의미 

 

2) 은닉 계층 ( Hidden Layer )

: 입력 계층과 연결된 전결합 계층으로, 얕은 신경망에서는 1개의 은닉 계층만 사용한다.

 = $ a_h(W_hx + b_h) $

 

3) 출력 계층 ( output layer )

: 은닉 계층 다음에 오는 전결합 계층으로 외부로 데이터를 전달한다.

: 신경망의 기능은 출력계층의 활성함수에 의해 결정된다. ( a )

: 출력 계층의 크기 = 출력의 스칼라 수 = 출력 vector 길이

y = $ a_o ( W_oh + b_o )  $

 

2. 인공 신경망을 이용한 회귀 모형 


2.1. 회귀 ( Regresstion )

- 통계 파트에서 정리한 회귀분석 PART

2020/12/11 - [DATA/Math] - [Basic Statistics : CH 10. 회귀분석] 단순 회귀분석, 다중 회귀분석

 

[Basic Statistics : CH 10. 회귀분석] 단순 회귀분석, 다중 회귀분석

CH10. 회귀분석 01 . 단순 회귀분석 001. 단순회귀분석 ( Simple regression analysis ) : 원인과 결과 관계를 파악하는 것. : 하나의 변수가 다른 하나의 변수에 대해 미치는 영향을 파악하는 것 : 독립변수 X

hazel01.tistory.com

: 오차(잡음, noise )이 존재하는 train으로 부터 규칙을 찾아 연속된 값의 출력을 추정하는 것 

: 학습 데이터를 통해서 회귀곡선(추세선)을 도출해내는 것. 

 

1) 단순 선형 회귀 ( Linear Regression ) : 데이터를 가장 잘 표현하는 선형식을 찾는 동작

: 각각의 ( x , y ) 와 선형식의 차이 ( 오차 ) 가 최소화 되게 하는 것을 의미한다. 

: 즉, 선형식 y= wx + b 에서 w와 b를 찾는 과정이 선형회귀를 의미.  

2) 다중 선형 회귀 

: 변수가 확장되어 벡터의 내적이 된다.

: 변수가 증가할 때마다, 차원이 하나씩 증가하게 된다. 직선 -> 평면 -> 초평면

 

2.2. 얕은 신경망을 이용한 회귀 

: 얕은 신경망에서 회귀를 구하는 것은, hidden state에서 결정되는 것이 아니라, output layer의 활성화 함수에 의해 결정되게 된다. 회귀는 전 범위의 연속된 값을 output으로 하기 때문에, identity function ( 항등 함수 )를 사용한다.

 

: 얕은 신경망을 이용함에도 불구하고, 출력 계층의 공식은 선형회귀와 동일하다는 것을 확인 할 수 있다. 

 단지, 은닉 계층에서 데이터를 선형 회귀가 잘 되도록 변환이 있다는 점만 다르다! 

 ( 조금 추상적인데,, 더 어떻게 설명해야 할지 모르겠다.. 나중에 헷갈리면 또 공부하자 ! ) 

 

 

3. 인공 신경망을 이용한 분류 모형 


3.1. 분류 ( Classification )

: 입력값을 특정 범주( Category ) 로 나누어주는 작업

: 나누어지게 그어주는 선을 - 분류곡선이라고 함. ( decision boundary )

- 카테고리가 2개이면, '이진 분류 ( Binary classification )' , 그 이상은 '다중 분류 ( Multi - class classification ) 

- 자연어처리 part 에서 정리한 텍스트 분류

2021/01/19 - [DATA/NLP] - [ NLP : CH8. 텍스트 분류 ] 나이브베이즈, 베이즈정리, RNN/ CNN으로 텍스트 분류(1D 합성곱),멀티 레이블 분류

 

[ NLP : CH8. 텍스트 분류 ] 나이브베이즈, 베이즈정리, RNN/ CNN으로 텍스트 분류(1D 합성곱),멀티 레이

8장. 텍스트 분류 ( text classification ) 8.1. 텍스트 분류? - 텍스트 분류란, 텍스트 / 문장 또는 문서를 입력으로 받아 사전에 정의된 클래스 중에서 어디에 속하는지 분류하는 과정 : 딥러닝 전, 나이

hazel01.tistory.com

 

3.2. 얕은 신경망을 이용한 분류

3.2.1. 이진 분류

 : 분류 모형 역시, hidden state에서 결정되는 것이 아니라, output layer에서 결정되는데, 출력 계층을 보면 회귀 모형이랑 좀 다른 것을 볼 수 있다. 바로, 출력 노드가 하나라는 점이다. 또한, 활성 함수도 sigmoid 를 사용한다.

sigmoid는 이진 분류에서 사용되는 활성 함수이며, 0 ~ 1 사이의 실수 값을 출력값으로 가진다. 따라서, 0.5를 기준으로 첫 번째 class와 두 번째 class를 나눈다.

 

 

- Sigmoid 함수 특성 :

  1. 값이 작아질 수록 0, 커질수록 1에 수렴하며, 출력이 0~1사이로 '확률'로 나타낼 수 있다.

     그로인해, 이진분류에 적합한 함수가 된다.

  2. 입력값이 0이 될 수록 출력이 빠르게 변하고, 무한대가 될수록 느리가 변한다.

  3. 모든점에서 미분이 가능하며, 모든 실수 입력값에 대해 출력이 정의된다.

  4. 0.5로 넘나 안넘나로 범주가 구분 됨.  

def sigmoid(x):
    return 1 / ( 1 + np.exp(-x))

 

1)  로지스틱 회귀 ( Logistric Regression ) : 범주형(카테고리) 데이터를 대상으로 하는 회귀, 분류기법 

: 로지스틱 회귀는 데이터를 따라가는 식으로 회귀하는 선형회귀와 비슷하나, 범주형 데이를 분류하는 방향으로 선을 긋는다는 것이 차이점이다. 

: 사람, 개 등으로 구분이 되는 것으로, 실질적으로 값의 의미를 가지는 것이 아닌 것을 범주형 데이터라고 함

 ( linear regression 은 실수형 )

 

- 교차 엔트로피 오차 ( Cross entropy error ; CEE ) : 정확히 맞추면 오차가 0, 틀릴수록 오차가 무한히 증가한다.

 

 

2) 다중 로지스틱 회귀

: 다중 로지스틱 회귀도, 다중 선형회귀 ( Linear Regression ) 처럼, 변수가 추가될수록 차원이 증가한다. 

 다만, 다중 선형회귀는 값을 따라서 예측하기 위해 선을 그어준다면, 로지스틱 회귀는 값을 구별하기 위해서 선을 그어준다. 

 

: 로지스틱 회귀 역시, 얕은 신경망을 이용함에도 불구하고, 출력 계층의 공식은 로지스틱 회귀와 동일하다는 것을 확인 할 수 있다.  단지, 은닉 계층에서 데이터를 로지스틱 회귀가 잘 되도록 변환이 있다는 점만 다르다! 

 즉, 은닉계층에서는 shellow nn 을 이용해서, 선형적으로 분리가 잘 될 수 있도록 변형 시켜주는 것이다. 즉, decision boundary를 직선이 아닌 곡선으로 만들어주는 원리가 된다. 

 

3.2.2. 다중 클래스 분류

 : 다중 클래스 분류에서는 output 의 값이 해당 class에 속할 확률로 나온다. 즉, a일때의 확률, b일때의 확률, c일때의 확률이다. 이러한 결과값을 가지기 위해서 활성함수로 softmax를 사용한다.

 

: softmax 함수를 넣으면, a + b + c = 1 이 되며, 각각의 확률은 0보다 크거나 같고, 1보다 작거나 같다. 

  softmax 함수는 n개의 입력을 n개의 확률로 만들어준다. 

 

- Softmax 함수 특성 :

  1. 각 입력의 지수함수를 정규화 한것으로 각 출력은 0 ~ 1 사이를 가진다. 

  2. 모든 출력의 합은 반드시 1이 되며, 각각의 확률은 0보다 크거나 같고, 1보다 작거나 같다. 

def softmax(x):
    e_x = exp(x)
    return e_x / np.sum(x)

 

- softmax 와 sigmoid의 비교

; 2 - class softmax 함수를 사용하는데, 하나의 값이 0으로 고정되어있다면, 그것은 sigmoid 의 정의와 같게 나오게 된다.  sigmoid는 2가지 클래스를 구분하기위해 1개의 입력을 받는다. 

 

$$ softmax([x,0])_0 = \frac{e^x}{e^x + e^0} = \frac{1}{1 + e^{-x}}  $$

 

- multi class 일 경우, 교차 엔트로피 오차  : 정확히 맞추면 오차는 0, 틀릴수록 오차가 무한히 증가하는 특징을 가진다.