* 신경망을 기반으로한 다층 신경망

- 신경망의 구조: 입력, 은닉, 출력

- 신경망의 작동 원리: 활성화 함수

- 파라미터: 가중치, 편향

- 최적값 찾는 법: 경사하강법

경사 소실 문제

파라미터(w1,1) 업데이트 과정에서 ∂E/∂w1,1 = ∂E/∂yhat * ∂yhat/∂f * ∂f/∂z1 * ∂z1/∂w1,1의 값이 0이 되는 경우 경사 소실 문제가 발생했다고 본다. 해당 식의 ∂f/∂z1 부분에서 0이 될 확률이 가장 높은데, 이는 활성화 함수를 해당 은닉 노드의 입력값인 z1으로 미분한 값으로 활성화 함수의 종류에 따라 z1에 대한 접선의 기울기가 0이 되는 부분이 발생할 수 있기 때문이다. 특히 sigmoid(로지스틱), tanh 함수의 경우 S-curve 형태를 가지고 있기 때문에 접선의 기울기가 0에 가까워질 확률이 높다. 따라서 활성화 함수로 Relu 또는 Leaky Relu 함수를 많이 사용하는 것이다. 한편, 은닉층이 깊고 각 은닉층에서 모두 sigmoid나 tanh 함수를 사용한 경우 입력층과 가까운 파라미터를 업데이트 하게 되면 활성화 함수에 대한 미분을 그만큼 많이 해야 되므로 기울기 소실 문제가 가장 크게 발생한다. 

Optimizer 의 종류

기본적으로 신경망에서 사용되는 경사하강법은 아래와 같은 문제점들을 가지고 있어, 기본 업데이트 공식을 약간 수정/보완한 새로운 경사하강법을 사용하는데, 이를 optimizer라고 부른다. 즉 신경망에서는 optimizer를 사용해 비용 함수의 값을 최소화하는 가중치의 값을 찾는다. 

 

기본적인 경사하강법이 갖는 주요한 단점에 두 가지가 있다. 첫번째는 지금까지 업데이트된 정도를 반영하지 않는다는 것이다. wj,i,new = wj,i,current - η*∂E/∂wj,i를 기본적인 업데이트 공식이라고 할 때 t-step에서 ∂E/∂wj,i는 t-1 step까지의 경사 정보를 반영하지 않고, η*∂E/∂wj,i의 경우 업데이트된 값을 반영하지 않는다고 할 수 있다. 두번째는 η의 값이 업데이트 횟수와 상관없이 고정되어 있는 것이다. 경사가 큰 초반(최소값 지점에서 상당히 떨어져 있음)에는 learning rate를 크게 하여 업데이트를 많이 하고 경사가 작은 후반 (최소값 지점 근처에 옴)에는 learning rate를 작게 하여 converege할 수 있도록 업데이트 적게 하는 것이 좋은데 그렇지 못하므로 단점이라 할 수 있다.

 

그리고 딥러닝의 경우 파라미터가 많기 때문에 local optima가 많이 존재하지 않는 대신 saddle point가 많이 존재하므로 어떻게 saddle point를 벗어나느냐가 중요한 문제인데, 기본적인 방법으로는 saddle point를 잘 벗어날 수 없다. 그리고 속도가 느리기 때문에 대량 데이터를 다루는 딥러닝에서는 기본적인 경사하강법을 많이 사용하지 않는다. 

Q. saddle point와 local optima의 차이는? local optima는 특정 지점에서 주어진 함수의 국소적인 최소 또는 최대값을 의미하며, saddle point는 일부 방향에서는 국소 최소이지만 다른 방향에서는 국소 최대인 지점을 말한다. saddle point는 기울기가 0이지만 최적해는 아니며, 신경망의 학습 과정에서 local optima보다 더 큰 문제점을 일으킬 수 있다.

 

■ 대표적 optimizers

- Momentum

- Adagrad (Adaptive Gradient)

- RMSprop (Root Mean Square Propagation)

- Adadelta

- Adam

 

