Artificial Intelligence

2021. 4. 23. 14:37Artificial_Intelligence/etc

optimizer, loss, metrics

Optimizer는 학습 진행을 결정하는 방식으로 가중치를 어느 정도로 이동할 것인지를 결정하는 방법이다.  Loss Function을 기반으로 네트워크가 어떻게 업데이트될건지 설정하고, 네트워크를 구성하는 알고리즘을 최적화 시킨다. 옵티마이저에는 Adam, RMSprop, SGD 등이 있다.

Loss Function은 예측값과 실제값간의 차이를 표현한 수식으로, 학습에 사용되는 오차값인 피드백 신호를 정의하는 함수이며, 훈련을 하는 동안에 최소화가 될 값을 뜻한다. 주어진 문제에 대한 성공지표라고 말한다. 로스에는 binary_crossentropy, categorical_crossentropy 등이 있다.

Metrics는 실제 화면상에 출력되는 값을 표현하는 것이다.

 

옵티마이저와 손실함수의 관계

신경망을 통해 예측된 값과 실제 레이블 값의 차이를 loss function을 사용해서 loss를 계산할 수 있으며, 계산된 loss를 옵티마이저를 사용하여 가중치 값을 업데이트한다.

Optimizer는 학습 진행을 결정하는 방식으로 가중치를 어느 정도로 얼만큼 조정할 것인지를 결정하는 방법이다.  Loss Function을 기반으로 네트워크가 어떻게 업데이트될건지 설정하고, 네트워크를 구성하는 알고리즘을 최적화 시킨다. 옵티마이저에는 Adam, RMSprop, SGD 등이 있다.

Loss Function은 예측값과 실제값간의 차이를 표현한 수식으로, 학습에 사용되는 오차값인 피드백 신호를 정의하는 함수이며, 훈련을 하는 동안에 최소화가 될 값을 뜻한다. 주어진 문제에 대한 성공지표라고 말한다. 로스에는 binary_crossentropy, categorical_crossentropy 등이 있다.

 

오차를 줄이는 방법

오차를 줄이려면 전달하는 신호의 세기를 조절해야하고, 그러려먼 각 노드를 잇는 가중치의 값을 하나하나 변경해야한다.  , 가중치의 값을 수정하는 것이다. 경사 하강법과 오차 역전파법이 있다.

경사하강법이란 기울기를 사용하여 가중치의 값을 변경하는 방법으로, 기울기를 보고 기울기가 줄어드는 쪽으로 가중치 값을 이동하는 것이다. 따라서 경사하강법의 핵심은 미분이며, 가중치를 어느 정도로 이동할 것인지 결정하는 방법이 옵티마이저를 사용하는 것 이다.

오차 역전파법(Back Propagation)은 경사하강법의 개념을 사용해서 여러 가중치를 차례로 변경해 나가는 방법으로, 뒤에서부터 앞으로 값을 수정해 나가는 것이다. , 마지막부터 처음까지 되돌아가면서 경사 하강법을 이용해 각각의 가중치의 값을 수정하는 방법이다.

 

오차역전파법 _지역 최솟값

적절한 step(학습률)값을 골라야 한다. 이 값이 너무 작으면 곡선을 따라 내려가는데 많은 반복이 필요하고 local minimum에 갇힐 수 있다. 반대로 step이 너무 크면 손실함수 곡선에서 완전히 다른 임의의 위치로 이동할 수 있다. 적절한 크기의 미니 배치를 사용하는게 좋다.

업데이트할 다음 가중치를 계산할 때, 현재 그래디언트 값만 보는게 아닌 이전 가중치를 여러가지 다른 방식으로 고려하는 옵티마이저가 있다. 여러 옵티마이저는 기울기가 크면 더 많이 이동하는 모멘텀 개념이 중요하고, SGD에 있는 2개의 문제점인 수렴 속도와 지역 최솟값을 해결할 수 있다.

 

k-fold cross validation (k-겹 교차검증)

K-fold 교차 검증 방식은 전체 데이터를 k개의 fold로 나누고, 각 데이터들을 훈련용데이터와 검증용데이터로 나누어서 검증하는 방법으로, K개의 모델을 각각 만들어서 K-1개의 분할 데이터로 훈련하고, 남은 분할에서 평가,검증하여 모델의 평균을 구하거나 최적의 모델을 찾을 수 있다.

 

가중치와 편향

