cs231n Lecture 9-4 CNN Architectures

다음에는 그 유명한 ResNet을 살펴봅시다. ResNet은 무려 152 layer 를 가진 network 입니다. 이게 어떻게 가능하지? gradient vanishing 이 무조건 발생할꺼같은데? 라고 생각하시면 맞습니다. 평범한 layer라면 무조건 그러겠죠. 그래서 ResNet은 residual connection을 사용합니다. layer가 깊게 쌓인다 해서 무조건 좋게 학습이 되는것은 아닙니다. 일반적으로 layer가 깊이 쌓일수록 over fitting이 많이 일어난다고 합니다. 근데 보면 training error도 높습니다. 그냥 성능이 안좋은거네요. 최적화의 문제 라고 가설을 ...

더보기

cs231n Lecture 9-3 CNN Architectures

다음은 GoogleNet이다. 5M 개의 엄청나게 적은 파라미터 수 를 자랑하고, Deep 한 layer 수(22개) 를 자랑한다. 파라미터수를 줄이기 위해서 FC layer가 없습니다, Inception Module을 사용했다. Network 내부에 network를 넣는 구조라 해서 inception module이라고 부른다 합니다. 4가지 컨셉을 concat 합니다. 이렇게 되면 4가지의 local 한 정보들을 모두 파악할 수 있스비다. 병렬 처리를 한다면 매우 좋겟죠. 하지만 이것은 Naive한 방식입니다. 이 방식의 문제는 계산량이 너무 많다 입니다. 1x1 conv 는 일종의 dens...

더보기

cs231n Lecture 9-2 CNN Architectures

더 깊은 network 들인 VGG. GoogleNet에 대해 알아봅시다. VGG 는 작은 filter 를 적용하고, 더 많은 layer를 사용하였습니다. 그럼 왜 작은 filter 를 사용했을까요? 3x3 conv (stride 1) 을 사용하게되면 7x7 conv layer를 사용한것과 같은 효과가 난다고 합니다. 3x3 을 한번 conv 에 태운 결과에 3x3 을 한번 더, 그 결과에 한번 더 3x3을 또 태우면 7x7 conv layer에 태운 결과와 같다고 한다. 그럼 왜 이렇게 작은 레이어를 겹쳐서 큰 레이어의 효과를 얻게 하려는 것일까? 바로 계산량이 더 적기 때문이다. 결과는 똑...

더보기

cs231n Lecture 9-1 CNN Architectures

9강에서는 여러가지 CNN Architecture들에 대해 공부합니다. AlexNet은 Conv layer -> Max pooling -> normalization 순서로 되어있습니다. 이 Normalization은 지금은 잘 사용하지않는 방식입니다. Input image 가 227 x 227 x 3이라면, Conv1 의 parameter수는 몇 일까요? 일단 output size 를 계산해보면 (input size - filterSize)/stride + 1 이므로 55가 됩니다. 자 원래 input 이 3차원이였고, filter 의 수 는 96 개 였으니, 최종 output siz...

더보기

Atcoder codefestival 2016 final A - Where's Snuke?

https://atcoder.jp/contests/cf16-final/tasks/codefestival_2016_final_a 간단하게 완전탐색을 하면 된다. 시간도 최대 크기가 26*26인데 2초나 줘서 노상관. 100점짜리 문제는 역시는 역시다. #include <cstdio> #include <cstdlib> #include <iostream> #include <cstring> #include <string> #include <algorithm> #include <cmath> #include <vector> #inc...

더보기

Atcoder codefestival 2016 fianl B - Exactly N points

