Why Sequence Models?

Speech recognition, music generation, Sentiment classification, DNA sequence analysis, Machine translation, Video activity recognition, Name entity recognition, ...

 

$x$나 $y$가 sequence data 일 때 (길이가 다를 수 있음)

 

Notation

where are the names? (name entity recognition)

$x$ : Harry Potter and Hermione Granger invented a new spell

$y$ : 1 1 0 1 1 0 0 0 0 (<- 좀 간단한 representation)

 

단어의 인덱스 표시를 위해 $x^{<1>}$, $x^{<2>}$, $\cdots$, $x^{<9>}$ / $y^{<1>}$, $y^{<2>}$, $\cdots$, $y^{<9>}$ 

-> $x^{<t>}$,  $y^{<t>}$('t'emporal sequences) 

-> 시퀀스의 길이 $T_{x} = T_{y} = 9$ (물론 $x, y$의 시퀀스 길이는 다를 수 있음

 

- $x^{(i)<t>}$ : $i$번째 샘플의 $t$번째 시퀀스

- $T_{x}^{(i)}$ : $i$번째 샘플의 $x$의 시퀀스 길이 - 샘플마다 시퀀스 길이 다를 수 있음

 

[Representing words]

"vocabulary(dictionary)" - representation에 사용할 단어들의 리스트

(옆에 붙은 숫자는 vocab 내 단어의 인덱스)

 

vocab 사이즈는 보통 30~50000

 

"one-hot representation"

- "Harry" $x^{<1>}$ 를 one-hot vector로 나타내면 4075번째에 1 이 있고 나머지는 0으로 처리한 10000 사이즈의 벡터가 됨

- 나머지 단어들도 동일한 방식으로 나타냄

$$\begin{bmatrix}0 \\0 \\ \vdots \\ 1 \\ \vdots \\ 0 \end{bmatrix} $$

 

Recurrent Neural Network Model

naive neural network

일반적인 신경망 구조를 사용하지 않는 이유? 잘 안 되니까

문제1. input과 output의 길이가 샘플마다 다를 수 있다

     - 최대 길이 문장에 맞춰서 패딩함으로써 길이를 맞출 수는 있지만 좋은 방법은 아니다

문제2. 텍스트 위치에 걸쳐서 학습된 feature들이 공유되지 않는다

     - 첫번째 위치에 오는 Harry가 사람의 이름을 뜻하며, 다른 위치에 Harry가 나타났을 때에도 사람 이름을 뜻한다는 걸 자동적으로 알 수 있으면 좋음

     - CNN도 비슷했음 : 이미지의 한 부분에서 학습된 것을 다른 부분에도 빠르게 generalize

- one-hot vector로 represent된 input이 너무 거대해서 첫번쨰 레이어부터 파라미터의 수가 어마어마하게 많아진다

--> 이러한 단점을 해결하기 위한 Recurrent Neural Network

 

[Recurrent Neural Networks]

왼쪽부터 오른쪽으로 읽는다고 했을 때 / 그리고 시퀀스 길이가 동일하다고 했을 때 $T_{x} = T_{y}$

$x^{<1>}$을 입력해서 $\hat{y}^{<1>}$를 출력하는 신경망 다음에

$x^{<1>}$을 입력해서 $\hat{y}^{<2>}$를 출력하는 신경망 다음에

... 

$x^{<t>}$을 입력해서 $\hat{y}^{<t>}$를 출력하는 신경망

이때, $x^{<t>}$만을 이용하지 않고, 바로 이전 신경망에서 활성화값 $a^{<t-1>}$을 받아온다

첫 입력 때에는 $a^{<0>}$ (보통 0으로 채움) 를 더한다

 

이렇게 시각화하기도 한다 (검정 박스는 1스텝 딜레이를 말함)

 

$x^{<t>}$가 입력되는 신경망들은 동일한 파라미터 $W_{ax}$를 공유한다

가로 방향, 즉 다음 스텝으로 전달되는 활성화값들은 파라미터 $W_{aa}$로 통제되며 공유된다

각 output $\hat{y}^{<t>}$ 또한 파라미터 $W_{ya}$ 로 통제되며 공유된다

 

--> $\hat{y}^{<3>}$를 예측한다는 것은 $x^{<3>}$ 뿐만 아니라  $x^{<2>}$ ,  $x^{<1>}$의 정보 또한 사용한다는 의미다

 

단점: 먼저 나온 정보만 사용할 수 있음. $\hat{y}^{<3>}$를 예측할 때 $x^{<4>}$ ,  $x^{<5>}$, ... 등등은 쓰지 못함

 

전자 Teddy 는 사람 이름이고 후자 Teddy 는 사람 이름이 아닌데, 먼저 나온 정보만 봐서는 알 수가 없음

--> bidirectional RNN 에서 이 문제를 다루게 됨

 

깔끔한 버전

[Forward Propagation]

- $a^{<0>} = \vec{0}$ : 처음 $a^{<0>}$은 영벡터로 시작

- $a^{<1>} = g_{1}(w_{aa}a^{<0>} + w_{ax}x^{<1>} + b_{a})$ : tanh or ReLU 활성화함수. tanh을 더 자주 씀.

- $\hat{y}^{<1>} = g_{2}(w_{ya}a^{<1>} + b_{y})$ : task 에 따라 softmax or sigmoid

*$w_{aa}$, $w_{ax}$, $w_{ya}$ : 밑첨자 순서가 다른 이유? 뒤에 곱해질 것이 뒤에 온다고 생각하면 됨 (a, x, a)

 

$$a^{<t>} = g(w_{aa}a^{<t-1>} + w_{ax}x^{<t>}+b_{a})$$

$$\hat{y}^{<t>} = g(w_{ya}a^{<t>} + b_{y})$$

 

위 식을 단순화하기 위해서, $w_{aa}$와 $w_{ax}$를 나란히 각각 세워 하나의 파라미터 matrix $w_{a}$로 합침

$$w_{a} = [w_{aa}\ w_{ax}]$$

$$a^{<t>} = g(w_{a}[a^{<t-1>}, x^{t}]+b_{a})$$

 

$a^{<t>} = g(w_{aa}a^{<t-1>} + w_{ax}x^{<t>}+b_{a})$ 에서,

$a^{<t-1>}$가 100 차원이라면 $w_{aa}$는 $(100, 100)$차원

$x^{t}$가 10000 차원이라면 $w_{ax}$는 $(100, 10000)$차원

 

$w_{aa}$와 $w_{ax}$를 나란히 세운 결과 

$w_{a}$ 는 $(100, 10100)$차원이 됨

 

 

$a^{t} = g(w_{a}[a^{t-1}, x^{t}]+b_{a})$에서 $[a^{t-1}, x^{t}]$는 "stack"한 것

 

stack

따라서 처음에 쓴 식과 같음

 

$$\begin{bmatrix}w_{aa} & w_{ax} \end{bmatrix} \begin{bmatrix}a^{<t-1>} \\ x^{<t>} \end{bmatrix} = w_{aa}a^{<t-1>} + w_{ax}x^{<t>}$$

 

마지막으로 $\hat{y}^{<t>}$도 단순화 해보자면

 

$$\hat{y}^{<t>} = g(w_{y}a^{<t>} + b_{y})$$

'인공지능 > DLS' 카테고리의 다른 글

[5.1.] Recurrent Neural Networks(3)  (0) 2022.08.06
[5.1.] Recurrent Neural Networks(2)  (0) 2022.08.02
[4.4.] Neural Style Transfer  (0) 2022.08.02
[4.4.] Face Recognition  (0) 2022.08.02
[4.3.] Detection Algorithms(3)  (0) 2022.08.02
복사했습니다!