모두를 위한 딥러닝 시즌2
-
[모두를 위한 딥러닝 시즌2][Lab 12](2) RNN TensorFlow모두를 위한 딥러닝 시즌2 2021. 11. 17. 16:43
tf keras를 사용해 RNN을 직접 코드로 구현해보자. 두 가지 방법 - 특정 셀을 선언하고 이를 LOOP 하는 방식 - 이 두가지를 결합한 api를 활용하는 방식 입력으로 전달 받는 데이터는 (betch size x sequence length x input dimension)으로 전 처리되어야 한다. sequence가 1인 데이터를 전처리해서 RNN을 적용하는 코드는 다음과 같다. hidden size가 2인 RNN을 만들어서 전처리해준 데이터들을 넣어준다. 이때 outputs 변수는 전체 sequence에 해당하는 hidden state 값들을 가지고 있고 states 변수는 마지막 hidden state 값만 가지고 있기 때문에 shape이 다르다. Unfolding to n sequences..
-
[모두를 위한 딥러닝 시즌2][Lab 12] RNN모두를 위한 딥러닝 시즌2 2021. 11. 17. 11:29
우리가 사용하는 데이터에는 Sequence data가 많다. 단어를 읽을 때 하나의 알파벳이 아닌 그 앞과 뒤의 알파벳들까지 이해해야 전체 한 단어를 이해할 수 있다. 입력이 있으면 연산을 통해 출력을 뽑는 간단한 NN이나 CNN으론 이것이 어렵다. 그래서 탄생한 것이 현재의 state가 그다음 state에 영향을 미치는 Recurrent Neural Network이다. x라는 입력값과 이전의 RNN에서 나온 old state 값을 같이 사용해서 함수 f를 적용한 것이 출력 값 ht다. Vanilla Recurrent Neural Network 최종 출력 y가 몇 개의 벡터로 나올 것인가는 W의 형태(벡터 사이즈)에 따라 정해진다. Language model 현재 글자가 주어졌을 때 다음에 올 글자가 뭔..
-
[모두를 위한 딥러닝 시즌2][Lab 11](2) mnist cnn keras sequential/functional/subclassing/ensemble/keras eager모두를 위한 딥러닝 시즌2 2021. 11. 16. 10:46
이런 과정의 CNN으로 실습을 진행해 볼 것이다. Convolution layer에선 stride를 1로 하고 padding=SAME으로 할 것이다. Pooling layer에선 stride를 2로 하고 padding=SAME으로 할 것이다. 사용할 라이브러리들이다. 첫 번째로 하이퍼 파라미터들을 설정한다. 그리고 check point를 저장할 디렉터리를 설정해주었다. 네트워크를 만들기 전에 데이터를 수집, 가공 분석하는 과정을 거친다. 이제 본격적으로 네트워크를 만든다. Sequential API를 사용해서 벽돌을 한 장 한 장 쌓듯이 모델에 하나씩 layer들을 추가해준다. 모델을 다 만들고 나서 summary()를 사용하면 모델에 대한 정보를 볼 수 있다. 모델을 만들었으면 Loss function..
-
[모두를 위한 딥러닝 시즌2][Lab 11] Convolution Neural Networks모두를 위한 딥러닝 시즌2 2021. 11. 15. 16:33
Convolution Neural Networks는 고양이에게 어떤 이미지를 보여주었을 떄 뇌에서 이미지를 부분부분 나누어서 반응하는 것에 착안해서 탄생하게 되었다. 하나의 이미지(width x hight x depth)를 입력받은 경우, filter는 자신의 크기만큼 입력을 읽어들여, 연산을 수행해서 하나의 값을 만들어낸다. 이때 연산은 'Wx + b'이고 여기에 ReLU 함수를 사용해서 ReLU(Wx+b)가 된다. 이미지 크기와 filter 크기가 주어졌을 때, output의 크기는 얼마가 될까? 이떄 필요한 개념이 stride로, filter가 이미지에서 몇칸씩 이동할 지 나타내는 수이다. 이렇게 filter를 적용하게 되면 output의 크기가 작아져서 정보를 잃는다는 문제점이 있다. Paddin..
-
[모두를 위한 딥러닝 시즌2][Lab 10] Relu, Weight Initialization, Dropout, Batch Normalization모두를 위한 딥러닝 시즌2 2021. 11. 10. 00:19
Problem of Sigmoid Network에 데이터를 입력해서 나온 output과 ground-truth 값의 차(loss)를 구해서 그 loss 값의 미분 값을 Backpropagation 해서 Network를 학습시킨다. 이때 Backpropagation으로 전달되는 loss를 미분한 것을 gradient라고 한다. 이 gradient 값은 그래프의 기울기 값이라고 할 수 있는데, sigmoid 함수 그래프의 가운데 부분은 0보다 매우 크다. 반면에 극단 좌표의 gradient값은 0에 가깝다(매우 작다). Vanishing Gradient 만약 Neural Network가 딥해서 이런 sigmoid 함수가 많다면 매우 작은 gradient 값들이 많이 곱해져서 결국 gradinet 값이 너무 ..
-
[모두를 위한 딥러닝 시즌2][Lab 9] Neural Nets for XOR모두를 위한 딥러닝 시즌2 2021. 11. 9. 19:33
Neural Nets으로 어떻게 XOR문제를 해결할 수 있는지 알아보자. +와 -를 정확하게 구분할 수 있는 직선을 찾을 수 없었다. 이 XOR 문제를 3개의 network으로 풀어보자. 이렇게 하면 우리가 원하는 XOR 답이 나온다. Forward propagation 두 개의 유닛에 x1, x2가 각각 들어가고 나온 결과의 sigmoid 값이 마지막 유닛에 들어가서 최종 결과가 나오는 하나의 Neural nets programing 상에서 network을 구현 K = tf.sigmoid(tf.matmul(X, W1) + b1) hypothesis = tf.sigmoid(tf.matmul(K, W2) + b2) 이제 training data로 부터 weight와 bios 값을 어떻게 학습하는지 알아보자..
-
[모두를 위한 딥러닝 시즌2][Lab 8] 딥러닝의 기본 개념: 시작과 XOR 문제모두를 위한 딥러닝 시즌2 2021. 11. 2. 19:48
우리 대신 골치 아픈 문제를 해결할 수 있는 기계를 만들자는 것이 인류의 하나의 큰 목표였다. 이것을 이루기 위해 먼저 우리의 뇌를 연구하기 시작했다. 인간의 뇌는 굉장히 복잡한데 뉴런이라고 불리는 유닛은 굉장히 단순하게 동작이 된다. 어떤 input이 들어오면 그 input에 weight를 곱한 만큼 신호가 들어온다. 이 값들이 합쳐지고 통과하면서 bios가 더해지는데 이 최종 값이 어떤 값 이상이면 활성화되고 그 값을 넘지 못하면 활성화되지 않는다. 이 방식을 이용해 Activation Function을 만들었다. 이런 유닛들 여러개를 모아서 여러 개의 출력을 동시에 낼 수 있는 기계를 만들었다. · Frank Rosenblatt, ~1957: Perceptron · Windrow and Hoff, ..
-
[모두를 위한 딥러닝 시즌2][Lab 7] application and tips모두를 위한 딥러닝 시즌2 2021. 11. 2. 00:21
이번 시간에는 Learning rate, Data preprocessing 그리고 Overfitting에 대해 공부하고 Data sets과 다양한 Learning 방법들을 알아볼 것이다. Learning rate 데이터를 통해 모델을 만들어 갈 때 필요한 설정 값이다. 기울기와 Learning rate로 모델의 최적의 값을 찾아간다. Learning rate를 어떻게 설정하느냐에 따라 학습할 때 값이 달라진다. Learning rate가 크다는 것은 한번 변화하는 양이 크다는 것이다. 적절한 Learning rate를 사용해야 최적 값을 빨리 찾을 수 있다. 보통 Learning rate 값은 0.01이다. Adam optimizer에서 최적의 Learning rate 값은 3e - 4(0.0003)다...
-
[모두를 위한 딥러닝 시즌2][Lab 6] Softmax Regression모두를 위한 딥러닝 시즌2 2021. 10. 27. 10:57
저번 시간에는 binary classification에 대한 경우만 생각해 보았다. 이번 시간에는 Multinomial classification인 경우에서 Softmax Regression 대해 공부할 것이다. Multinomial classification A, B 또는 C의 카테고리로 분류하는 상황을 생각해보자. Decision Boundary를 3개로 만들어서 A, B, C로 분류할 수 있다. C or not, B or not, A or not 이렇게 분류 할려면 3개의 독립된 classifier가 필요하다. 그럼 A에 대한 행렬 w와 행렬 x의 곱, B에 대한 행렬 w와 행렬 x의 곱, C에 대한 행렬 w와 행렬 x의 곱 연산이 각각 필요한데, 이 것은 번거롭기 때문에 A, B, C 행렬 w를 ..
-
[모두를 위한 딥러닝 시즌2][Lab 5] Logistic Regression모두를 위한 딥러닝 시즌2 2021. 10. 25. 19:43
이번 시간에는 Logistic Regression에 대해 알아보자. Binary Classification - 입력된 값을 두 가지 카테고리로 분류하는 것이다. ex) true or false? Logistic vs Linear - Logistic; 데이터가 뚜렷이 구분된다. - Linear; 연속적인 데이터, 수치화 ex) 몸무게, 기온 Logistic_Y = [[0], [0], [0], [1], [1], [1]]] #One Hot Linear_Y = [828.655, 833.450, 819.239, 828.349, 831.659] #Numeric Hypothesis Representation 데이터를 입력하면 linear한 function이 나오는데 이 linear한 값을 Logistic functi..
-
[모두를 위한 딥러닝 시즌2][Lab 4] Multi variable linear regression모두를 위한 딥러닝 시즌2 2021. 10. 24. 15:21
이전까지는 One-variable(One-feature)에 대해서만 공부해봤다. 이번 시간에는 입력값(변수)이 여러 개인 Multi variable linear regression에 대해 알아보자. Hypothesis(가설 함수)는 늘어난 변수(x)의 개수만큼 가중치(w)의 개수도 늘어난다. 만약 변수가 많이 늘어나게 되면 표현하는데 어려움이 있기 때문에 Hypothesis를 matrix로 표현을 바꿔서 입력한다. 행렬과 행렬의 곱 dot product X := matrix x W := matrix w dot product 연산에서는 앞 행렬의 열과 뒷 행렬의 행의 원소의 개수가 일치해야 하기 때문에 XW로 표현한다. XW = [n×m] · [m×k] = [n×k] (n: 데이터 개수, m: 변수 개수,..
-
[모두를 위한 딥러닝 시즌2][Lab 3] Liner Regression and How to minimize cost모두를 위한 딥러닝 시즌2 2021. 10. 24. 14:21
지난 Lab2에서 Hypothesis와 Cost에 대해 알아보았다. 학습은 Cost(비용)을 가장 작게 만드는 것이 목표라고 했다. 이번 시간에는 어떻게 Cost를 최소화하는지 Gradient descent(경사 하강) 알고리즘에 대해 알아볼 것 이다. 컴퓨터가 Cost의 최저점을 찾는 방법으로 잘 알려진 것 중 하나가 Gradient descent(경사 하강) 알고리즘이다. Gradient descent 알고리즘 작동 방식을 알아보자. 일단 W=0 또는 W=random value에서 시작한다. 지속적으로 특정한 W에서의 기울기 값을 구해서 Cost값이 줄어드는 방향으로 가도록 W와 b값을 조금씩 바꾼다. 이것을 '최소점에 도달했다'라고 판단될때까지 반복한다. 여기서 기울기 값은 cost(W)함수 그래프..