머신러닝

RNN Weight Matix 계산

coding art 2019. 3. 3. 20:27
728x90

파이선 코딩을 배우는 초보자도 머신 러닝에 한번 도전해 보자.

머신 러닝을 배우려는 파이선 코딩 초보자들이 가지게 될 의문점들을 하나하나 찾아내어

실제 풀어보고 결과를 확인해볼 수 있는 머신 러닝!

인터넷 교보문고에서 450페이지19900원에 판매중입니다.














_____________________________________________________________________________________________________________________


hidden_size, sequence_length, batch_size 로 규정되는 RNN cell의 내부를 들여다 보기로 하자. 아무리 뉴럴 네트워크의 기본을 잘 이해하고 있어도 뉴럴 네트워크를 cell의 바탕으로 삼는 RNN 의 펼친(Unfolding) 레이아웃을 분석해 봐도 수박 겉핡기라는 느낌만 드는 것은 웬일일까? 필자만 그런 것인가?

 

일단 표준적인 뉴럴 네트워크로 구성된 바닐라 셀 구조부터 살펴보자.



RNN에서 입력 데이터인 input vectorvocabulary 로부터 숫자를 부여하고 이어서 one hot code화 하여 처리하게 된다. 하나의 입력 데이터가 4자리로 이루어진다면 첫 번째 은닉층(hidden layer)에서 hypothesis를 계산하되 4x2 로 이루어진 웨이트 매트릭스를 사용하자. 마지막 단게에서 출력을 위해 Sigmoid 함수를 사용하려면 column 수가 2가 되어야 할 것이다. 그렇지 않고 Softmax를 사용할 경우에는 반드시 2일 필요는 없으며 사용자가 임의의 수로 정의 하면 된다.




RNN cell 의 특징은 vocabulary에서 첫 번째 입력 데이터를 input vector로 사용하고 인접한 두 번째 cell 입력 데이터로 사용할 input vectorcell 학습을 위한 출력 데이터로 사용한다는 점이다. 아울러 옆으로 찔러 주는 화살표가 있어 첫 번째 cell 의 데이터가 두 번째 cell 로 뭔가를 넘겨준다는 사실인데 그것이 무엇인지 간단한 사례를 통해서 알아보자.

 

뉴럴 네트워크 구조에서 보면 웨이트 매트릭스(weight matrix)가 두 번 나타남을 알 수 있으며 4x2 2x1 사례를 그림으로 제시하였다. 이와 같은 웨이트 매트릭스는 사용자가 설정하는 것이다. 다음 그림을 참조해 보면 3 종류의 웨이트릭스가 사용되고 있음을 알 수 있다.



이 그림에서 첫 번째 cell 에서 두 번째 cell 로 넘겨주는 내용물이 과연 무엇이며 이러한 내용물을 넘겨 받아 현재의 cell에서 어떤 작업이 필요한지 앞에서 설정했던 파라메터 경우에 대해서 다음 그림을 통해 알아보자.






cell hidden layer 연산 결과를 넘겨받아서 현재의 cell에서 적절한 웨이트 매트릭스를 생성함을 볼 수 있다. 웨이트 매트릭스 생성 시에 바이아스 항도 함께 생성되지만 이해를 돕기 위해 위 그림에서는 생략하였다.

 

한편 매 cell 마다 입력 벡터에 대해서 웨이트 매트릭스를 설정하여 hidden layer 연산을 수행한다. 동시에 앞 cell에서 넘어온 hidden layer 연산 결과와 별도로 추가 설정한 웨이트 매트릭스와 곱하여 현재 cell에서 hidden layer 계산 결과를 합산한다. 이 합산 결과는 출력용으로도 사용함과 아울러 다음 cell로 펼쳐진 cell이 있다면 이전시키는 정보가 된다.


즉 이런 방법으로 하나의 sequence_length에 해당하는 cell 들에 대해서 학습을 시키면 각 셀별로 입력 데이터에 대한 웨이트 매트릭스와 두 번째부터는 앞 cell로 부터의 hidden layer 연산 결과에 따라 추가되는 웨이트 매트릭스 값이 얻어지게 된다.

 

뉴럴 네트워크 포함하고 있는 제일 간단한 BasicRNNCell들이 연결되었을 때 cell네부에서 일어나는 연산 과정을 살펴 본 결과 앞 cell에서 hidden layer 연산 결과를 넘겨받아 그에 상응하는 웨이트 매트릭스를 생성하여 현재의 cell에서 hidden layer 연산 결과와 합산하게 된다.