CNN与RNN入门笔记

发布于 2020-09-12  233 次阅读



CNN与RNN笔记


RNNCNN是两种神经网络,其都是在ML子类深度学习中发展而来,分别有着不同的功能和作用,其中卷积神经网络(以下使用简写CNN)适合one to one类型,即图象识别,识别数字等等,而循环神经网络(以下使用简写RNN)适合one to many , many to many , many to one类型,例如文本处理,语音识别,文章翻译等等。这篇文章我只是浅显地把我这几天突击学的关于CNN与RNN内容记录一下(不涉及算法,只阐述实现思路),可能有很多问题,希望谅解和指出。


1.神经元

神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的激活函数,从而进行非线性变换后输出。每两个神经元之间的连接代表加权值,称之为权重(weight)。不同的权重和激活函数,则会导致神经网络不同的输出。

神经网络的每个神经元如下

其中参数意义如下
- $x1$、$x2$表示输入向量
- $w1$、$w2$为权重,几个输入则意味着有几个权重,即每个输入都被赋予一个权重
- $b$为偏置
- $g(z)$为激活函数
- $a$为输出

对于简单的模型其输出可以表示为$a(x1,x2)=g(w1x1+w2x2+b)$,其中$g$就是之前说的激活函数,上一篇文章中sigmoid函数就是其中之一。

2.激活函数

常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。,我这里只介绍sigmoid函数

  • sigmoid函数
    该函数是将取值为(−∞,+∞)的数映射到(0,1)之间。
    sigmoid函数作为非线性激活函数,具有以下几个缺点:
    (1)当z值非常大或者非常小时,sigmoid函数的导数将接近0.这会导致权重W的梯度将接近0,使得梯度更新非常缓慢,即梯度消失。
    (2)函数的输出不是以0为均值,将不便于下层的计算。

sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。

压缩至0到1的用处就是这样一来便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。

sigmoid函数的公式和图像如下
$$
g(z)=\frac{1}{1+e^{-z}}
$$

3.NN/神经网络

将上述说的神经元线性组合便形成了神经网络

上图中最左边的原始输入信息称之为输入层,最右边的神经元称之为输出层(上图中输出层只有一个神经元),中间的叫隐藏层。

  • 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。
  • 输出层(Output layer),讯息在神经元链接中传输、分析、权衡,形成输出结果。输出的讯息称为输出向量。
  • 隐藏层(Hidden layer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。

4.CNN

卷积神经网络(convolutional neural network,CNN),一种专门用于处理具有类似网络结构数据的神经网络,部分层使用卷积运算替代一般矩阵乘法运算的神经网络。

一般来说CNN可以处理图像识别问题,举例如下

卷积神经网络沿用了普通的神经元网络即多层感知器的结构,是一个前馈网络

一般来说CNN可以分为下面几个层:

  1. 图像输入Image Input:一般采用灰度图像方便接下来处理,如果使用彩色图像,则将rgb属性值传入,为了计算方便要进行归一化处理

  2. 卷积层(Convolution Layer):有时候也被称为过滤器(filter),核(kernel),被照过的区域被称为感受野(receptive field):将上一层的输出图像与本层卷积核(权重参数w)加权值,加偏置;过滤器同样也是一个数组(其中的数字被称作权重或参数),重点在于过滤器的深度必须与输入内容的深度相同,当筛选值在图像上滑动(卷积运算)时,过滤器中的值会与图像中的原始像素值相乘(又称为计算点积)。这些乘积被加在一起,向右往下滑动窗口,在输入内容上的每一位置重复该过程,滑过所有位置后将得到一个张量;

  3. 池化层(Pooling Layers):使用某一位置的相邻矩阵区域输出的总体统计特征来替代网络在该位置的输出,征映射具有位移不变性;

  4. 全连接层(Fully Connected Layers):为了与传统的多层感知器MLP全连接,把上一层的所有Feature Map的每个像素依次展开,排成一列;

  5. 多层感知器(MLP),输出层(Output Layers):最后一层为分类器,一般使用Softmax,如果是二分类,当然也可以使用线性回归Logistic Regression,SVM,RBM。

CNN三个重要思想

1.局部感知

$$
\left[
\begin{matrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{matrix}
\right]
*
\left[
\begin{matrix}
1 & -1 & 1 \\
1 & 1 & 1 \\
-1 & 1 & -1
\end{matrix}
\right]=x
$$
可以看到卷积神经网络引入卷积概念后,卷积核通过原图像,然后卷积核对原图像上符合卷积核大小的像素进行加权求和,每一次只是对符合卷积核的图像像素做卷积,这就是局部感知的概念,使全连接变成局部连接。

2.权值共享

不同的图像或者同一张图像共用一个卷积核,减少重复的卷积核。同一张图像当中可能会出现相同的特征,共享卷积核能够进一步减少权值参数。

3.池化

$$
\left[
\begin{matrix}
1 & 2 & 3 &4\\
0 & 5 & 7 &12 \\
23 & 2 & 6 &4 \\
1 & 34 & 3 &8
\end{matrix}
\right]
\rightarrow
\left[
\begin{matrix}
5 & 12 \\
34 & 6
\end{matrix}
\right]
$$
池化可以将一幅大的图像缩小,同时又保留其中的重要信息。常情况下,池化都是2x2大小,比如对于max-pooling来说,就是取输入图像中2x2大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。

全连接层

在 CNN 结构中,经多个卷积层和池化层后,连接着1个或1个以上的全连接层。全连接层可以整合卷积层或者池化层中具有类别区分性的局部信息。

CNN总结

卷积神经网络CNN的核心思想是:局部感知(local field),权值共享(Shared Weights)以及下采样(subsampling)这三种思想结合起来,获得了某种程度的位移、尺度、形变不变性,提高了运算速度和精度。

5.RNN

循环神经网络( Recurrent Neural Networks,RNN),一类用于处理可变长度的序列数据的神经网络,其主要用途是处理和预测序列数据。

全连接神经网络和卷积神经网络他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。

而RNN引入了隐状态h(hidden state)的概念,h可以对序列形的数据提取特征,接着再转换为输出。简单的可视化可以理解为这样:

在RNN中,神经元的输出可以在下一时刻直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输入外,还包括其自身在(m-1)时刻的输出。

一般来说RNN负责处理翻译,语音识别,图像转文字,字符分割等等。其深入有LSTM的延展,但是这是入门所以暂且不说了。

总结

大概就是当作一个入门的文章吧,也算是有了一个框架不至于一问三不知✨