注意:本文为学习笔记,大量直接复制于参考文章中的原文字及图片
一、神经网络简介
神经网络由大量神经元组成。每个神经元获得线性组合的输入,经过非线性的激活函数,然后得到非线性的输出。
如下图所示:
x1,x2表示输入向量,w1,w2表示权重,b为偏置值(bias),a为输出。
1. 激活函数
激活函数到底是一个什么东西,主要有哪些激活函数,以及在什么情况下适合使用什么激活函数,接下来我们一探究竟。
激活函数是为了给神经元引入非线性因素,使得神经网络可以逼近任意非线性函数,这样神经网络就可以应用于众多的非线性模型中。
常见的几个激活函数有sigmod,Tanh,ReLU,softmax。
1.1 sigmod函数(logistic 函数)
下图为对应的公式和曲线以及对应的求导曲线图:
取值范围(0,1),可以用来做二分类。
不过这个函数现在已经很少用了,主要原因如下:
- Sigmoids saturate and kill gradients
激活函数计算量大,反向传播(见下文)求误差梯度时,求导涉及除法。反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练 - Sigmod的output不是0均值
因为每一层的输出都要作为下一层的输入,而未0中心化会直接影响梯度下降,我们这么举个例子吧,如果输出的结果均值不为0,举个极端的例子,全部为正的话(例如f=w^Tx+b中所有x>0),那么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数(具体依整个表达式f而定),这带来的后果是,梯度更新的时候,不是平缓地迭代变化,而是类似锯齿状的突变。当然,要多说一句的是,这个缺点相对于第一个缺点,还稍微好一点,当把整个批量的数据的梯度被加起来后,对于权重的最终更新将会有不同的正负,这样就从一定程度上减轻了这个问题,第一个缺点的后果是,很多场景下,神经网络根本没办法学习。
1.2 Tanh函数
和sigmod相比,优点是output是0均值的,但是还是没有解决上文说的第一个问题。
1.3 ReLU(Rectified Linear Unit)
优点:实验表明,它的使用,相对于sigmoid和tanh,可以非常大程度地提升随机梯度下降的收敛速度。
缺点:例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
(learning rate:学习率决定了权值更新的速度,设置得太大会使结果越过最优值,太小会使下降速度过慢。下图中的n为学习率。)
1.4 Softmax
用于多分类神经网络输出,公式如下:
就是如果某一个 zj 大过其他 z, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。
为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。
第二个原因是需要一个可导的函数。
(假如说输入都比较大,会使得区分度更大,假如输入都比较小,可能会使得更平均?)
2. 神经网络
- 输入层(Input layer):众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。
- 输出层(Output layer):讯息在神经元链接中传输、分析、权衡,形成输出结果。输出的讯息称为输出向量。
- 隐藏层(Hidden layer):简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。
3. CNN之卷积计算层
未知图案的局部和标准X图案的局部一个一个比对时的计算过程,便是卷积操作。卷积计算结果为1表示匹配,否则不匹配。
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器,即带着一组固定权重的神经元。多个滤波器叠加便成了卷积层。
相当于如果想提取图像的不同特征,则用不同的滤波器filter。
- 权值共享:数据窗口滑动,导致输入在变化,但中间滤波器Filter w0的权重(即每个神经元连接数据窗口的权重)是固定不变的,这个权重不变即所谓的CNN中的参数(权重)共享机制。
4. CNN之池化层
池化,简言之,即取区域平均或最大,如下图所示: