눈에 띄고 주목한 정도에 따라 * 표시를 했습니다. 블로그 글쓴이 본인의 생각은 이렇게 표시했습니다.
1장 신경망 기초
51 학습 정확도는 반드시 테스트 정확도보다 높아야 한다. (epoch 수 늘리기)
52 Drop-out 기법은 training 에서 적용되지만, test에서는 적용되지 않는다. (test (inference)에서는 모든 neuron(weight) 사용) → test data에 대해 일반화 성능이 더 올라간다, 각 neuron이 이웃 neuron에게만 의존하면 안된다는 요구가 반영된다. (더 발전함)
54 Optimizer Adam, RMS prop → SGD에 있는 가속도 성질 + 관성 개념이 더해짐
57 Optimizer를 고정하고, 각 optimizer에 따른 drop out 비율 간의 상관관계를 확인하는 것이 학습 성능 확인에 도움이 된다. → Adam optimizer 에서, 일정 비율의 drop out 까지는 정확도가 증가하다가, 특정 시점 이후부터는 정확도 감소 (Hparams 세팅에 생각해봐야 할 점)
61 Default 경사하강법은 training data의 모든 입력에 대해 1회의 cost function 최소화 (weight update, 1 step)를 수행한다. → SGD는 Batch 크기만큼에 대해 weight update를 수행하므로 훨씬 비용이 적은 대안이다 (일반화 능력 또한 향상된다). Batch size에 따른 정확도를 확인하는 것도 좋은 방법이다.
*63 복잡한 (Parameter(weight)이 많은) 모델은
- 학습에 시간이 많이 소요되고
- 학습 데이터에서만 매우 우수한 성능을 내게 될 수 있다 (Overfitting)
하지만, 딥러닝 모델 학습은 암기(Overfitting)가 아닌 "일반화"에 있다. training data 에서만 잘 맞추고, test data에서는 정확도가 떨어지면 안되는 것이다 → Training data loss는 감소하지만, Validation loss가 증가하는 시점을 Overfitting이 발생하는 시점으로 볼 수 있다.
- Overfitting을 막기 위한 방법 → Regularization
- 모델의 복잡도는 0이 아닌 가중치(weight)의 개수로 나타낼 수 있다.
- 이 개수가 적을수록 단순한 모델이며, Overfitting을 막기 위해 단순한 모델을 선택해야 한다.
- Regularization을 통해 모델 복잡도를 낮출 수 있다.
- 다음과 같은 term으로 regularization을 수행할 수 있다: min(loss + λ*complexity(model))
- loss: 목적 함수
- complexity(model): 모델의 복잡도
- L1: 가중치 절대값의 합으로 표현
- L2: 가중치 제곱의 합으로 표현
68 사람의 뇌가 작동하는 방식을 네트워크에 적용해야 성능을 더 끌어올릴 수 있다. → 손글씨 인식의 경우, 사진을 1차원 vector로 변환하여 학습하면 공간에 대한 정보(각 픽셀의 상호간 위치정보 등)는 사라져버린다. 이렇게 되면 우리 두뇌에서 시각인식이 이루어지는 성질을 놓치게 된다. 뇌는 어떤 물체를 보고 단순한 구조를 먼저 인식한 뒤, 점차 더 복잡한 요소를 인식한다. 이러한 아이디어에서 CNN (Convolutional Neural Network)이 탄생한 것이다.
2장 Keras 설치와 API
72 h5py: Keras에서 모델을 저장할 때 데이터를 직렬화하는데 필요한 Library
94 Batch Normalization은 학습 속도를 빠르게 할 뿐 아니라, 일반적으로 더 나은 정확도를 달성하게 해준다.