가중치는 신경망에서 신호의 세기를 변경하는데 사용한다. 앞쪽 뉴런에서 전달된 신호의 값에 가중치 값을 곱하고 편향을 더해서 다음으로 전달한다. 가중치는 랜덤으로 서로 다른 값들이 저장되어 있고, 편향은 각 층에 하나의 값으로 존재함. 편향은 가중치를 거쳐 변환된 신호의 세기를 조절하여 모델의 성능을 높임.

 

활성화 함수

활성화 함수는 특정한 전기적 신호가 어떤 값 이상 전달되면 다음 뉴런에게 신호를 보내고, 이하이면 전달하지 않는 신경망의 역치 개념을 사용하여 신호를 조정하고, 이를 위한 방법이 활성화 함수이다. 여러 뉴런에서 들어온 신호의 세기를 특정한 값으로 조정하기 위해 사용된다. 활성화 함수에는 시그모이드, 렐루 함수 등이 있다.

 

시그모이드 함수, 렐루 함수, 소프트맥스 함수

시그모이드 함수란 로지스틱 함수를 변형한 함수로, 처음에 서서히 증가하다가 증가하는 양이 많아지고, 그러다 마지막에는 증가하는 양이 다시 줄어드는 S자 모양과  비슷한 모양의 함수이다. 보통 로지스틱 회귀분석이나 Binary classification의 마지막 레이어의 할성화함수로 사용된다. 뉴런에서 들어온 신호 세기가 0보다 클수록 1에 가까운 숫자로 바꿔주고 0보다 작을수록 0에 가까운 신호로 바꾸어준다. 단점으로는 출력값이 0에 가까워지면 신경망이 잘 학습하지 못하고, 입력값이 아무리 커도 1보다 큰 수로는 내보내지 않는다. 따라서 중간 레이어에 렐루함수를 같이 쓰면 효과적이다.

렐루함수는 입력값이 0보다 작으면 0으로 출력하고, 0이상이면 입력받는 값이 그대로 출력되는 함수이다.

시그모이드 함수는 역전파가 진행될수록 오차가 급격히 감소함으로, relu 함수를 사용하여

시그모이드 활성화함수를 사용해서 생겼던 Gradient Descent Problem을 해결한다.

소프트맥스 함수는 분류를 하는 신경망의 마지막 레이어인 출력층에서 주로 사용된다. 데이터를 정규화하기 위해 사용되며 모든 출력층의 값을 더했을 때 1이 되도록(one-hot-encoding) 값을 바꾸어 줄 수 있다. 하나의 레이블에 해당하는 값을 크게주고 나머지 레이블은 작게줌으로써 전체적으로 오차의 값이 줄어드는 효과도 있다. 손실함수(loss function)Cross-entropy와 주로 같이 사용한다.

 

시그모이드 함수 사용 이유

비선형 함수를 사용하면 층을 깊게 만드는 장점을 살릴 수 있다. 단순 선형함수를 사용하면 아무리 깊게 층을 쌓아도 마지막에 보면 하나의 선형 함수로 표현이 가능해서 의미가 없어진다. 시그모이드를 쓰면 비선형 함수이면서 분리된 부분이 없어서 층을 쌓는 장점을 살릴 수 있고, 미분하기 쉬워지며, 0~1사이의 값으로 정규화되기에 사용된다.

 

신경망에서 오버피팅을 줄이는 방법

1.훈련 데이터(training data)를 더 늘린다.

2.모델의 복잡도를 줄인다.

3.가중치 규제를 적용한다. 복잡한 모델을 간단하게 만드는 방법이 가중치 규제이다.

L1은 가중치들의 절대값 합계를 비용 함수에 추가하는 것이고, L2는 가중치들의 제곱합을 비용 함수에 추가하는 것이다. L1은 특정 가중치를 0으로 바꿀수 있어서 sparse한 형태가 될 수 있고, L2는 균일한 값들이 불균일한 값들보다 가중치 수정을 더 작게줌으로써, 특정값이 큰게 있으면 자를수 있는 효과가 있다. 보통 L2의 결과가 더 잘나오고 좋다.

4.드롭아웃을 추가한다. 학습과정에서 신경망의 일부를 사용하지 않는 방법으로, 비율을 0.5로 한다면 학습 과정마다 랜덤으로 50%의 뉴런을 사용하지 않는 다는 뜻이다. 신경망이 특정 뉴런에 너무 의존하는 것을 방지하고, 서로 다른 신경망들을 앙상블하여 사용하는 효과를 낸다.

 

Classification(분류)과 regression(회귀) 문제

Classification은 데이터가 어느 클래스에 속하는지 분류하는 것으로, 미리 정의되거나 가능성이 있는 클래스레이블 중에 하나를 예측하는 것이다.

