
English: 
What do you do if the patterns in your data
change with time? In that case, your best
bet is to use a recurrent neural network.
This deep learning model has a simple structure
with a built-in feedback loop, allowing it
to act as a forecasting engine. Let’s take
a closer look.
]Recurrent neural networks, or RNNs, have
a long history, but their recent popularity
is mostly due to the works of Juergen Schmidhuber,
Sepp Hochreiter, and Alex Graves. Their applications
are extremely versatile – ranging from speech
recognition to driverless cars.
All the nets we’ve seen up to this point
have been feedforward neural networks. In
a feedforward neural network, signals flow
in only one direction from input to output,

Thai: 
คุณจะทำอะไรถ้ารูปแบบในข้อมูลของคุณ
เปลี่ยนไปตามเวลา? ในกรณีนั้น สิ่งที่ดีที่สุด
น่าจะเป็นการใช้ recurrent neural network
แบบจำลอง deep learning นี้มีโครงสร้างง่ายๆ
ที่มี feedback loop สร้างไว้ข้างใน ทำให้มัน
ทำหน้าที่เป็น forecasting engine ได้ ลอง
ดูอย่างละเอียดกัน
Recurrent neural networks หรือ RNN
มีประวัติยาวนาน แต่ความนิยมเมื่อเร็วๆ นี้
มาจากงานของ Juergen Schmidhuber, Sepp Hochreiter, และ Alex Graves การประยุกต์
มีหลากหลายมาก -- ตั้งแต่ speech recognition
ถึงรถไร้คนขับ
เน็ตที่เราเห็นมาถึงตอนนี้เป็น
feedforward neural networks
ใน feedforward neural network
สัญญาณไหลในทิศเดียวจากค่านำเข้าสู่ค่าส่งออก

Korean: 
데이터의 패턴이 시간에 따라 변한다면 어떻게 할까요?
그런 경우에는,
순환 신경망(recurrent neural network)을 사용하는 것이
가장 좋습니다.
이 딥 러닝 모델은.
내장된 피드백 루프와 간단한 구조를 가졌습니다.
그래서 마치 예측 엔진(forecasting engine)처럼 작동하죠.
자세히 살펴봅시다.
순환 신경망, 또는 RNN은 긴 역사를 가졌습니다.
그렇지만 최근에 인기를 얻게 된건,
Juergen Schmidhuber, Sepp Hochreiter, 그리고 Alex Graves 덕분이죠.
그들이 개발한 도구는 어디에든 쓰일 수 있을만큼
강력합니다.
음성인식에서부터 자율 주행 자동차까지 쓰일 수 있죠.
이제까지 살펴본 네트워크들은 모두 feedfoward 형 신경망입니다.
feedforward 네트워크에서는,
신호가 입력부에서 출력부로 한 방향으로만 흐르죠.
한 번에 한 층씩 통과하면서요.
순환 네트워크에서는,

Korean: 
한 층의 결과가 다음 입력값에 더해져서,
그 층으로 다시 피드백 됩니다.
보통 전체 네트워크는 한 층으로 이뤄져있고요.
이런 과정을 시간에 따라 변하는 것으로 생각해보세요.
여기 네가지 시간값에 따른 그림을 봅시다.
t가 1일때에는,
네트워크가 t = 0 일때의 결과물을 입력으로 받고,
다음 입력값과 함께 다시 값을 내보내죠.
넷은 t = 2 일때에도 이 과정을 반복하고,
 t = 3 등등 다음으로 계속해서 반복합니다.
피드 포워드 넷과는 다르게,
순환 네트워크는 연속적인 값을 입력으로 받을 수 있습니다.
또한, 연속적인 값을 출력으로 내놓을 수도 있죠.
이런 연속적인 값을 다루는 능력은,
이 네트워크가 매우 다양한 분야에 쓰일 수 있게 해줍니다.
여기 몇몇 예를 들어보죠.
입력값은 하나이고 출력값은 연속적일때,
적용할 수 있는 분야는
이미지 설명하기(image captioning)입니다.

