Neural net을 어떻게 하면 잘 training 할 수 있을까
Optimazation
SGD+Momentum : 시작점에서부터 진행하려는 방향으로 계속 가속해나가는 형태로 학습, noise에 강건하고 빠르게 optimal 지점을 찾아감
Nesterov : 이것을 lookahead하여 gradient를 이동한 지점에서 계산하여 찾아감, 좀 더 정확한 optimal 지점을 찾아감
RMSProp : per parameter, 학습이 빨리 일어나는 지점(gradient가 급한 지점)에서는 학습을 조금씩, gradient가 약한 부분에서는 학습을 더 많이 반영하여 optimal 지점을 잘 찾아감
Adam : 위 두가지 방법을 모두 사용하여 주로 이 방법으로 optimization
Regularization
Dropout : node를 random하게(보통은 0.5 정도) 주어 training 시에 random하게 node를 제거한 뒤 training, 이것을 test 시에는 average out 한다
Add noise, then marginalize out
등등으로 모델의 일반성을 높임 → 주어진 데이터에만 fit하지 않도록 unseened data에 대한 정확도를 높임(overfit 되지 않도록)
Transfer Learning
항상 풍부한 데이터를 가질 수 없기 때문에 우리가 풀려는 데이터와 유사한 데이터로 pre-train해두고 low level부터 마는 부분을 (?) freezing 하고 남은 부분만 finetune하여 사용
우리가 사용하는 소프트웨어 라이브러리에서 Zoo라는 이름으로 제공
실제 training 할 때는 모든 데이터를 한 번에 training하지 않고 pre-training 된 가중치를 사용하기도 함
GPU, TPU로 학습하는 것이 효과적
계속 발전하고 있기 때문에 배운 내용을 기반으로 업데이트 필요
CPU (Central Processing Unit)
크기는 매우 작지만 컴퓨터의 가장 핵심
CPU의 성능이 컴퓨터의 성능에 비례
기본적으로 모든 부분에서의 연산
GPU (Graphics Processing Unit)
그래픽 연산 (3D게임...)
왜 GPU가 딥러닝에서 중요한가?
딥러닝에서 사용하는 matrix 연산들이 GPU 안에서 더 잘 동작
GPU가 주로 하는 연산인 polygon을 생성해내고 3D 모델링을 하여 그래픽 처리하는 부분이 matrix 연산이고 딥러닝에서 주로 하는 연산과 같기 때문에 CPU보다 GPU가 matrix 연산, 딥러닝에서 사용하기 더 적합
둘 다 matrix 연산에 특화되어 있는 그래픽카드 유닛
NVIDIA를 딥러닝 프레임워크에서 추천, 사용
cuda 프로그래밍을 통해 좀 더 빠르고 쉽게 딥러닝 프레임워크의 성능을 높일 수 있다