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 |