TensorFlow -  XOR 문제 딥 러닝으로 풀기.


  • 개요
    • 하나의 Logistic regression 으로는 절대 XOR 문제를 풀 수 없다.
    • Multiple logistic regression Units 으로는 가능하다.
  • Neural Network 학습
  • NN 을 이용하여 XOR 학습이 가능한가?
    • 기존에는 +- 를 구분할 수 있는 선을 찾을 수 없었다.

  • NN 3개를 이용하여 계산.  - 값 계산 방법은 다음시간에 일단 가능한지만 확인하자.
    • 0, 0일때
                    

    • 0, 1일때
                    

    • 1, 0일때
                    

    • 1, 1일때
                    

    • Forward propagation
                    




  • 앞단의 유닛 두개는 Multinomial classfication 과 유사하여, 하나로 합친다.
    • 대신 w, b 의 rank 가 늘어난다.
                    


    • 이를 식 및 TensorFlow 로 표현하면 아래와 같다. 여기서 k(x) 는 앞의 두개 unit 의 결과값이다.





  • w, b 의 값을 기계적으로 학습할 수 있을까?

                    

    • Gradient descent algorithm 을 사용하여, 코스트가 0인 것을 찾아야하는데, 미분이 필요하다. (기울기 0)
    • 각각 unit 의 미분 값을 알아야하는데, 너무 많아서 계산할 수 없다.
      • Backpropagation Algorithm 을 사용하여 해결한다.

                    



  • Backpropagation 알고리즘
    • 예측한 값과 실제 값을 비교하여 예측한 오류(cost) 를 뒤에서부터 앞으로 돌려서 미분값 등을 구하는 알고리즘.

    • w가 f 에 미치는 여양, x가 f 에 미치는 영향, b 가 f 에 미치는 영향 등을 구한다면 아래 보라색 글씨와 같을 것이다.
    • g 와 f 를 통하여 미분을 계산.



    • Chain rule - 복합 함수. 미분 (아래 별표가 Chain rule 에 해당됨)
                    



  • Sigmoid 미분
                    


  • TensorFlow
    • 아래 그래프를 구현할 필요가 없다. TensorBoard 를 사용하면 된다.
                

               












































Back propagation 을 이해하기 위한 기본 미분 개념

  • Basic derivative

  • Partial derivative (편미분)
    • 내가 관심있는 값만 변수로 두고 나머지는 상수로 둔다.
                    













'TensorFlow' 카테고리의 다른 글

TensorFlow - CNN (Convolutional Neural Networks)  (0) 2018.04.29
TensorFlow - ReLU  (0) 2018.04.20
TensorFlow - 딥러닝의 기본 개념  (0) 2018.03.26
TensorFlow - Softmax regression  (0) 2018.03.25
TensorFlow - Logistic regression  (0) 2018.03.25


