![article thumbnail image](https://blog.kakaocdn.net/dn/4cs4B/btrIORS0ZOd/kJKDoQvFB8I9RwSLCmamu1/img.png)
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
일반적인 신경망 구조를 사용하지 않는 이유? 잘 안 되니까
문제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"한 것
따라서 처음에 쓴 식과 같음
$$\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 |