일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 나는리뷰어다2021
- 한빛미디어
- 모두를 위한 딥러닝
- 딥러닝
- overfitting
- 주피터노트북 커널 목록
- feature scaling
- Machine Learning
- Udacity
- random forest
- 데이터분석
- GitHub
- MySQL
- ubuntu
- jupytertheme
- Linear Regression
- 주피터 노트북 테마
- 주피터노트북 커널 제거
- pandas
- regression
- 주피터노트북 커널 추가
- lol api
- deeplearning
- deep learning
- 경사하강법
- Git
- 주피터노트북
- 주피터테마
- Python
- 회귀분석
- Today
- Total
유승훈
lec12 - RNN 본문
우리가 활용하는 데이터 중에서는 Sequential Data가 많습니다. 예를 들어 음성인식, 자연어 같은 데이터가 있습니다. 이는 한 단어나 한 부분이 아니라, 순서가 중요한 의미를 갖는 데이터입니다. 순서가 흐트러지면 그 의미를 잃게 되는 것입니다. 앞서 배웠던 NN, CNN은 Input이 Network를 거쳐 Output을 만드는 단순한 구조이기 때문에 Sequential한 데이터를 처리할수는 없습니다.
그림과 같이 네트워크가 구성됩니다. $X0$로 계산된 어떤 상태(State)가 그 다음 연산에 영향을 미칩니다. 연산의 중간 과정에서 이전의 State가 영향을 미치는 것입니다. 계속 이전의 결과에 영향을 받기 때문에, 순서가 중요한 Sequence 데이터를 다루기에 좋은 구조인 것 같습니다.
Recurrent Neural Network, RNN은 연산 중간의 State가 다음 입력에 들어가는 구조라고 할 수 있습니다. 계산하는 방법을 살펴보면, 먼저 State를 계산하고, 그 State를 통해서 Y를 계산합니다. 한 Step이전의 State와 Input(x)을 가지고 어떤 Function을 통해 새로운 State를 계산합니다. RNN을 계속 하나의 그림으로 표현하는 것은, 이전의 State와 Input을 가지고 State를 계산하는 Function은 모든 셀에서 동일하기 떄문입니다.
그럼 이를 어떻게 계산하게 될까요? 가장 기초가 되는 Vanilla RNN에 대해서 살펴봅시다. 우리에게 익숙한 $WX$ 형태를 활용합니다. 각 입력에 대한 Weight를 만들어서 곱해준 뒤, 더하는 방식입니다. 그 다음, Sigmoid와 비슷한 Tanh 함수를 통과하여 State를 계산합니다. State로 Y를 계산할 때는 다른 형태의 Weight를 곱해줍니다.
여기서 $W_hh, W_xh, W_hy$ 3개의 Weight를 활용하는데요. 모든 셀에 대해서 이 Weight가 같기 때문에 하나의 그림으로도 표현할 수 있는 것입니다.
자연어 처리를 예로 들면, Input이 Character입니다. Input을 넣었을때, 그 다음에 올 Text를 예측하게 됩니다. 단어를 한글자씩 나눠서 어떤 글자 다음에 올 글자를 예측할수도 있고, 한 단어씩 나눠서 어떤 단어 다음에 올 단어를 예측할수도 있습니다.
가장 먼저 Input을 Vector로 표현하는데, 가장 많이 활용되는 방법이 One-Hot Encoding입니다. Vectorize된 Input에 Weight_hh를 곱해서 State를 계산해줍니다. 이 State로 Y를 계산해줍니다. 첫 셀은 이전 셀에서 넘어온 State가 없기 때문에 Input으로만 State를 계산합니다. 그 다음셀부터 State와 Input으로 State를 계산하고, 그 State로 Y를 계산하게 됩니다.
이렇게 계산된 Y는 Softmax를 통해 Label(여기서는 Text가 되겠죠.)을 예측하게 됩니다.
예시를 보면, 두번째를 제외한 모든 셀에서 제대로된 예측을 보여주었습니다. 원래는 l이 나오는 것이 맞지만, O로 예측되었습니다. 그 만큼의 Error가 발생한것이라고 볼 수 있습니다.
순서나 흐름을 갖는 데이터가 다양하기 때문에, RNN도 다양한 곳에서 활용될 수 있습니다.
Language Modeling, Speech Recognition, Conversation Modeling 등의 다양한 Task에 사용됩니다.
RNN을 다양한 형태로 구현해서 Task에 활용하곤 합니다. 우리에게 익숙한 X-Network-Y를 One to One 구조라고 합니다. 위와 같이 다양하게 RNN을 구성할 수 있습니다. 당연히 하나의 Layer가 아니라 Multi Layer로 구성해서 더 복잡한 학습을 할 수 있습니다.
지금 배운 것은 기본적인 RNN이고, 실제로는 기본적은 RNN보다는 변형된 형태로 많이 활용됩니다. LSTM이나 GRU가 그 예입니다.
'강의정리 > 모두를 위한 딥러닝 시즌 2' 카테고리의 다른 글
lec11 - Convolutional Neural Network(CNN) (0) | 2021.02.26 |
---|---|
lec10 - Relu, Weight Initialization, Drop out, Batch Normalization (0) | 2021.02.24 |
lec09 - XOR with Neural Nets (0) | 2021.02.21 |
lec08 - Basic Deep Learning (0) | 2021.02.20 |
lec07 - Application and Tips (0) | 2021.02.16 |