TensorFlow - 딥러닝의 기본 개념

  • 우리 대신 복잡한 문제를 풀수 있는 기계를 만들자.
  • 뇌에 대한 공부
    • 뇌가 매우 복잡하게 연결되어 있다.
    • 뉴런(유닛)이 단순하게 동작된다.
      • input 을 전해주는 길이 (w) 에 따라 바이어스 라는 값을 더한 값이 어떤 값이상이 되면 활성화된다.
    • Activation Function
      • 뉴런을 본따 만든 모델
      • 신호 x, 어떤 값w 을 곱한뒤 더 다한다음, bios 라는 값을 더하는데 이 값이 어떤 값(?)보다 크면 1, 적으면 0 
      • Logistic regresion 모델과 동일함.
                              



  • False Promises (Dr. Frank)
    • "It expects will be able to walk, talk, see, write, reproduce itself."
    • AND / OR 에 대해서도 y 를 예측 할 수 있다. 
    • XOR 에 대해서는 y 를 예측하기 어렵다는 문제가 존재.
                    


  • Marvin Minsky 가 XOR 에 대해서는  할수 없다는 것을 수학적으로 증명해냄.
    • 대신 MLP 라는 것이 필요하다. (이 모델을 여러개를 합치면 가능하다)
    • 근데 각 모델의 w, b 에 대한 학습을 시킬 수가 없다.
      • "No one on earth had found a viable way to train."

  • Backpropagation ( 1974, 1982 by Paul, 1985 by Hinton )
    • 알고리즘
    • w, b 의 값을 forward 에서 찾지 말고 backward 에서 찾으면 되겠다.
    • 더 복잡한 것의 예측이 가능해짐

  • Convolutional Neural Networks (Lecun 1980 - 라쿤) 
    • 그림의 형태에 따라 활성화되는 뉴런이 다르다는 것을 발견해냄.
      • 그림 일부 일부를 담당하는 신경망이 있고 이게 나중에 조합된다.
    • 그림을 한번에 학습시키는 것이 아닌, 레이어로 나눠서 부분부분을 보낸 다음 나중에 합치는 네트워크
    • 알파고도 이것을 사용하고 있다.
    • 84년 ~ 94년 자동주행 차량 개발.
    • 문제점
      • 단순 레이어에서는 동작하는데, 복잡한 레이어에서는 (10여개 이상) 학습이 힘듬.
      • 오류를 뒤로 보내어 w,b 를 구하는 알고리즘인데 이것이 복잡한 레이어에서는 뒤로 갈 수록 의미가 희미해져 w, b 에 대한 신빙성이 떨어짐.

  • CIFAR 
    • 캐나다에서 만든 단체. 비영리 단체.
    • 2006, 2007년도까지 어려운 시기였음

  • Breakthrough (2006, 2007 by Hinton and Bengio)
    • input 을 잘 준다면 잘 학습할 수 있다. (2006)
      • w가 똑똑한 방법으로 초기화가 된다면, 많은 레이어가 있어도 훌륭하게 학습이 가능하다.
    • 작은 수단보다 복잡한 문제를 해결하는데 있어서 효율적.
    • 뉴런 네트워크를 Deep Nets, Deep Learning 으로 이름을 바꿈.

  • ImageNet
    • 이미지를 주고 컴퓨터가 맞출 수 있는지?
    • 2010 년 : 26% -> 2012 년 : 15% 로 오류 발생률이 떨어짐.
    • 2015 년 : 4%  (스탠포드 학생 5%)
    • 한걸음 더 나아가서 그림에 대한 설명도 가능하게 됨

  • Deep API Learning 
    • 말만 하면 어떤 API 를 사용해야 하는지에 대해 알려줌. (65 % 의 정확도)





  • 왜 이전에 잘 안됬던 걸까.

  • 활용
    • 유투브 자막
    • 페이스북 피드
    • 구글 검색 엔진  - 클릭할만한.
    • NetFlex  - 추천시스템
    • 각종 예측



TensorFlow 사용법

  • 메트릭스 곱은 shape 의 앞부분이 동일해야함.
  • Shape 2, 2 와 2,1 의 메트릭스 곱의 결과 shape은 2,1 임.
  • axis : 축

  • Broadcating 
    • 기존 메트릭스 합은 shape 이 동일해야함.
    • 그런데 shape 이 다를경우?
      • Broadcating 을 이용하여 계산을 할 수 있도록 함.
      • Rank을 맞춘다.
        • 3. 일 경우 [3., 3.] 으로 맞춰줘서 계산함.

  • Reduce_mean
    • 평균을 구한다. 
    • axis 는 축으로 이해.




  • Argmax
    • 가장 큰놈의 "위치"를 찾는것, reduce_min 과 인자값은 동일하다.





  • Reshape @@@@
    • shape 를 변경하고 싶다.
      • -1 이란 알아서...
      • rank 도 바꿀 수 있다.
  • Reshape (squeeze, expand)
    • squeeze, expand_dims 의 함수를 통해 shape 를 변경할 수 있다.


  • One hot
  • 자동으로 reshape 도 되는데, reshape 가 싫다면 reshape 로 shape 원상복귀 시킨다



  • Casting
    • 변수 casting


  • Stack



  • Ones and Zeros like
    • shape 내의 값을 1 혹은 0로 모두 바꾼다.

  • Zip 
    • 반복문과 같이 사용.
    • 복수의 변수를 지정할 때 사용.













