본문 바로가기
지식공학/기계학습

딥러닝 기초

by Eric87 2021. 5. 4.
반응형

신경망이란?

신경망과 인간의 뇌의 관계는 밀접하지 않다. 다만 신경망의 복잡한 과정을 단순화해서 뇌세포의 프로세스로 비유하게 되면, 기계학습을 사람들에게 좀 더 직관적이고 효과적으로 전달 할 수 있기 때문에 비유를 한다. 오늘날 신경 과학자들조차도 뉴런이 무엇을 하는지 거의 모른다. 신경과학에서 특징짓는 것보다 하나의 뉴런은 훨씬 더 복작하고 알기 어렵다. 게다가 뉴런이 신경망처럼 역전파를 통해서 학습 하는지도 의문이다. 신경망이란 충분한 데이터가 주어졌을 때 입력(x)과 출력(y)을 매칭해주는 함수를 찾는 과정이라 말할 수 있다. 이 과정을 학습이라고 말을 하고 학습에는 지도 학습과 비지도 학습 등 여러가지가 있다. 지도 학습이란 정답이 주어져 있는 데이터를 사용해서 학습시키는 방법을 뜻한다. (이미지 분류를 위해 CNN 사용, 음성을 텍스트로 변환시키기 위해 RNN사용)

딥(deep)의 의미

딥러닝에서 딥은 영어 deep의 의미와 같이 깊다는 것이다. 여기서 깊다는 것의 의미는 학습을 위해 입력과 출력 사이에 여러 층을 배치하는데 이 층이 많아 깊다고 말한다. 깊은 모델일수록 더 많은 데이터가 필요하며 이는 곧 좋은 성능으로 나타난다. 딥런닝은 데이터 양이 많아지고 컴퓨터의 성능이 향상됨에 따라 많은 알고리즘이 개선되면서 강력한 도구로 급부상하고 있다.

학습 방법 

신경망에서 학습하는 방법은 정방향 전파(forward propagation)과 역방향 전파(backward propagation)이 있다. 신경망을 공부하는데 가장 쉬운 이진분류로 설명을 진행한다. 이진 분류는 그렇다/아니다 2개로 분류하는 것을 말한다. 그렇다이면 1로 표현하고 아니다이면 0으로 표현을 한다. 마치 컴퓨터와 같다. 이진분류를 하기위해 사용하는 알고리즘을 논리 회귀(logistic recursiveness)라고 한다. 

입력(X)과 출력($\hat{y}$), 실제값(y)이 존재하게 된다. 입력은 우리가 제시하는 데이터가 되고 학습을 거처 나오는 출력값은 정답을 예측하는 값이다. 이를 실제 정답(y)과 비교하여 그렇다/아니다를 구분한다. 더 자세히 이진 분류를 하기 위해 $\hat{y}$값은 y가 1일 확률을 의미하며 $0\leq \hat{y}\leq 1$ 사이 값을 가져야한다.

학습을 위해서 여러개의 입력을 사용하게 된다. 이를 통해 하나의 출력값을 생성하게 되는데 이때 모든 입력을 동일한 비중으로 더하게 되면 전혀 학습이 되지않는다. 따라서 각 입력에 가중치를 곱해서 더하게 된다.(weighted sum) 이 가중치를 알아내는 것을 기계학습이라고 말 할 수 있다. 따라서 다음과 같이 표현이 가능하다.

$$\hat{Y}=W^{T}X+b\qquad(1)$$

여기서 W는 기중치를 모아둔 집합이고 X는 입력값을 모아둔 집합을 의미한다. 뒤에 b는 편향(bias)인데 뒤에서 설명을 하겠다. 식(1)을 선형 회귀라고 말한다. 하지만 해당 값은 0과 1을 벗어날 수 있다. 따라서 계산을 한 뒤 특정 함수를 통해서 0과 1사이의 값만 가지도록 변환이 필요하다. 이 특정 함수를 활성 함수(activation function)라고 말한다. 활성 함수는 여러개가 존재하는데 이진분류에서 많이 사용하는 것은 시그모이드 함수이다.(sigmoid function)

$$sigmoid(z)=\frac{1}{1+e^{-z}}$$

지금까지 입력값이 어떻게 출력값으로 나타내는지 알아보았다. 우리의 목표는 실제값(y)에 가까운 예측값($\hat{y}$)을 구하는 것이다. 처음부터 실제값과 예측값이 같지 않을 것이고 어느정도 차이가 있을 것이다. 우리는 이 차이를 없애(0)야 한다. 이를 오차라고 하고 단순히 이 오차를 사용하는 것이 아니라 활성 함수처럼 오차를 가지고 약간의 변환을 한다. 이를 손실 함수라고 한다. 보통 손실함수는 오차 제곱의 평균(MSE: Mean Squar Error)로 표현을 하지만 이진분류에서는 손실 함수를 다음과 같이 표현을 한다.

$$L(\hat{y},y)=-ylog\hat{y}-(1-y)log(1-\hat{y})\qquad(2)$$

위 식은 이항분포에서 출발하는데 자세한 내용은 추후에 설명하기로 한다. 식(2)는 직관적으로 이해해 보자면 y가 0이면 앞의 항이 사라져 $-log(1-\hat{y})$가 0에 가까워지도록 $\hat{y}$는 0에 수렴하게 된다. 반대로 y가 1이면 $-log\hat{y}$가 0에 가까워지도록 $\hat{y}$는 1에 수렴하게 된다. 위 식(2)하나의 입력에 대한 오차를 계산하는 손실 함수이고 모든 입력에 대한 오차를 계산하는 함수를 비용 함수(Cost Function)이라고 한다. 따라서 비용 함수는 모든 입력에 대해 계산한 손실 함수의 평균 값으로 구할 수 있다.

$$J(\hat{y},y)=-\frac{1}{m}\sum_{i=1}^{m}(y^{i}log\hat{y}^{i}+(1-y^{i})log(1-\hat{y}^{i}))\qquad(3)$$

항상 기억해야 할 것은 우리는 실제값과 비슷한 예측값을 원한다는 것이다. 즉, 비용 함수의 값이 작아지도록 하는 가중치(w)를 찾는 것이 목표이다.

비슷한 예측값은 최적의 값이라고 말할 수 있다. 비용함수가 최저가 되는 최적점을 찾아내는 전략이 여러가지 존재한다. 대표적인 방법이 수학적으로 미분(기울기)를 활용한 경사하강법(Gradiant Decent)이다. 먼저 비용함수의 최소값을 모르기 때문에 임의의 가중치를 정해 비용 함수값을 구한다. 비용함수(J)를 가중치에 대해 미분을 하면 기울기를 구할 수 있고 그 기울기에 따라 일정 스텝씩 값을 업데이트 하면 최적의 값을 구할 수 있다.

$$w: w-\alpha \frac{dJ}{dw}$$

여기서 $\alpha$는 학습률이라 하고 얼마큼 스텝으로 나아갈 것인지 정한다. 

반응형

'지식공학 > 기계학습' 카테고리의 다른 글

The Gaussian Distribution  (0) 2021.07.20
Binary Variables  (0) 2021.07.20
Gradient Descent Optimization  (0) 2021.06.29
[딥러닝] 활성함수  (0) 2021.06.02
Generative Adversarial Network (GAN)  (0) 2021.05.27

댓글