Last Time

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 된 가중치를 사용하기도 함

Deep Learning HW

GPU, TPU로 학습하는 것이 효과적

계속 발전하고 있기 때문에 배운 내용을 기반으로 업데이트 필요

Inside a computer

CPU (Central Processing Unit)

크기는 매우 작지만 컴퓨터의 가장 핵심

CPU의 성능이 컴퓨터의 성능에 비례

기본적으로 모든 부분에서의 연산

GPU (Graphics Processing Unit)

그래픽 연산 (3D게임...)

Deep Learning HW

둘 다 matrix 연산에 특화되어 있는 그래픽카드 유닛

NVIDIA를 딥러닝 프레임워크에서 추천, 사용

cuda 프로그래밍을 통해 좀 더 빠르고 쉽게 딥러닝 프레임워크의 성능을 높일 수 있다