항등함수와 Softmax 함수

 

 

항등함수와 Softmax함수는 출력층에서 사용하는 활성화 함수로, 항등함수 (identity function)는 입력을 그대로 출력한다.

그렇다면 위의 그림에서 항등 함수 옆에 있는 Softmax 함수는 무엇일까? Softmax 함수는 그림에서 보다시피 모든 입력 신호로부터 영향을 받는다.

 

Softmax 함수 식

 

Softmax 함수의 분자는 입력 신호 a_k의 지수함수, 분모는 모든 입력 신호의 지수 함수의 합으로 구성된다.

이렇게 모든 입력 신호로부터 영향을 받는 이유는 Softmax는 확률적 해석이 가능하게 하는 출력층의 활성화 함수로 사용되기 때문이다. 이와 같은 특징 때문에 항등함수는 회귀에서 주로 사용하고, Softmax 함수는 분류에 주로 사용한다.

 

 

 

 

 


 

 

 

Softmax 함수

오버플로우 문제

Softmax는 분류 문제를 풀 때 값을 확률로 변환하기 위해 사용하는 함수로, 신경망을 학습할 때에는 Softmax를 사용하지만 추론(순전파), 즉 실제 test data에 모델을 적용할 때는 Softmax 함수를 생략하는 것이 일반적이다. Softmax 함수는 지수(e) 함수를 사용하기 때문에 값이 기하급수적으로 커져 컴퓨터에서 inf, 무한대로 인식하기가 쉽다. 따라서 이러한 큰 값들끼리 나눗셈을 하면 수치가 불안정해지는 오버플로우 문제가 발생한다. 따라서 위의 Softmax 함수 식을 그대로 프로그래밍하면 오버플로우가 발생할 수 있으므로 우리는 위의 식을 개선할 필요가 있다.

 

 

개선한 Softmax 함수 식

 

위의 식이 개선된 Softmax 함수 식이다. 이 수식을 쉽게 말하자면 임의의 숫자 C를 분모 분자에 모두 곱하여 기하급수적으로 커지는 지수함수의 값을 작게 만들어서 오버플로우를 방지한다는 뜻이다. 이 때 임의의 숫자 C'는 입력신호(a_k)의 최대값을 음수로 변환한 값이다.

 

즉, 예를 들어 입력신호 a_k가 1000 800 500 이렇게 3개가 있다면 C' 은 -1000 이고, 위의 개선된 Softmax 함수 수식에 a_k+C'을 대입하면 0 -200 -500이 된다.

이 값들은 지수함수의 성질에 의해 매우 작은 숫자로 반환되어 오버플로우가 발생하지 않는다.

 

 

특징

Softmax 함수의 출력은 0에서 1 사이의 실수이며, Softmax 함수의 출력의 총합은 1이다. 이러한 성질 때문에 Softmax 함수의 출력을 '확률'로 해석할 수 있다. 또한 Softmax는 분류 문제에 주로 쓰이므로 분류 개수만큼의 출력층의 뉴런수를 잘 설정해야한다. 예를 들어 고양이, 개로 분류하고자 하면 출력층의 뉴런수를 2개로 설정하면 되고 숫자를 0부터 9까지 분류하고자 하면 출력층의 뉴런수를 10개로 설정하면 된다.

 

 

 

 

 


 

 

 

 

 

출처 : https://wikidocs.net/35476

 

위의 그림은 Softmax 함수를 가장 직관적으로 이해할 수 있는 그림이다. 출처의 링크를 참고하길 바란다.

 

출처 : https://wikidocs.net/35476

 

앞서 기술했다시피, Softmax 함수에 의해 출력된 값들은 0.26 0.70 0.04처럼 0에서 1사이의 값이며 총합이 1이므로 출력값을 확률로 받아들일 수 있다. 신경망을 학습할 때 Softmax의 예측값과 실제값의 오차를 계산하여 이를 통해 가중치와 편향을 업데이트하며(역전파) 신경망을 만든다. 위의 그림의 실제값은 0 1 0 의 형태인 원-핫 인코딩 형태로 원-핫 인코딩이란 정답을 뜻하는 원소만 1이고 나머지는 모두 0인 배열을 의미한다.

 

 

 

 

 

 

다층퍼셉트론

다층 퍼셉트론

 

위의 이미지를 보자. 앞에서 설명했던 기본적인 퍼셉트론이 여러개의 층으로 이루어지는 것을 다층 퍼셉트론이라고 한다. Input은 입력층, Hidden은 은닉층, Output은 출력층으로 표현한다. 여기서 은닉층(Hidden)이 여러개를 갖게 되는 것을 다층 퍼셉트론이라고 할 수 있다.

 

 

 

model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

 

위의 코드는 다층퍼셉트론을 만드는 기본적인 코드이다. 그런데 저 코드에서 activation에 있는 relu와 sigmoid는 도대체 뭘까? 우리는 이것들을 활성화 함수라고 한다.

 

 

 

 

 

활성화 함수

 

위의 그림은 신경망을 나타내는 그림이다. 여기서 활성화 함수에 해당하는 것은 계단함수이다. 계단함수라는 것은 특정 임계값을 넘기면 활성화되는, 즉 0과 1로 출력되는 함수를 의미한다.

 

더보기
import matplotlib.pylab as plt
import numpy as np

def step_function(x) :
    result = x > 0
    return result.astype(np.int)

x = np.arange(-5,5,0.1)
y = step_function(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()

파이썬으로 구현한 계단함수

 

하지만 단층퍼셉트론이 아니라 다층퍼셉트론 같은 경우는 활성화 함수로 계단함수를 쓸 수 있을까? 어떤 기준으로 0과 1을 나눠야 하는걸까? 그것에 대한 해답이 sigmoid와 relu이다.

 

 

 

활성화 함수

 

 

 

 

 


 

 

 

 

 

  Sigmoid

더보기
import matplotlib.pylab as plt
import numpy as np

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

x = np.array([-1,1,2])
sigmoid(x)

x = np.arange(-5,5,0.1)
y = sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()

파이썬으로 구현한 Sigmoid함수

 

위의 그래프에 대해서는 내가 이전에 맥락을 풀어 설명했으니 참고하길 바란다. 하지만 귀찮은 사람들을 위해 간략하게 말하자면 그래프 그대로 데이터를 0과 1로 분류한다는 뜻이다. 이것이 Sigmoid 함수이다. 앞서 말했지만 퍼셉트론은 인간의 뉴런을 모델로 했기 때문에 다층 퍼셉트론같은 경우 데이터를 0과 1로 구분하여 역치 이상(1)일 경우 데이터를 다음 퍼셉트론으로 넘기는 방식으로 운영되어진다. 그런데 이쯤 되면 궁금증이 생긴다. 계단함수나 Sigmoid나 둘 다 0 또는 1 혹은 0~1 사이의 값으로 데이터를 변환해준다는 것이다. 그런데 왜 단층퍼셉트론에는 계단함수를 쓰고 다층퍼셉트론에서는 Sigmoid 또는 ReLU를 사용하는 것일까?

 

다층 퍼셉트론은 여러개의 은닉층을 보유하고 앞에서 가공되어진 데이터들이 다음 은닉층으로 넘어가는 구조이다. 계단함수를 다층 퍼셉트론에서 사용한다면 우리는 이전 데이터를 오직 0과 1, 즉 극단적인 형태로밖에 받을 수 없고 이런식이라면 다층 퍼셉트론을 만들어 좋은 모델을 만들 수 없게 된다. 하지만 Sigmoid 함수같은 경우는 값을 0~1 사이로 만들어주기 때문에 가공된 데이터를 다음 은닉층으로 보내줘도 극단적인 형태가 아니고 신경망이 데이터를 섬세하게 분류할 수 있도록 도와준다.

 

좋다. 계단함수보다 Sigmoid를 사용하는 이유를 이제는 충분히 이해했다. 그런데 ReLU는 또 왜 필요한걸까?

 

 

ReLU

더보기
import matplotlib.pylab as plt
import numpy as np

def relu(x) :
    return np.maximum(0,x)

x = np.arange(-5,5,0.1)
y = relu(x)

plt.plot(x,y)
plt.ylim(-0.5,5.5,0.1)
plt.show()

파이썬으로 구현한 ReLU함수

 

ReLU함수는 Sigmoid 단점을 해결하기 위해 나왔다. Sigmoid 함수의 단점은 0과 1사이의 데이터로 이루어져 있어 역전파를 할수록, 즉 층이 깊어질수록 활성화 값들이 0과 1에 치우쳐져 있어 미분값이 0에 가까워진다는 것이다. 이것을 Vanishing Gradient Problem(기울기 값이 사라지는 문제)이라고 한다. 즉, 전파가 역전파될 기울기 소실로 인해서 앞층까지 전파가 안된다는 이야기다. 따라서 이와 같은 문제점을 해결하고자 ReLU 함수를 사용하게 된 것이다.

 

ReLU는 0보다 작은 값에 대해서는 0을 반환하고, 0보다 큰 값에 대해서는 그 값을 그대로 반환하여 층이 깊어져도 0으로 수렴하는 오류를 범하지 않게 된다.

 

 

더 자세한 내용은 블로그를 참고하길 바란다.

 

 

+

 

 

Leaky ReLU

더보기
def leaky_relu(x) :
    return np.maximum(0.01*x,x)

x = np.arange(-20,5,0.1)
y = leaky_relu(x)

plt.plot(x,y)
plt.grid()
plt.ylim(-0.5,5.5,0.1)
plt.show()

 

파이썬으로 구현한 Leaky ReLU

 

ReLU와 동일하나 x가 음수일때 기울기(gradient)가 0.01이다.

 

 

ELU (Exponential Linear Units)

ELU 식

ELU 또한 ReLU와 비슷하나 기울기가 살아남는다는 특징이 있다.

 

 

 

'인공지능 > 인공지능 이론' 카테고리의 다른 글

16. 배치(Batch), 미니배치 학습, 에폭(Epoch), SGD  (3) 2020.08.04
15. 항등함수와 Softmax 함수  (2) 2020.08.03
13. Perceptron (퍼셉트론)  (0) 2019.09.14
12. Clustering  (0) 2019.09.13
11. 차원의 저주 / PCA  (0) 2019.09.13

 

 

 

 

Perceptron (퍼셉트론)

 

퍼셉트론은 딥러닝에서 사용된다. 이것은 인간의 뉴런을 본 떠 만들었다. 퍼셉트론은 다수의 신호(Input)를 입력받아서 하나의 신호(Output)를 출력한다. 이는 뉴런이 전기신호를 내보내 정보를 전달하는 것과 비슷하게 동작한다. 퍼셉트론의 Weight(가중치)는 뉴런끼리 서로의 신호를 전달하는 것과 같은 역할을 한다.

 

 

 

 

Weight(가중치)는 각각의 입력신호에 부여되어 입력신호와의 계산을 하고 신호의 총합이 정해진 임계값(θ; theta,세타)을 넘었을 때 1을 출력한다. (이를 뉴련의 활성화activation 으로도 표현) 넘지 못하면 0 또는 -1을 출력한다. 결론적으로 우리는 딥러닝을 통해 Weight(가중치)의 값을 조정함으로서 원하는 모델을 만들어내고자 한다.

 

+) 추가적으로 편향(Bias)에 대해 설명하자면 편향은 학습 데이터가 가중치와 계산되어 넘어야 하는 임계점으로, 이 값이 높으면 높을수록 분류의 기준이 엄격하고 낮을수록 한계점이 낮아져 데이터의 허용 범위가 넓어진다. Bias가 높을수록 모델이 간단해지는 경향이 있고 (변수가 적고 일반화됨) 과소적합(Underfitting : 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못하는 현상)이 발생할 수 있다. 반대로 편향이 낮을수록 모델이 복잡해지고 오버피팅(Overfitting)이 발생할 수 있으며 필요없는 노이즈가 포함될 가능성이 높아진다.

 

Bias 값이 클 경우 모델이 간단해지는 경향
Underfitting 발생
Bias 값이 작을 경우 모델이 복잡해지는 경향
Overfitting 발생

 

편향에 대한 이러한 내용은 여기를 참고하면 좋은데, 이러한 내용은 편향과 분산의 트레이드오프 관계라고 한다.

(근데 이 트레이드오프가 머신러닝, 특히 회귀 쪽의 개념이기 때문에 이 트레이드오프가 신경망에서도 해당되는지에 대해서는 사실 정확하게 모르겠다... 어차피 신경망의 편향은 학습을 통해 자체적으로 갱신되는 파라미터이기 때문에 노란색 밑줄 정도로만 이해해도 충분하다고 생각한다. 그럼 왜 쓴건데)

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

24.07.06 ChatGPT 내용 추가

과적합(overfitting)은 모델이 학습 데이터에 너무 잘 맞아서, 새로운 데이터(테스트 데이터)에 대해서는 성능이 떨어지는 현상을 말합니다.

모델이 학습 데이터의 노이즈까지 학습해버리면, 일반화(generalization) 능력이 떨어집니다.

 

편향과 분산

  1. 편향 (Bias):
    • 모델이 실제 데이터의 패턴을 단순화해서 나타내는 정도를 의미합니다.
    • 높은 편향: 모델이 지나치게 단순해서 데이터의 복잡한 패턴을 잘 잡아내지 못하는 경우.
    • 예: 선형 회귀 모델이 비선형 데이터에 적합하려 할 때.
  2. 분산 (Variance):
    • 모델이 학습 데이터의 변동에 얼마나 민감하게 반응하는지를 나타냅니다.
    • 높은 분산: 모델이 학습 데이터의 작은 변동에도 지나치게 민감하게 반응하여 과적합되는 경우.
    • 예: 복잡한 다항 회귀 모델이 학습 데이터에 지나치게 잘 맞추는 경우.

 

편향, 분산, 과적합의 상관관계 표

낮은 분산 적절한 모델 미적합 (Underfitting)
높은 분산 과적합 (Overfitting) 적절한 모델

 

  • 낮은 편향 - 낮은 분산: 이상적인 상황으로, 모델이 학습 데이터와 테스트 데이터 모두에서 좋은 성능을 보입니다.
  • 낮은 편향 - 높은 분산: 과적합(overfitting)이 발생하는 상황으로, 모델이 학습 데이터에 너무 잘 맞춰져서 테스트 데이터에서 성능이 떨어집니다.
  • 높은 편향 - 낮은 분산: 미적합(underfitting)이 발생하는 상황으로, 모델이 너무 단순해서 학습 데이터와 테스트 데이터 모두에서 성능이 낮습니다.
  • 높은 편향 - 높은 분산: 이는 드물지만, 모델이 복잡하면서도 데이터의 패턴을 잘 학습하지 못하는 경우입니다. 이 경우 모델이 학습 데이터와 테스트 데이터 모두에서 성능이 낮습니다.

 

예시

  1. 선형 회귀 (높은 편향, 낮은 분산):
    • 선형 회귀 모델은 비선형 데이터에서 높은 편향으로 인해 패턴을 제대로 잡아내지 못합니다. 그러나 분산은 낮아서 데이터 변동에 민감하게 반응하지 않습니다.
  2. 복잡한 다항 회귀 (낮은 편향, 높은 분산):
    • 복잡한 다항 회귀 모델은 낮은 편향으로 인해 데이터의 복잡한 패턴을 잘 잡아내지만, 높은 분산으로 인해 과적합이 발생할 수 있습니다.

 

요약

  • 편향 (Bias): 모델이 단순해서 데이터의 패턴을 잘 잡아내지 못하는 경우.
  • 분산 (Variance): 모델이 학습 데이터의 변동에 민감하게 반응하여 과적합되는 경우.
  • 과적합 (Overfitting): 모델이 학습 데이터에 너무 잘 맞아서 테스트 데이터에서 성능이 떨어지는 현상.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

퍼셉트론은 AND, OR , NAND, XOR 게이트 등으로 구성되어있다. 그냥 디지털논리회로와 비슷하다고 보면 되겠다. 입력값에 따라 원하는 출력값을 만들어내기 위해 이런 저런 단순한 게이트들을 이용하여 원하는 결과를 도출해낸다. 하지만 단층 퍼셉트론은 원하는 결과를 모두 도출해낼 수는 없다. 예를 들어 내가 0부터 9까지 차례대로 나타내는 프로그램을 만든다고 가정하자. 딱 하나의 게이트로는 절대 이런 프로그램을 만들어낼 수 없다. 하지만 여러 개의 게이트를 사용할 수 있다면 어떻게될까? 당연히 가능할 것이다. 이렇게 단층 퍼셉트론으로 불가능한 것을 하기 위해 우리는 다층 퍼셉트론을 사용한다.

 

단층 퍼셉트론을 쉽게 이해할 수 있는 예제가 있는 블로그를 남겨두겠다. 다들 참고하길 바란다.

'인공지능 > 인공지능 이론' 카테고리의 다른 글

15. 항등함수와 Softmax 함수  (2) 2020.08.03
14. 다층퍼셉트론 / Sigmoid / ReLU  (0) 2020.07.01
12. Clustering  (0) 2019.09.13
11. 차원의 저주 / PCA  (0) 2019.09.13
10. ROC Curve  (0) 2019.09.12

 

 

 

 

Clustering (군집화)

 

앞서도 설명했지만 까먹었을까봐 다시 한 번 언급하겠다. Clustering과 Classification(분류)은 굉장히 비슷한 개념이다. 하지만 Clustering은 비지도학습(Unsupervised)으로, 정답이 없는 데이터들을 비슷한 것 끼리 묶을 때 사용한다. 그와 반대로 Classification(분류)은 정답이 있는 데이터들을 사용하므로 지도학습(Supervised)이다.

 

클러스터링은 (1) 군집 간 분산(inter-cluster variance) 최대화 (2) 군집 내 분산(inner-cluster variance) 최소화 를 목표로 둔다.

 


 

 

어떻게 해야 잘 군집화했다고 소문이 날까? 위의 그림처럼 잘 구분되어 있는 데이터들같은 경우는 군집화하기가 쉬울것이다. 하지만 아래와 같은 경우는 어떨까?

 

데이터를 몇 개로 군집화시켜야할까?

 

위의 그림처럼 우리는 데이터들을 2개로도, 6개로도 혹은 그 이상으로 군집화할 수 있다. 왜냐하면 정답이 없기 때문이다. 하지만 군집화 개수에 따라 우리의 모델은 천차만별로 달라질 수 있다. 깔끔하고 정확하게 군집화하기 위해서는 어떻게 해야할까? 이러한 고민을 해결하기 위해 우리는 군집 타당성 지표를 생각한다. 간단하게 설명하자면 각 데이터 간의 거리를 계산하여 군집화하는 것을 의미한다. 이에 대해 자세한 내용은 블로그를 참고하기를 바란다.

 

 

 

 

 

- K-means

 

K-means 방법

 

K-means의 K는 클러스터 수를 의미한다. 위의 예는 K가 2인 경우이다. 군집의 무게중심(빨간색 점)을 랜덤으로 초기화한다. 그 후 모든 점들(파란색 점)의 가장 가까운 무게중심을 기준으로 클러스터링한다. (E스텝) 그리고 클러스터의 무게중심을 업데이트한다. (M스텝)

이렇게 E스텝과 M스텝을 반복하며 최종적으로 결과가 바뀌지 않거나(=해가 수렴), 사용자가 정한 반복수를 채우게 되면 학습을 끝내는 것을 K-means라고 한다.

 

하지만 K-means는 초기값 위치에 따라 원하는 결과가 나오지 않을 수 있고  클러스터의 밀도나 크기가 다를 경우 원하는 결과가 나오지 않을 수 있으며 데이터의 분포가 특이한 경우에도 잘 적용되지 않는다. 이에 대한 시각적인 부분은 블로그를 참고하기를 바란다.

 

 

 

+ KNN (K-Nearest Neighbors) : KNN은 Classification이다.

 

KNN은 새로운 데이터가 주어졌을 때 기존 데이터 가운데 가장 가까운 K개 이웃의 정보로 새로운 데이터를 예측하는 방법론으로 지도학습(Supervised)이다. 레이지(Lazy)모델이라고도 불리는데 딱히 학습할만한 것이 없기 때문이다. KNN에 대해 궁금하다면 더 자세히 설명한 블로그를 참고하기를 바란다.

 

K가 1이면 오렌지색, K가 3라면 녹색으로 분류하게 될 것이다. (+ K는 홀수개여야함)

 

+) K-means와 KNN의 공통점과 차이점

  KNN K-means
공통점 데이터를 비슷한 집단으로 묶는 방법
차이점 지도학습 (분류) 비지도학습 (군집화)

 

 

- GMM (Gaussian Mixture Model)

 

GMM은 전체 데이터의 확률분포가 여러개의 정규분포의 조합으로 이루어져 있다고 가정하고 각 분포에 속할 확률이 높은 데이터끼리 클러스터링 하는 방법이다. GMM은 K-means등의 클러스터링 알고리즘으로 잘 묶을수 없었던 아래 데이터에서도 잘 작동한다. 자세한 내용은 블로그를 참고하길 바란다.

 

 

 

- Hierarchical Clustering (계층적 군집화)

 

Hierarchical Clustering은 계층적 트리 모형을 이용해 개별 개체들을 순차적, 계층적으로 유사한 개체 내지 그룹과 통합하여 군집화를 수행하는 알고리즘이다. Hierarchical Clustering은 클러스터의 수를 사전에 정하지 않아도 학습 수행가능하다. 이에 대해 자세한 내용은 블로그를 참고하길 바란다.

 

 

 

 


 

 

 

 

정리

 

 

 

'인공지능 > 인공지능 이론' 카테고리의 다른 글

14. 다층퍼셉트론 / Sigmoid / ReLU  (0) 2020.07.01
13. Perceptron (퍼셉트론)  (0) 2019.09.14
11. 차원의 저주 / PCA  (0) 2019.09.13
10. ROC Curve  (0) 2019.09.12
9. Classification (분류)  (0) 2019.09.11

 

 

 

Curse Of Dimensionality (차원의 저주)

 

우리는 데이터가 많으면 많을수록 더 좋은 학습 모델을 만들 수 있다고 얘기했다. 반대로 데이터가 적을 경우, 그 데이터를 늘리기 위해 여러가지 방법들에 대해서도 이야기했다. 하지만 데이터가 적음에도 불구하고 용량이 큰 경우에 대해서는 이야기하지 않았다. 지금부터 그러한 경우에 대해서 얘기해보고자 한다. 데이터가 적은데 용량이 크다니 이게 무슨 어불성설인가! 이 말은 즉슨 데이터량은 적지만 각각의 데이터에 할당된 정보량, 즉 차원(Dimension)이 많은 경우를 뜻한다. 쉽게 이해하기 어려우니 예를 들자면 대표적으로 이미지를 들 수 있겠다. 우리가 다루는 이미지는 대부분 픽셀로 이루어져있다. 픽셀이 많을수록 고해상도이다. 하지만 이미지는 단 하나이다. 이런 경우가 차원이 많은 경우라고 볼 수 있다. 데이터(그림)는 하나이지만, 그 안에 있는 차원(픽셀)이 많은 경우 우리는 학습을 하는데 어려움을 겪게 되고 많은 데이터를 필요로 한다. 이러한 것을 Curse Of Dimensionality(차원의 저주)라고 한다.

 

차원이 커질수록 필요한 데이터도 많아진다.

 

 

이러한 경우는 우리가 여태까지 공부해왔던 것처럼 직관이 성립하지 않으며 차원이 적으면 데이터들이 가깝게 뭉쳐있지만 차원이 크면 데이터들간의 거리가 커지면서 전체 공간에서 데이터가 차지하는 공간이 적어진다. 데이터가 차지하는 공간이 적어진다는 것은 새롭게 예측한 데이터도 훈련에 사용한 데이터와 멀리 떨어져 있을 가능성이 높다는 것을 뜻하고 예측모델을 만들기 위해 훨씬 더 많은 작업을 해야하지만 저차원보다 예측 결과가 좋지 못할 가능성이 높아진다.

 

 

차원이 커질수록 데이터가 차지하는 공간이 적어진다.

 

 

우리는 어떻게 차원의 저주에서 벗어날 수 있을까? 우선 첫째로 데이터의 양을 늘리는 방법이 있겠다. 하지만 데이터의 양을 늘리는 것도 어느정도의 한계가 존재한다. 그렇다면 어떻게 해야할까? 그 방법으로 바로 차원 축소가 있다.

 

 

 

 


 

 

 

 

Dimensionality Reduction (차원 축소)

 

차원 축소는 말 그대로 차원 축소이다. 어떻게 차원 축소가 차원의 저주에서 벗어날 수 있는걸까? 당연스럽게 느껴지지만 정확한 이유에 대해서는 잘 모르겠다. 이에 대한 이해를 돕기 위해 우리는 다양한 동물 중 고양이에 대해 분류하는 모델을 만드려고 한다고 가정해보자. 우리가 학습을 위해 수집한 데이터들은 다양한 픽셀(차원)의 고양이 이미지로 구성되어 있을 것이다. 또, 고양이는 먼치킨, 코숏, 아메리칸 숏헤어, 샴 등 다양한 종류의 고양이가 존재할 것이다. 이런 다양한 이미지의 전체 픽셀(차원)을 고려하여 학습하는 것은 굉장히 까다롭고 어려울 것이다. 하지만 자세히 보면 고양이를 특정 짓는 것은 일정하다. 고양이의 눈, 코, 입이 가장 대표적인 고양이의 특징일 것이다. 또한 이러한 고양이의 특징을 파악할 수 있는 픽셀(차원) 또한 한정되어있다. 이러한 경우 우리는 일정 픽셀(차원)에 대해서만 학습해도 충분히 우리가 원하는 모델을 만들어 낼 수 있다. 이러한 경우처럼 전체 차원인 관찰 공간(Observation Space)이 아닌 유의미한 특정 차원인 잠재 공간(Latent Space)에 대해서만 학습하여 원하는 모델을 만들어내기 위해 차원 축소를 사용한다.

 

 

- PCA (주성분 분석)

 

 

주성분 분석은 말 그대로 전체 차원에서 가장 주요한 성분을 순서대로 추출하는 기법을 말한다. 여러 변수의 값을 합쳐서 그 보다 적은 수의 주요 성분을 새로운 변수로 하여 데이터를 표현하기 때문에 차원을 축소할 때 사용할 수 있는 기법이다. PCA에 대해 친절하고 자세히 설명해주는 유튜브 영상을 첨부하겠다. 또 이 유튜브 영상에 대해 자세히 설명해주는 블로그 또한 첨부하겠다.

 

https://www.youtube.com/watch?v=FgakZw6K1QQ

 

 


 

 

 

PCA 방법

 

가장 폭 넓은, 즉 분산이 가장 크게 되는 축은 데이터를 가장 폭 넓게 설명할 수 있다. 따라서 분산이 가장 큰 축을 제 1주성분이라고 한다. 이처럼 분산의 정도에 따라 차등적으로 주성분을 만들어나가는데, 몇까지의 주성분을 사용하는지에 대해서는 맨 위의 PCA를 누르면 참고할 수 있는 블로그를 참고하길 바란다.

 

 

 

 

'인공지능 > 인공지능 이론' 카테고리의 다른 글

13. Perceptron (퍼셉트론)  (0) 2019.09.14
12. Clustering  (0) 2019.09.13
10. ROC Curve  (0) 2019.09.12
9. Classification (분류)  (0) 2019.09.11
8. Regression (회귀)  (0) 2019.09.08

+ Recent posts