虽然吴恩达机器学习课 整个课堂都是在推公式、时间很紧张、有难度,但是这个Coursera Deep Learning[@Ngdeeplearning]的课,真的是通俗易懂,三张图,就大概明白最基本的RNNs原理,再在基础上深化。
normalization,图示
## Error in `library()`:
## ! there is no package called 'tidyverse'
data_frame(x = rnorm(100,mean=2,sd=5),
y = 1:100) %>%
mutate(x_bar = x - mean(x),
x_under_sigma = x_bar/sd(x)) %>%
gather(key,value,-y) %>%
ggplot(aes(x = y, y = value)) +
geom_point() +
facet_wrap(~key, scales = "free_y")## Error in `data_frame(x = rnorm(100, mean = 2, sd = 5), y = 1:100) %>% mutate(x_bar = x -
## mean(x), x_under_sigma = x_bar / sd(x)) %>% gather(key, value, -y) %>% ggplot(
## aes(x = y, y = value))`:
## ! could not find function "%>%"
basic RNNs

这里解释了CNNs模型的原理,横轴表示时间推进,每次时间推进,产生一个参数ai, ai的产生来自于ai ∼ ai − 1 + xi, 同时yi ∼ ai − 1 + xi。 因此图中产生三种变量y, x, a,分别对应参数,wy, wx, wa。

这个图更清晰的描述了关系。 因此CNNs,考虑时间的递进关系,因此可以做时间序列的分析。

这里主要涉及矩阵相乘的内容,简单理解是, 假设x变量为10000个,时间是100,那么产生了100个a,那么一共有变量10000+100=10100个, 同时N(wx) + N(wa) = 10000 + 100 = 10100。
vanishing gradients

因为当backpropogation时,越久远的w会变小,结果消失, 导致我们不能够抓住long range dependency。 当然也可以使用exploding gradients,但是越久远的w会变大,最好设置一个clipping,也就是最大值。
GRU
gated recurrent gru

@GRU2014,@Chung2014Empirical,@Ngdeeplearning 增加了一个Γ来控制短期和长期的效应,
$$\Gamma = \begin{cases} 1 &\text{ long term;}\\ 1 \times 10^{-16} &\text{ short term}\\ \end{cases}$$
LTSM
GRU是LTSM的简化版本,@Hochreiter1997Long LTSM增加了一个Γfforget gate而已,大同小异。

deep RNNs

__deep__的理解就是多加几层。