1 min read

"深度学习入门:卷积神经网络(CNNs)原理与应用

{r setup, include=FALSE} knitr::opts_chunk$set(eval = FALSE) 虽然吴恩达机器学习课 整个课堂都是在推公式、时间很紧张、有难度,但是这个Coursera Deep Learning[@Ngdeeplearning]的课,真的是通俗易懂,三张图,就大概明白最基本的RNNs原理,再在基础上深化。

normalization,图示

{r} library(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")

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

@GRU2014,@Chung2014Empirical,@Ngdeeplearning 增加了一个$\Gamma$来控制短期和长期的效应,

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

LTSM

GRU是LTSM的简化版本,@Hochreiter1997Long LTSM增加了一个$\Gamma_f$forget gate而已,大同小异。

deep RNNs

__deep__的理解就是多加几层。

参考文献