cs231n Lecture 8-1 Deep Learning Software
lecture 8 에서는 tensorflow, pytorch, caffe 등의 소프트웨어들을 알아봅시다.
CPU 와 GPU 중에서 Deep learning에서 gpu가 더 좋은 이유는 뭘까요?
아래 그림을 보면, GPU가 월등히 더 많은 코어의 수를 가지고 있습니다. Clock speed는 더 낮지만 core수는 훨씬 많죠.
따라서 gpu는 cpu보다 병렬 작업에 훨씬 유리합니다.
딥러닝에서는 기본적으로 행렬 연산이 많습니다. 이 행렬 연산을 GPU는 병렬처리를 통해 매우 빠른 속도로 처리할 수 있습니다.
GPU는 CUDA 라는 언어로 컨트롤 합니다.
하지만 우리가 CUDA code를 직접...
수학 이야기
Gradient
다변수 함수 f가 있을때 f 의 gradient 는 위와 같다.
보통 컴퓨터에서 사용하는 선형 근사식은 다음과 같다.
Jacobian matrix
Jacobian matrix는 다변수 벡터 함수에 대한 일차미분이다.
Jacobian matrix는 gradient와 같이 일차 미분이므로 미분이 가지고 있는 특성은 모두 동일하게 가진다.
즉, 해당 함수의 극소, 극대를 찾을 때 사용 될 수 있다.
Hessain matrix
Hessain matrix는 위의 2개와 다르게 이차 미분을 나타낸다.
Hessain은 함수의 곡률 특성을 나타내는 행렬이다.
따라서 최적화 문제에서...
BOJ 8958 OX 퀴즈
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <map>
#include <unordered_map>
#include <set>
#includ...
BOJ 4673 셀프 넘버
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <map>
#include <unordered_map>
#include <set>
#includ...
BOJ 2920 음계
nums = input()
if nums == "1 2 3 4 5 6 7 8":
print("ascending")
elif nums == "8 7 6 5 4 3 2 1":
print("descending")
else:
print("mixed")
음계
시간 제한
메모리 제한
제출
정답
맞은 사람
정답 비율
1 초
128 MB
20193
11417
10251
58.802%
문제
다장조는 c d e f g a b C...
BOJ 2908 상수
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <map>
#include <unordered_map>
#include <set>
#includ...
BOJ 2675 문자열 반복
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <map>
#include <unordered_map>
#include <set>
#includ...
cs231n lecture 7-5, Traning Neural Networks-2
한국말로 ‘전이학습’ 이라고 부르는 transfer learning 입니다.
CNN 학습에는 많은 데이터가 필요하다! 라는 생각을 부순것이 바로 tansfer learning 입니다.
사실 완전히 부숴졌다고는 못하겠습니다. 이미 pre-train 된 모델이 있어야하는데 이 모델은 이미 많은 양의 데이터를 통해서 만들어진거니까요.
하지만 새로운 모델을 만들떄 base model 을 가지고 적은 양의 데이터를 추가로 사용한다는 transfer learning 은 충격적이기는 합니다.
일단 base model 은 큰 데이터셋으로 학습을 하게 됩니다.
그 후 이 모델을 기반으로 다른 모델을 학습해볼겁니다....
cs231n lecture 7-4, Traning Neural Networks-2
또 하나의 regularization 방법이 있는데, 바로 data augmentation 입니다.
input 값들을 조금씩 변형해서 데이터를 늘리는 방법입니다.
데이터를 좌우 반전하든, 조금 밝게 하든 고양이는 똑같은 고양이니까요!
이렇게 데이터를 변형해서 데이터를 늘려서 정규화 시키는 방식도 있습니다.
또한 조금 더 정교하게는 PCA를 적용하여 RGB 값을 변형하여 학습시키는 방식도 있습니다.
또는 이미지를 다양한 size 로 crop 해서 사용할 수도 있습니다.
고양이의 일부분도 고양이니까요!
이렇게 학습시킨것은 test 할때 여러가지 sacle의 image 를 만들고 거기서 (4가...
cs231n lecture 7-3, Traning Neural Networks-2
loss 를 줄이는것도 좋지만, validation 과 train 의 격차를 줄이는것도 중요합니다.
이를 바꿔 말하자면, overfitting 을 막자는 것이 됩니다.
deep learning 에서 overfitting 을 막는 방식은 regularization, Model ensembles 등이 있습니다.
Ensemble 기법은 다수의 모델을 만들어 이들을 평균을 내어 이용하는것입니다.
많은 모델을 사용하기 때문에 1~2% 정도의 성능 향상이 있다고 합니다.
조금 더 깊게 접근해보면, 모델을 통째로 여러게를 쓰는게 아니라, 학습 도중에 중간에 여러게의 모델을 섞는 방식입니다.
통칭 Snapsh...
cs231n lecture 7-2, Traning Neural Networks-2
모든 Optimizer 들은 learning rate 을 parameter 로 가진다.
위 그래프는 항상 많이 보았던 learning rate 를 ‘적절히’ 잘 줘야한다는 걸 설명하는 그래프 이다.
그럼 하나의 learning rate 을 static 하게 learning 이 끝날때 까지 유지해야하는건가? 아니다!
learning rate decay 라는 방식이 있다.
통칭 Annealing learning rate 기법중 하나로, step decay, exponential decay, 1/t decay 방식이 있다.
Step decay 는 몇 Epoch 마다 일정량만큼 학습 속도를 줄이는 방식...
cs231n lecture 7-1, Traning Neural Networks-2
cs231n lecture 7 에서는 지금까지 강의에서 배웠던 Optimization, Regularization 을 더 깊게 들어가게 됩니다.
또한 많이 사용하는 Dropout, transfer learning 등을 배우게됩니다.
중간에 Second order optimization, Hessian metrix, Tayler expansion 등 수학이 깊게 들어가는 부분이 있는데,
이 부분은 따로 더 학습이 필요할 거 같다. 다음주 학습은 미적분에대해 공부해봐야겠습니다.
지금까지 강의에서 사용하던 Optimization 방식은 문제가 있습니다.
위 그림처럼 한 한 dimension이 엄청나게 얕...
전체 글 228개, 19 페이지