Momentum: 이전 update 정보를 기억, 현재 update에 반영하는 방법으로 local minimum을 잘 피하고 수렴하는 속도가 빠르다는 장점이 있다. 즉, 일반적인 경사하강법 사용 시 옆으로 왔다갔다를 많이 하고 아래로 내려가는 속도가 느리지만 momentum을 사용하면 옆으로 왔다갔다를 조금 하고 아래로 내려가는 속도가 빠르다. 요즘에는 많이 사용되지 않지만 원리를 이해하는 것이 중요하다.

 

Adagrad(Adaptive Gradient): 지금까지 업데이트 된 정도를 반영하고 지금까지 업데이트가 많이된 파라미터는 learning rate를 작게 하는 방법(learning rate decay 방법)이다. 업데이트가 되면 될수록 경사 제곱의 합을 사용하는 분모의 값이 무한대로 커지므로 learning rate가 0이 되어 업데이트가 거의 발생하지 않는 문제점을 가진다. 

 

RMSprop(Root Mean Square Propagation): Adagrad의 확장 버전으로 무조건적으로 줄어드는 learning rate 문제를 보완하기 위해 경사 제곱의 합이 아닌 평균을 사용하는 방법이다. 그리고 다음의 moving average 방법을 사용하는데 E[g2]t = ρE[g2]t-1 + (1- ρ)g2t, ρ는 보통 0.9 정도, 즉, t-1-step까지의 gradients들의 평균값의 90%를 반영하고 t-step에서의 gradient을 10% 반영한다.

 

Adadelta: Adagrad의 확장버전으로 무조건적으로 줄어드는 learning rate 문제를 보완하기 위해 η를 사용하는 대신 RMS[Δwi]t-1을 사용한 것이다.

 

Adam: RMSprop(or Adadelta) + momentum

Adam

 

선행 연구를 통해 다루고 있는 문제의 특성, 데이터의 특성에 적합한 방법을 몇가지 찾은 후 모두 적용해보고 결과가 가장 좋은 것을 선택하면 된다. 

Weight initialization

초기화된 가중치가 신경망 모델의 성능에 끼치는 영향은 크다. 즉, 초기화된 값이 너무 크거나 작으면 문제가 발생한다. 초기 가중치가 큰 경우 다음에 오는 은닉 노드에 입력되는 입력값이 커지고 해당 은닉 노드의 활성화 함수가 sigmoid/tanh 함수인 경우 vanishing gradient 문제가 발생할 수 있다. 반대로 초기 가중치가 작아 0에 매우 가까운 경우 다음에 오는 은닉 노드에 입력되는 입력값 또한 0에 가까워지게 되고 활성화 함수가 sigmoid/tanh 함수인 경우 0.5에 가까운 값들만 출력이 되어 모형의 성능이 좋지 않게 된다. 즉, 종속변수의 값을 제대로 예측하지 못한다.

 

■ 주요 방법

- Xavier Weight Initialization

- He[허] Weight Intialization 

 

Xavier Weight Initialization

uniform 분포 (특정한 구간의 값을 취할 확률이 모두 동일)를 따르는 특정 구간의 값을 초기 가중치로 설정

weight = U[-1(1/sqrt(n)), 1/sqrt(n)]

n = # of nodes in the current layer

 

Normalized Xavier Weight Initialization

위의 방법과 거의 유사하며 구간을 정하는 방식이 조금 다름

weight = U[-(sqrt(6)/sqrt(n+m)), sqrt(6)/sqrt(n+m)]

n = # of nodes in the current layer

m = # of nodes in the next layer

 

He[허] Weight Intialization

평균이 0이고 분산이 sqrt(2/n)인 정규 분포를 따르는 값을 초기 가중치로 설정하여 노드의 수가 많아질수록 분산이 작아진다. CNN 알고리즘에 많이 사용한다. 

n = # of nodes in the current layer

 

신경망 모형의 경우 파라미터의 수가 많고 데이터의 양도 많다. 따라서 모형이 복잡해질 가능성이 높고 따라서 과적합 문제가 발생할 가능성이 높아 이런 문제를 해결하는 것이 관건이다. 해결 방법은 다음과 같다. 1) 규제화 (기본), 2) dropout 3) early stopping 4) batch normalization - batch의 분포를 표준화 

 

 

