
Overfitting이 되었는지 안되었는지 어떻게 알 수 있을까? 학습데이터를 가지고 accuracy를 측정해봤더니 높은 확률이 나왔는데, 한번도 보지 못한 데이터에 대해서 정확도가 오히려 떨어질때. Solutions for overfitting 1. 학습 데이터를 더 많이 모을것 2. regularization : 12reg = 0.001 * tf.reduce_sum(tf.square(W)) 3. Dropout (Neural Network에서의 simple한 방법, 2014) Neural Network에서 우리가 엮어놨는데, 임의로 끊어버리고 몇개의 node를 drop시키는 방법이다. 이게 왜 될까? 훈련할 때 몇 명은 쉬게 해놓고 남은 사람을 가지고 훈련시킨다. 그 다음 훈련에서도 랜덤하게 몇 명을 ..

Vanishing Gradient 문제 해결 방법 1. LeLU 2. 초기값을 잘 줘야 한다. 같은 LeLU를 줘도 초기값에 따라 다음과 같은 차이가 생기기도 한다. 초기값(w)을 모두 0으로 줘보자. 어떤 문제가 발생할까? x를 가지고 f를 구한다음 다시 propagation을 이용해 역으로 구하는데 x의 미분값이 0이면 앞에 있는 모든 미분값이 0이 되어버린다. 초기값을 매우 현명하게 줘야만 한다. 1. 초기값을 모두 0을 주면 안된다. (학습 전혀안됨) 2. 2006년 'A Fast Learning Algorithm for Deep Belief Nets" by Hinton 에서 어떻게 초기화 시키는 것이 좋은지 방법을 제시. - Restricted Boatman Machine (RBM) 지금은 사용..

XSigmoid 보다 ReLU가 더 좋아¶ 복습¶ In [1]: from PIL import Image Image.open('xor.png') Out[1]: Activation function¶ 값이 전달될 때 어느정도 이상이 되면 활성화 되고, 자극이 적으면 활성화 되지 않는 함수 In [ ]: W1 = tf.Variable(tf.random_uniform([2,2], -1.0, 1.0)) W2 = tf.Variable(tf.random_uniform([2,1], -1.0, 1.0)) b1 = tf.Variable(tf.zeros([2]), name='Bias1') b2 = tf.Variable(tf.zeros([1]), name='Bias2') # Our hypothesis L2 = tf.sigmoi..

Tensor Board로 딥네트웍 들여다보기¶ In [1]: from PIL import Image Image.open('board.png') Out[1]: 그래프가 복잡하고 wide하고 deep할 때 모양을 확인할 수 있다.(Visualize you TF graph) 어떤 값들의 그림을 바로 그려줄 수 있다. (Plot quantitative metircs) show additional data 숫자로 출력되니 너무 복잡해서 확인하기가 너무 어려워!!!¶ In [2]: Image.open('old.png') Out[2]: TensorBoard를 사용하기 위한 5가지 스텝¶ 1. From TF graph, decide which tensors you want to log¶ w2_hist = tf.summ..

XOR을 위한 텐서플로우 딥네트웍¶ In [1]: from PIL import Image Image.open('XOR.png') Out[1]: In [2]: import tensorflow as tf import numpy as np In [3]: x_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32) y_data = np.array([[0], [1], [1], [0]], dtype=np.float32) 결과값이 bianry한 0또는 1의 값을 갖기 때문에 logistic regression을 사용하면 된다. In [ ]: X = tf.placeholder(tf.float32) Y = tf.placeholder(tf.float32) W..

어떻게 자동적으로 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과 같다. 여..