불가사의한 귀속 신경 네트워크

7133 단어
Andrej Karpathy가 쓴'The Unreasonable Effectiveness of Recurrent Neural Networks'를 봤다.RNN으로 어떤 작가의 글을 배우고 공부 잘하는 오 RNN네트워크로 Generate 문장을 만드는 것은 결국 일리가 있어 보인다.Theano tutorial에서 제공하는elman RNN 실현(문장 차원에서 Word Embedding과 Classification을 함께 한다)을 생각해 보면 Recurrent Neural Networks 모델이 정말 강하다고 생각한다.(이 글은 RNN으로 길거리 풍경을 식별하는 문자를 가리키는데 CNN의 밥그릇을 뺏는 거 아니냐고)
Andrej Karpathy는 소스 코드char-rnn을 제공했지만 Torch+Lua로 썼습니다.기계 학습이 산꼭대기에 즐비하고 틀이 많아서 우리 추종자들은 어찌할 바를 몰랐다.처음에는 VB, 그 다음은 C++, 그리고 Matlab, 자신이 I can speak matlab라고 생각한 후에Python+Theano가 또 왔다.Theano는 많이 배우지 못했어요. 이 사람들이 또 Torch+Lua를 만들었어요. 정말 배울 수가 없어요.(현재 관심 있는 분포식 플랫폼 scala는 볼 시간이 없다) 문장으로 볼 때 이중적인 RNN 네트워크가 될 것 같아서 Theano로 실현하기로 했다.

1 코드 참고


char-rnn의 기본 프레임워크는 다음과 같습니다. 즉, 두 겹으로 겹쳐진 RNN:
y1 = rnn1.step(x)
y = rnn2.step(y1)

Lua는 몰라도 Python과 비슷해 보여요.(그리고 if...end라는 구조는 파이썬보다 좋아 보인다.)마스터 실행 파일을 분석하면 마스터 실행 파일은 다음과 같습니다.https://github.com/karpathy/char-rnn/blob/master/train.lua
require 'torch'  # = import torch
require 'nn'     # = import nn
local LSTM = require 'model.LSTM'  #  LSTM, RNN
cmd = torch.CmdLine()  #  command line
cmd:text()  # = print ''
cmd:text('Train a character-level language model')
cmd:option('-rnn_size', 128, 'size of LSTM internal state')  #  RNN internal  128
cmd:option('-num_layers', 2, 'number of layers in the LSTM')  # LSTM
local vocab_size = loader.vocab_size #   
protos.rnn = LSTM.lstm(vocab_size, opt.rnn_size, opt.num_layers, opt.dropout)  #   LSTM
protos.criterion = nn.ClassNLLCriterion() #  

다시 보다https://github.com/karpathy/char-rnn/blob/master/model/LSTM.lua, 이것은 LSTM의 종류라는 것을 이해합니다.
function LSTM.lstm(input_size, rnn_size, n, dropout)  # n , 。 。
-- there will be 2*n+1 inputs
  local inputs = {}
  table.insert(inputs, nn.Identity()()) -- x # ?
  for L = 1,n do
    table.insert(inputs, nn.Identity()()) -- prev_c[L]
    table.insert(inputs, nn.Identity()()) -- prev_h[L]
  end  #   , ?

if L == 1 then  #  ,input_size X 
      x = OneHot(input_size)(inputs[1])
      input_size_L = input_size
    else   #  ,input_size 
      x = outputs[(L-1)*2] 
      input_size_L = rnn_size
    end

첫 번째 레이어 RNN의 출력은 argmax가 필요하고 다음 레이어 RNN이 필요합니까?코드로 볼 때 필요 없을 것 같습니다.

2 Theano로 이루어집니다.


Theano_ 사용하기lstm 라이브러리는 두 개의 LSTM RNN 네트워크를 실현합니다.사용된 데이터 세트는 input.txt, 그 안에는 약간의 Shakespear가 쓴 대본이 있다.lstm_shake.py 파일은 문자의 서열을 바탕으로 하는 모델을 구축한다. 이 모델은 Shakespear의 대본을 배워서 Shakespear처럼 대본을 쓸 수 있기를 바란다.
  • lstm_shake.py
  • input.txt

  • 3 테스트 실행


    little shakespear를 실행하는 예입니다.Epoch 50개당 T를 이니셜로 입력한 다음 샘플링 결과를 내보냅니다.
    python lstm_shake.py
    epoch 0, error=4504142.19
    TPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
    PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
    PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
    epoch 10, error=4346742.41
    epoch 20, error=3667818.53
    epoch 30, error=3452454.01
    epoch 40, error=3378974.10
    epoch 50, error=3290961.33
    T I I It t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t
     t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t
     t t t t t t t t t t t t t t t t t t t t
    epoch 60, error=3220026.99
    epoch 70, error=3174889.48
    epoch 80, error=3145530.92
    epoch 90, error=3121806.02
    epoch 100, error=3100589.85
    T Ih tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt
    tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt
     tt tt tt tt tt tt tt tt tt tt tt tt tt t
    epoch 110, error=3083279.73
    epoch 120, error=3068120.72
    

    CPU만 있고 매우 느립니다.그리고 최적화 처리를 하지 않아 문장의 길이가 같지 않아 낭비적이다.minibatch를 사용하지 않아서 메모리 사용량이 매우 높습니다.CPU 사용률도 높지 않습니다.
    학습의 효과도 좋지 않은 것 같아서 Shakespear와 비교할 수 없다.

    좋은 웹페이지 즐겨찾기