'tensorflow'에 해당되는 글 2건

  1. 2016.07.03 K-means 를 tensorflow에서 해보기
  2. 2016.05.15 Recurrent NeuralNetwork( 순환 신경망 )

대표적인 unsupervised learning 중 하나인 kmeans 에 대해여 알아보고, tensorflow를 이용하여 구현한 후 visualize해본다.

ipython notebook 에 코드 후 visualize.

https://github.com/laesunk/tensorflow_practice/blob/master/kmeans_tutorial.ipynb


다음차에 실 데이터를 scaling 하고 적용해본다.

참조 : https://tensorflowkorea.wordpress.com/3-텐서플로우-클러스터링-first-contact-with-tensorflow/

//
Recurrent NeuralNetwork for NLP

RNN에 대하여 학습한 내용을 정리 공유 하고자 한다. Recurrent NeuralNetwork 의 줄임말이고, 주로 언어처리에서 많이 쓰이고 있다. 언어라는 것이 단어와 단어사이의 연관성, 즉 시계열성으로 볼 수 있기 때문이다. RNN은 이런 시계열 특성을 반영한 뉴럴넷 모델이다. 여러가지 모델로 만들어 볼 수 있는데. 이번 설명은 언어모델을 이용한 생성(generative model)을만드는 것에 대해 해볼 예정이다. 

RNN기본 구조

이것이 기본 구조이다. 겉보기엔 굉장히 심플? 하다.


X는 주어진 데이터의 한문장에서 분리된 한단어(토큰)이라고 보면 된다. A는 추후 나오지만 activation 단계이고, h는 결과 output이다.

키포인트는 펼쳐진 아래그림에서 볼 수 있다.


첫번째 유닛(X-> A -> h 의 계산 한번을 한 유닛으로 부르겠다.) 이 다음 유닛을 계산할 때 영향을 준다는 것이다. 

가운데 노드(A) 를  hidden state 라고 칭하는데 hidden state의 값이  다음 출력값의 계산에 영향을 주게 된다. 

수식으로 표현하면 아래와 같다.



이전 상태값(t-1) 과 현재 타임스텝(t)의 Input 의 계산결과(activation function) 값이 현재스텝의 상태값(hidden state)이 된다는 내용이다. 모든 스텝에서 같은 activation function 이 적용되기 때문에 저렇게 하나로 무리없이 표현이 가능하다.

좀 더 자세히 보게 되면




activation function 으로 tahn가 사용되었고( 물론 relu등을 사용할 수도 있지만 기본 RNN에서는 tahn을 사용하고 있다.)

뉴럴넷의 핵심은 결국 노드간,레이어간 최적 파라메터(w로 표현) 를 찾는 것이다. RNN에서는 세가지 파라메타가 나오는데, 

첫번째는 input(X)에서 hidden-state(A)사이, 두번째는 hidden-state(A_t-1) 와 다음 hidden-state(A_t) 사이, 세번째는 hidden-state(A)와 output(h) 사이에 존재한다.

해당 weight(W) 는 모든 타임스텝에 동일하게 적용이된다.


실제 데이터에 비유하여 알아본다.

케릭터단위 언어모델을 만들어가는 과정이다.  언어모델이란 보통 해당 단어 다음에 올 단어를 맞추는 것이라 이해하면 된다.) 

"hello" 라는 문장이 input으로 들어오게 되면. RNN input은 ["h","e","l","l","o" ] 가 되게 된다.

그리고 output에 대응되는 것은 ["e"," l "," l "o","end"] 가 된다.  이런 방식을 학습해 나가면서 언어모델을 만들게 된다. 

그럼 어떻게 단어를 벡터화 시킬것인가? 가장 간단한 방법은 사전 기반 one-hot encoding이다. 

이 사전은 데이터로부터 만들어야 한다. 여기서는 [h, e, l, o ] 를 vocabulary set으로 만든다(가정) 

그리고 이 단어를 기반으로 아래의 데이터를 만든다.

h = [1,0,0,0], e = [0,1,0,0], l = [0,0,1,0], o = [0,0,0,1].  이  데이터가 input으로 들어가게 된다. 

이 input은 초기 parameter(W_xh)와 곱 해지는데 아래와 같은 계산을 통해 값을 구한다.  


 


처음 단어(글자)는 이전 state 정보가 없기 때문에 랜덤 혹은 ㅇㅓ떤 다른방법?으로 초기화된 데이터를 이용하거나 이전 정보 없이 그대로 갈 수도 있겠다.

아래 보이는 것처럼 이전 hidden-state의 값이 다음 hidden-state계산에 관여하는 것을 볼 수 있다. 


그 다음은 아래와 같이 ouput을 만들어낸다. 사이즈 역시 해당 W에 의해 결정되는데 우리는 4개의 vocab 을 이용했으므로 사이즈 4의 아웃풋이 각 노드마다 계산되어져 나오게 된다. 


 



그 후 softmax 과정을 거쳐 (가장 큰 값의 인덱스 단어를 예측값으로 취함) 예측 한다. (위 그림은 softmax가 아닌 단순 wx+b 와 같다)

이 후 학습은 BPTT(back propagation through time) 이라고 하는데 기존 neuralnet의 학습(back propagation)과 거의 유사하지만 시간 스텝 파라미터에 대한 미분 과정이 더해진 과정이라고 보면 될 것 같다. 추 후 더 학습하고 정리하기로 한다.


참고 :http://cs224d.stanford.edu/syllabus.html

         https://www.youtube.com/user/hunkims



'데이터eng > Tensorflow:MachineLeaning' 카테고리의 다른 글

K-means 를 tensorflow에서 해보기  (0) 2016.07.03
//