티스토리 뷰

아래 글에 이어 작성된 글입니다.

 

 

[인공지능] 다층 퍼셉트론 (MLP)과 역전파 알고리즘

아래 글에 이어 작성된 글입니다. [인공지능] 인공신경망의 시작, 퍼셉트론 아래 글에 이어 작성된 글입니다. [인공지능] 머신러닝과 인공신경망 아래 글에 이어 작성된 글입니다. [인공지능] 전

munak.tistory.com

 

신경망 학습에서 사용되는 하이퍼 파라미터(hyper parameter) 들에 대해 다룹니다.

 

 


 

신경망이 주목받기 시작함에 따라 효율적인 학습을 위한 여러 연구가 진행되었습니다. 이에 앞서 살펴본 손실함수, 활성화 함수 등 학습에 관여하는 일명 하이퍼 파라미터들이 개발되었는데요. 이번글에서는 여러 하이퍼 파라미터 들에 대해 작성해 보겠습니다.

 

 

+ 이름이 하이퍼 파라미터인 이유?

신경망에는 가중치와 바이어스가 이미 파라미터(매개변수)로 사용되고 있기 때문입니다. 해당 개념과 혼동되지 않도록 하이퍼 파라미터라는 이름을 사용합니다.

 

 


 

에포크(epoch)

에포크는 전체 데이터 세트를 사용해 학습하는 회수를 말합니다. 한 번의 epoch는 전체 데이터 셋에 대해 순방향-오차계산-역전파의 과정을 거쳐 학습을 완료한 상태를 말합니다. 보통 여러 번의 에포크로 학습을 진행하게 됩니다.

 

 

 

배치 (Batch)

배치는 몇개의 샘플을 처리한 후에 가중치를 변경할 것인지를 나타내는 개념입니다. 확률적 경사하강법, 풀 배치학습 그리고 미니 배치 이렇게 크게 세 가지로 나뉩니다.

 

 

 

 

확률적 경사하강법 (SGD : Stochastic Gradient Descent) 

훈련 샘플 중에서 무작위로 하나를 골라 학습을 수행하는 방식입니다. 온라인 학습(online learning)이라고도 불리며, 계산하기는 쉽지만 시간이 오래 걸리며, 한 개의 샘플에 영향을 많이 받아 오류가 있는 샘플에 취약하다는 단점이 있습니다.

 

가중치와 바이어스를 0부터 1사이의 난수로 초기화 한다.
수렴할 때까지 모든 가중치에 대해 다음을 반복한다.
	훈련 샘플중에서 무작위로 i번째 샘플을 선택한다.
	그래디언트를 계산한다.
	가중치를 갱신한다.

 

 

 

 

풀 배치 학습 (full batch learning)

모든 훈련 샘플을 처리한 후에 가중치를 변경하는 방법입니다. 풀 배치 학습에서는 모든 훈련 샘플에 대해 그래디언트를 구하고 평균을 낸 뒤 가중치를 변경합니다. 확률적 경사하강법과는 다르게 오류 샘플에 취약하지는 않고 안정적으로 결과에 수렴하나, 샘플의 개수가 늘어날수록 계산이 복잡해지고, 메모리 부하가 발생할 수 있습니다.

 

가중치와 바이어스를 0부터 1사이의 난수로 초기화 한다.
수렴할 때까지 모든 가중치에 대해 다음을 반복한다.
	모든 훈련 샘플을 처리하여 평균 그래디언트를 계산한다.
	가중치를 갱신한다.

 

 

 

 

미니배치(mini batch)

미니배치는 위 두 가지 방법에 가운데에 있는 방법으로 훈련 샘플을 1보다 크고 전체 샘플 개수보다는 작은 배치로 분할한 뒤, 배치 단위로 학습을 진행하는 방법입니다. 확률적 경사하강법의 "빠른 모델 업데이트와 메모리 효율성"과 풀 배치 학습의 "정확한 모델 업데이트와 계산 효율성" 장점을 가진 타협점의 결과로, 실제 머신러닝에서는 적절한 크기의 배치를 이용해 학습을 진행할 것을 권장하고 있습니다. 

 

가중치와 바이어스를 0부터 1사이의 난수로 초기화 한다.
수렴할 때까지 모든 가중치에 대해 다음을 반복한다.
	훈련 샘플중에서 무작위로 a개의 샘플을 선택한다.
	a개의 평균 그래디언트를 계산한다.
	가중치를 갱신한다.

 


 

 

학습률 (learning rate)

학습률은 한번에 가중치를 얼마나 변경할 것인가를 나타내는 개념입니다.  단순히 학습률을 크게 설정하면 성능이 좋아질까요? 그렇지 않습니다.

 

 

앞서 MLP는 경사하강법을 이용해 오차를 줄이는 가중치 w를 찾아 수렴한다고 했었습니다. 하지만 학습률이 너무 크다면 최저점을 찾지 못하고 오버슈팅, 발산하며 오류가 더 늘어나는 모습을 보여줍니다. 작게 설정하면 어떨까요? 안정적이게 최저점에 수렴하지만 굉장히 오랜 시간이 걸리게 됩니다. 이처럼 적절한 학습률을 설정하는 것은 중요합니다.

 

 

 

 

 

 

 

지역 최소값 문제와 모멘텀 (momentum)

또 경사하강법에는 치명적인 문제가 있습니다. 바로 지역 최소값 문제인데요. 아래와 같이 전역 최소값(global minimum)을 찾지 못하고 지역 최소값(local minimum)에 수렴하여 더 이상 학습이 되지 않는 상황을 말합니다.

 

 

 

이를 완화하기 위해 모멘텀을 사용합니다. 모멘텀은 번역하면 운동량이라는 뜻으로, 마치 산에서 굴러 떨어진 돌이 가속에 의하여 작은 언덕을 넘어가듯이 지역 최솟값을 넘어 전역 최솟값을 찾는데에 도움이 됩니다.

 

 

 

 

 

 

그럼 어떻게 적절한 학습률을 알 수 있을까요? 가장 좋은 방법은 손실 함수의 모양에 따라 적절히 학습률을 변경하는 방법입니다. 학습률을 고정시키지 않고 현재의 그래디언트 값이나, 가중치, 학습의 정도를 고려해 학습률을 설정하는 것이죠. 아래는 여러 최적화 기법(optimizer)입니다.

 

 

 

Adagrad 

가변 학습률 방법으로, 학습률 감쇠를 사용합니다. 이전 단계의 그래디언트들의 누적한 값(\(G_t\)는 이전 그래디언트들의 제곱합이다.)에 반비례하여 학습률을 설정하기 때문에 이전 그래디언트 값이 큰 유닛들의 학습률은 빠르게 감소하고,  그래디언트 값이 작은 유닛들은 비교적 느리게 감소하게 됩니다. 따라서 완만한 학습이 이루어지도록 하나 학습의 횟수가 많아지면, 학습률 감쇠가 너무 커져 학습이 더 이상 진행되지 않는다는 문제점이 있습니다.

 

 

 

RMSprop

Adagrad의 문제점 수정한 것으로 그래디언트 누적 대신 지수 가중 이동 평균을 사용합니다. 따라서 오래전 사용된 그래디언트들은 학습률 변경에서 제외되며, 안정적으로 지역최소값에 도달하도록 합니다.

 

 

 

 

 

Adam 

기본적으로 RMSprop + 모멘텀의 형태로 각각의 장점을 결합한 알고리즘입니다. 학습의 방향과 크기 설정을 모두 개선한 기법으로 딥러닝에서 많이 사용된 최적화 알고리즘입니다.

 

그 외에도 뛰어난 성능을 가진  Adadelta, Adagrad, Adamax, Nadam 등이 있습니다.

 

 


 

손실함수 : Loss functions

앞서 언급한 MSE 외에도 여러 손실함수들이 사용되고 있습니다. 손실을 정의하는 것은 학습 결과에 큰 영향을 미치기 때문에 적절한 손실함수를 선택할 줄 알아야 합니다.

 

 

 

평균 제곱 오차 : MSE

Mean Squared Error 가장 기본적인 손실 함수입니다. \(y_{i}\)는 출력층 유닛 i의 값이고 \(t_{i}\)는 정답일 때 이들의 차의 제곱을 모두 더하고 나누어 주면 됩니다. 

 

 

 

평균 제곱근 오차 : RMSE

Root Mean square Error, 추정 값 또는 모델이 예측한 값과 실제 환경에서 관찰되는 값의 차이를 다룰 때 흔히 사용됩니다. 루트를 사용해 특이값에 영향을 적게 받는 장점이 있습니다.

 

 

 

 

 

 

평균 절대 오차 : MAE

​Mean Absolute Error, 모든 절대 오차의 평균을 나타냅니다. MSE에서는 오차의 제곱을 사용하고 MAE에서는 제곱 대신 절대값을 사용합니다. MAE가 작을수록 알고리즘의 성능이 좋다고 할 수 있습니다. 회귀 문제에 주로 사용됩니다. 

 

 

 

 

 

 

