2 min read

CNNs 理解

虽然吴恩达机器学习课 整个课堂都是在推公式、时间很紧张、有难度,但是这个Coursera Deep Learning(Ng, Katanforoosh, and Mourri 2018)的课,真的是通俗易懂,三张图,就大概明白最基本的RNNs原理,再在基础上深化。

normalization,图示

library(tidyverse)
## Warning: 程辑包'tidyverse'是用R版本3.6.3 来建造的
## -- Attaching packages --------------------------------------------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.3.2     √ purrr   0.3.4
## √ tibble  3.0.3     √ dplyr   1.0.2
## √ tidyr   1.1.2     √ stringr 1.4.0
## √ readr   1.3.1     √ forcats 0.5.0
## Warning: 程辑包'ggplot2'是用R版本3.6.3 来建造的
## Warning: 程辑包'tibble'是用R版本3.6.3 来建造的
## Warning: 程辑包'tidyr'是用R版本3.6.3 来建造的
## Warning: 程辑包'readr'是用R版本3.6.3 来建造的
## Warning: 程辑包'purrr'是用R版本3.6.3 来建造的
## Warning: 程辑包'dplyr'是用R版本3.6.3 来建造的
## Warning: 程辑包'stringr'是用R版本3.6.3 来建造的
## Warning: 程辑包'forcats'是用R版本3.6.3 来建造的
## -- Conflicts ------------------------------------------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
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")
## Warning: `data_frame()` is deprecated as of tibble 1.1.0.
## Please use `tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.

basic RNNs

这里解释了CNNs模型的原理,横轴表示时间推进,每次时间推进,产生一个参数\(a^i\)\(a^i\)的产生来自于\(a^i \sim a^{i-1} + x^{i}\), 同时\(y^i \sim a^{i-1} + x^{i}\)。 因此图中产生三种变量\(y,x,a\),分别对应参数,\(w_y,w_x,w_a\)

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

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

vanishing gradients

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

GRU

gated recurrent gru

Cho et al. (2014),Chung et al. (2014),Ng, Katanforoosh, and Mourri (2018) 增加了一个\(\Gamma\)来控制短期和长期的效应,

\[\Gamma = \begin{cases} 1 &\text{ long term;}\\ 1 \times 10^{-16} &\text{ short term}\\ \end{cases}\]

LTSM

GRU是LTSM的简化版本,Hochreiter and Schmidhuber (1997) LTSM增加了一个\(\Gamma_f\)forget gate而已,大同小异。

deep RNNs

__deep__的理解就是多加几层。

参考文献

Cho, Kyunghyun, B van Merrienboer, Dzmitry Bahdanau, and Yoshua Bengio. 2014. “On the Properties of Neural Machine Translation: Encoder-Decoder Approaches.” In Eighth Workshop on Syntax, Semantics and Structure in Statistical Translation (Ssst-8), 2014.

Chung, Junyoung, Caglar Gulcehre, Kyung Hyun Cho, and Yoshua Bengio. 2014. “Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling.” Eprint Arxiv.

Hochreiter, Sepp, and Jürgen Schmidhuber. 1997. “Long Short-Term Memory.” Neural Computation 9 (8): 1735–80.

Ng, Andrew, Kian Katanforoosh, and Younes Bensouda Mourri. 2018. “Https://Www.coursera.org/Learn/Neural-Networks-Deep-Learning.” deeplearning.ai.