https://www.youtube.com/watch?v=BS6O0zOGX4E&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=1 

 

Lec 7 Application & Tips

Learning rate

- gradient descent 알고리즘에서 learning rate인 $\alpha$을 임의로 사용함(주로 0.001)

- learning rate를 굉장히 크게 설정하는 경우 overshooting이 발생하여 학습이 제대로 이루어지지 않을 수 있다. 

- 값이 줄어들지 않고 발산하는 경우 overshooting을 의심해야한다. 

- learning rate가 굉장히 작은 경우 학습 시간 동안 최저점에 도달하지 못할 수 있다. 

- cost를 출력해보고 값의 변화가 작은 경우 learning rate를 올려서 학습해본다. 

- learning rate를 정하는 데는 특별한 답은 없다 -> 환경, 데이터에 따라 다르다. 

- 처음에 0.01로 설정해보고, 값이 발산하면 작게, 변화량이 너무 작으면 크게 설정해본다.

 

Data (X) preprocessing for gradient descent

(그래프를 등고선으로 이해하자)

- 데이터 간의 차이가 큰 경우 그래프가 편향돼서 나타나게 된다. 

- 어느 한 점에서 경사를 따라 이동할 떄,

최저점을 따라 직선상으로 움직이는 것이 아니라 지그재그로 이동할 수 있다. 

-> 정규화가 필요함 

- zero-centered data : 데이터의 중심이 중앙에 위치하도록 정규화 

- normalized data : 데이터가 특정한 범위에 있도록 정규화 

- 정규화를 하는 방법 

X_std[:,0] = (X[:,0]-X[:,0].mean()) / X[:0].std()

 

Overfitting 

- 학습 데이터에 너무 잘 맞는 경우 

- 학습 데이터가 아닌 데이터(테스트 데이터)에 대해서는 좋은 성능을 발휘하지 못하는 경우 

- 오른쪽의 경우 학습 데이터에만 잘 맞는다. -> 실제로 사용할 때는 잘 맞지 않는다.

- 왼쪽과 같이 일반적인 모델이 더 좋다. 

 

Solution for overfitting 

- training data를 많이 사용한다. 

- feature의 수를 줄인다. 

- regularization

 

Regularization 

- weight를 너무 큰 값을 가지지 않는다. 

- cost function에 $\lambda \sum W^2$를 추가하여 weight도 최적화한다. 

- $lamda$ : regularization strength으로 이를 통해 Regularization 정도를 정할 수 있다. 

- tensorflow로 구현하는 경우 

l2reg = 0.001 * tf.reduce_sum(tf.square(W))

 

Learning Machine Evaluation 

- 가지고 있는 데이터의 일부는 training set으로, 다른 일부분은 test set으로 이용한다. 

- traing set으로 model을 학습시키고, test set을 통해 model의 성능을 평가한다. 

- Training set을 가지고 model을 학습시킴

- Validation set을 통해 learning rate와 regularization strength 값을 튜닝한다. 

- test set을 통해 model의 성능을 평가한다. 

 

Online learning 

- data set을 한번에 학습하기 어려운 경우 

- training set이 100만개가 있다고 가정하자

- 10만개씩 잘라서 학습시킨다. 

- model은 이전에 학습했던 결과가 model에 남아 있어야한다. 

- 새로운 데이터가 추가되는 경우, 이전의 데이터를 새로 학습하는 것이 아니라 model에 남아있는 결과를 이용하여 추가로 학습할 수 있다. 

 

Accuracy

- 실제값과 모델이 예측한 값을 비교하여 정확도를 측정할 수 있다. 

- 최근 이미지 학습 정확도는 95%를 넘는 수준이다. 

- 실제로 측정하는 방법은 lab에서 확인 가능 

 

Lec 8 딥러닝의 기본 개념 

딥러닝의 시작 

- 우리를 대신해서 골치아픈 문제를 생각하는 model을 만들자

-> 뉴런을 모방하여 모델을 만듦 (Activation Function)

 

Activation Function 

- cell body : 합을 구함 

- 어떤 신호 x가 들어오면 w를 곱한다. 

- 모든 wx를 합하면 어떤 bias(b)를 더한다.

- activation function을 통해 어떤 값 이상이면 값을 전달하고(1), 그렇지 않으면 값을 전달하지 않는다(0).

 

 Logistic regression units

- activation function을 모은 형태 

 

AND/OR/XOR problem

- OR 와 AND는 linear 하게 해결 할 수 있지만, XOR는 linear하게 해결 할 수 없음

- MLP (multilayer perceptrons)을 통해 해결 할 수 있다. 

- 그러나 각 layer의 weight와 bias를 어떻게 학습 시킬지가 과제였다. 

-> backpropagation을 통해 학습이 가능하게 되었다. 

 

Convolutiaonal Neural Networks

- 고양이가 그림을 보게하고 시신경을 관찰한 결과 

- 그림의 형태에 따라 일부의 뉴런만 활성화되고, 그림의 형태에 따라 다른 뉴런이 활성화됨 

- 그림을 볼때 신경망이 동시에 그림 전체를 보는 것이 아니라, 일부를 담당하는 신경망이 있고, 나중에 조합된다고 생각함

-> convolutional Neural Network 개발 