Regression은 개별적인 레이블이 아닌 연속적인 값을 예측하는 것으로, 시계열 같은 연속성이 있는 데이터를 사용하는 문제이다.

Classification 문제는 보통 출력층에 softmax함수를 사용하여 여러 값중에 확률이 높은 값을 선택하거나, one-hot-encoding으로 데이터의 레이블을 분류하기 쉽게 바꾸는 기법을 사용하고, loss functioncross entropy를 사용한다.

 

지수이동평균

최근 값에는 높은 가중치를 주고, 이전 값에는 낮은 가중치를 주고 평균을 구하는 방법으로, 현재 최근 값을 더욱 중요시 하는 것이다. 시계열 데이터를 부드럽게 만드는 기법 중 하나로, 이전에 계산된 이동 평균에 factor을 곱하고 현재 포인트에 (1 – factor)을 곱해 합산하는 것이다.

def smooth_curve(points, factor=0.9):

  smoothed_points = []

  for point in points:

    if smoothed_points:

      previous = smoothed_points[-1]

      smoothed_points.append(previous * factor + point * (1 - factor))

    else:

      smoothed_points.append(point)

  return smoothed_points

 

 

원핫인코딩

하나의 값만 1로 나타내고 나머지 값들은 전부 0으로 표시하는 자연어 처리이며, 백터값으로 표현을 한다.

분류 문제에서 케라스 유틸도구의 to_categorical 함수를 사용하여 수치형 데이터를 범주형 데이터로 만들어주는 원핫인코딩을 할 수 있다.

범주형 데이터에 널리 사용되는 방식이라 범주형 인코딩이라 불리고, 데이터를 벡터로 변환하는 가장 일반적이고 기본적인 방법이다.

 

정규화

정규화란 가장 작은 데이터를 0으로, 가장 큰 데이터는 1로 바꾸고, 그 사이의 데이터 값들은 크기에 따라 0 1사이의 값으로 변환해주는 것.

 

손실함수 종류

바이너리크로스엔트로피(binary_crossentropy)는 신경망이 잘 예측을 하면 오차값을 0을주고, 예측하지 못했다면 오차값을 상당히 크게 주는 원리이다. 이진 분류할 때 많이 사용되며 보통 시그모이드 활성화함수를 같이 사용한다.

 

카테고리컬크로스엔트로피(categorical_crossentropy)는 여러 값 중 하나를 예측하는 모델에서 정답을 예측하면 오차값을 0으로, 정답에 가깝게 예측하면 오차값을 조금 주고, 정답과 멀게 예측하면 오차값을 많이주는 방법이다. 레이블 클래스가 2개 이상인 멀티클래스 분류에서 주로 사용된다. 원핫인코딩이 된 상태일 때 사용가능하다.

 

sparse_categorical_crossentropy는 범주형 교차 엔트로피와 동일하게 멀티 클래스 분류에서 주로 사용한다. Categorical_crossentropy와 다르게 원핫인코딩이 안되있는 정수 인코딩인 상태에서 수행 가능하다.

 

MSE(평균제곱오차)는 예측값이 실제값에서 얼마나 떨어져있는지 알아보는 방법으로, 실제값과 예측값의 오차를 제곱하여 부호를 없애고 얼마나 떨어져 있는지 명확하게 나타내는 것이다. 보통 회귀문제에서 사용된다.

MAE(평균절대오차)는 예측값과 실제값 사이 거리의 절댓값이다.

 

신경망 종류

일반적인 인공신경망(ANN)

합성곱신경망(CNN) Convolutional Neural Network : 시각 세포의 작동 원리를 본땀.

순환신경망(RNN) Recursive Neural Network : 재귀신경망. 가중치의 변화가 한 방향으로 가는 것이 아닌 다시 자기 자신에게 돌아오는 반복적으로 가중치가 수정되는 모습이다. 보통 연속 데이터에 대한 결과를 예측하거나 분류할 때 사용된다. 인공신경망보다 뛰어난 점은 전후 관계에 대한 패턴을 학습한 다는 것이다.  시간의 흐름, 연속된 관계등의 데이터를 사용하여 인공지능을 만들 때 사용되는 신경망이다.

 

fit 메소드

epochs : 훈련은 에포크(epoch)로 구성됩니다. 한 에포크는 전체 입력 데이터를 한번 순회하는 것입니다(작은 배치로 나누어 수행됩니다).

batch_size : numpy 데이터를 전달하면 모델은 데이터를 작은 배치로 나누고 훈련 과정에서 이 배치를 순회합니다. 이 정수 값은 배치의 크기를 지정합니다. 전체 샘플 개수가 배치 크기로 나누어 떨어지지 않으면 마지막 배치의 크기는 더 작을 수 있습니다.