Thai: 
ไปทีละชั้น ใน recurrent net ค่านำเข้าของชั้นหนึ่ง ถูกเพิ่มไปในค่านำเข้าต่อไป
และใส่กลับเข้าไปในชั้นเดิม ซึ่งมักเป็น
ชั้นเดียวในเครือข่ายทั้งหมด
คุณคิดว่ากระบวนการนี้เป็นเส้นทางของเวลาก็ได้
-- ที่แสดงอยู่ในคือขั้นเวลา
4 ขั้น ที่ t =1 เน็ตนำค่าส่งออกของเวลา t=0 มา
แล้วส่งมันกลับไปยังเน็ต
ไปพร้อมกับค่านำเข้าตัวต่อไป เน็ตทำซ้ำ
อย่างนี้สำหรับ t = 2, t =3 ไปเรื่อยๆ
recurrent net ไม่เหมือนกับ feedforward nets
ตรงที่มันรับชุดค่าเป็นค่านำเข้า
และมันยังสร้างชุดค่าเป็นค่าส่งออกด้วย
ความสามารถในการจัดการชุดค่า
ทำให้เน็ตเหล่านี้ใช้งานได้หลายอย่าง
ตัวอย่างมีดังนี้ เมื่อค่านำเข้า

English: 
one layer at a time. In a recurrent net, the
output of a layer is added to the next input
and fed back into the same layer, which is
typically the only layer in the entire network.
You can think of this process as a passage
through time – shown here are 4 such time
steps. At t = 1, the net takes the output
of time t = 0 and sends it back into the net
along with the next input. The net repeats
this for t = 2, t = 3, and so on.
Unlike feedforward nets, a recurrent net can
receive a sequence of values as input, and
it can also produce a sequence of values as
output. The ability to operate with sequences
opens up these nets to a wide variety of applications.
Here are a few examples. When the input is

Thai: 
มีค่าเดียว กับค่าส่งออกเป็นลำดับ การประยุกต์
ที่เป็นไปได้คือการเขียนคำบรรยายภาพ
ถ้าค่านำเข้าเป็นลำดับ กับค่าส่งออกค่าเดียว
เราก็ใช้ในการแบ่งประเภทเอกสารได้ เมื่อค่านำเข้า
และค่าส่งออกเป็นลำดับทั้งคู่ เน็ตเหล่านี้
แบ่งประเภทวิดีโอตามเฟรมได้ ถ้ามีการใช้
time delay เน็ตสามารถทำนายอุปสงค์
ในการวางแผน supply chain ได้
คุณเคยใช้ RNN เพื่อการประยุกต์พวกนี้ไหม?
ถ้าเคย ช่วยคอมเมนต์และ
แบ่งปันประสบการณ์หน่อย
อย่างที่เราเห็นในโมเดล deep learning ก่อนๆ
การซ้อน RNN ทับกัน
ทำให้คุณสร้างเน็ตที่ให้ผลลัพธ์ซับซ้อนกว่า
RNN เดี่ยวๆ ทำงานตัวเดียว
RNN มักเทรนได้ยากมาก เนื่องจากเน็ตเหล่านี้
ใช้ backpropagation

English: 
singular and the output is a sequence, a potential
application is image captioning. A sequence
of inputs with a single output can be used
for document classification. When both the
input and output are sequences, these nets
can classify videos frame by frame. If a time
delay is introduced, the net can statistically
forecast the demand in supply chain planning.
Have you ever used an RNN for one of these
applications? If so, please comment and share
your experiences.
Like we’ve seen with previous deep learning
models, by stacking RNNs on top of each other,
you can form a net capable of more complex
output than a single RNN working alone.
Typically, an RNN is an extremely difficult
net to train. Since these nets use backpropagation,

