borch

튜토리얼 · 6

문자 RNN

이미지도 데이터 파일도 없다 — 페이지에 쳐 넣은 단어 몇십 개뿐이다. 순환 신경망이 한 글자씩 읽고 어느 언어에서 온 이름인지 맞힌다. 쓸모 있는 것 중 가장 작은 순서 문제다.

1 · 데이터, 그리고 원-핫 글자

신경망은 글자를 못 읽는다. 수를 읽는다. 원-핫은 글자마다 축을 하나씩 주어 "글자끼리 아무 관계 없음" 을 배우게 하는 대신 못 박는다. 실제 시스템은 임베딩을 쓰는데, 같은 생각에서 축을 눌러 놓은 것이다.

2 · 순환 셀 하나

nn.RNNCell 은 글자 하나와 지금까지의 은닉 상태를 받아 다음 은닉 상태를 준다. 그 위를 도는 고리를 직접 쓴다 — 그 고리가 순환이고, 이 크기에서 손으로 적어 보는 것이 요점이다.

3 · 학습

한 번에 한 단어. 배치로 안 묶는 이유는 단어 길이가 달라서이고, 채워 맞추는 것은 이 크기에 필요 없는 복잡함이다. 그래서 손실이 튄다. 곡선은 그래도 내려간다.

4 · 본 적 없는 이름을 물어본다

지어낸 것 몇과 목록에 없던 진짜 이름 몇. 45 개를 보고 배운 것이라 글자 패턴을 익힌 것이다 — -ini, -mann, 짧고 모음이 적은 것 — 이름이 아니라.

어디로 더 갈 수 있나. nn.RNNCellnn.LSTMCell 이나 nn.GRUCell 로 바꿔 보라 — 고리 몸통은 거의 그대로이고 LSTM 은 짝을 돌려준다. 1번 블록의 목록에 당신의 언어를 더해 보고 몇 단어부터 잡아내는지 보라. 둘 다 한 번 고치면 되는 일이고, 그것이 이 페이지가 인쇄물이 아니라 편집기인 이유다.