본문 바로가기

Prev Contents/Deep learning

[그림으로 배우는 딥러닝] 19장. 순환 신경망 (737~774p)

19장. 순환 신경망

순서가 중요한 여러 샘플로 작업할 때 이를 시퀀스라고 한다.
시퀀스로 작업할 때 입력의 각 요소를 토큰이라고 한다. 토큰은 단어 또는 단어의 조각, 측정값 혹은 숫자로 나타낼 수 있는 모든 것을 나타낸다.

언어 다루기

언어에 대한 실제 이해에 관심이 없다. 대신 데이터에서 통계를 추출해 질문에 답하거나 텍스트를 생성하는 것을 작업의 기초로 사용한다.
CNN이 사진에 대한 실제 이해 없이도 사진의 객체를 인식할 수 있듯이, 조작하는 언어를 이해하지 못해도 단어에 숫자를 할당하고 해당 숫자 사이의 유용한 통계적 관계를 찾는다.

일반적인 자연어 처리 작업

인기 있는 작업 중 몇 가지로, 감성분석, 번역, 질의 응답, 요약 또는 질의 확장, 새로운 텍스트 생성 시작, 그리고 논리적 흐름 분석이 있으며,
특히 논리적 흐름은 매우 어렵고 인간-컴퓨터 파트너십의 이점이 있다.
텍스트 생성은 일반적으로 시드 또는 프롬프트로 시작된다. 한 번에 한 단어씩 수행되는데, 프롬프트가 주어지면 다음 단어를 예측한다.
이 기술을 자기 회귀라고 하고 이 시스템을 autoregressor라고 한다. 이런 텍스트를 생성하는 것을 Natural Language Generation (NLG)라고도 한다.

텍스트를 숫자로 변환

두 가지 방식:

1) 문자 기반 방식 - 유니코드 기반
2) 단어 기반 방식 - 텍스트로 표현할 수 있는 모든 단어에 번호를 매긴다.

미세 조정과 다운스트림 네트워크

일반 데이터베이스에서 시스템을 훈련시킨 다음 이를 전문화 - 전이학습 (transfer learning)
기존 네트워크를 고정하고 분류 부분 끝에 몇 개의 새 레이어를 추가하고, 이를 훈련하는 작업을 포함
NLP에서 일반 데이터베이스에서 학습한 시스템을 사전 훈련된 것을 이용, 새로운 데이터로 네트워크를 미세 조정
언어 시스템의 출력값을 가져와 더 유용한 두 번째 모델을 만들 수 있다. 이 두번째 모델을 다운스트림 네트워크라고 한다.

완전 연결 예측

네트워크 테스트

첫 다섯 개 값을 가져와 여섯 번째 값을 생성, 두 번째에서 여섯 번째 값을 가져와 일곱 번째 값을 예측하게 요청 - 슬라이딩 창

네트워크가 실패한 이유

더 많은 레이어가 있는 더 많은 뉴런이 필요하다.
또한, 의미 체계라고도 하는 텍스트의 구조를 포착할 방법이 없기 때문에 이 작업이 어렵다.

작은 네트워크를 확장시켜 보아도 테스트 결과는 훨씬 나쁘다.
이는 예측의 작은 수치적 차이가 무의미한 결과값을 생성하게 된다.
또한, 입력값에서 단어의 위치를 추적하지 않아서 암시적 순서를 상실하게 된다.

순환 신경망

1) 단순히 현재 상황의 스냅샷이나 제공된 정보 목록이 아니다. 압축되거나 수정된 형태로 이를 모두 포함한다.
2) 외부 관찰자는 일반적으로 시스템의 내부 상태를 볼 수 없다. - 은닉 상태
3) 입력 순서가 중요하다.

각 입력값은 time step이라고 부른다. 이는 입력값이 시간적 흐름이 있는 이벤트를 나타낼 때 의미가 있다.
시간 구성 요소는 있을 수도 없을 수도 있다.

다이어그램 롤업

각 입력 후에 시스템은 다른 길로 들어가는 새로운 상태를 만든다. - 이 경로를 지연*이라고 하며 작은 기억 조각으로 생각할 수 있다.
이와 같이 간결하게 그린 그림을 *rolled-up
버전이라 하고 딥러닝에서 순환 셀로 패키징해 상태를 관리하고 출력값을 만드는 프로세스를 구현

실전에서의 순환 셀

은닉 상태는 모두 0과 같이 일반적인 값으로 초기화된 셀로 시작

순환 신경망 훈련

시간을 통한 역전파 (backpropagation through time, BPTT)라고 하는 역전파의 변형을 사용할 수 있지만,
그래디언트 소실이나 발산을 완전히 피할 수 없다.

장단기 기억과 게이트 순환 신경망

3개의 내부 신경망을 사용:

1) 더 이상 필요하지 않은 상태로 정보를 제거 또는 망각
2) 셀이 기억하고 싶은 새로운 정보를 삽입
3) 내부 상태의 버전을 셀의 출력값으로 전달

숫자를 망각하는 것은 단순히 숫자를 0으로 이동시키는 것을 의미,
새 숫자를 기억한다는 것은 상태 메모리의 적절한 위치에 숫자를 추가하는 것을 의미

LSTM의 인기 있는 변형은 게이트 순환 유닛 (GRU, Gated Recurrent Unit)이다.
이를 모두 시도해 보는 것이 흔한 일이다.

순환 신경망 사용

흑점 데이터로 작업

텍스트 생성

더 많은 셀이나 각 셀에서 더 많은 상태를 사용할 수 있지만 모두 시간이나 메모리가 필요하다.
네트워크가 클수록 더 긴 창으로 작업할 수 있으므로 더 나은 예측이 가능하다.

다양한 아키텍처

CNN-LSTM 네트워크

비디오 프레임 분류와 같은 작업에 적합: 객체를 찾고 식별하는 역할을 하고 객체가 한 프레임에서 다음 프레임으로 이동하는 방식을 추적

심층 RNN

각 RNN을 특정 작업에 특화시킬 수 있다 - 개별적으로 훈련함으로서 각 레이어를 다른 레이어와 독립적으로 업데이트하거나 개선할 수 있는 전문화의 이점이 있다.

양방향 RNN

두 개의 독립적인 RNN을 생성해 단어를 순방향으로, 역순으로 단어를 가져다 넣는다.

Seq2Seq

번역할 때 입력 문장과 출력 문장의 길이가 다를 때 더욱 의미가 있다.
하나의 시퀀스를 다른 시퀀스로 변환하는 알고리즘 중 인기있는 알고리즘
오토인코더와 동일한 기본 구조를 가지며 이전 잠재 벡터를 이제는 Context Vector라고 하는 차이점

은닉 상태가 얼마나 크든 상관없이 더 큰 문장은 항상 더 많은 메모리를 필요로 한다 - 장기 의존성 문제 (long-term dependency problem)

요약

RNN의 단점:

1) 문장에 대한 모든 정보를 전달하고자 하나의 컨텍스트 벡터에 의존
2) 네트워크는 한 번에 한 단어씩 훈련되어야 한다.