'TensorFlow' 카테고리의 다른 글

TensorFlow - ReLU  (0) 2018.04.20
TensorFlow - XOR 문제 딥 러닝으로 풀기.  (0) 2018.03.26
TensorFlow - Softmax regression  (0) 2018.03.25
TensorFlow - Logistic regression  (0) 2018.03.25
TensorFlow - Hypothesis, CostFunction  (0) 2018.03.25
TensorFlow - Softmax regression


sigmoid 란 0~1 의 값으로 조정시켜 주는것. 
소프트 맥스는 sigmoid 를 하는 기법 중의 하나로 이해할 수 있겠다.
소프트 맥스를 통과하면 0~1사이고 전체의 sum 이 1이 된다.
-> 이것을 one-hot encoding 기법으로 1. 0. 0 로 변경하는데 tensor flow 에는 argmax 함수가 있다.


cost function
  cross entropy 라는 함수를 사용한다.
  
logistic cost vs cross entropy
  동일하다.


cross entroy  = loss function 


learning_rate : 테스트를 위해 한번에 움직이는 계수.


Learning rate 가 클 경우, 그레프를 뚫고 지나간다.  cost 함수를 실행하면 NAN 이 나오는 이유.

마찬가지로 leaning rate 가 적을때에도 기울기가 0인 부분을 찾아 떠나다가 늙어죽는다.

  • Cost 함수를 출력해봐서 learning rate 를 조절하는 것이 필요.




Data (X) 의 선처리를 하는 이유

  • w 가 2개가 있다고 가장했을 때 그래프를 위와 같이 그릴 수 있는데, 값이 매우 커질 경우에는 아래와 같이 변경된 형태의 그래프가 생기게 된다. 

  • learning rate 가 적은 값임에도 불구하고 위 그림과 같이 데이터가 튈 수 있다.
  • 그래서 Nomalize를 거친다
    • zero-centered data, nomalized data 한 데이터를 만들기 위함.






Learning rate 가 적당한데도 값이 튄다면 아래 함수를 적용하여 Nomalize 를 시행하면 된다.


  • x의 값을 계산한 평균과 분산의 값을 가지고 나누어주는데 이러한 형태의 Nomalization 을 Standardization 이라 한다.
  • 수학 통계학 관점에서 봤을 때,
    • Normalization (정규화) : 전체구간을 0~100으로 설정하여 데이터를 관찰하는 방법. 
      • 우리는 전체 구간을 0~1 로 설정한다.
    • Standardization (표준화) : 평균을 기준으로 얼마나 떨어져 있는지를 나타내는 값.
      • 2개 이상의 대상이 단위가 다를 때 대상 데이터를 같은 기준으로 볼 수 있게 하기 위함.
    • 출처 : https://brunch.co.kr/@rapaellee/4


Overfitting : 학습을 통해 모델을 만들어가는데, 학습데이터에 딱 잘맞는 모델을 만들어내면 문제가 됨..
  • 실제 데이터를 넣을 경우 안맞는 경우가 생김.


  • model2 는 데이터에만 맞는 모델이여서 실제 정확도가 매우 떨어짐. (Overfitting)
  • 구부러진 형태..


Overfitting 을 줄이는 방법?
  • Training data Set,
  • features 의 중복을 줄인다.
  • Regularization 을 한다. (일반화)




  • Training data 외에도 testing, validation 데이터 셋을 만드는게 필요하다.



  • training data set 을 30% 정도로 적당히 나눠주는게 좋다.









one epoch - 한번에 도는 트레이닝 데이터셋
batch size - one epoch 이 너무 커서 자르는 데이터셋.











+ Recent posts