Lec10) Recurrent Neural Networks

Temmie Chang (포인세티아)·2022년 2월 20일
0

'Vanilla' 신경망

네트워크는 이미지 혹은 벡터를 입력으로 받아서
히든레이어를 거친 후 하나의 결과값을 내보냄.

그러나 현실세계에는 항상 같은 입력을 받을 수 없으므로
다양한 입력과 출력에 대응할 수 있어야함

ex) 비디오 = 그때그때의 프레임이 다르거나 영상의 길이가 다를 수 있음
번역 = 단어들의 입력이 여러개 출력도 달라질 수 있음

RNN은 가변 입출력에 적절한 모델이 될 수 있다.
혹은 입출력이 고정이어도 sequencial processing의 경우에도 적용 가능

  • 순차적으로 입력을 받은후 출력 or 순차적으로 출력

Recurrent Neural Network

작은 Recurrent Core Cell을 가진다.

첫 입력 x가 RNN으로 들어가고, 내부 hidden state를 거침
RNN에서 hidden state는 모델에 바로 피드백되고, 또다시 새로운 입력을 받음

-> 재귀적인 관계를 연산하도록 설계됨

마찬가지로 출력을 위해서는 업데이트 되는 hidden state를 기반으로 하는
FC-Layer를 필요로 한다.
이 때 함수 f와 가중치 W는 변화하지 않음?

tanh를 사용?

가중치 행렬 W는 매번 동일
매 입력마다 h값만 변화하고
변화한 h값에 따라서 출력 레이어를 통과
각각의 Loss값을 가진다

전체 Loss는 각 h_n의 출력값 y_n에 해당하는 L_n의 총합으로 구할 수 있다.

Sequence to Sequence 모델

many to many 모델
= mant to one 모델 + one to many 모델
encoder : 여러 입력을 받아 final hidden state를 통해 입력을 요약
decoder : 요약한 하나의 벡터를 통해서 매 스텝 적절한 단어를 통해 가변 출력을함

이와같은 이유로 Language modeling에서 많이 사용한다.

언어를 벡터로 변환할 때는 원핫 인코딩을 사용 (sparse vector) : 연산량이 감소해서 이득
이전 input을 통해 다음 나올 output이 무엇인지 예측해야한다.

train time에 봤을 법한 문장을 모델이 스스로 생성함

softmax를 통해 다음 나올 문장을 확률분포로 나타낼 수 있음
argmax(최대 높은값만 뽑기)를 사용하면 항상 같은 말만 반복하지만
sampling을 통해 그럴듯한 다양한 문장을 사용할 수 있다.

입력층이 너무 긴 경우 : backprop이 뒤까지 전달되는데 너무 오래걸려서 학습이 느릴 수 있다.
때문에 truncated backp라는 근사기법을 사용

입력 시퀀스가 길어도 스텝을 일정 단위로 자르고
이 서브시퀀스의 Loss만 계산함. 이전의 W는 그대로 유지함
(Stocastic gradient descent와 비슷함)

markov assumption Xi+1이, 직전 Xi에 만 영향을 받고, 그이전 X1,X2,...,Xi-1과는 통계적 독립인 경우

RNN : 셰익스피어 언어학습, 수식 언어, 리눅스 코드, 라이센스 등
데이터의 숨겨진 구조(latent struckture)도 잘 학습함.

RNN hidden vector의 분석 : 해석이 어렵지만, 따옴표, 줄바꿈 등을 추적해 학습함

image captioning : 출력하는 언어는 RNN을 통해서 달게 됨

CNN은 이미지에대한 정보를 요약한 벡터를 RNN에 전달
RNN은 이미지 정보에 해당하는 적절한 언어를 출력함

문장은 토큰을 통해 문장 생성을 끝마친다.

Microsoft COCO 데이터셋 : 제일 큰 언어 사전

여전히 처음본 사진에 대한 설명을 하는 것은 어려워함

Image captioning with attention

어텐션 모델 학습 RNN + Attention
실제로 caption을 매길때 관련부분을 탐색함

직접알려주지 않아도 알아서 찾아냄(신기방기)

RNN을 사용해 CV와 NLP문제를 조합해서
복잡한 문제를 풀 수 있다
-VQA, Image Captioning

Multi-Layer RNN : LSTM

hidden layer가 여러 개임

보통 2~4개 레이어를 가지는 모델을 씀

RNN의 문제점
입력을 쌓고 가중치를 곱하고 tanh를 곱함
backprop은 반대로 tanh를 지나
transpose(가중치 행렬)을 곱하는 과정을 거침
H_0에 도달하기 위해서는 많은 가중치 행렬을 곱해야하고
이 행렬이 1이상인 경우 점점 커지고, 1이하인 경우
점점 작아지므로 그래디언트가 아주 커지거나 작아지는
문제가 발생하게 된다. -> Vanisning or Exploding

gradient clipping : 그레디언트 임계값을 정해서 이이상 오르지 않도록 함

LSTM 오래전부터 연구, 오늘날엔 계속 사용함

바닐라 RNN과 다르게
내부에서만 사용되는 Cell state(c_t)를 가진다.
4개의 gate i, f, o, g를 가짐

이전 hidden state인 h_t와 현재 입력 x_t를 받음
이전 hidden state는 보관해놓고 입력을 4개 게이트와 관련된 큰 가중치 행렬을 곱해줌
i = input(입력에 대한 가중치)
f = forget(망각에 대한 가중치) 0인경우 이전을 잊고 1이면 유지
o = output (출력에 대한 가중치)
ifo는 시그모이드를 사용함(0~1값)
g = gategate? (input cell을 얼마나 가질지 : dropout같은 느낌?
g는 tanh를 사용함(-1~1)
현대 스텝에서 사용되는 후보인 c_t

LSTM은

Attention 관련 강의
https://www.youtube.com/watch?v=YAgjfMR9R_M&list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r&index=18

0개의 댓글