- 한번에 전체를 학습하는 것이 아니라 부분적으로 학습하고, 나중에 합친다.

- 특히 문자열, 숫자를 인식하는 데 약 약 90% 이상의 성능을 발휘함 

 

A BIG problem 

- 10여개 이상의 layer를 학습하는 경우, backprogation을 이용하면 기울기 소멸 문제가 발생한다. 

(기울기 소멸 문제 : MLP에서 은닉층을 많이 거칠수록 전달되는 오차가 크게 줄어들어 학습이 되지 않는 현상을 의마함)

- 층이 많아질 수록 성능이 저하됨 

- SVM, RandomForest 등 MLP이외의 알고리즘이 등장함 

- 오히려 이러한 단순한 알고리즘이 더 잘 작동함

 

Breakthrough (2006 & 2007 by Hinton and Bengio)

- 초기값을 잘 주면 deep net을 학습할 수 있다는 것을 보여줌 

- 깊은 신경망을 통해 어려운 문제를 해결할 수 있다는 것을 보여줌 

-> 다시 신경망에 관심을 갖게 됨 

 

ImageNet Classification 

- 2012년도에 deep learning 기반의 ImageNat Classification의 오류가 26.3%에서 15.3%로 크게 감소함 

- 2015년 기준 오류는 3%대

- 심지어 Neural network는 사진을 설명할 수 있게 됨 

 

딥러닝은 점점 발전하여 여러 기술에 이용되고 있다. 

 

Lec 9 

Neural Nets for XOR

- XOR를 다음의 3개 unit을 이용해서 풀어본다. 

- 우선 W, b가 주어졌다고 생각하자 

1. $y_1 : W = \begin{bmatrix} 5 \\ 5 \end{bmatrix}, b=-8$

2. $y_2 : W = \begin{bmatrix} -7 \\ -7 \end{bmatrix}, b=3$

3. $y : W = \begin{bmatrix} -11 \\ -11 \end{bmatrix}, b=6$

1과 2의 결과 값이 3의 입력으로 주어진다.

모델의 모습을 그림으로 나타내면 다음과 같다. 

이 모델의 결과 값과 XOR의 결과 값을 비교해보면 다음과 같다. 

x1 x2 y1 y2 y XOR
0 0 0 1 0 0
0 1 0 0 1 1
1 0 0 0 1 1
1 1 1 0 0 0

$x_1$과 $x_2$로 이루어진 하나의 층은 multi-variable linear regression으로 볼 수 있다. 

따라서 W를 matrix로 나타낼 수 있고 이를 그림으로 그래면 다음과 같다. 

이를 수식으로 작성해보자 

$K(X) = sigamoid(XW_1+B_1)$

$Y=H(X) = sigmoid(K(X)W_2+b_2)$

tensorflow로 구현하면 다음과 같다. 

K=tf.sigmoid(tf.matmul(X,W1)+b1)
hypothesis = tf.sigmoid(tf.matmul(K,W2)+b2)

 

Back propagation (chain rule)

$g = wx, f=g+b, f=wx+b$

1. forward

: 학습 데이터에서 실제 값을 가져온다 . EX) w=2, x=5, b=3

이 값을 통해 그래프에 값을 입력한다. 

2. backward

: 실제 미분 값을 계산한다

$g = wx, f=g+b$

$\frac{\partial g}{\partial w} = x, \frac{\partial g}{\partial x} = w, \frac{\partial f}{\partial g}=1 \frac{\partial f}{\partial b}=1$

$\frac{\partial f}{\partial w}$를 미분하기 위해 chain rule을 이용한다.

$\frac{\partial f}{\partial w} = \frac{\partial f}{\partial g} \cdot \frac{\partial g}{\partial w} = 1\cdot x= 1\cdot 5=5$

$\frac{\partial f}{\partial x} = \frac{\partial f}{\partial g} \cdot \frac{\partial g}{\partial x} = 1\cdot w= 1\cdot -2 = -2$

같은 방법으로 계산하면 $\frac{\partial f}{\partial b} = 1$

$\frac{\partial f}{\partial b} = 1$ : b의 변화가 f에 미치는 영향이 거의 1:1이다. 

$\frac{\partial f}{\partial w}$ : w가 1만큼 변하면 f는 5배 바뀐다. 

따라서 이러한 결과를 통해 출력을 조절할 수 있다. 

 

layer가 아무리 많더라도, 한 layer안에서의 미분값을 구할 수 있고, chain rule을 적용할 수 있기 때문에 최종 출력값과 입력값 간의 미분 값을 구할 수 있다. 

 

TensorFlow에서 Back propagation 

hypothesis = tf.sigmoid(tf.matmul(L2, W2)+b2)
#cost function 
cost = -tf.reduce_mean(y*tf.log(hypothesis)+(1-y)*tf.log(1-hypothesis))

tensorflow에서는 back propagation을 위해 각각을 그래프로 만든다. 

따라서 tensorflow에서는 back propagation을 구현할 필요가 없다. 

'STG 퀸트고 (딥러닝 기초) > 딥러닝 기초 (모두의 딥러닝 시즌1)' 카테고리의 다른 글

Lec10~12  (0) 2022.01.03
Lec 4 ~ 6  (0) 2021.12.26
모두의 딥러닝 Lec00~03  (0) 2021.11.08

+ Recent posts