RNN(순환신경망)

정지호·2022년 8월 26일
0

개인 실습 진행

목록 보기
25/41

1. RNN(Recurrent Neural Network)

  • 입력과 출력을 시퀀스 단위로 처리하는 시퀀스 모델 (시퀀스들을 처리하기 위해 고안된 모델들을 시퀀스 모델이라고 하는데, RNN은 가장 기본적인 인공 신경망 시퀀스 모델이다)

  • 은닉층 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로도 보내면서, 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징을 갖고 있다.

  •  Dense(FC), CNN 등의 작동 방식을 보면, layer의 값들이 다음 layer를 지나면서 연산을 한다. 5번째 layer에 input이 된 정보가 있다면, 5번째 layer의 output 계산에만 관여하지, input들 사이의 연산은 따로 하지 않는다.
    반면에 RNN은 5번째 layer에 input된 값들이 output 계산에 영향을 주면서, input들 간의 계산에도 영향을 줍니다. input 값이 10개가 있다면, 첫번째 input 값이 10번째 intput 값이 output 값을 출력할때 영향을 준다는 의미 입니다. 그래서 'Recurrent(순환)' 이라는 명칭이 붙은 것 입니다.

  • 피드 포워드 신경망에서는 뉴런이라는 단위를 사용했지만, RNN에서는 뉴런이라는 단위보다는 입력층과 출력층에서는 각각 입력 벡터와 출력 벡터, 은닉층에서는 은닉 상태라는 표현을 주로 사용

  • 순서, 시간 등을 모델링 할 때 강점을 보이고, input과 output 길이를 다양하게 적용할 수 있다는 장점이 있다.

  • RNN은 하나의 layer를 계산하기 위해서 hidden state가 t타임만큼 순차적으로 계산이 되어야 한다. (CNN이 아무리 큰 filter size 를 가지고 있더라도 병렬로 처리할 수 있는 것과는 아주 대조적이다)
    => 그래서 RNN은 기본적으로 연산 속도가 매우 느려진다.

  •  또 하나의 아주 큰 단점은 vanishing gradient problem (그레디언트가 사라지는 문제) 이다. layer가 깊어질수록 vanishing gradient problem 이 일어날 확률이 높아진다. 그러니까, 레이어를 많이 거슬러 가게 되면 그레디언트가 점차 줄어들고 학습이 불가능할 정도로 작아질 수 있다.

  • 그리고 Vanilia RNN의 경우 hidden state 간의 연산이 time step이 길어질 수록 그 이전 hidden state의 정보를 잘 전달하지 못한다.

-> RNN 계열 중 가장 많이 사용하는 모델이 LSTM(Long short Term Memory)이다.

(위 그림은 lstml이다)


(위 그림은 RNN이다)


++RNN과 lstml의 차이점

1. RNN은 hidden state 하나만 사용하지만, html은 hidden state와 cell state 두 개를 사용한다.
2. RNN은 하나의 게이트만 존재하지만, lstml은 총 4개의 게이트를 사용한다.


2. 깊은 순환 신경망(Deep RNN)

  • 순환 신경망에서 은닉층이 1개 더 추가되어 은닉층이 2개다.

3. 양방향 순환 신경망(Bidirectional RNN)

  • 이전과 이후의 시점 모두를 고려해서 현재 시점의 예측을 더욱 정확하게 할 수 있도록 고안된 것이 양방향 RNN

  • 양방향 RNN도 다수의 은닉층을 가질 수 있다.
    (위 그림은 양방향 RNN에 은닉층이 한 개 더 추가되어 은닉층이 두 개인 깊은(deep) 양방향 RNN의 모습이다.)


++추가 내용

cannot import name 'load_state_dict_from_url'

위와 같은 오류가 날 경우,

try:
    from torch.hub import load_state_dict_from_url
except ImportError:
    from torch.utils.model_zoo import load_url as load_state_dict_from_url

위 코드로 대체해본다.


출처
https://github.com/zhoudaxia233/EfficientUnet-PyTorch/issues/5
https://dataplay.tistory.com/33
https://wikidocs.net/22886

profile
정지호

0개의 댓글