https://atcoder.jp/contests/cf16-final/tasks/codefestival_2016_final_b N 가지 문제가 있는데, 각 문제의 난이도와 Point는 각각 문제 index(1~N) 과 같다 가능한 쉬운 문제들로 정확히 N point 를 얻어야 한다. 일단 N점의 범위를 알아야 한다. 1번 문제부터 하나씩 점수를 더하면서 N point 가 넘는 지점을 찾는다. 이렇게 되면, 최소한 해당 지점이 포함되지 않는다면 N 을 만족하지 못하므로, 해당 지점이 정답 셋에 들어가기 위한 가장 큰 점수의 지점, 즉 Limit 이 된다. 이미 최대 수 가 limit 으로 결정 되었으니, 그...

더보기

Atcoder apc001 C - Vacant Seat

https://atcoder.jp/contests/apc001/tasks/apc001_c 이진 탐색 문제이다. interactive task 라는 신기한 atcoder 의 채점 방식을 처음 겪어봐서 조금 생소했던 문제다. 원에 홀수 사람들이 둘러 앉아 있고, i 와 i+1 은 인접한 자리이며, 1 과 N-1 은 인접한 자리 이다. 사람은 남성과 여성으로 구분되어진다. 하나의 제약이 있는데, 인접한 자리는 같은 성이 앉을 수 없다 는 것이다. 무조건 남성 여성 남성 여성 — 으로 앉아야 한다. 홀수 자리이면서 위와 같은 조건이면 무조건 하나 이상 빈 자리가 존재해야 위 제약을 만족시킨다. 따라서 이 빈자...

더보기

Atcoder apc001 B-Two Arrays

https://atcoder.jp/contests/apc001/tasks/apc001_b 2 가지 길이가 같은 정수형 배열이 나온다. 우리가 할 수 있는 operation 은 단 한가지 이다. A[i] 에 2를 더하면서 B[j] 에 1을 더하기 (i 와 j 는 맘대로 정할 수 있음) 위 operation 을 0회 이상 수행하면서 A array 와 B array 를 같게 만들 수 있는가? 가 문제이다. 일단 조건을 생각해보면, A 와 B 가 무조건 같이 증가 하고, A 의 증가폭이 B 의 2배 이므로, 배열의 전체 합이 A > B 이면 무조건 같은 배열이 될 수 없다. 첫 번째 조건에서 넘어왔...

더보기

Atcoder apc001 A - Two Integers

#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 8-4 Deep Learning Software

Caffe 는 c++로 만들어진 deep learning software 이다. Python, Matlab binding이 존재하고, finetuning, feedforward classification모델에 좋다고 한다. 보통 model deploy용으로 많이 사용된다고 한다. Caffe의 특징은, prototxt이다. 코드를 거의 작성하지 않고, json 처럼 생긴 prototxt로 model 을 define하고 해당 script를 실행시키는 형식으로 model을 train시킨다. 데이터는 caffe가 원하는 형식으로 converting 해줘야한다. caffe는 위와같이 prototxt라...

더보기

cs231n Lecture 8-3 Deep Learning Software

pytorch에는 3가지 abstraction 이 있습니다. tensor : ndarray로, gpu에서 돌아갑니다. variable : computatinal graph 안에 있는 node 입니다. data 와 gradient를 가집니다 module : layer입니다. learnable weight들을 가지거나 state 를 저장합니다. tensor는 일종의 array이고, gpu에서 돌아갈 수 있게 해둔 특별한 array 입니다. gpu 에서 돌게 하려면, tensor의 type에 cuda datatype을 넣어주기만 하며 됩니다. ...

더보기

cs231n Lecture 8-2 Deep Learning Software -2

이제 tensorflow 에 대해 더 자세히 알아봅시다. tensorflow 는 ‘define & run’ 입니다. static graph를 먼저 define해둔 후, session 에서 run하는 구조 입니다. tensorflow 2.0 에서는 dynamic graph를 지원하기 위해서 session이 사라집니다. 입력값을 저장하고, 변수를 저장하기 위해서는 tf.placeholder를 사용합니다. 변수의 type, shape등을 선언합니다. 그 후 forward pass 를 지정하비다. static graph 를 만드는겁니다! gradient를 계산하기 위해서는 tf.grad...

더보기