교차 엔트로피 손실함수

교차 엔트로피란 두 개의 확률 분포 간 거리를 말합니다. 엔트로피가 클수록 확률분포 간 차이가 크다고 할 수 있습니다. 교차 엔트로피는 확률 분포 p, q에 대해서 아래와 같이 정의됩니다.

 

 

신경망에서는 확률 분포 p가 목표 출력, q가 실제 출력이라고 할 때, 두 개의 확률 분포 차이를 줄이는 것을 목표로 해 사용합니다.

 

 

 

 

 

이진 교차 엔트로피 : BCE

Binary Cross-entropy는 출력의 분류가 2가지일 때, 즉 이진 분류 문제에서 교차 엔트로피를 계산하기 위해 사용됩니다.

 

 

 

 

 

 

카테고리컬 교차 엔트로피 

Categorical Cross-entropy는 분류가 3가지 이상일 때, 다중 분류 문제일 때 사용합니다. 소프트맥스(softmax) 활성화 함수와 함께 쓰이는 경우가 많아 softmax activation function 이라고도 불립니다.

 

 

 

 

Sparse 교차 엔트로피 

Sparse Categorical Crossentropy는 분류가 3가지 이상이면서 레이블이 정수 형태로 제공될 때 사용됩니다.

 

 

 


 

활성화 함수 : Activation  functions

 

계단함수 (step function)

입력 신호의 총합이 0을 넘으면 1을, 아니라면 0을 출력합니다. 0에서 미분되지 않습니다.

 

 

 

 

시그모이드 함수 (sigmoid function)

s자 형태의 곡선 형태를 가지며, 출력이 0.0에서 1.0의 연속적인 실수기 때문에 정밀한 출력이 가능하다는 장점이 있습니다. 하지만 입력값이 작아지거나, 커질수록 기울기가 0에 가까워지며 그래디언트가 소실되는 문제가 발생합니다. (그래디언트 소실이 일어나게 되면 심층 신경망의 경우, 출력층에서 먼 유닛들이 학습되지 않기 때문에 효과적인 학습이 불가능하게 됩니다.)

 

 

 

 

 

ReLU 함수 (Rectifed Linear Unit function)

0을 넘으면 값을 그대로 출력하고 아니라면 0을 출력하는 함수입니다. 다른 함수들에 비해 학습 속도가 빠르고, 연산과 구현이 간단해 널리 사용되었습니다. 

 

 

 

 

 

tanh 함수 (tangent function)

시그모이드 함수와 유사하나, 출력 값이 -1에서 1까지로 음수 출력을 지원합니다.

 

 

 

 

 

소프트 맥스 함수 (Softmax function)

출력값이 0.0과 1.0 사이이며, 출력값의 총합이 1입니다. 시그모이드 함수를 일반화하여 얻을 수 있고 엔트로피 손실함수와 함께 다중 분류 문제 출력층에서 주로 사용됩니다.

 

 


 

당연하지만 소개한 것 외에도 다양한 함수들이 계속 연구되어 사용되고 있습니다. 대표적인 기계학습 라이브러리 Keras에서도 이를 지원하고 있기 때문에 공식 사이트에서 한번 둘러보는 것도 좋을 것 같습니다. 

 

 

Keras: the Python deep learning API

State-of-the-art research. Keras is used by CERN, NASA, NIH, and many more scientific organizations around the world (and yes, Keras is used at the LHC). Keras has the low-level flexibility to implement arbitrary research ideas while offering optional high

keras.io

 

 

 

 

그럼 최적의 학습 파라미터들을 어떻게 찾아낼 수 있을까요? 물론 직접 파라미터를 수정해가며 학습을 진행할 수도 있지만 신경망 학습은 데이터의 상태, 원하는 출력 결과, 환경 등에 영향을 많이 받기 때문에 학습을 진행할 때마다 이를 찾는 것은 굉장히 비 효율적인 일입니다. 

 

다행히도 '하이퍼 파라미터 튜닝'과 같이 이를 자동으로 수행해주는 알고리즘과 이를 지원하는 라이브러리 기능들 또한 개발이 되어있기에 이를 사용해 볼 수 있습니다.  또는 비슷한 데이터 셋의 사례를 참고하거나 좋은 성능을 가진 알고리즘들을 이용해 학습을 진행해보는 것도 좋은 방법입니다.

 

 

 

감사합니다.

 

 


 

공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday