[딥러닝]DeepLearing with tensolflow

Source: Deep Learning on Medium

[딥러닝]DeepLearing with tensolflow

(주) Marker 인턴 김채운입니다.
* https://www.edwith.org/의 [부스트코스] 텐서플로우로 시작하는 딥러닝 기초를 수강하며 이해한 내용입니다.

  1. 강의환경세팅

강의에서 제공하는 코드(jupyter notebook)를 로컬에서도 쉽게 이용 할 수 있게 초입부의 Docker image를 제공합니다. 이미지에는 tensorflow,matplotlib 등 코드 실행에 필요한 패키지가 담겨있어 쉽게 실습 가능 합니다.

1–1. Docker Download

  • Windows 10 Pro(64bit) — Docker for Windows
    www.docker.com 에서 Docker for window를 다운받습니다.
  • Windows 7,8,10(64bit) — Docker Toolbox
    chrome 검색창에 docker toolbox 입력 후 다운받습니다.
    하지만 강의에서는 docker 홈페이지의 예전 버전이기 때문에 현재 홈페이지 UI와 다릅니다.
    따라서 https://github.com/docker/toolbox/releases 로 들어가서 아래 사진과 같은 exe 파일을 다운 받습니다.
  • Mac Os (10.10이상) — Docker for Mac
    www.docker.com로 이동 후 Get Started 버튼을 클릭하여 이동합니다.
    Download for mac 파일을 받습니다 ( 로그인이 필요한 과정입니다.)
    다운로드가 완료되면 어플리케이션 폴더에 옮겨 주시면 됩니다.
  • Ubuntu — Use terminal
    Ubuntu는 terminal 창에서 아래 문장을 입력합니다.
    curl -fsSl https://get.docker.com > docker.sh
    sudo sh docker.sh

Docker를 다운 받으셨다면 “docker run hello-world” 를 입력시 hello from docker! 가 뜨셨다면 성공입니다.

Part-1 Basic Machine Learning

  1. Simple Linear Regression
    선형 회귀 즉, 주어진 Data를 가장 잘 대변하는 직선의 방정식을 구하여 추후의 Data의 결과를 예측하는 것입니다.
    여기서 직선의 방정식을 Hypothesis (가설함수)라고 하며,
    H(x) = Wx + b 의 형식을 띄게됩니다.
    x의 기울기인 W는 모델의 weight 이고, b 는 bias 입니다.
    Hypothesis를 이용해 추 후의 Input data의 결과를 예측하기 위해서는 모델의 가설함수(직선의 방정식)와 실제 데이터의 차이가 가장 작은 모델이 필요합니다. 이 차이를 우리는 Cost 라고 하며,
    H(x)-y 의 형식을 띄게 됩니다.
    Cost function은 아래와 같습니다.

결국 우리는 Cost함수가 가장 최소화되는 우리의 Hypothesis를 구하는것이 목적입니다.

Gradient descent
경사 하강법은 cost를 최소화하는 W,b를 찾는 알고리즘입니다.
(0,0) 또는 랜덤한 값을 시작점으로 잡고, W와 b 값을 cost가 줄어들수 있는 방향으로 지속적으로 줄여 주는 것입니다. 업데이트를 하는 과정을 반복해서 cost가 최소점에 도달했다고 판단되었을 때까지 반복하는 방법이 Gradient descent 입니다.

이 과정에서 Gradient 즉 미분을 필요로 하기 때문에 Cost function을 재정의 합니다.

왜냐하면, cost function을 미분 했을 시에 2 지수가 앞으로 나오면서 약분되기 때문에 간략한 식이 되게 하기 위함입니다.

Gradient descent 기법을 반복해 줄여가는 과정을 식으로 표한하면 다음과 같습니다.

이 식에서 알파 값은 Learning rate라고 합니다. 이 값은, 점차 줄여가는 값의 정도를 의미합니다. 알파 값이 크다면 cost값이 최소화 되는 점을 향해 큰폭으로 줄어들 것입니다. 하지만, 2차함수 그래프에서 기울기 값을 이용해 작아지기 때문에 알파의 값이 너무 크다면, 최저점에 도달하지 못하고 그래프의 한 부분에서 정체되거나, 오히려 cost가 늘어나는 현상이 일어날수있습니다. 반대로 알파값이 너무 작게 설정된다면, 최저점까지의 거리가 너무멀기 때문에 학습량이 충분하지 않을경우, 최저점까지 도달하지 못하는 경우가 있습니다.

2. Multi-variable Linear Regression
simple linear regression 은 Input 값인 x 가 한개일 경우입니다.
하지만 실제로는 주어지는 feature 즉 x의 값들이 여러개일 경우가 대부분 입니다. 이러한경우에 x값을 매트릭스인 X의 값으로 넣어주는 Multi-variable Linear Regression 을 사용합니다.

x 값이 변함에 따라 가설함수와 비용함수도 아래와 같이변하게 됩니다.

wight와 x 를 곱하는 연산에서 Dot Product를 사용합니다.

입력해 주는 변수의 값만 바뀌었을 뿐 사용하는 개념과 방법은 같습니다.

