[모두를 위한 딥러닝] 강좌 요약 - Section 7~10
Deep Learning모두를 위한 딥러닝 Section 7부터 요약을 한다.
학습 Rate, Overfitting, Regularization
Gradient Descent(GD) 알고리즘앞에 * 는 알파값은 Learning Rate 이다.
- GD는 Cost function의 최소값을 구해가는 알고리즘
- Overshooting: Learning rate을 너무 크게 잡는 경우
- local minimum: rate이 너무 작을 경우 오래 걸리고, local이 최소라 판단할 수도 있다.
대략 0.01 로 시작
Feature Data 선처리
- X 데이터이다.
- GD를 위하여 선처리 과정이 필요하다
- 데이터가 둘쭉날쭉할 때 데이터를 0과 1사이 값으로 Standardization하는 것을 Normalization 한다라고 표현함. 두가지 경우로 preprocessing한다.
+ 특정 범위안에 들어있도록 만들거나
+ zero-centered data로 만들거나
- 평균과, 분산을 통해 Standardization한다. MinMaxScaler를 사용하면 0과 1사이의 값으로 치환된다.
Overfitting
머신러닝이 학습을 통하는데 너무 학습에 딱 맞는 데이터이면 엉뚱한 데이터를 줄 때 예측이 틀릴 수 있다.
- 데이터에 맞추어진 Model이 Overfitting되었다 표현함.
- 많은 데이터로 훈련, 중복 feature수를 줄임.
- Regularization통해 구불구불한 데이터를 펴준다.
- Regularization strength 함수를 준다 - 람다. l2reg (L2 regular) . 필요한 값은 취하고 필요없는 것은 버리는 것이다.
Training / Testing 데이터 셋
전체 데이터중에 training set과 test set을 나누고, 훈련시에는 training set만을 사용한다.
- training = training + validation
- testing = testing
Online Learning
- 한번 학습후 추가되는 데이터를 이전 생성된 모델에 추가하여 다시 학습시켜서 모델을 발전시키는 학습형태
Accuracy
- 정확도: Model이 prediction한 값과 Y (레이블) 실제값에 대한 맞춘 퍼센트
MNIST 데이터
- 28*28*1 image = 784
- 한번에 몇개씩 학습 = 1 Batch
- 전체 training data set 학습 = 1 Epoch (에포크)
Deep Learning 기본 개념
Input X와 신호의량 W(weight) 과 편향값 b (bias)를 더하여 어떤값을 넘으면 1, 아니면 0으로 된다. 이때 Activation Function이 이용된다.
- 1958 OR, AND는 기계가 풀수 있었지만 XOR 문제를 못 풀게되었다.
- 1969 MIT AI Lab, Marvin Minsky 교수 - Perceptrons, MultiLayer로 풀 수 있다.
input layer -> hidden layers -> output layer
- 1974, 1982 Backpropagation, Paul Werbos, 1986 by Hinton
더 복잡한 형태의 계산이 가능해짐
- 1995 Backprogagation은 몇개 layer는 잘 동작하나 몇십개가 되면 Backpropagation의 값이 희석되어 성능이 더 떨어지는 현상이 발생함.
1987 캐나다 Hinton 교수 주도의 CIFAR 기구에서 연구를 계속 진행함.
- 2006 Breakthrough 통해 초기값을 잘 주면 학습가능하다. Hinton
Neural Network 을 Deep Net, Deep Learning으로 이름을 바꿔 부름
- 2010 ImageNet Classification 통해 인식율 대회 -> 2015년 Deep Learning이용 3% 에러까지 올라옴
Speech Recognition - 시끄러운 곳에서 음성인식, Game
- 2016 Convolution Neural Networks LeCun(라쿤)
배열 다루기
0부터 시작, 마지막 -1
- Rank: 차원, [] 하나가 1차원. 예) [[]] 2차원
- Shape: 자신 차원안의 데이터 원소갯수 예) [[[1,2],[2,3],[4,5]]] 3차원 (1차원 원소갯수, 2차원 원소갯수, 3차원 원소갯수) => (1, 1, 2)
- Slice: 원소 n개 묶음. 슬라이싱한다고 표현
- Axis: Rank 4차원이면 맨 바깥쪽이 Axis=0, 제일 안쪽이 Axis=3이 된다.
tensorflow 계산식 (참조)
- matrix1 * matrix2 또는 matrix1 + matrix2 같은 사칙연산 => Broadcasting Shape이 달라도 연산이 가능하게 함.
- matmul(matrix1, matrix2) 사용
- reduce_mean, reduce_sum: 결과가 float이면 입력값도 float이어야 소수점까지 출력된다. axis 설정이 있어서 차원의 계산값이 다를 수 있다.
- Argmax: axis에 따라 결과의 원소 갯수가 틀려진다.
- Reshape: 가장 많이 사용함. shape(3,2,3)을 변경. 가장 안쪽의 값은 항상 그대로 가져간다.
tf.reshap(t, shape=[-1, 3]).eval()
+ squeeze 는 안쪽의 값을 1차원 배열로 reshape한다.
+ expand_dims 는 값을 차원이 있는 배열로 reshape한다. squeeze의 반대
- one_hot: 전체 값중에 선택된 것만 1로 만들고 나머지는 0으로 만듦. 1차원 배열(백터)에 해당함.
- cast: 형변환 float -> integer, 또는 true/false를 1/0으로 변환.
- stack: 여러 개별 배열을 한 배열로 넣음. axis 설정가능
- ones_like, zeros_like: 똑같은 배열 차원의 1 또는 0으로 만들어줌
- zip: 복수개의 tensor를 가지고 있을 때 한번에 묵어서 for 루프등에서 처리하고 싶을 때
XOR 문제 Neural Network (Deep Learning)으로 풀기
Cell별 W, b를 구하는 학습이 가능 한가를 증명
- sigmoid를 이용함
하나의 네트워크를 구성하면 다음과 같다.
이것을 하나의 배열로 만들면 Multinomial Classification이된다.
Backpropagation과 Derivation 하기
미분이란
- 순간 변화율, 기울기로 나타남
- f(x + A) - f(x) / A 로 A를 작은 값으로 사용.
- f(g(x)) 에서 x가 f에 미치는 영향에 대해 미분을 하면 df/dx로 나온다. 이것은 df/dg * dg/dx 의 결과이다.
편미분
- Partial Derivation
- 내것만 미분하고 나머지는 상수로 본다.
- xy 에 대한 x 편미분은 y 이고 x+y에 대한 x편미분은 1이다. 이는 더하기는 각각을 편미분하기 때문이다.
각각의 Weight에 대한 미분값을 구하기 어렵다. 1974, 1982 Paul/Hinton에 의해 backpropagation으로 해결됨.
- 편미분: 식마다 편미분, g, f
- Chain rule의 경우 미분 f(g(x)) : x값이 f에 영향을 미치는 정도.
- 편미분값이 다음에 영향을 미칠 값이 된다.
- f는 g를 사용하는 chain rule 사용
편미분에 대한 복합함수를 chain rule을 사용하면 뒤로가면서 w의 편미분값을 얻을 수 있다. (참조)
- 뒤의 것의 미분값과 자신의 미분값을 사용한다.
- Tensorflow에서 graph형태인 것은 BP를 적용하기 위함이다.
TensorBoard
- loss의 변화를 차트로 보거나, 텐서의 그래프를 볼 때 사용
- name_scope를 사용해서 작은 단위의 텐서를 논리적으로 묶어서 그래프로 보여줄 수 있다.
- 지정한 디렉토리에 있는 모든 텐서 로그파일을 한번에 불러와서 차트에 보여줄 수 있다.
$ tensorboard --logdir=<path>
//브라우져에서 http://127.0.0.1:6006/ 호출
섹션 10 - ReLU
네트워크 연결되어 최종 값은 sigmoid같은 Activation function을 통해 변환되어 다음 네트워크로 전달된다.
- Hypothesis는 여러 Layer를 두어서 만들어 진다.
- Layer종류: Input, Hidden, Output
- layer별로 W(weight) 과 B (bias)가 주어진다.
- hidden layer가 많을 경우 Accuracy가 떨어진다. => Backpropagation의 문제점이 발생.
+ Vanishing Gradient : 기울기기 사라짐. 아주 작은값들이(weight값, 0.01같은 값) layer가 뒤로(backward propagation) 갈수록 곱해지면서 문제가 발생함 .
- Hinton교수가 밝힘. Sigmoid를 잘 못 쓴것 같다. => Rectified Linear Unit (ReLU)를 사용한다. 이제 sigmoid는 사용하지 말자! 즉, 1 또는 0으로 나와야 하기 때문에 마지막만 sigmoid사용
- ReLU(렐루) 0이하는 모두 0으로 처리한다.
초기값 설정 잘 하기
초기값 W를 잘 정해야 한다.
- 초기값을 0으로 준다면: BP하면 앞의 W값들이 0이되어 VG (Vanishing Gradient)됨.
- 2006 Hinton이 Restricted Boatman Machine (RBM) 사용함 - Deep Belief Nets
+ 처음 2개 layer에 대한 encoder/decoder를 통해 weight를 구함.
+ 그다음 2개를 en/de하면서 weight을 학습시킴
각 학습을 통해서 initial weight값을 가지고 학습시킴. 이것을 fine tunning이라함.
- 2010 Xavier initialization => RBM 처럼 비슷하게 쉽게 나온다.
- 2015 He initialization 초기화 잘됨
Dropout 과 앙상블
훈련시킬 때 적용할 수 있는 방법
Overfitting은 학습데이터를 가지고 accuracy를 측정해보면 99% 맞는데, 전혀 다른 test data를 넣으면 0.8%이면 오버피팅이다.
- layer를 많을 쌓을 수록 overfitting될 확률이 높다.
- 방지하는 방법
+ 데이터를 많이
+ Regularization: 구부러진 데이터를 펴기 => l2reg
+ NN에서는 Dropout도 사용함. 몇개의 layer를 skip한다. 학습할때 dropout = 0.7 정도 실전에서는 dropout rate = 1이다.
텐서플로우에서는 dropout layer를 하나 더 추가함. keep_prob = 0.7 학습, 1 실전 (참조)
앙상블 (Ensemble)
- 모델들 학습시킬 때, 데이터 셋을 몇개로 만들어 각각 Model을 만들어 Model들을 합쳐 결과를 만든다. 실전에 많이쓴다.
- Model = Hypothesis + Cost + Optimizer
Optimizer
다양한 옵티마이져가 존재한다.
- ADAM(아담) 을 기본으로 써보자.
네트워크 조립하기
어떤 Net을 구성하느냐의 상상력이 필요
- 여러 layer를 구성하고, 몇단의 layer를 건더뛰게하는 Fast Forward 방식이 있다. ResNet구조이다.
- Split & Merge하여 layer 조립하기 - CNN
- Recurrent Network: 앞으로만 나가는 것이 아니라 옆으로도 layer가 증가 - RNN
MNIST 98 % 올리기
=> CNN을 사용하면 99% 까지 올라간다.
정리
- NN(Neural Net)이 깊어지면 Backpropagation할 수록 Vanishing Gradient가 발생하여 Sigmoid를 사용하지 않고 ReLU를 쓴다.
- NN 구성 방법
+ 초기값 설정을 잘 하자. Xavier 사용. Tensorflow에 함수 존재함
+ NN의 layer가 깊어지면 모델이 Overfitting될 수 있다. 이것은 학습을 하면서 이전것을 기억하기 때문인데 이를 Dropout으로 해결한다.
+ 많은 데이터를 여러 set으로 나누어 학습한 모델들을 최종 결과물로 만드는 앙상블을 실전에서 많이 사용한다.
+ 옵티마이저도 기본 ADAM(아담)을 사용한다.
+ NN의 구성은 CNN, RNN방식이 있고 본인만의 상상력을 발휘하여 만들 수 있다.
'Deep Learning' 카테고리의 다른 글
| [모두를 위한 딥러닝] 강좌 요약 - Section 1~6 (0) | 2019.01.09 |
|---|