유튜브 신박 AI 님의 RNN 영상을 정리해서 작성하였습니다.
RNN(Recurrent Neural Networks)
RNN은 순차 데이터나 시계열 데이터를 이용하는 인공 신경망의 유형으로, 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로도 보내면서, 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징을 갖고있다.
그림을 보면, 뉴럴넷 덩어리 A 가 있고, Xt 는 입력값, ht의 결과값 이다. A의 결과는 다시 A로 들어가서 루프를 만들어 주는 원리인데, 이렇기 때문에 현재의 상태(state)가 그 다음 상태(state)에 영향을 미치게 된다. 입력 X 가 있으면 RNN을 연산을 통해 상태(state)를 계산하고 그 상태(state)가 자기 입력이 되게 되고, 각 상태(state)에 대해 y값을 뽑아낼 수 있게 된다.
baseball과 bat을 번역하는 RNN 아키텍쳐를 그려본다면 위와 같이 구성할 수 있다. 앞의 단어가 baseball이므로, 높은 확률로 다음 단어의 bat의 의미는 방망이로 번역이 될 수 있다. 베이스볼을 번역할때 생성된 hidden state가 bat을 번역할때, 영향을 끼치게 된다.
RNN 연산 과정 간단히 살펴보기
각각의 단어들을 ont-hot vector로 위와 같이 표현했을때, 내부 연산 과정을 살펴보자.
1) Feedfoward
1. 이전 hidden state 값인 h0와 W를 행렬 연산해준다.
2. 현재 input x1과 가중치 U를 행렬연산 해준다.
3. 나온 결과 값들을 합해준 후 activation function인 tanh를 사용하여 h1을 계산해준다.
→ h1은 새로운 hidden state로 위와 같은 방식으로 계산이 된다.
4. o1은 가중치 V와 행렬연산으로 계산할 수 있다.
5. 마지막 출력값 y1^은 o1에 softmax함수를 적용하여 계산한다.
(실제 값 y1과 구분하기 위해 y1^로 표현)
다음 단어 bat의 번역 결과인 y2^도 위와 같은 순서로 계산할 수 있는데, 중요한 점은 이전 hidden state인 h1의 값을 h2계산에 사용한다는 것이다.
2) Backpropagation
y1^과 실제값 y1, y2^과 실제값 y2의 차이가 cost 이를 Cross-entropy 연산을 통해 설정할 수 있으며, Backpropagation을 통해 W,V,U 가중치 값들을 Update할 수 있다. RNN에서 backpropagation을 BPTT(back Propagation Through Time)이라고 한다.
RNN에서는 3개의 연결 가중치가 쓰이게 되고 각 가중치의 업데이트 공식은 우측 사진과 같다.
V : 현재 input결과와 old state를 합한 현재 상태의 hidden state와 연산되는 가중치 V
W : old state와 연산되는 가중치 W
U : 입력 x와 연산되는 가중치 가중치 U
각 가중치 업데이트 공식의 도출 과정은 유튜브 영상을 참고하면 좋을 것 같다.
reference
https://www.youtube.com/watch?v=OkTyY28XMuQ
'AI' 카테고리의 다른 글
Transformer - Structure, Posititonal Encoding (0) | 2024.06.20 |
---|---|
LSTM의 Cell State와 Gate별 특징 (0) | 2024.06.19 |
시퀀스-투-시퀀스(Sequence-to-Sequence) (0) | 2024.06.18 |
케라스 하이퍼파라미터 튜닝(Keras hyperparameter Tuning) feat. 케창딥 13장 (0) | 2024.06.14 |
Semantic Segmentation 기반 아웃포커싱: Depth Estimation, Instance Segmentation을 통한 정확도 향상에 관하여 (0) | 2024.06.05 |