어떻게 자동적으로 W1, W2, b1, b2를 학습시킬 수 있을까? gradient descent 알고리즘을 구현하기 위해서는 어떤 점에서의 미분값을 구하기 위해 미분 계산이 필요하다. 그런데 neural network로 가면서 노드가 여러개이므로 미분이 매우 복잡해진다. 미분값을 구한다는 것은, 최종적인 결과가 Y bar이고 초기값이 x1이라고 했을때, x1이 Y bar에 미치는 것을 알아야한다. 그리고 x1뿐만 아니라 각 노드에서 Y bar에 미치는 영향(미분값)을 알아야 각각의 weight을 조절할 수 있는데 계산량이 너무 많다. 그래서 minsky 교수는 불가능하다고 말했다. 이것은 1982년과 86년에 폴과 힌튼 교수에 의해 풀리게 되는데, 결과의 error를 보고 뒤에서부터 앞으로 계산을 하여..
XOR은 정말 단순한 문제이지만 초기 neural network 연구자들에게 큰 절망을 주었다. 이런 하나의 unit으로는 이 문제를 풀 수 없다는 것이 수학적으로 증명이 되었고, 때문에 사람들이 neural network는 잘 안된다고 믿었던 계기가 되었다. 그런데 하나가 아니라 2개 3개를 합치면 어떻게 될까? 그러면 풀 수 있다. 그런데 또 그당시에 나왔던 문제는 각각의 w과 b를 어떻게 학습할 수 있느냐 였는데, 불가능하다고 하였다. neural network로 xor이 가능한지 확인해 보자. linear하게 +,-를 구분할 수 있는 선을 찾을 수 없었다. 이 문제를 3개의 network를 가지고 풀어보겠다. 하나의 network는 하나의 unit이 logistic regression과 같다. 여..
Simple ID array and slicing¶ In [5]: # https://www.tensorflow.org/api_guides/python/array_ops import tensorflow as tf import numpy as np import pprint tf.set_random_seed(777) # for reproducibility pp = pprint.PrettyPrinter(indent=4) sess = tf.InteractiveSession() In [2]: from PIL import Image Image.open('kimbab.png') Out[2]: In [6]: t = np.array([0., 1., 2., 3., 4., 5., 6]) 1차원 array를 생성시킬 수 있다...
딥뉴럴 넷트워크 아이디어가 어떻게 시작되었고, 어떤 문제가 있었으며, 그 문제들을 어떻게 해결되었는지에 대해 알아보자. 처음엔 우리의 뇌를 연구했고 우리의 뇌가 굉장히 복잡하게 연결되어 있다는 것을 알게 되었다. 연결된 부분 부분을 자세히 보았더니 뉴런이라고 불리는 unit이 정말 단순하게 동작하더라. 이렇게 단순하게 동작하는데 우리가 어떻게 생각할 수 있을까? 어떤 인풋으로 들어오는 어떤 값들의 가중치와 bias의 합들이 어떤 값이 되면 활성화가 되고 아니면 활성화가 되지 않더라. 이 아이디어에 착안하여, 이런 뉴런은 기계적으로 수학적으로 만들 수 있겠다라고 생각함. 그렇게 만들어 낸 모델이 Activation functions이라고 한다. 왼쪽 것들을 모은다면 오른쪽과 같이 여러개의 출력을 동시에 낼..
Meet MNIST Dataset¶ In [1]: from PIL import Image Image.open('MNIST.png') Out[1]: 28x28x1 image¶ In [2]: Image.open('pic.png') Out[2]: In [ ]: # MNIST data image of shape 28 * 28 = 784 X = tf.placeholder(tf.float32, [None, 784]) # 0 - 9 digits recognition = 10 classes Y = tf.placeholder(tf.float32, [None, nb_classes]) MNIST Dataset¶ In [ ]: from tensorflow.examples.tutorials.mnist import input_d..
Training/Test dataset, learning rate, normalization¶ 우리가 가지고 있는 데이터를 Training과 Test로 나누기 Training set은 학습에만 사용. Teset set은 모델의 평가. In [3]: import tensorflow as tf In [1]: x_data = [[1, 2, 1], [1, 3, 2], [1, 3, 4], [1, 5, 5], [1, 7, 5], [1, 2, 5], [1, 6, 6], [1, 7, 7]] y_data = [[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 1, 0], [0, 1, 0], [0, 1, 0], [1, 0, 0], [1, 0, 0]] # Evaluation our model using th..
머신러닝 모델이 얼마나 잘 동작하는지에 대해 확인하는 방법 Performance evaluation: is this good? 지난번에 알파(learning rate)와 람다(regularization strength)라는 두 개의 상수를 배웠다. 이런 값을 튜닝 할 필요가 있을 때, training set을 완벽한 training set과 validation set으로 나눈다. 완벽한 training set을 가지고 훈련을 한 다음 validation set을 가지고 알파와 람다를 어떻게 튜닝할지를 고민한다.(모의시험) 다음 test set을 가지고 모델이 잘 동작하는지 확인한다.(test set은 숨겨져있고 한번만 확인 가능하다고 생각하면됨) Online learning 그리고 data set이 너무..
머신러닝 알고리즘을 실제로 사용할 때 팁. 1. learning rate 2. 데이터 선처리(preprocessing) 3. overfitting 1. learning rate 이 알고리즘을 정할 때 learning rate라는 알파값을 임의로 정했다. 이 learning rate를 잘 정하는 것이 중요하다. learning rate가 크다는 것은 경사 하강을 할 때 step이 크다는 것이다. step이 크면 왔다갔다 하거나, 위로 튕겨 올라가버릴 수 있다. 이럴 때는 학습이 이루어 지지 않을 뿐만 아니라 숫자가 아닌 값이 나오기도 한다. 이런 현상을 overshooting이라고 한다. learning rate가 작다는 것은 경사 하강을 할 때 step이 작다는 것이다. step이 작으면 너무 천천히 내..