수식이 보이지 않을 때는 페이지를 새로고침해주세요🫡
[DL기본] Neural Network #1에 이어서 활성화 함수에 대한 내용으로 포스팅을 시작하겠습니다.
🔻활성화 함수 activation function
🔸Vanishing Gradient problem
- 딥러닝 모델들은 가중치 벡터와 편향값을 업데이트할 때 역전파를 통해 미분값을 계산하기 때문에 활성화 함수가 미분가능해야 한다.
- 경사하강법을 통한 가중치 갱신 시, 미분값이 0에 수렴하면 더 이상 가중치 갱신을 진행하지 않기 때문에 딥러닝 모델은 학습을 중단하게 된다.
- 그렇다면 시그모이드 함수나 ReLU 함수처럼 미분값이 0이 되는 함수들은 이런 Vanishing Gradient 문제에 빠질 수 있다.
- 그러나 또 이런 기울기 소실 문제를 해결한다고 모두 Leaky ReLU 활성화 함수만 사용하지도 않는다. 속도 측면에서 ReLU가 더 빠르기 때문에 ReLU도 자주 사용된다.
결국 활성화 함수도 내가 해결해야 할 문제나 모델의 성능, 기울기 소실 등 여러 가지 변수들을 고려하여 결정해야 하는 것이다.
🔸출력층에서의 활성화 함수
- 항등 함수 identity function
- 입력값을 그대로 출력한다.
- 수식) \( y=x \)
- 회귀모델의 출력층에서 사용하는 활성화 함수로, 회귀문제는 출력값을 그대로 사용해야 하기 때문에 출력층에서 값을 변형하지 않는다.
- sigmoid 활성화 함수와 유사하게 출력값이 [0,1] 범위로 변형되어 확률과 같은 기능을 하게 된다.
- 주로 분류문제에서 사용하는 활성화 함수이다.
- 출력값의 범위가 [0,1]로 제한되고, 출력층의 모든 노드의 출력값을 더하면 1이 되기 때문에 확률로 해석할 수 있다.
- 수식) \[ y_k = \frac{exp(a_k)}{\displaystyle\sum^n_{i=1}exp(a_k)} \]
- \( a_i \) : 이전 뉴런(hidden layer)의 출력값(=활성화 함수의 입력값)
- \( n \) : output layer의 뉴런 개수
- \( k \) : \( 1\le k\le n \)
- \( \displaystyle\sum^n_{i=1}exp(a_k) \) : 모든 입력신호의 합
- 지수함수(exp)의 특징 : 입력값의 상대적인 크기에 따라 출력값의 변화가 두드러지게 나타난다. → 분류문제에서 n개의 레이블 class가 존재할 때, 하나의 뉴런의 출력값을 부각시켜 하나의 클래스를 강조하는 효과를 낸다.
+) 지수함수는 '단조증가함수'(a≥b일 때 f(a)≥f(b)인 함수)이므로 입력값들의 대소관계에 영향을 미치지 않는다.
그렇다면 굳이 소프트맥스 함수를 적용하지 않고 항등함수를 사용해도 출력층 뉴런들의 대소관계는 똑같다.
예를 들어 강아지와 고양이를 분류하는 문제를 풀 때 출력층은 2개의 뉴런을 갖는다. 소프트맥스 함수를 사용한다면 y1은 강아지일 확률 0.92, y2는 고양이일 확률 0.08을 나타낸다.
만약 항등함수를 적용했다면 어떤 출력값, 예를 들어 y1은 356 y2는 15라는 숫자가 나타날 것이다.
소프트맥스를 적용하든 말든 어차피 y1 뉴런의 값이 크므로 결과는 '강아지'라고 해석할 수 있다.
사실상 신경망으로 분류문제를 해결할 때 softmax를 적용하지 않아도 된다는 결론에 도달한다.
따라서 지수함수를 연산하는 비용을 절약하기 위해 softmax함수를 생략해도 무방하다. 일반적으로 학습 단계에서는 적용하고 추론(inference)단계에서는 생략하는 것이 좋다고 한다.
🔻손실함수 loss(cost) function
- 신경망은 가중치와 편향값을 조정하며 오류를 최소화해나간다. 오류를 계산하는 "기준"이 필요하고, 이를 계산하는 함수를 손실함수라고 한다.(보통 손실함수의 변수명은 loss_fn 또는 criterion으로 한다.)
🔸신경망에서 가중치를 갱신하는 지표로 손실"함수"를 사용하는 이유
- 기존에 머신러닝에서는 모델의 평가지표로 정확도(accuracy), 재현율(recall), 정밀도(precision) 등을 사용했엇다. 그러나 딥러닝에서는 이런 평가 지표를 사용할 수 없는데 미분불가능하기 때문이다.
- 정확도, 재현율, 정밀도와 같이 이산적인 값을 평가지표로 사용하면 매개변수를 어떤 방향으로 갱신해야 하는지 알 수 없다.
예를 들어 파라미터를 \( \theta \)라고 할 때, 모델의 정확도가 90%가 나왔다고 하자. 가중치와 편향 파라미터를 갱신하여 모델의 성능을 95%까지 향상시키고 싶은데, 우리가 알고 있는 정보로는 현재의 가중치에서 +5를 해야 하는지 -5를 해야 하는지 알 수 없다. 따라서 \( \theta \)+5의 경우와 \( \theta \)-5의 경우를 모두 실행한 후 다시 두 모델의 정확도를 비교하여 더 높은 쪽을 선택하는 비효율적인 방법으로 가중치를 갱신해야 한다.
- 미분가능한 손실함수를 평가지표로 사용함으로써 매개변수값의 변화에 따른 손실(오차)의 변화율을 계산할 수 있고, 손실함수의 미분값을 근거로 매개변수를 효율적으로 갱신 가능하다.
🔸여러 가지 손실함수
(아래 수식들에서 y는 모델의 예측값, t는 실제값을 의미한다.)
- 오차제곱합 Sum of Squared Error(SSE)
- 주로 회귀문제에서 사용한다.
- 오차를 제곱하여 오차에 더 민감하게 반응하도록 설계된 손실함수
- 수식)
\[ SSE=\displaystyle\sum_{k}(y_k-t_k)^2 \]
- 관련 손실함수들
\[ MSE = \frac{1}{n}\sum^n_{k=1}(y_k-t_k)^2 \]
\[ RMSE = \sqrt{\frac{1}{n}\sum^n_{k=1}(y_k-t_k)^2} \]
\[ MSLE = log\Big(\frac{1}{n}\sum^n_{k=1}(y_k-t_k)^2\Big) \]
\[ MAE = \frac{1}{n}\sum^n_{k=1}|y_k-t_k| \]
- 분류문제에서 사용하는 손실함수이다.
- 수식)
\[ CE=-\sum^n_{k=1}t_k\cdot log(y_k) \]
- 분류 문제에서 신경망의 출력값인 \( y_k \)와 실제값인 \( t_k \)는 확률의 의미를 갖고 그 형태도 확률과 유사하다. 따라서 위의 식을 확률표기를 사용하여 아래와 같이 표현할 수 있다.
\[ CE=-\sum^n_{k=1} P(x_k) logQ(x_k) = E_{x\sim p_{data}}[log Q(x)]=E_{x\sim p_{data}} [log(1-P(x))] \]
- 수식의 의미 : Q라는 확률분포 모델의 결과(=예측값 y)에 대해 P 모델(=실제값 t에 대한 확률분포)을 기대했을 때 우리가 얻게되는 정보량의 기댓값(=엔트로피).
+) Entrophy : 데이터를 표현하는 데 필요한 최소 자원량을 나타낸다. 해당 데이터가 발생할 확률이 높다면 엔트로피는 낮고, 해당 데이터를 예측하기 어렵다면 엔트로피는 높다.
위 수식에서 x라는 입력값을 전달했을 때 Q모델의 확률분포에 따른 결과값을 얻게 된다. 그런데 우리가 기대하고 있는 엔트로피 기댓값은 P 확률분포의 것이다. 따라서 Q모델이 P모델과 유사할수록 엔트로피는 작아지고, Q모델이 P모델과 상이할수록 엔트로피가 커짐을 알 수 있다.
더 구체적으로 알기 위해서는 정보이론(정보량과 엔트로피)에 대한 선행학습이 필요하다.
✔️정보량과 엔트로피
🔸정보량 Intrinsic Value
- 정의 : 데이터를 표현하는 데 필요한 최소 자원량 → 많이 발생하는 사건은 적은 자원으로 표현하는 것이 효율적이므로 사건의 발생확률이 높으면 정보량은 작다.
- 수식)
\[ IV(x) = -log_2(P(x))=log_2(\frac{1}{P(x)}) \]
🔸엔트로피 Entrophy
- 정의 : 정보량의 기댓값이다. 트리구조의 모델에서 데이터의 혼잡도 지표로 활용되기도 한다.
- 수식)
\[ H(X) = \sum^c_{i=1}P(x_i)\cdot IV(x_i) = E_{x\sim p_{data}}[IV(X)] \]
- c : 사건의 개수
- \( X \) : 사건 집합 ( \( x_i \in X \) )
더 구체적인 내용은 제 정보이론 노션 페이지를 참고하세요🫡
'데이터 > ML & DL' 카테고리의 다른 글
[강화학습] Monte Carlo Method (0) | 2024.03.20 |
---|---|
[강화학습] Markov Chain (Markov Decision Process) (0) | 2024.03.18 |
[DL기본] Neural Network #1 (2) | 2024.01.16 |
[DL기본] 퍼셉트론 Perceptron & MLP (0) | 2024.01.09 |
[패스트캠퍼스] 파이썬을 활용한 데이터 전처리 Level UP #1 Python (1) | 2023.12.20 |