Korean: 
연속되는 입력값에 하나의 출력을 둔다면,
문서 분류(document classification)에 쓰일 수 있습니다.
입력값과 출력값이 모두 연속적일때에,
이 네트워크는 비디오 영상을 프레임 단위로 분류할 수 있어요.
만약, 시간 지연이 발생한다면,
네트워크는 통계적으로 그 수요를 예측할 수 있습니다.
 공급망 계획(supply chain planning)을 이용해서요.
이러한 응용사례에 RNN을 써 보신 분 계신가요?
그렇다면, 코멘트로 경험을 공유해주세요.
이전의 딥 러닝 모델들에서 보았듯이,
RNN들을 서로 쌓아 올림으로써,
하나의 RNN이 하는 것 보다 더 복잡한 일을 하는
네트워크를 만들어 낼 수 있어요.
보통, RNN은 훈련 시키기 매우 어려운 넷입니다.
이 넷이 역 전파 방식으로 훈련되기 때문인데요,
이 과정에서 또 다시 Vanishing gradient 문제로 접어들죠.
불행히도,

Thai: 
เราจะเจอปัญหาเกรเดียนต์สูญหายอีก
โชคร้าย ปัญหาเกรเดียนต์หาย
แย่ขึ้นแบบเอกซ์โพเนนเชียลสำหรับ RNN
สาเหตุคือว่าในแต่ละขั้นเวลา
มันเทียบได้กับชั้นทั้งชั้นใน feedforward network
การเทรน RNN
สำหรับขั้นเวลา 100 ขั้นก็เหมือนกับการเทรน
feedforward net จำนวน 100 ชั้น -- มันนำไปสู่
เกรเดียนต์ที่น้อยลงแบบเอกซ์โพเนนเชียล
และการเสื่อมของข้อมูลเมื่อเวลาผ่านไป
มันมีวิธีจัดการปัญหานี้หลายวิธี -- 
ที่นิยมที่สุดคือ gating
Gating คือเทคนิคที่ช่วยให้เน็ตตัดสินใจว่า
จะลืมค่านำเข้าปัจจุบันเมื่อไหร่ และจำ
มันไปในขั้นเวลาในอนาคตถึงเมื่อไหร่
gating แบบที่นิยมที่สุดทุกวันนี้คือ GRU และ LSTM
นอกจาก gating ยังมีเทคนิคอื่นๆ เช่น 
gradient clipping, steeper gates และ
better optimizers
หากพูดถึงการเทรน recurrent net
GPU เป็นตัวเลือกชัดเจนแทนที่จะเป็น

English: 
we once again run into the problem of the
vanishing gradient. Unfortunately, the vanishing
gradient is exponentially worse for an RNN.
The reason for this is that each time step
is the equivalent of an entire layer in a
feedforward network. So training an RNN for
100 time steps is like training a 100-layer
feedforward net – this leads to exponentially
small gradients and a decay of information
through time.
There are several ways to address this problem
- the most popular of which is gating. Gating
is a technique that helps the net decide when
to forget the current input, and when to remember
it for future time steps. The most popular
gating types today are GRU and LSTM. Besides
gating, there are also a few other techniques
like gradient clipping, steeper gates, and
better optimizers.
When it comes to training a recurrent net,
GPUs are an obvious choice over an ordinary

Korean: 
Vanishing gradient 문제는 RNN에 있어서 훨씬 심각합니다.
그 이유는,
RNN에 있어서 한 단계가,
피드포워드 네트워크 전체의 단계와 동일하기 때문이죠.
그래서, RNN을 100개의 시간 단계에서 훈련시키는 것은,
100개의 층을 가진 피드포워드 넷을 훈련시키는 것과 같죠.
이것은 지수함수적으로 작아지는 기울기(gradient)를 만들고,
정보들이 빠르게 사라지게 됩니다.
이 문제를 해결하기 위한 여러 방법이 있는데요,
가장 유명한 것은 Gating이라는 방법 입니다.
Gating 이라는 기법은,
넷이 언제 언제 현재 입력을 잊어버릴지 결정하는데 도움을 줍니다.
그리고 언제 그 다음(미래)의 시간 값을 기억해야 할지도요.
현재 가장 많이 쓰이는 Gating 기법은,
GRU 와 LSTM 입니다.
Gating 뿐 아니라,
다른 기법들도 있습니다. 가령,
Gradient clipping,
Steeper Gates,
better optimizer 입니다.
순환 신경망을 훈련 시켜야 할 때,