3. Logistic Regression/Classification
linear regression이 결과값으로 어떠한 숫자(즉, 값)로 결과를 찾는 것이라면,
logistic regression은 그 값이 어느 그룹에 속하는가 분류된 결과를 찾는 것 입니다.

구해내는 방법을 간단하게 설명하면, linear function을 이용해 나온 값들에 대해 logistic function을 통해서 0과1사이의 결과값으로 바꾸어주고, Decision Boundary를 통해 0인지 1 인지 결정하는 것입니다.

이 과정에서 Logistic function은 sigmoid 함수를 사용하게 됩니다.
sigmoid 함수 g(z)는 다음과 같습니다

Logistic Regression 에서도 비용을 최소화하는 개념을 사용합니다.
모델에 의해 결과를 분류했을 때, 그 결과가 얼마나 오류를 냈는가에 대한 식은 다음과 같습니다.

4. Softmax Regression
분류하는 과정에서도 0,1 과같이 2개로 분류하는 경우와, 여러가지의 class가 존재하는 경우가 있습니다.
Logistic regression이 0,1 두개의 분류를 하는 과정이었다면 Softmax regression은 다분류방법이라고 할 수 있습니다.

logistic regression을 여러번 반복하는 방법을 통해 다수의 분류를 할 수 있지만 계산식을 줄여주는 Softmax 방법을 도입합니다.

즉 위와같은 3번의 과정을 아래와 같이 줄여주는 것 입니다.

Logistic regression 의 결과값은 0 또는 1로 나오게 되지만, Softmax regression은 [0.7,0.2,0.1]과 같이 나오게 됩니다.(3가지의 class일 경우) 이 값을 해석해 보자면 1번째 분류일 확률 0.7,2번째 분류일 확률 0.2, 3번째 분류일 확률 0.1입니다. 확률 이기 때문에 모든 인자의 합이 1 이어야 합니다.

이러한 확률을 다시한번 Cross Entropy 방법을 통해 One hot encoding을 합니다. 그렇게 되면 가장 높은 확률을 가진 분류로 나타내어 지게 됩니다. 위의 예제로 예를 들자면 [1,0,0] 이 됩니다.

5. 실제 적용을 위합 Tips
1. Learning rate 값을 어떻게 조정하는가?
앞서 설명했듯이 learning rate 를 너무크거나,작게 조정한다면 문제가 생깁니다. 일반적으로 많이 쓰는 값은 0.01 이고, 또 하나는 adam learning rate인 0.003 입니다.
learning rate 를 잘못 지정하는 오류를 줄이기 위해 learning rate decay 방법을 사용합니다. 이것은 학습을 하는 과정중에서 일정한 학습이 일어 난 후, learning rate를 감소시키며 재조정 시키는 것을 의미합니다.
Step decay : N epoch or validation loss 가 해당될 시 감소
Exponential decay : a=a0e-kt
1/t decay : a=a0/(1+kt) 와 같은 방법들이 있습니다.
step decay를 예로 들자면, 50 epoch을 돌때마다 learning rate에 0.96을 곱해 줄여주는 방식입니다. 이러한 방법을 통해 보다 나은 learning rate를 찾을 수 있습니다.
2. 데이터 전처리과정
예를 들자면, 전체 데이터가 많이 분포되어있는 부분이 아닌 아웃레이어 (이상점)이 있는 경우가 있습니다. 이러한 Noisy Data는 실제 결과에 영향이 적기 때문에 삭제를 하는 방법이 있습니다.

또, 데이터들의 분포를 규칙적으로 바꿔주는 방법이 있습니다. 적절한 분포로 나타내 주기위해 표준화(standardization)과 정규화(Normalization)을 사용할 수 있습니다.

3. Overfitting
overfitting 이란 모델을 학습시키는 과정에서 train data set에 과하게 학습되어 train data 셋에는 정확도가 높지만 새로운 test set 에는 오히려 결과가 떨어지는 것을 의미합니다.

오버 피팅을 방지 하기 위한 방법으로는 3가지가 있습니다.
1. 더 많은 데이터를 넣는것으로 높은 variance를 조정할 수 있습니다.
2. 더 작은 feature을 선택하는것으로 높은 variance를 조정할 수 있습니다.
3. 세번째 방법은 overfitting보다는 underfitting에 관한 설명입니다. feature 수를 증가시킴으로서 bias를 조절할 수 있습니다.

일반 적으로 많이 쓰는 방법으로는 regularization을 사용합니다. wight의 값들의 편차가 아주 클 때 ( 0~1, 0~100000) 각 변수의 중요도가 편차가 심하기 때문에 regularization으로 모아주는 방법을 사용할 수 있습니다. 이 과정속에서 l2 loss 값을 cost function에 더해줌으로써 구해줄 수 있습니다.

4. Data set & Learning
training set 와 Validation set 을 구성하는 데이터들을 적절하게 만들어 주는 것이 중요합니다.

비율은 일반적으로 7:3 (training:test)를 합니다.

모델을 만드는 과정이 지난 후에 문제 점이 생긴다면 모델의 작은 부분들을 재수정 하는 fine tuning 과정이나, 모델의 결과 값들을 새로운 task에 대해 모델을 만드는 feature extraction 방법을 사용할 수 있습니다.