재발 성 신경망과 재귀 신경망 : NLP에는 어떤 것이 더 좋습니까?


48

재발 성 신경망과 재귀 신경망이 있습니다. 둘 다 일반적으로 동일한 약어로 표시됩니다 : RNN. Wikipedia 에 따르면 Recurrent NN은 실제로 Recursive NN이지만 설명을 이해하지 못합니다.

또한, 자연어 처리에 어떤 것이 더 나은지 (예를 들어) 알지 못하는 것 같습니다. 사실 Socher는 자신의 튜토리얼 에서 NLP에 재귀 NN을 사용하지만 재귀 신경 네트워크의 구현을 찾을 수 없으며 Google에서 검색 할 때 대부분의 대답은 재발 NN에 관한 것입니다.

그 외에도 NLP에 더 잘 적용되는 또 다른 DNN이 있습니까, 아니면 NLP 작업에 의존합니까? 깊은 신념 그물 또는 스택 형 자동 인코더? (NLP에서 ConvNets에 대한 특정 유틸리티를 찾지 못하는 것 같으며 대부분의 구현은 머신 비전을 염두에두고 있습니다).

마지막으로 Python 또는 Matlab / Octave 대신 C ++ (GPU 지원이 더 나은 경우) 또는 Scala (Spark 지원이 더 나은 경우)에 대한 DNN 구현을 선호합니다.

Deeplearning4j를 사용해 보았지만 지속적으로 개발 중이며 설명서가 약간 구식이며 제대로 작동하지 않는 것 같습니다. scikit-learn 또는 Weka와 매우 유사한 방식으로 "블랙 박스"를 가지고 있기 때문에 너무 나쁩니다.

답변:


42

반복 신경망은 시간이 지남에 따라 반복됩니다. 예를 들어 시퀀스가있는 경우

x = [ 'h', 'e', ​​'l', 'l']

이 서열은 하나의 뉴런에 공급되는데, 이는 하나의 뉴런에 연결되어 있습니다.

시간 단계 0에서 문자 'h'가 입력으로 제공되고 시간 단계 1에서 'e'가 입력으로 제공됩니다. 시간이 지남에 따라 펼쳐진 네트워크는 다음과 같습니다.

RNN

재귀 네트워크는 단지 반복 네트워크의 일반화입니다. 반복되는 네트워크에서 가중치는 시퀀스 길이에 따라 공유되며 치수는 일정하게 유지됩니다. 트레인 타임에 본 것과 다른 길이의 테스트 시간에 시퀀스가 ​​발생할 때 위치 종속 가중치를 처리하는 방법 . 재귀 네트워크에서 가중치는 동일한 이유로 모든 노드에서 공유되며 차원은 일정하게 유지됩니다.

이것은 모든 W_xh 가중치가 같고 (공유 됨) W_hh 가중치가됨을 의미합니다. 이것은 시간이지나면서 펼쳐진 단일 뉴런이기 때문입니다.

이것이 재귀 신경망의 모습입니다. 재귀 신경망

왜 재귀 신경망이라고 불리는지를 보는 것은 매우 간단합니다. 각 부모 노드의 자식은 단순히 해당 노드와 유사한 노드입니다.

사용하려는 신경망은 사용법에 따라 다릅니다. 에서 Karpathy의 블로그 , 그는 자에게 재발 성 신경 네트워크가 좋은 때문에 한 번에 하나씩 생성된다.

그러나 구문 분석 트리를 생성하려면 재귀 신경 네트워크를 사용하는 것이 더 나은 계층 적 표현을 만드는 데 도움이되므로 더 좋습니다.

C ++로 딥 러닝을하려면 CUDA를 사용하십시오. 그것은 좋은 사용자 기반을 가지고 있으며 빠릅니다. 나는 그것에 대해 더 많이 알지 못하므로 더 언급 할 수 없습니다.

파이썬에서 Theano는 자동 차별화를 제공하기 때문에 가장 좋은 옵션입니다. 즉, 크고 어색한 NN을 만들 때 손으로 그라디언트를 찾을 필요가 없습니다. Theano가 자동으로 처리합니다. 이 기능은 Torch7에 없습니다.

Theano는 파이썬 코드에 C 래퍼를 제공하고 GPU에서 구현 될 수 있으므로 매우 빠릅니다. 또한 멋진 사용자 기반을 가지고 있으며 새로운 것을 배우는 동안 매우 중요합니다.


11

대규모 재발신 신경망은 아마도 NLP의 가장 강력한 모델로 간주 될 것입니다. A. Karpathy가 Recurrent Neural Networks 및 캐릭터 레벨 모델링에 대해 쓴 훌륭한 기사는 http://karpathy.github.io/2015/05/21/rnn-effectiveness/ 에서 확인할 수 있습니다.

딥 러닝 (theano, caffe 등)을 위해 수많은 라이브러리를 사용해 보았습니다. NN을위한 최첨단 도구로 간주되며 NYU, Facebook AI 및 Google DeepMind에서 지원하는 Torch7을 사용하는 것이 좋습니다. Torch7은 루아를 기반으로하며 쉽게 익힐 수있는 많은 예가 있습니다. github에서 많은 코드를 찾을 수 있으며 https://github.com/wojzaremba/lstm이 좋습니다.

마지막으로 루아의 아름다움은 LuaJIT을 Java, Python, Matlab 등에 매우 쉽게 주입 할 수 있다는 것입니다.


2
Karpathy의 블로그를 읽는 것이 좋습니다. RNN을 이해하는 데 정말 많은 어려움이 있습니다.
SolessChong

1

RNN (Recurrent Neural Networks)은 기본적으로 시간이 지남에 따라 전개됩니다. 시간 요소가 시퀀스 요소 사이의 주요 차별화 요소 인 순차적 입력에 사용됩니다. 예를 들어, 시간이 지남에 따라 펼쳐진 언어 모델링에 사용되는 반복적 인 신경망이 있습니다. 각 시간 단계에서 해당 시간 단계의 사용자 입력 외에도 이전 시간 단계에서 계산 된 숨겨진 레이어의 출력도 수락합니다.

RNN


재귀 신경 네트워크는 입력 시퀀스에 실제로 시간적 측면이 없지만 입력이 트리 방식으로 계층 적으로 처리되어야하는 계층 적 네트워크와 비슷합니다. 다음은 재귀 신경망이 어떻게 보이는지에 대한 예입니다. 텍스트의 작은 청크에서 수행되는 연산의 출력을 재귀 적으로 가져 와서 문장의 구문 분석 트리를 학습하는 방법을 보여줍니다.

재귀 신경망


[ 참고 ] :

LSTM 및 GRU 는 NLP에서 일반적으로 사용되는 게이트 게이트가있는 두 개의 확장 RNN 유형입니다.

LSTM

LSTM 및 GRU


LSTM- 셀 포뮬라 :

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.