출처: https://www.youtube.com/@leesdatascience7765

타 수업 내용 정리

■ Perceptron

퍼셉트론은 인공 신경망의 가장 기본적인 단위로, 생물학적 뉴런의 기능을 모방한 단층 신경망 모델이다. 1958년 Frank Rosenblatt에 의해 제안되었으며, 입력층과 출력층만 존재하고 은닉층이 없으므로 입력 데이터를 선형적으로 분류할 수 있는 문제(선형 분류 문제, 선형결정경계에 의해 완벽히 분류가 되는 이진분류 문제)에 적합하다. 주로 단위 계단 함수를 활성화 함수로 사용하고 출력이 0 또는 1이다.

 

작동과정

퍼셉트론은 뉴런이 다른 뉴런으로부터 신호를 입력받듯 다수의 값 𝑥을 입력받고, 입력된 값마다 가중치(𝑤𝑒𝑖𝑔ℎ𝑡)를 곱한다. 여기서 가중치는 생물학 뉴런에서 뉴런 간 시냅스를 통한 결합의 세기와 같은 역할을 하며, 가중치가 클수록 입력값이 중요하다는 것을 의미합니다. 입력값으로써 𝑥 외에도 편향(bias, 𝑏)은 딥러닝 모델 최적화의 중요 변수 중 하나이다. 일반적으로 입력값을 1로 고정하고 편향 𝑏를 곱한 변수로 표현한다. 입력값과 가중치의 곱, 편향은 퍼셉트론으로 전달됩니다. 퍼셉트론은 입력받은 값을 모두 합산하는데, 합산된 결괏값을 가중합이라 부른다. 생물학적 뉴런은 신경세포체에 저장한 신호의 크기가 임계값(𝜃)보다 클 때 신호를 출력한다고 했다. 퍼셉트론에서도 가중합의 크기를 임계값(𝜃)과 비교하는 활성화 함수를 거쳐 최종 출력값을 결정한다. Δwi ​= η(t−o)xi 즉, 입력값이 클수록 예측치와 실제값의 차이가 클수록 학습률이 클수록 가중치 변화량이 커진다.

 

 Multiayer Perceptron

단일 레이어를 가진 perceptron과 달리 여러 개의 레이어를 가지고 선형 결합 유닛인 net을 미분 가능한 비선형 함수에 통과시킨다. sigmoid를 비선형 함수로 사용하면 결과 값의 범위는 [0,1]이고 𝜎(net)으로 표현할 수 있다. 비선형성을 갖게 되어 예측력이 증가하는 대신 과적합 가능성도 커진다.

 

- 가중치(wi)는 각 입력 데이터(xi)에 곱해지는 값으로, 학습 과정에서 최적화 된다.

- 편향(b)은 뉴런에 추가하는 상수로 가중합의 크기를 조절할 수 있기 때문에 뉴런의 출력값을 조정하는 중요한 요소이다.

- 활성화 함수란 뉴런의 출력에 적용되는 함수로서 일반적으로 신경망의 비선형성을 제공한다. 

 

■ Forward Propagation(순전파)

순전파는 입력 데이터(xi)가 신경망의 각 레이어를 따라 흐르면서 예측값(yhat)을 생성하는 과정이다. 각 레이어의 노드(hi)는 주어진 가중치와 편향을 사용하여 입력 데이터를 처리한다. 각 레이어의 노드의 출력은 다음 레이어의 노드에 입력되고 마지막 레이어의 노드의 출력을 최종 예측값으로 본다.


■ Back Propagation(역전파)

역전파를 사용하는 이유는 연쇄 법칙을 사용하여 각 가중치에 대한 오차 기울기(즉, 손실함수에 대한 각 가중치의 기여도)를 효율적으로 계산하여 신경망의 모든 가중치를 동시에 학습시킬 수 있고 오차를 최소화할 수 있다.

 

* 과적합 해결 방법: 1) 규제화 (기본), 2) dropout 3) early stopping 4) batch normalization

 

■ Dropout 적용 과정