Korean: 
CPU 대신 GPU를 사용하는 것은 매우 당연한 선택입니다.
이 사실은 Indico의 연구 팀에 의해서 증명되었는데요,
연구팀에서는 순환 신경망을 문자열 분석에 사용했습니다.
가령, 감성 분석(sentiment analysis)이나 
helpfulness extraction 같은 것이죠.
이 연구팀은 GPU로 네트워크를 학습 시키는 것이 
무려 250배가 빠르다는 것을 알아냈습니다.
이 정도의 차이는 8달에 거쳐 학습할 것을
하루만에 학습한 것과도 같습니다!
자, 그렇다면, 어떤 상황에서 피드포워드 넷 대신
순환 신경망을 사용해야 할까요?
피드 포워드 넷은 한가지 결과값만을 내놓기 때문에,
많은 상황에서 분류나, 예측을 하는 경우 쓰이죠.
순환 신경망은 시계열(time-series) 데이터에 적합하고,
결과값이 연속적으로 다음 입력값으로 사용될 수 있기에,
그래서 언제 순환 신경망을 써야 하느냐는 것에 대한 답은,
분류(classfication), 회귀(regression), 
예측(forecasting) 중 무엇을 할 것이냐에 달렸습니다.
다음 영상에서는,
딥 러닝 모델의 한 가지를 이루고 있는
Autoencoders에 대해 알아보겠습니다..!

English: 
CPU. This was validated by a research team
at Indico, which uses these nets on text processing
tasks like sentiment analysis and helpfulness
extraction. The team found that GPUs were
able to train the nets 250 times faster! That’s
the difference between one day of training,
and over eight months!
So under what circumstances would you use
a recurrent net over a feedforward net? We
know that a feedforward net outputs one value,
which in many cases was a class or a prediction.
A recurrent net is suited for time series
data, where an output can be the next value
in a sequence, or the next several values.
So the answer depends on whether the application
calls for classification, regression, or forecasting.
In the next video, we’ll take a look at
a family of deep learning models known as

Thai: 
CPU ธรรมดา เรื่องนี้ทดสอบมาแล้วโดยทีมวิจัย
ที่ Indico ซึ่งใช้เน็ตเหล่านี้ใน text processing
งานอย่าง sentiment analysis และ
helpfulness extraction ทีมพบว่า GPU
สามารถเทรนเน็ตได้เร็วขึ้น 250 เท่า!
นั่นคือความแตกต่างระหว่างการเทรน 1 วัน
กับเวลาเกิน 8 เดือน!
แล้วคุณจะใช้ recurrent net แทนที่จะเป็น feedforward net
ในสถานการณ์ใดบ้าง?
เรารู้ว่า feedforward net ให้ค่าส่งออก
ค่าเดียว ในหลายกรณีมันเป็นประเภทหรือค่าทำนายค่าเดียว
Recurrent net เหมาะสำหรับข้อมูล time series
โดยค่าส่งออกเป็นค่าต่อไป
ในลำดับ หรือค่าต่อไปหลายๆ ค่าก็ได้
คำตอบขึ้นอยู่กับว่า การนำไปใช้นั้น
ต้องการ classification, regression
หรือ forecasting
ในวิดีโอหน้า เราจะดูครอบครัวของ deep learning models ที่เรียกว่า

Korean: 
한국어 번역 - 최준식 (leichoi91@gmail.com)

Thai: 
autoencoders

English: 
the autoencoders.