validation_data(x_val, y_val) = 검증 데이터(validation data)를 사용합니다. 검증 데이터를 사용하면 각 에포크마다 검증 데이터의 정확도도 함께 출력되는데, 이 정확도는 훈련이 잘 되고 있는지를 보여줄 뿐이며 실제로 모델이 검증 데이터를 학습하지는 않습니다. 검증 데이터의 loss가 낮아지다가 높아지기 시작하면 이는 과적합(overfitting)의 신호입니다.

validation_split : validation_data 대신 사용할 수 있습니다. 검증 데이터를 사용하는 것은 동일하지만, 별도로 존재하는 검증 데이터를 주는 것이 아니라 X_train y_train에서 일정 비율을 분리하여 이를 검증 데이터로 사용합니다. 역시나 훈련 자체에는 반영되지 않고 훈련 과정을 지켜보기 위한 용도로 사용됩니다. 사용 예시 : validation_split=0.2

verbose : 훈련의 진행과정을 보여줍니다. 0일 경우 아무것도 출력하지 않고, 1일 경우 훈련의 진행도를 보여주는 진행 막대를 보여줍니다. 2일 경우 미니 배치마다 손실 정보를 출력합니다.

 

Z-Distribution 정규분포

평균이 0이고, 표준편차가 1인 분포를 Z-Distribution라고 한다. 여러 특성들이 있을 때 서로 객관적으로 비교하기위해 표준화를 구하는 것이다.

 

왜 인공지능이 뜨는 것인가?

빅데이터. 얽매여있지 않고 구조화되어 있지 않으며(비정형), (기가 · 테라 · 페타 · 엑사 · 제타 · 요타) 정확하지는 않지만 예측할 수 있으며, 인과관계를 설명할 수는 없지만 상관관계는 보여줄 수 있다빅데이터를 통해 통찰력을 얻기 위한 분석 도구가 요구됨

 

신경망의 특징

1. 패턴인식에 필요한 많은 양의 데이터를 병렬처리

2. 패턴인식과 같은 수학적 알고리즘의 적용이 곤란한 문제를 학습 방법에 의하여 효과적으로 해결

3. 패턴인식에 자주 발생하는 잡음이나 애매한 데이터를 효과적으로 처리

4. 학습과 기억을 통하여 패턴을 인식하는 동적인 시스템

5. 간단한 학습에 의해 개발이 가능해서 개발 기간이 단축

6. 학습시키는데 많은 시간이 필요하지만 실행 시에는 빠른결과를 얻을 수 있다

 

Backpropagation(BP) 신경망

지도학습(supervised learning) 패턴의 대표적인 신경망 모델으로, 오차 역전파(error back propagation)기법을 processing unit에 적용한 것이다. processing unit 간의 가중치를 수정함으로써 다음 학습 시 목표 값에 더욱 접근된 출력 값을갖게 한다. 예측값이 목표값과 유사하게 될 때까지 학습을 반복한다.

1단계 : 전방향 단계로, 입력층에서 입력을받아 출력층으로 출력하는 과정이며 예측값이 출력된다.

2단계 : 오차를 구하는 단계로, 예측값과 목표값의 차이를 계산한다.

3단계 : 오차를 이용하여 오차신호를 계산하고, 은닉층과 입력층에 역방향으로 돌아가면서 뉴런 간의 가중치를 조율한다.

 

텐서

텐서(tensor)0~ n 차원(, axis)까지의 데이터 클래스이다.

0차 텐서 : 스칼라(0차원)

1차 텐서: 벡터(1차원)

2차 텐서: 행렬(2차원)

3차원 이상: n차 텐서

 

bottleneck

병목현상으로, 얼마나 많은 데이터를 동시에 처리할 수 있는가에 대한 문제로, 한번에 처리해야하는 데이터의 양보다 안좋은 성능을 가지고있을 때 일어나는 문제이다. 이 문제를 해결하기 위해서 웬만하면 은닉층의 노드 수를 다음 레이어의 노드 수보다 크게 주는게 좋다.

 

 

 

728x90

'Artificial_Intelligence > etc' 카테고리의 다른 글

Confusion Matrix(혼동행렬) 구현  (0) 2022.04.16
How to use "Hugging Face"(허깅페이스) for NLP Task  (0) 2022.04.16
RNN, CNN  (1) 2021.06.12
Dataset 및 데이터전처리 기초  (0) 2021.03.19
[python] 정규분포  (0) 2021.01.27