1) dropout layer 설정: dropout을 적용할 특정 layer를 선택한다.

2) dropout rate 설정: 각 layer의 뉴런 중에서 무작위로 비활성화(0으로 설정)할 뉴런의 비율을 정한다. (일반적으로 0.2에서 0.5 사이의 값을 사용함)

3) dropout 적용: 설정된 dropout rate을 학습 시 각 배치마다 적용하여 무작위로 일부 뉴런을 비활성화 하도록 한다.

4) 학습 진행: 즉, droupout이 적용된 layer는 각 배치마다 다르게 비활성화된 뉴런을 선택하여 학습 진행한다.

5) 예측 시 dropout 비 활성화: 예측(추론) 단계에서는 dropout을 적용하지 않고, 전체 뉴런을 사용하여 예측을 수행한다. 

 

■ Dropout 특징

dropout은 특정 뉴런이나 패턴에 의존하는 것을 방지하여 과적합을 줄이는 효과가 있다. 그리고 다양한 조합의 뉴런을 통해 학습함으로써 일반화 성능을 향상시키는 효과가 있다. 다시 말해 모든 노드를 사용하지 않고 일부 노드만을 사용하여 각 노드의 예측력이 높임과 동시에 여러개의 모델을 사용하여 예측하기 때문에 과적합 발생 가능성도 동시에 낮아진다. 

 

■ Batch Normalization

Internal Covariant Shift는 심층 신경망 학습 과정에서 발생하는 문제 중 하나로 학습 과정에서 layer들이 서로 상호작용하면서 batch별, layer별로 입력 값의 분포가 변화하는 현상을 말한다. layer의 깊이가 깊어질수록 더 심각해질 수 있고, 학습을 불안정하게 하여 학습 속도를 저하시킬 수 있다. 따라서 데이터 분포의 불균형을 해소하고 알고리즘의 안정적인 학습 그리고 모델의 일반화 능력을 향상시키기 위해서 Batch Normalization 방법을 사용한다. 

 

학습 과정에서 각 batch별 입력값을 평균 = 0, 표준편차 = 1로 정규화한다. meanB는 미니 배치 B에 대한 데이터 xi의 평균, s.d.B^2는 분산, 은 분모가 0이 되는 것을 방지하기 위한 작은 값이다. 정규화된 값에 학습 가능한 매개변수 감마(scaling factor)와 베타(bias)를 적용하는데, 이 두 파라미터는 원래의 입력값 분포를 복원할 수 있도록 한다. 한편, 추론 단계에서는 학습 동안 추적된 이동 평균과 이동 분산을 사용하여 정규화한다. 이는 각 미니 배치에서 계산된 통계값의 평균을 추적하여 얻은 값으로 이 과정을 통해 테스트 시 입력 데이터에 대해 일관된 정규화를 제공한다.

* batch normalization 참조: https://eehoeskrap.tistory.com/430

배치 정규화

 

■ NN의 특징

 

장점

1) 다양한 문제를 해결할 수 있다.

2) 비선형성을 가지고 있어 복잡한 문제에 대한 해결 능력이 크다고 할 수 있다.

3) 많은 양의 데이터로부터 패턴을 학습하는데 용이하다.

4) 은닉층(hidden layers) 수를 조정하여 모든 함수를 정밀하게 설계 가능하다.

 

단점

1) 학습을 위해 많은 양의 데이터가 필요하다. 데이터가 너무 적거나 단순할 경우 overfitting이 발생한다.

2) 학습할 파라미터가 많기 때문에 학습 시간이 많이 필요하다.

3) 복잡한 구조로 인해 변수들간의 관계에 대한 해석 가능성이 낮다.

4) 복잡한 문제를 해결하기 위해 복잡한 구조의 모델을 활용하기 때문에 overfitting 발생 위험이 증가한다. 

 

'머신러닝 > 지도학습' 카테고리의 다른 글

Feature Engineering  (0) 2024.06.13
Ensemble  (0) 2024.06.11
Neural Networks2  (0) 2024.06.07
Neural Networks  (0) 2024.05.13
기계학습 - SVM  (0) 2024.04.18

+ Recent posts