6-10 Character RNN Weight Matix 계산

in #kr5 years ago (edited)

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

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

noname01.png

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

noname02.png

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

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

noname03.png

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

noname04.png

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

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

noname05.png

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

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

마나마인로고.png

Sort:  

짱짱맨 호출에 응답하였습니다.

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64498.18
ETH 3079.08
USDT 1.00
SBD 3.86